pax_global_header00006660000000000000000000000064136206364660014526gustar00rootroot0000000000000052 comment=d6b51f80972ef5c5440943aca1e83a999ae13be1 variety-0.8.3/000077500000000000000000000000001362063646600132215ustar00rootroot00000000000000variety-0.8.3/.github/000077500000000000000000000000001362063646600145615ustar00rootroot00000000000000variety-0.8.3/.github/ISSUE_TEMPLATE/000077500000000000000000000000001362063646600167445ustar00rootroot00000000000000variety-0.8.3/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000036071362063646600214440ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: '' assignees: '' --- **Version of Variety** **Describe the bug** **Context** **To Reproduce** 1. 2. 3. **Attach Variety's log file** **Desktop environment and version** **OS name and version** **Screenshots** **Attached files** **Additional context** variety-0.8.3/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000017211362063646600224720ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: '' labels: '' assignees: '' --- **Version of Variety you are using** **Is your feature request related to a problem? Please describe.** **Describe the solution you'd like** **Additional context** variety-0.8.3/.gitignore000066400000000000000000000014011362063646600152050ustar00rootroot00000000000000# Autogenerated by setup.py variety_lib/variety_build_settings.py .idea/workspace.xml # Build artifacts __pycache__/ *.py[cod] *$py.class .pybuild/ # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST debian/debhelper-build-stamp debian/files debian/*.log debian/*.substvars debian/*.debhelper debian/variety/ # PyInstaller *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ variety-0.8.3/.idea/000077500000000000000000000000001362063646600142015ustar00rootroot00000000000000variety-0.8.3/.idea/misc.xml000066400000000000000000000004671362063646600156650ustar00rootroot00000000000000 variety-0.8.3/.idea/modules.xml000066400000000000000000000004121362063646600163700ustar00rootroot00000000000000 variety-0.8.3/.idea/vcs.xml000066400000000000000000000002641362063646600155200ustar00rootroot00000000000000 variety-0.8.3/.isort.cfg000066400000000000000000000003421362063646600151170ustar00rootroot00000000000000# Ensure consistent settings between isort and Black # This is necessary when using them in pre-commit hooks [settings] multi_line_output=3 include_trailing_comma=True force_grid_wrap=0 combine_as_imports=True line_length=100 variety-0.8.3/.quickly000066400000000000000000000002131362063646600146770ustar00rootroot00000000000000project = variety version = 12.08.1 template = ubuntu-application dependencies = imagemagick, python-lxml, python-gi-cairo lp_id = variety variety-0.8.3/AUTHORS000066400000000000000000000001761362063646600142750ustar00rootroot00000000000000Copyright (c) 2012-2019, Peter Levi 2017-2019, James Lu variety-0.8.3/CHANGELOG.txt000077700000000000000000000000001362063646600207432data/ui/changes.txtustar00rootroot00000000000000variety-0.8.3/CONTRIBUTING.md000066400000000000000000000060211362063646600154510ustar00rootroot00000000000000# Contributing to Variety First off, thank you for helping! ## Bug tracking and bug fixing Many of the reported bugs for Variety are about a problem happening in a particular OS or desktop environment, under very particular conditions, or are more or less impossible for us, the main developers, to reproduce. Thus a pull request where the author has managed to reproduce reliably a bug and provides a fix is an extremely valuable contribution - these are always very welcome. ## Bigger changes or new features If you plan on implementing any significant changes or developing new features, please sync your intentions with the main developers, Peter Levi and James Lu ahead of time, then open a PR early in the development phase. ## New image sources If you plan on developing support for new image sources in Variety, please sync ahead of time with Peter Levi. Every new image source to be added to Variety should meet several criteria: - The license of the images there must explicitly permit usage of the images as wallpapers - The image source should provide some sort of an API or a structured feed (e.g., json or xml). Scraping data out of HTML is not acceptable for new sources in Variety. - The image source must provide image author attribution - Additionally, as a general rule we should try to select high-quality sources that make good wallpapers. The general policy is that we prefer quality over both quantity and searchability / customization. Suggestions for adding specific Flickr photographers' feeds as default sources are also welcome, as long as their images meet the license and quality criteria above (the other two are met by default with Flickr) ## Code style We use Black and isort, using line length of 100 symbols. If you wish to contribute, please install Black and isort with `pip install black isort`. Run on changed files with: ``` isort -rc edited_file_or_folder black --line-length 100 --target-version py35 edited_file_or_folder ``` Or use directly the provided script `toolchain/autoformat` for this. There are also configuraton files for both isort and black (`.isort.cfg` and `pyproject.toml`), so just running `black` without passing in parameters will still use the correct settings. There is also a pre-commit hook available that will do these steps for you, install it with ``` cd .git/hooks && ln -sf ../../toolchain/pre-commit-autoformat pre-commit ``` ## Testing We don't have CI support, yet. Please make sure all tests under the `tests` folder pass in your branch. Run tests with, from the root of the project: ``` python3 -m unittest discover -p 'Test*.py' tests ``` All of the tests for the various image sources actually access the image source, so these could fail sometimes when the remote site is down for maintenance - use common sense for whether your changes caused the failure or it failed because of ax external reason. Please note the test suite is not yet very extensive, and also does not cover any of the UI aspects of Variety - always do some manual tests before you consider your PR is complete. variety-0.8.3/LICENSE000066400000000000000000001045131362063646600142320ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . variety-0.8.3/README.md000066400000000000000000000046131362063646600145040ustar00rootroot00000000000000# Variety Variety is a wallpaper manager for Linux systems. It supports numerous desktops and wallpaper sources, including local files and online services: Flickr, Wallhaven, Unsplash, and more. Where supported, Variety sits as a tray icon to allow easy pausing and resuming. Otherwise, its desktop entry menu provides a similar set of options. Variety also includes a range of image effects, such as oil painting and blur, as well as options to layer quotes and a clock onto the background. ## Installation ### As a system package Variety is available in the distro repositories of: - [Arch Linux](https://www.archlinux.org/packages/community/any/variety/) - [Debian 9+](https://packages.debian.org/search?keywords=variety) - [Fedora](https://www.rpmfind.net/linux/rpm2html/search.php?query=variety) - [OpenSUSE](https://software.opensuse.org/package/variety?search_term=variety) - [Ubuntu 16.04+](https://packages.ubuntu.com/search?keywords=variety) ### Ubuntu PPA Variety backports to older Ubuntu releases are available at https://launchpad.net/~variety/+archive/ubuntu/stable (a NEW location as of April 2019). ### Install from source To install Variety from source, you will need Git, Python 3.5+ and [distutils-extra](https://launchpad.net/python-distutils-extra). To actually run Variety, you will also need the following: #### Runtime Requirements - GTK+ 3 - gexiv2 - libnotify - Python 3 libraries: - BeautifulSoup4 - lxml - Pycairo - PyGObject, built with Cairo integration - ConfigObj - Pillow - pkg_resources (from setuptools) - Requests - *Optional*: httplib2 (for more quotes sources) - *Optional*: imagemagick (for wallpaper filters) - *Optional*: feh or nitrogen: used by default to set wallpapers on i3, openbox, and other WMs - *Optional*: libayatana-indicator (for AppIndicator support) - *Optional*: for tray icon support on GNOME, the [GNOME AppIndicator extension](https://github.com/ubuntu/gnome-shell-extension-appindicator) See `debian/control` for an equivalent list of runtime dependencies on Debian/Ubuntu. #### Install steps 1. Clone the git repository: `git clone https://github.com/varietywalls/variety.git && cd variety` 2. Run `python3 setup.py install`. By default, this will install Variety into `/usr/local`; for a local installation, use `python3 setup.py install --prefix $HOME/.local`. 3. Run `variety` from the command line or its desktop menu entry! variety-0.8.3/bin/000077500000000000000000000000001362063646600137715ustar00rootroot00000000000000variety-0.8.3/bin/variety000077500000000000000000000053201362063646600154020ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import os import sys if os.geteuid() == 0: print( 'Variety is not supposed to run as root.\n' 'You should NEVER run desktop apps as root, unless they are supposed to make ' 'system-global changes and you know very well what you are doing.\n' 'Please run it with your normal user.\n' '\n' 'If you are trying to run as root because Variety does not start at all with your normal ' 'user, you may be hitting a file permission issue or a bug.\n' 'Here is what to do to troubleshoot:\n' '\n' '1. Open a terminal and run "variety -v" with your normal user.\n' 'Look for exceptions and hints in the log for what the problem might be.\n' '\n' '2. You may try to rename ~/.config/variety to ~/.config/variety_bak and try again.\n' 'This will have Variety start from a clean state.\n' 'Your old config and images will remain in variety_bak\n' '\n' '3. If none of these helps, open a bug in https://github.com/varietywalls/variety/issues ' 'and follow the instructions there.' ) exit(1) # Add project root directory (enable symlink and trunk execution) PROJECT_ROOT_DIRECTORY = os.path.abspath( os.path.dirname(os.path.dirname(os.path.realpath(sys.argv[0]))) ) python_path = [] if os.path.abspath(__file__).startswith("/opt"): syspath = sys.path[:] # copy to avoid infinite loop in pending objects for path in syspath: opt_path = path.replace("/usr", "/opt/extras.ubuntu.com/variety") python_path.insert(0, opt_path) sys.path.insert(0, opt_path) if os.path.exists(os.path.join(PROJECT_ROOT_DIRECTORY, "variety")): python_path.insert(0, PROJECT_ROOT_DIRECTORY) sys.path.insert(0, PROJECT_ROOT_DIRECTORY) if python_path: os.putenv( "PYTHONPATH", "%s:%s" % (os.getenv("PYTHONPATH", ""), ":".join(python_path)) ) # for subprocesses import variety # isort:skip variety.main() variety-0.8.3/data/000077500000000000000000000000001362063646600141325ustar00rootroot00000000000000variety-0.8.3/data/config/000077500000000000000000000000001362063646600153775ustar00rootroot00000000000000variety-0.8.3/data/config/filters.txt000066400000000000000000000007071362063646600176140ustar00rootroot00000000000000# These are automatically appended to the user's filters. # New default filters should be added here, as well as in the default config so that existing users will also see them # (they already have a config file, so the default config is not used for them) False|Keep original| False|Grayscale|-type Grayscale False|Heavy blur|-blur 120x40 False|Oil painting|-paint 8 False|Pointilism|-spread 10 -noise 3 False|Pixellate|-scale 3% -scale 3333% variety-0.8.3/data/config/sources.txt000066400000000000000000000005061362063646600176240ustar00rootroot00000000000000# These are automatically appended to the user's sources. # New default sources should be added here, not in the default config so that existing users will also see them # (they already have a config file, so the default config is not used for them) False|favorites|The Favorites folder True|fetched|The Fetched folder variety-0.8.3/data/config/ui.conf000066400000000000000000000003601362063646600166620ustar00rootroot00000000000000# Position of thumbnails stripe: bottom, top, left or right thumbs_position=bottom # Size of thumbnails stripe in pixels thumbs_size=120 # Limit number of shown images for better performance, use "Unlimited" for no limit thumbs_limit=200 variety-0.8.3/data/config/variety.conf000066400000000000000000000231401362063646600177310ustar00rootroot00000000000000# change_on_start = change_on_start = False # change_enabled = change_enabled = True # change_interval = change_interval = 300 # safe_mode = safe_mode = False # download_folder = - when not specified, the default is ~/.config/variety/Downloaded download_folder = ~/.config/variety/Downloaded # download_preference_ratio - if we have "unconsumed" download sources, we'll prefer to show a newly # downloades image instead of an existing one in this percentage of the cases download_preference_ratio = 0.9 # Determine if the download folder sould not exceed a certain size (in megabytes) # quota_enabled = # quota_size = quota_enabled = True quota_size = 1000 # favorites_folder = - when not specified, the default is ~/.config/variety/Favorites favorites_folder = ~/.config/variety/Favorites # Prefer Copy to Favorites or Move to Favorites operation (or both), depending on the folder of the current image # favorites_operations = # The default is: Downloaded:Copy;Fetched:Move;Others:Copy # Order is important - the first matching entry will determine what operation(s) to show in the menu for a specific file # Special folder names you can use: Downloaded, Fetched and Others (same as "/" - use it as last entry to determine the default operation) # Example1: Downloaded:Copy;Fetched:Move;/pics/RandomImages:Move;/pics/OrganizedAlbums:Copy;Others:Copy # Example2: Others:Both - always show both Copy and Move to Favorites, no matter which image is shown # Move to Favorites is only shown when the user has write permissions over the file, otherwise we fallback to Copy favorites_operations = Downloaded:Copy;Fetched:Move;Others:Copy # fetch_folder = - when not specified, the default is ~/.config/variety/Fetched fetched_folder = ~/.config/variety/Fetched # Clipboard monitoring settings # clipboard_enabled = # clipboard_use_whitelist = # clipboard_hosts = clipboard_enabled = False clipboard_use_whitelist = True clipboard_hosts = "wallhaven.cc,wallpapers.net,flickr.com,imgur.com,deviantart.com,interfacelift.com,vladstudio.com,imageshack.us,deviantart.net,imageshack.com" # Icon settings # icon = icon = Light # Prefer only images with this color: # desired_color_enabled = # desired_color = # DISCLAIMER: This feature is still experimental desired_color_enabled = False desired_color = None # Minimum size of images to use, as a percentage of the screen resolution # min_size_enabled = # min_size = min_size_enabled = False min_size = 80 # Should we use only landscape-oriented images? # use_landscape_enabled = use_landscape_enabled = True # Prefer light or dark images # lightness_enabled = # lightness_mode = <0 for Dark, 1 for Light> lightness_enabled = False lightness_mode = 0 # Use a filter by rating? # min_rating_enabled = # min_rating = <1 | 2 | 3 | 4 | 5> min_rating_enabled = False min_rating = 4 # What parts of the initial wizard have we covered smart_notice_shown = False smart_register_shown = False stats_notice_shown = False # Are smart features enabled (i.e. data collection on Fav/Trash operations), also sync, and anonymous usage stats collection? # smart_enabled = smart_enabled = False sync_enabled = True stats_enabled = True # Folder to copy the wallpaper image to and make it world-readable. Provides LightDM support. # copyto_enabled = , default is False # copyto_folder = , the default is Default # Default means to use the XDG Pictures folder when home folder is unencrypted and /usr/share/backgrounds when it is encrypted. copyto_enabled = False copyto_folder = Default # Clock settings # clock_enabled = # clock_font = , default is "Ubuntu Condensed, 70" # clock_date_font = , default is "Ubuntu Condensed, 30" clock_enabled = False clock_font = "Ubuntu Condensed, 70" clock_date_font = "Ubuntu Condensed, 30" # clock_filter = # # The filter defines the ImageMagick command that Variety uses to render the clock on the wallpaper. # First some scaling is applied to get the image down to the screen size - this ensures # the final drawn clock won't be rescaled by the desktop wallpaper system. # Easiest way to see what's happening is to run variety with -v, enable clock and see what ImageMagick # commands Variety dumps in the log. # # The user may want to customize the following aspects: # fill - color of "filling" # stroke - color of outline # strokewidth - width of outline # gravity - in which corner to display the clock - SouthEast, NorthEast, SouthWest, NorthWest # annotate - these must be in the form 0x0+[%HOFFSET+X]+[%VOFFSET+Y], where you can edit X and Y - # distance from the screen corner defined by gravity. Write them in even if they are 0. # # The %HOFFSET and %VOFFSET parameters are there for Variety to replace in order to compensate for the # diferent dimensions of every image and screen. # The several %FONT parameters are there for Variety to replace with the font settings from the GUI. # # The texts can contain these symbols: # # %H - hours (24), %I - zero-padded hours (12), %l - hours (12), %p - am or pm, %M - minutes, # %A - day of week (full), %a - day of week abbreviation, %B - month name, %b - month abbreviation, %d - day of month, %Y - year. # The full list for these can be seen here: http://docs.python.org/library/datetime.html#strftime-strptime-behavior # Have in mind that Variety will not update the clock more often than once every minute, so using seconds (%S) for example is pointless # # A tutorial on "annotating" with ImageMagick that you may use as a reference: http://www.imagemagick.org/Usage/annotating/ # You can get a very uniquely looking clock with some of the more advanced techniques (e.g. circle-shaped text, interesting colors and shading, etc....). clock_filter = "-density 100 -font `fc-match -f '%{file[0]}' '%CLOCK_FONT_NAME'` -pointsize %CLOCK_FONT_SIZE -gravity SouthEast -fill '#00000044' -annotate 0x0+[%HOFFSET+58]+[%VOFFSET+108] '%H:%M' -fill white -annotate 0x0+[%HOFFSET+60]+[%VOFFSET+110] '%H:%M' -font `fc-match -f '%{file[0]}' '%DATE_FONT_NAME'` -pointsize %DATE_FONT_SIZE -fill '#00000044' -annotate 0x0+[%HOFFSET+58]+[%VOFFSET+58] '%A, %B %d' -fill white -annotate 0x0+[%HOFFSET+60]+[%VOFFSET+60] '%A, %B %d'" # Quotes settings # quotes_enabled = # quotes_font = , default is Bitstream Charter 30 # quotes_text_color = , default is 255 255 255 # quotes_bg_color = , default is 80 80 80 # quotes_bg_opacity = <0-100>, default is 55 # quotes_width = <0-100>, default is 70 # quotes_hpos = <0-100>, default is 100 # quotes_vpos = <0-100>, default is 40 # quotes_max_length = a positive integer, quotes above this length will not be displayed # (as they often won't fit well on screen) # quotes_text_shadow = , default is False # quotes_disabled_sources = <|-separated list of disabled quote plugin names>, default is "Urban Dictionary" # quotes_tags = , default is empty # quotes_authors = , default is empty # quotes_change_enabled = # quotes_change_interval = , default is 300 quotes_enabled = False quotes_font = Bitstream Charter 30 quotes_text_color = 255 255 255 quotes_bg_color = 80 80 80 quotes_bg_opacity = 55 quotes_text_shadow = False quotes_width = 70 quotes_hpos = 100 quotes_vpos = 40 quotes_max_length = 250 quotes_disabled_sources = Urban Dictionary quotes_tags = quotes_authors = quotes_change_enabled = False quotes_change_interval = 300 quotes_favorites_file = ~/.config/variety/favorite_quotes.txt quotes_favorites_format = fortune # Slideshow settings slideshow_favorites_enabled = True slideshow_sources_enabled = True slideshow_downloads_enabled = False slideshow_custom_enabled = False slideshow_custom_folder = Default slideshow_sort_order = Random slideshow_monitor = All slideshow_mode = Fullscreen slideshow_seconds = 6 slideshow_fade = 0.4 slideshow_zoom = 0.2 slideshow_pan = 0.05 # List of sources # Each source is srcX = # location depends on type - path or url or search options, or just a name for unconfigurable sources # Folders are included recursively # BE CAREFUL: all keys below (src1, src2, etc.) MUST be different [sources] src1 = True|favorites|The Favorites folder src2 = True|fetched|The Fetched folder src5 = True|folder|/usr/share/backgrounds src11 = True|flickr|user:www.flickr.com/photos/peter-levi/;user_id:93647178@N00; # Image filters to apply randomly to every wallpaper (ImageMagick is used for this) # Each filter is filterX = # BE CAREFUL: all keys below (filter1, filter2, etc.) MUST be different [filters] filter1 = False|Keep original| filter2 = False|Grayscale|-type Grayscale filter3 = False|Heavy blur|-blur 120x40 filter4 = False|Soft blur|-blur 20x7 filter5 = False|Oil painting|-paint 8 filter6 = False|Pointilism|-spread 10 -noise 3 filter7 = False|Pixellate|-scale 3% -scale 3333% variety-0.8.3/data/icons/000077500000000000000000000000001362063646600152455ustar00rootroot00000000000000variety-0.8.3/data/icons/22x22/000077500000000000000000000000001362063646600160245ustar00rootroot00000000000000variety-0.8.3/data/icons/22x22/apps/000077500000000000000000000000001362063646600167675ustar00rootroot00000000000000variety-0.8.3/data/icons/22x22/apps/variety-indicator-dark.png000066400000000000000000000012671362063646600240570ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYs¼ÏtEXtSoftwarewww.inkscape.org›î<4IDAT8í•ÏKÓqÇßÏ÷G[Ë¥3aôˆ-ižì"tH¼Ž.á!áB¶MXle‡ð°”ìÇ%ÊD:D²¡6jŒ-+hE:h¹¶ïöý>¶Õ&ß… Þ|Ã>Ÿ‡çóz~ð|ø3c?$ì õ\/ Z[mç¯Éò!Ë^`‚€RK‹é~2ùò13,–S«ÃÃC‚Á ¿æ=ŒI±¨È³³áA‡ãâ ŒFY6›Ms.×Õ±f—ü~‡¢Hv"ŽŒ8SÍüB¡g6fe@ªž‰ˆÔÿeS*ÉSéTïv>ë7Ükíí!Mã™ÑQç×z?f0@$5ÕËã™:›L%{—–j¦îNkçíî®.Ÿ×{çV±xÔëv; õw¦Âë öè5M‹ÆVl™o,,FäùHÄ­ª™„Ïìo ~ŸH,LLg&'§Žÿ v÷Ò»x¼?÷+§[Múcž>9‘Íæž×ÃZ±šW×ׇì=g=žÀ‘˜ßø´a_ŽÅt¡5 ¼y»"öëÐ@6›Å‹ù° Š’íˆé0~æô3Ý©¢RÀy ­(—ÕíÚ^UË»†Àï|þÀᆌ5­‰KÅÓ,ÌÌH$3Wd&f³D@Å&1Wö’D[?¾o¹\Îd ðð¦(  Ùlz5==wys“ì•x`çXS­» €ÐÖvÒhµû,Šb–ª/˜ÆÇ}÷4MзÝJF£á ®ÐÁ²ïà?(î0ŠsIEND®B`‚variety-0.8.3/data/icons/22x22/apps/variety-indicator.png000066400000000000000000000012561362063646600231360ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYs¼ÏtEXtSoftwarewww.inkscape.org›î<+IDAT8í•KhQ†ÿsg&™¦¤š*¦5$X_ ¡Ô.TŠ EtÑj 6!“´ˆ-‚¢+»pa7âJEWÒ•´EP|€Š&Æ͘43s]„¦‰$*Ýõ_s8÷;.÷ç+!¶"ÔUp¥DÈeÓGp?çÿÆ D¸Ýd^÷8çP~¤^ݼsëý¯ÜÏv",ûš2ë?Ý¿íÞý»{E(¤ï™ôçxüÆÉz‡ÀzƒAõpÎ^ÇããêåÍ'>Í Ú9t]dþÝMñÝæènn6áúµ+³©tz’1šŠF'¾Uæ1&¨àÜ$62b(4x`³cKwoOÏbÈ™H&ÇgææÆ‚ÁK1YÎŽF"“ùª•N0èïªfÌp¹Ë媊µY­8ìõJ‡z½ÆÚÞŽŒø}uÁ[;:ž„ÃCSÃ׊]<³sÇvŸÙl®9ÃnGßñíKË£JxÕ*ô£Ñð€Îù~NËk:×óù߯â­þ +þö¾b$äÑIEND®B`‚variety-0.8.3/data/icons/scalable/000077500000000000000000000000001362063646600170135ustar00rootroot00000000000000variety-0.8.3/data/icons/scalable/apps/000077500000000000000000000000001362063646600177565ustar00rootroot00000000000000variety-0.8.3/data/icons/scalable/apps/variety.svg000066400000000000000000000073311362063646600221660ustar00rootroot00000000000000 image/svg+xml variety-0.8.3/data/media/000077500000000000000000000000001362063646600152115ustar00rootroot00000000000000variety-0.8.3/data/media/sfw-0.svg000066400000000000000000000042531362063646600166720ustar00rootroot00000000000000 image/svg+xml variety-0.8.3/data/media/sfw-100.svg000066400000000000000000000043121362063646600170270ustar00rootroot00000000000000 image/svg+xml variety-0.8.3/data/media/sfw-50.svg000066400000000000000000000043111362063646600167520ustar00rootroot00000000000000 image/svg+xml variety-0.8.3/data/media/sfw-80.svg000066400000000000000000000043121362063646600167560ustar00rootroot00000000000000 image/svg+xml variety-0.8.3/data/media/tray-screenshot.png000066400000000000000000001245441362063646600210630ustar00rootroot00000000000000‰PNG  IHDR<£B¢$sBIT|dˆ pHYs Ù Ùæ¡×†tEXtSoftwarewww.inkscape.org›î< IDATxœì½yÜfÇUßù=U÷>Ïó.½¼½J-µ$[«%¯²!à $c[Á0Øà8™ÏÌ|&Ÿ$d&w«cla2ždBB&,ǯ`¬8^ÀÛ’Õ-©­}éV¯o¿û³Üª3TÕ]žåíîW-!›>Ÿî÷¹·nݪSçVýêœS›¨*O…DDÎ&žN¼ ´?cÒÙw–\œm¼g6©g=í{šã¯óÊ’zziß·ùûÏt^g“F-ÎmcZýYÇéS,ÙÈûëœÆ?Àömœ³ t.Ð_3ÚWþÜz&@ÜøàM:UØ¿ߨg8#?~|#`.Ðú6¢;wžØÜpà CñöqÛ¾õðlÁï¬oÐ)°_S‹·d·¤€xqøð’ÀKφ¿ t.ÐwýeyµgÏ&åŽpF€qoÛ·o,ø èð†ÁîL@wüøq¹8|MÔæççé,//ËUÙ\  t¾méþÉžœž¹¹¹ö—%ÞAëàwÛmûtœÍ¹ð­ x#`7dº& ¹:¸]´¼,\KKkW°²²2Âæ¥ÀJ·ûgÚ^üW˜÷‘§9ý¿Ê²=UzºesJšétàñáð™™|6m:®ï¯À0àž=‡”;àÀ9ß$Ð xãLØ}û&Ý-pøð5’@nyyY®Š·²²Sæº]Icm­'°›n ÜvÆßn¯7 x;Ʊ}.Ð_!àB½\N4o;ívdŽ‚SS§`f¾£Sá¦MGuû“³z€&øÝqG¥õ%à»í¶Ût¶ÆÞY^»Q®º‹–—eiw äæº²¶Ö“nw‹ìº›zÒë ÊtûýY™K׃°u„oð¤õmsu~ia»§‡¶Ôþž?å|\Y6šë3!—¿¾ÔjåÍÆV+WæÃu»ÕÒS@»½¤N[§—:z”‚33ŸŸÑM›6)ÜÏ“OÎjøh‚Œú÷†AoðÎ쮩™®u ›ëvemk¹M½žô6 ¤ßŸ•™hýþ@ƒB6³™ÁT!ƒAÑȯ(ªûÙõ¤Ê,°|ÆXë¾þ,£Ù1W“i¹öwƒt¶/Ÿ£¬Î¾ç¡ 盞*3ç£^=«òÔ(ϲÀ,ÓÍ«û<Ï´ÕÊ•Xkµ´ÕZÑv»¥++mít.-utÇŽ®ß2?£'‡€oÏž=zÇw°sçNzëÞÙ‚ÝüüseyyYvºVkÙôû³233~ SƒiYͺ St¤èRNÚE!0CÑve¾uÀ;4}¶1Îñ¼Óä,×áiuâÍ„IiœUÌ!š^WN£Ö‰¿:r1æî¤ ËdM¯{ÛÌsÝ€ïʲLWËk«)Œ•ðÛ˺šç™æÝ\»ùš¶Z¹®­µtÓ¦Oà—€/i|Û·?©‡ÐãŽ;80zûöí+¯ë —¥‹³»`ÂÖÁ®ÓY0ól‘–/ ªÆlYí9Ó)¦e5뙢pÒnwdM{Òêz1­–8ç¤ksZ®+¦Eî:“á½ß0èu†îýº‘:gˆxþh˜/€¢3éI`¦SŒyÔ‚îÄT»´ÂO-d3fÃqGX}Ôb(rãʵrt†‚»cy:W6×£3Êäl2<&Õ­‘wžBþ¡³ÚSäãÎC°™Õ®k­‚Qf€~WE¬‚Õ^kàó¬£Y7Ó™çWW;fófçkù‹ó\½…V«¥Yö¤>üðŒ^qż?|öÜr‹ÞÀràÀÒ¼UU¤‰ˆ$ÐË&ðy°Û-'Ož4[·.H¾Ð1Ý6¦:5¦ß)LÑufÍöL«ð¢67~µkhµDQQí‰j.¹÷â|î ÎM´à½Ûè•í«=)F»ŒÔÂÒÚHÎëS?æÝlסոšäi—éѸ¢?§é²Ç¸¨‡Û‘âGN‹:W®Áf£LcÊr¦IQU9†Ê`êœôb9Ö§*…‰>eÐLkH&ePVÅŸLµ¼ÆÉéœ)¯Øi|—õx8­#²„2«öýI¬Ç—1A“ó±cÔáÉ £VT­¨ö¦­Ÿ`t õD{ùÀOõ:~zÚùÕÕž™qÓ¾¿Ùy×ó’e™·'::·cÎ?ü0fÓ¦¶>|ØïÙs‹ÞpCzû÷ïUÈ(MÚº†W×î†ÍØÙÙYÓív¥Óé˜VkÙ¬¬´Mž¯™,k™,ËŒíöÌ ÆZkéÌÀZcŒ5¶(ŒËrɽ“q&ó™xï…xï%ó™x¯2,ùsÕøòÚß1Ô÷™ŸÀ«²Ï‡jYe<¶Ž  ¤ŸÁ„÷FÞ8#ð/óTˆ|L¼3ɱ_¿¬Ý ª‹çNc>s3Ù ¬{öìÑëÐS d ›¶#ø½¯¦ÝúìvËÉ“'K°ËWÚFD,SΪŠØÜZÄšÁÀ ƶ3``´eLVx30ÞXŸ‹³^ ÞPäˆ)ŒëUÄE¹r±ç$øÈG숬±Z9\cìFªçV_&ÕÅá44–§|–”ìÙ†(€¬’\F^òO/-²štÇÉyÜwÒ!N/gC) êqŠI.g#“aªêŒ­hã¨Ì¨Ê»\§æÐÞ:Œ‹?žÖUÞÆÐ™äR1šª°q&.±U Í1êTTÅ8/’y—e>wêU½÷qªSì¼±6wívÛ颗|›EƒA œ`nn‡øá‡M=¸á8p rÔµ<¡&š4±xØ”}ì±ÇÌîÝkròä&S»…€DVdÕ‚±Ät«„g VŒ1Öc¤pF3+â¼ñÆŠUµ^¼×5F%}ïÇ­$Á‰0 FžgÙè{ÙhJÃïMþðõ'Ù˜« ¼d“y›œU•W16þ¾( ??#%­sYã9ËÊUœI2oð<ÄS£LÃü3OM°c¾ãh8ÿIagMµz³q SÆÑÛ±!ãr=W>ž* kx"¢!\´ € 1N­ZoDÔ£™ª×Ìzq¹f^Dœ1⌈qÖgŒqY¿ëzÖ¸, _«ej὚^Q¾>qàÀ­æèU“‡d¢À~ >";_Plݺ Þf¥Ôì°3"V§f¬s>sŠõÞg™× ÄúL3P ÎÊÀZQgÄXãUŒ FãQX-Ä«5*% {P­@¹‚97âG#…úPÌøƒM$õǵ¤JÉN¨2õPר|uïPJcø °HÐl„­”½’·a˜¥é²YÌßaS; âúŽ˜X¤"ð&©ˆ1!Sï4\3ùúU¬³JVÊÎ'†Q$”Eƒng3Âg¼M¥oÀ¸ð~Y8 Ñ*~3 \’m½ës¤ ô”ôU’Û¿C“J¦,„ÑØ……Ž1Ƙ<_3`LÛy[´:™ëûÌ{ @—i¦d™f«ª™µŠ±ªXůb …QcŨˆWD ¢ªbµ¦áÔ®SÕ®¾[%c[EŠØªÅÆHžúç×toË: Ø”&’CÆzÍ¢–\HJ-Z»öV+N„…UÆõüG²r¦l & ‡: ÆÅÛ𢳀sØ òj N²¢ì¬­de-V¦Y¸©± XBoªå;•$ª!°”#ÃàLøRÆ904øÇIù¦úé{ȹXeíÊ?!Í$“ÔíU0w¶nã²²•µ ·“ëOÉH=_ù7újÆfáÆÔŸ¿¡3É$j‘AQ,h!ŠˆŠŠb¼QëUÅ‹x§&w™àœàDÔ‰šÂ˜¬0Κ"óÆ{Sx˜ÌÊ=6Íl.z½5±:5ÕVŽ9îÃlßÞ÷l¿A>,pp`XmhÞßÝN‚)› l‘v{Þ€5¡Š‹-œfΰ3Æå†<ó¸\u{ŸeVÉ q¹b³øé-xkë ¯Æ«Š1Fð*¨Š+5<‹Qš1“üC£âö6¾Sh¬è1ÄúJƒ²“@͘@ FZe7¢a*éaÕÇiI"!±I;JÍM1É?™x°fb;IB{ ñœ eµ€Ä„—$þàŒï1I^µÁðõò4Š­1 `¬-˯ bÃsÀÚJ&Ƨìð¬ 0u<‹¿ þmÐwÜèhmê”êšq kJÑE1‘f¸·á©5Û#凴åÛ•E1"§(Ÿ’S«…“†ªKb¾1zÞ!m×øFgO>2?†ßI´ŽF<™ÜHã­hj.¢ÞÀ#4uc¼E¼â}, s"…1¦/ŽL™Šc …˜\TdÊbt@–MéÚZ)?…¶ ««³Sê—½8ç¤(NÊž=ó@Ðò Š\±¨×µ»­[ÄŸ(Œš¶ÑÍa€ŒEŒõ^³,ÓŒ¾Íû¦È &W$ï[Îh&Þä*>$–èÛU+bWo5Î{QA *â Š“¦ÿnüÇ«ußÖÄL±­7µ¨ChÀ’€Qtô}Ѧ‚’²(Ø•Ác·­‰/ªzÀ”|ü¦6š¢&ñP{>ZêzÃ58<ƃ7•ŠÔ`’ýjÖ‚|°DcT ì„âL¨à&ª,ùóº¼ 'óQŒ5`(ek›b*ÉFy;Œ3`<Šà=+x—$éA ‡8CÞà­ÖÀ0É«©â ï¯Òt€øpí}”œïêo× ŽZ6‚ÖNú~€¼WWÃ7(9ð±ãB}Ð÷¼©ƒ»àš¯a†z{-ÓnfUM ©=«[Í ²µ‚éYjš¹ÖxABMÔ+/ˆŠAàUì8ƒ8#¦°"…Љ §‘ƘÜdÖQøc‚°ÕjS¨S?pÚn·TDtvvU¡Ø#°½Ôòêsó`‚3`iiIvîljwÌ"EqÊÐÝlÚm1Ωu¹fY¡YQØSä"ÒR¥…%ÇÑosp-09©’)šaÄⱂA1¢jðF¼A Z™±Þ4$ê̸oQ«ØZG%ãzŒ1U¥T£5 £vaâhSB2üQH”l žh0˜ÔJP¨)…¢£x5T~_S]j6ÜTà1>é×Yœñ˜ ¡¦9ñx â]ó)UŒQÒ(4ƒ¢õ1A¶&Œy…!¸ ³b &j}ƌ®‰zÁÂãP¹lè ¾*t,W `ˆ‚¯§üò#dRuŸ&ì "ïË*Q}ë¡|ËŽ@£¬lôƳPJ àµïA­#òÕ¾¬\g0IMõÓ¨55ž«Sû«5ÖÌP6¾º5C竟ĢhÚø\TÕp¯€WoL<£8D ”BU 1:€ÌZ#Ɖ3F½Æ’yEmGEúš¢ê½ævSèêE¬./O«s R…¼ô¥è‘1;âq.Þþýû¥2gÃÈììì¬étŒ?a­cu³±½^?o9ÍYžãr0-…´È¤µi¦sÇú_ä]  tÎŽ²,ÿí¹í;]Õ÷3µ}Í\ß2ÐVÞ_¨ú¢Õ2ƒµµ–SU?=}ÚÁøÃ‡ë«^õ*ðàÁ8Z{Ûè<<¨6ë [8õ…ÙLÀJÑU“e-ÓÇA¬÷šfªšg"¹´ºÝ§:uó]  tµZXq®eòLňGwYæÛÎÛ•àóÀÑ©©U]^Þ,Î-È–-ãwÒ™èÃÛ½¶&‡[-Ù,ÆqΙNÇ™~¿o²,·Ð·`¬ªfVɼÕ\¼m=ÕSо]hÝSÇÅ_'­³<øí] ¿†$ÖX›Å+â@|–yWhfóbàèu:=¿¶6-³³K²ys›,;)°‡ƒÆ!Ã@%à¥ÉÆ×,-ÉcSSÂΞì^hqb09cd0í¥×+L–å¦ v’©’‰3¹7>Wà;ù ÆÎ2ëÅÛ@ºãÞ¹„§cÇO°kç¶¿bNÎL½Þ€~@»Ý¢Õz¦§ ?ÛI­1䨸ÉœµŽ¾f™ñ:ú&Ï["¢k²º:+0-Û¶mB¸þúrðà iªkEÇ—¹—\JwËq™%“6‚]ËØAakcœõV½fÎhn¼ä¨oyùÎÒð&Üù*åz ñ0 ž /àc cÇOñý7ÝÀçÿÇÿxÖƒÞÎ;™™™áÄÉ“¬®¬4¦ôüu Å¥eNœ^ýªWòÆ7¼€V+ç3Ÿý“gè­¬®±¶ÖcfzŠ-[<ÓÓÓlW(Šb#[&|{ÒÚZ뮽ŽWÜ|3W\qñÕ¯qÇç?ÏÂéy¦¦¦‚†'R™5ZxŸYƒXoÃtlÐ’v{Yz8am‹ìÞ½ÌÊ œ˜A6\Z"Ë*Æ¯É ³²yó‚l;‰¶®¿^!L@n´Î[€óórp¸×k­c$ŸöRô¼˜–ˆH.Þc²#‚)+…X™Z²um´gýÿÿ¿ó¿õd-Ó—:˜(à½"(¦:õR¶Z-þÉÏü ÿôç~–ûŒÞÊJ—ïþ®—ñòïý¾þ¯sçwÒíöè :6»wíäÕ¯zwÝ}€Oæ3,,.25=ÍÌô Ë%z½sßys¹ëxr!ãê›^Ë®]äèWïàsG*Ljó–Sf/¯ú_ÿ.?±ù^þü3wð?GÛë¤xg8ºÚbï ¾‡ð·nâFóu¾zÇgùäA¿¡m¼vlßÎŽ£'"]|ÑE\|ÑE<úè#$3"V½±˜8g7NµÖ X3 „¶—°,e Ø W?íæù×ãÕ‘+€Ãárº(¤(TÚ¾-h_<Þ b\†¡‹8‹˜°l̹Ìo°‡ÿ« ïó §YZ\(g¸_=òäI¦¦Ú,-­P›·Ì²yv–,kÛüü<»÷ìfñôÙ37·µÌó~ñvå¶w¼•}¿ø>„p½ÿß(ûÞù6ö½û½ì{WºVö¿ómÜöî÷"(ûÞõvvn߆óÕ¬QaaUyü‰'(º+lîW^¾ßšbà2î{øŠÕe 0Ó®¼ìèÌœ³,­µ¼äÅ/dß/¼—7¿éçxá n8óKÀwÝÍíïÿûo{Y–{a ýÔë‚~Ík&>ã^ÏÜÜf>û'ʽ÷=ÔxvݵÏÙPž“huµËõ×_Ï¿æV.½ôy.Þ³‡VÞáø‰ã|íëw²sç.n¸þy<òÈ#|ãÎ;YY]ennŽV»ÍZwíœóÍ/~?úS¯â‡^v9Û}”£J\Ò œèoáºï{¯ü›W1u×=x”ÕpôØq¦¤ÇE;wâ³ÖØx^á¤ÛÅK^ýr^û¼>O~é7ø×žâÄŠcðt¯:⫆4KYQ0a¿P,V­ñjã&r¦p^r¬…HžK{Ðb˜Z]6oæÔ©írq<-ñÀ°‘@ðnÀÊJOvÓ¢;s×s"-'ÒóâA41NŠ1"b—Œ‰Uÿí£áP ¼óM­*ÒêZ¼à^vã˘ž™âÀ{øæÝ÷pøÈ“ÌLM±uns¹¢À¹¸"à,Ë_÷uúÖ§¤ë¾ûcPUz‰á÷z¯Ýw‡òº4³EÂú¯X–¾kq¸uïøöó½—O1xø~óWþ%Ø«èµ_Ì?|ßÏóš«æ˜(Žü¿óþ_æN¿±ѯ¾êJÞñ¶7±ÿoçíoùç¼àùëƒÞ]wÝÍ{oÿn{ç[¹úª+Ϭ?ùÈGùà€ßýßl<{Ãÿfg§™á“ýpãùÏýó7m(Ï:-.®pâÔiƒ/{éKøÁW¿’K/½ˆ£ð^¹öê«y异/~éK|æ³ÂC?Ìu×^ÃÅ]Ä]w}“^· ^iç-¼ÓsvãÎn5d‡ÿœOßñ—´\™¯Ý¢ÃÜ5/âol[c龯qrIÁ+ºå…üØ¿ŒïñΗÿô«üÙB{l¼›á⾘«[óÇ¿þßøãûÙ17ËܶíH~¦]¦'ÓŽíÛÙ¹cÔo»cûvvl߯c1^ßîà†K/å»oº‰yÕkù?Ý1îúôá³_¸‹#>§Øà‘ñ³JO*Œâubâ® †ÆæN\¡2•Ü µ¶—v{Ôh=xð ¼ô C&íáÃKR‹½3¡(XŠÂÉTnqÞ‹×LÄ9gÔˆ±ê ˆÅ ˜o'¸Ó¸reuùù%vlßöu–––¹òª+yéKn„ˆìÚµ‹WÿÀpåsŸËŸÞñ9¾ò•o°²²ãø|gȪx*¼ç½¿Ìüüiæ¶måo}3ï~ïí¼ómoáÝ¿t;¼ëíoáÞó>Dá]ïx ¿ð‹ïåÔ©pÀç¶msì{çÛbrauvªB½KoâåæË¼ë×þœ;»½˜7¾ÿå<7¿—{Ô¯±pjžÅ¥‚Gï8ÄÉŸy ª÷?%¹^ÿ¼ky×Ûß¿ú7¿Ê?úŸ¾àùçwÞu7ÿæWÿoë?ç†ë¯kÊæiè0Ï”æùÈs×ÎìÞµsÂÓPNŸ>Íé…®|îfggxü‰Ó¬®­1·u+íN›•ÕŠ"ìX”öðU3#Ю¹.Ñs¸fúG¿ö8ǯº.=ƬÜÏ¡/ÜÏ!`Ímáò—ŽçÛ[™i Xþê‡øãÏÝË·v¼‚W|ß­ÜŒã3Ÿˆ'ucç"ÜÿÜÕÜpýõð|ˆ|TE³b1Æ{ñažˆÎJeP8qƒ\fò°¶¶&3ÍàÈ‘#AÓ‹µ#pέ¨î‹ÂIÆ4Î÷±x¯’`TD {—бFÁ¨?sƒ¶ÑÿÎëùòŸ…»¿yo0M ìܵ“WÜ|›6ÍVƒU£å¨<ç²Ëù;¯ÿi6Ínâ‹_ú‹`Êê8“lø>î‰à}Ü”@9ô­9vü»wíÄ«çС£)ëùÖ¡@ êµ z£Çް{÷®Ð8¢i[ŸÈÜžÛÆÌ¦›yÿÜRæ®z3íuIï¬Í³f§Î B·;ཷ€ý·½•k®fò=÷ÜÇ{oÿ¿étZdcæ›}»Þz:½Fàé :6ívïÞ;Œµcq·zÕ›^…w¡¾vg®à9[OÜÿ5þà‹sùÖrÚ85 ʽ IDAT¿ˆ Àç@Ög§ 2ãYY\dþôiN/ÝÇ£Wα{Ë.vväÈÚÆdøàCñ…/|™­[ç¸dOp¸=qø0_øÂyðÁ‡Ø¶u«ŒªŠGÅ‹7™7â±*âÔ‹ÃKÚÄ·×ë­«jžqÅ,ÐsN¬‡í¨ŠÍD §6¶Qc¬Qñ˜:ŸiRM;'À÷}ïËyÙ7òå¯|…{ï½—Á à…/|>/»ñÆØù°  ­V‹—¼èEÜ{Ï!Ô{Ôk©¹•RÐá)$!À»ªbÿÇ_ÿ×ü$æoþ‡_;™(¿ùÿ-Àïƒÿñ×Ð烿ùï@â>.ѼM_ºþ òµU–Nþwþí›~‹G¦wâ0a_±Ö~FK-À«¢Þ•Îâ§BwÞu7ïy߯°ÿ]oàûÞÃ;ßö&œóüÒíÿ‚}ï| Y–ó®}¿È[þ¯ŸãE/|AùîÓQΔæùÈóLȽ*"c,ý~^¯‡‹±E1`0è“\ðÞã½n¯¨á•ßÕ°å²½\ú¢WñC¯½•7þãoÀêÞ>ú‰ÏñßZ¢-ÊÜÕ{¸ôE?86ަϟ ï…® :XayУ7X…\)ÔlX†^aqi‰¥Å%ˆ€·¸¸ÌÂÒ2PUUQ瘰²W/V‹sN:6ÃÒ×lncÚ £kjÇ^·»CDN‰1a~Úô ø®‡ˆOŒµbq‚ŠEÔ«1ÑâÙxZC£¤ ÍÍÍñ÷ÞÊ­¯|%++«lš‰q+­.žjHDQ¬±d™EÕ‡Ô|J±qC „J ÁñK·¿ÃÛÞüó¼çö÷szþtŒ(c×° ÂÜö9n{û[Ù÷ž÷‚ûßñÖ ] -;¼Û~ü3|±ý¼ö‡ðOdAfyÁŽŽõÛÕ@‡ÚD Ì7J߸ó.Þ÷Ë`ß;ßZúæÞõö7óóo~'¿rû»Ëð_Ø÷vöíÿ%Þôó?Ë‹_ô‚RÞ盞 ïø‰œ8q’;G§X$ð™››cnëV–XXXdvf†Ù™VW×XY]õ†Á`€ónã&mTò‚f9Àßó‡|üž?ä〚9v½ü¸eËaŽ}ñOùôêóyñ+¯äz½‡CwýÿÀÇÇÆûüâ.ºb•ç^ù".Þó ú]<ÿ"O÷¡Gy¼+çÌ«*ae…®¹æ®ºê¹å³«¯z.×^}5÷ºŸÕ•5œ/Œ#8g<*„=ÅŠ“Œ`…Ö·Û,./ŸÛJ €éA!j†´É4m%‡S Ã$ jTPc¾FiƒvW5lç]°°£ï¦Ù™Z㧺ä‹IÿQXYYauuï}èQ RÔLUåÁˆà½ãÁûáø‰ÏZã–´íÞµUÏßz(l’é1R 1íÒ_ðÑ_ÛÉO½áŸò«?™Î³ð‰÷ñîO÷ÉÅáŒÃ›ï”¶U¼q)øæÝ÷òæ7ý,×?¯ˆ¸áúëøÔÇ><÷ê«®ämo}Þ[ÞÓPÔ+ó§YX\ûü¡‡Ÿ`ËæYæ¶nÞPŸÿüøÔ}ç/yñ‹yýë~¢yŽ£¥Ï¿þy\{ÍÕ|á‹_â±ÇŸà¥/y _tùµ¿dþÔ)¶nÝJžå,õ—ô78³M<ÖfLufèÚ¼ÖR…19yg —\q%Wû“½÷a´§cãQÌsä«_ákS?Èþ¿Ìßã!îûïŸä_=Ê©b,¶L¤¢p¬¬®±wï^~üÇ~„_ò¢ê (¡P?üC·²{÷nî¾óN1ƒ¾(N$SÌ@ƒ`ïz¢Þˆ˜ X#mè·ºÖK›½Pj{eÚÃÌ\E8^· :^Nlt ­„qUEѸa²£b½ÌÓÓCŸOJ¦¬¢äyF¯×ç-ïØOfl°(âÁW&˜èÒÈQx[âôåµUŽ>yŒ,˃¦„†ƒ‡H@5^§Ndnë ü»_ýÄQÚÿkÿ²Œ#"á¸)ï‰#[ÉäMÓR¼WæçO–XX xøc|è}ãC)Ýø›-|ŠûÏ ĘýÿâŸmL®Î9¬µü½7ŽNü]n¸þºrà¢(ŠóRþ§×¿±q¿kçvþç¿û~è5·ŽŸ¦©|ê>ÍG?öñ åÙn·hÇ‘þzO}êé¼öo³wï¥qjÑ!y’#GŽe{/»”A1à±ÇžÀ9G»Ý„^¯»q9è+_ú0ÿ¥\°2”Ž›çÉÏ}ˆß¹_åKú*!z ¸†â‡Åû¸ç÷qÏ'F2='gfgùÑý^ùŠïgzzüÈzžç|ÏßxmÛÊç>ùGb­- cð/RˆØ¡3CƒHœ¤7‰Î‡7‹…xÓ/±×Ér2ñè@cEÔ‚xäYïËšÀ¸íïàôü|5(QSÓæÔ×5»dÚMÊڜǟxçŠÒTMb˜¤ìýÁG>ÆkìGÙºeséË `&%°ÊÈuõ_%·)ÄE™Ÿ_àÿÿûÁ¨1÷ ò5ïÇòPÒëÆ6!øÈ~Œÿ±¿½á…ïÞ;þÛ~ü¼øÓvìh®›õªüÎï~ˆ……E~ú§~rì;¿÷¡ßçãŸüÔÄ©-çBY–q×7ï¦3Õáo¾ü{9zì8Î{yô1œódYÆÍßÿ}|×Koä«_û:÷:D»3ÅÔô4kkk,¯¬>-¾Ìg‰ßÓËyÍ­¯$ÏÏ|ú³¨ŠõÅ‹Áˆ/Hê¢Ðð¡K¨Øã–´¸!<6ûöíãŽ;î0×\³$íÇv™^–ÙBNÙ®“¬í7e’¹7¶e|¯§#Y«mÄO©gF•c˜ñ^gEÌì#+Ý÷žW GJÚ]½GºdÏÅÌnÞ毥x)2MßVrŽhL¨4w½gee…cÇŽãoL ˜D…shÜ;‘H4c‰|Vš$Á×À4QÁXæA½×Nñ&ƒ^-ÿs½••UV׺ë{ï×#¦§:çp&ÑÊê?òïá ?õºFøï~èÃ|ü“ÄÌôøu¥¥n·G·×£ÓnÓé4'ç^}Õ•ìÚ¹‹CßúO=Æž={¸ôÒ=9ò$‡>¯|<Û¨ÛíÑívϪª\<·õŽïºò9Øe¬,•U]-œt1Ò#]qY¿`uÐ?0ƒNa7o.¬{Ä/n¹ÁþúôàÈJ‹!ÚBuê|m|®¨W1¨xE¬ F˜&£®ïÏÕ,Ý?öÄxâÈhC­i‚5µ ÐRŽ„Qþ›ó•Q;ެ)O€-]§;­ÔâÖ^ 97NÒò¹Jœ˜\ƒýqš^8ˆà¬\‘%MOOO4OÎ…žÎú3=5ÅÇ?ñG%èýî‡>ÌÇ?ñGLOO÷¼Ûív4SGËuàà½ÜY ÏsvíÚÁ®];X\XäÔ©ùgu:T—Ë™hfz*î¡Xïˆî4+¹-mÚô^Šw¶ Ù¨¼[(—ÏFÚ8˜õЃ¡xÀd ’á¼"Þ‰+&œ.&Ï~Þèèi]»«ÇKn°ÿí¢]œ|}y…G»Ýp¤ÉŽI€™“€£áç««T1íPR^£hk¾Äˆ‚#×ÁÌgª¡¼²è5åóDSS>öñO‘çÁßö±*‚Ý3[Ú,ËJM<Ïrúý>GceeåÂÆ¯uRqNð"jëÁ©’eŠ„–Òc*38‚b¶MÔðvKñzèí6Eu¸Qaw(‰øëõie;_TŸ«¦Cá͈q„6<ä9397]yŠW<±ƒA·Í]ËË|õô ÷­¬P¨oLs¡vÂ'IDˆ‡>Õ5ºxŸLOUm –”`'˜–8sÒ8ÐQ*z ëiÆ÷jOšøntS¿ÿ_?ÀÌôô_y}üñ'xôÑǰֆÓõžåJÃ3JÎcœSA#Šà¡ð`’»¦i“FÖ™'¨hpý8X[ݘíJÿjÂÆÈ«“V7^ÏH L‘a3ÏÀ…cPÕÛ`h™O@|FhH“ÓÆŸÚUÒ°â¯A¸è»ïâòm§éŸÞÌeîå»î¹wúbîï-ñg'VùæÒ"+.®§-q/MTf<€D0ÓèŒ+ÁK‡ÀM‰`"Ô!Iš_åЋ—A¯ó%&Oòçéw8èMݳ¡¾Š1åæÏ~žU¤ãˆÚPE±*a «$®Á/éxŸ\CÃ{)л x8lMƒ ÝAn‘Cîñdä6htb)|}V÷NCæl]Ûõ5å¬Òî ÂZ[ÙyãvÞx×msù×òü{.§{øjŽ«|ùø2ßX\äX¿7¤ð—K,Ñ·¦ÉKHmªqZBÑ ©aZŸ4=Õš™ÞIþ¼t}.г’¼’{ô¯6̆háÉÈÊýø6ó-oæŽÇ=&š´Ûw€ï†L¦˜ Ç!·=ŠÇǶ%8 5Šbxnwü~på~sÃÞö¡ùu\á(u?¤qÊÚäè(l#Áú@D”`s¡u¸¥‰2½"=D¶Ócëu°õºPgY~ü"®½ï2¼‚ÕAÁ7žäà‰“<¾¼8¬C–ÃâH÷’ÀN«ûXµ7©J_Ç®ëaÒô¨)„7«Ý*†ø¡sEËqÃ$‰7Ê雷‡a4–¦ ¢@"ÉB†}öù§§U]2ô´>ª^ó“6-‡fæR‹0,ÏzÇ:ž£Ñ Iy õÚu_²Nz¹l559kóZ¥ÝðB—ߦ&ÅÔfRËö‡´ë&ßÍ¢7k¢[·m%Û¶ðQœ1 ì@@2\´h;ÀJ|oްè Fi<à]Léý›Yƒ¢°äh¼DŠb­‰s¿„3S53¦ÿ) ¤^‘J¿ZmÁtŠ#5Ä«DQ¯àA,I3*AbX|Z[V¶ð¨M¥Yºµgaòp<.]=FÌXÀ«“XǦ˟`ÓåO_fíØv.¿ÿ2¾÷Þ+¬vxhqžƒ'æyté4…÷FPž ê)'LJ¢Õ|<#Íja¤J!µu¡Èô-*%±J*å°dA«´T1£ÍoKa×£HyYD¨AÔ^Ò?\âœJɪÞXËÆ7lŽ—ü Ø8ŽÂÿÕÊ8®¸õ&_•w,­vãJ\{§Ñ&Rp­ó¦b ˦RFŽF5`+Û×~+Nëí´â*) õ×FõZz5PÔX“7ç99ÑU„!KÓ¹ ,–¼Û£eƵÐ) ráÐXÀ»8>+.faºGǃ¶À#êñ jA°„µfaðbÇìiCkôš5 K¨Zf=,-¿ªu9Í %AՎžlÝàż"¨Œ‹f_¬ª•¥ækü'Í<ñ1Ü¢R^õ¢ui(¹éë•z|Èz@‹ˆë-æÙÍÅ#n¼ÛXoó€;زÔ% é:€¶?@ a¤V,Nk«I®›§+zxp›”Ehöü¾ñÎXÀ ˰Jåw =bèíJ_B긼 =M¼wåbÅyÅ{ðxÔ)…è±$aŠ÷ÓL§èì8Åî¿q'ƒåi–ÞË©{žC÷ø%ô¥ËòjŸž†¾K X1ØØ¶¬˜–´B!3&šÇ¡‚f"mE-/È6f…çÑ„ö K^rGW€—ª`«(õ£à•(…9*ðÈ*Á/^ ó>M6 S…* !:Äšðѵá<½÷ˆ5 ž’F—îðM*ÚÌs¸×"³pG€ªÎóˆ:FÓÔx¶Ê0xkR¥)L´j4Yƒ1FÛ¯2:W°e)µ½aMvTÒÐLGÓ dVˆZ^´f±‘;S»î›X¤#ñD5À»8ÌÕ\ŽåD¼àÃë:(ä9¸èͰ€84Vx103|ÎPÌP…ÕbGÐ`¤çlVÅ£N:Q30AË‚u¾Ò2÷x58u¨ñüà¤|v•mÏ¿mÏ¿?ÈX~ôæï»‚åG/ÁË€nßQÐñ4€[Òò¬ÁÖ|~Æ„{P2,ÆH˜0NåKÚ›”]’b1Á¬”ªg%uHC›ðˆÚhÒfCXå§U­kuCšÍÐuHË@í`÷dÒšè  šgx'h5Lƒ‡’ç”§4Áw˜§rÖÚñï×+±RvÊã´³d6óY™á•IYúbuÊ솕‚¤±iЋÂVFD×N0‡4ixˆ»§Ø¥NëÚVM6RµÐ:ïÕwK·®=ÖLÆL’™ªRx¥­µUCT %€mAæØÍZ×£ÉóðHšê,ÓÓkX΃åáUOAXÒ ˆETɇ¶¼Úum²rSímRé?‰æK¥Áö@ˆ JµÔ* OÊé&>j‚á˜Å€F„Â)Æ.¼]ú²Îu”ö|’É 6_ù›¯|Uaõð.î~?_Xœwx D B&&š¾áý¬4ã@õ!)ýƒÉ´õJ5œ~“V¦ö ”ŠCU9ìƨ&Ò›LÄQ‹‘‡Âê#ðÒ1B}Ž.™¾¦›&1…ÚÀMÃ÷[çúû@ €W×ðêT¯¿cÝ+ÃÚ`„RÛ‹u<.—j´ )ÿŒhm5$M†`ìÔÔ€¤­ü!®Š¯ñ. «^-Wñîin=ßäAã¿èdfÌÊ‘Øk¸>ÈSxÛ+Y¿(ýÁ­ƒÈ½9AË+#”aÛ€cµ4'NKélYÜ4‚§ …ÏûX“aUqjCÂJi: 3œÎgaYkrUuH+,6Sí0JMÀ{)A'¼;Ì<ÞBs÷`iáPL–©üxÃç4ŽV\/Ã&@­ŒZÈ$įWf…‘ 37IµòÓU–ƒÆ‘OÒa!廯Î,4€Ì³•ÚÛؾù S»NrúÞ+9}ßsãQïðÒG¬¯ÖæÆ^=é¥ÖS6BOò²V~"ÊûTQë³N"•–0 6µÎäÎkøÔ.cdäy2i $ÍÔfÞÍNm˜êü¦ßúS›ö4‰rÍ|M&^}$6BÐ?iŠJ5º\YKB½¬RÐÔW{T©$óU >ÐÔQP3R³\’ #ñJ¨u3µ*£Á3,ƒ¦@˵ïÖ°$Ÿq` #´ÓZ}BíL59@‡6Ê4iFÉõ5_iÄñ&íرšœ€aó¥ƒ}DÂzZ§K†ZŪB6 Mô9Ôâ ÷¤¸Q§ð¸Š;2:ÆhO±îhÝÌJ_k½g¬l^+µÝ+Ï* ÖŽocù±=,>°—î‰mõqÎãÌ"Y¦XKZ„•0JuÚʾ¬q ¸4}›$‹´ºƒ¦6ì« N‡jz$´f:1 2Ã×ãüC@c¡ß##uk\~L‡Z7§½÷XkKpM :lúž-vaPh¢)ZëÆóÙì8ˆ†UÃJ©áØ …ôj¬Hmd>½HÕ Ž+C“ŸÛ#Ú^ä±ü¦:džk3Íq嬇 §ARoBwQnâÝ"L5Î KË6m‚Ÿ5Þ¥1[jižq‹÷D Gè‘y–1ðQÅ-}y>}ߤ¶Ò¬$Æ7Õ\SŽº‚a&µþ¨!ê*±ˆà¢6 "eÁ×âŠ"6iGcš¢SÝkw>½XUfc7ðˆ'ýYp¼xq–åG÷°øà¥¬¾ÅÓszEf£ÔæÜ…Jža( UTÀEyd&¸#ŒTS}Œ1hœh4)A°¥OȈàDÂJªfá©M_¡9‚*qï=’™rìÇÖ´±IÂâÂqmÆó2¤U%Ó;Ö‰Æèjy ` ez)º“h+‚‰~DÕjNZ²p4ºB$jv¥*'TjXªãZý—*ã&o 4 ÒœRóÒ´À3ò™V¾¤ÿ’LÕÔ¥A )Y¨3™è²P?jÂKLGÔ‡mà 1‡;¤oJÇZý;&‹Ì§áà’q­À·œuªÕ€a-àL¡.ÆÍ1¸NÌÄï8Çdjl Pž9¿¶Ìo¡O·T[yN¤ŒØ8·Ml9/¦>_©þ›„Öžó×(¡2ØfCÕ Rœzú‰D#&nÁ^…•0ÍݲWOβö>³äºmV¿ˆ…‡/aéáKðýœ5í²ÒÐד(k Ö¹¦.0‚V¬Ð^ “Ê„U%žlV7¯„B«!ÄfYXÏ›H­èæªH’kåìV‰ó¦†zmcÂè¸zùfIƒ¬»RxU?F5ÃzuÍ¡áúR6'Õ;†ïëi7Þe¤^5øI%1—4éá|߆QºžKG«Ž ÄjåV-˜f¨PU–¤˜ß`XŸLéz§Q¶«à%ïM¾“éN‚ÈHE6{+0«†ÙE„p‚o¼Iåf¬“/ãtŒOÿ”u–Õ#;Y|且bi]Ye~eÀŠ;ÍÀ2,N3UD%)&Mi2UsÓ¤Ô>j+L’OΣXþÙÊ‹ïV +íF•ÞIFù,i1Cm6ùÄKÿcêFÒ2‡´ƒÄTõË ûˆjÝD¯$éI}Tq\ZIKJÏKÍ/ònjÚoÝÔ,µ°Š›2è –ôÏu¿i}ÊnÝT¬ÚXLOÓwO‹ïµú¨) “€Ïĵåi¢þ(h•²JÚòf^ɬ9Y<=ç®'ßz°!˜«jDš:%˜¼Zd75kAQ]wÚ±6 IDAT—Æš´{ˆç9nt–)VÊÁ‹Ð ¬ËÂŽ . B×§L£TàqÚØ°Bƒ¯é Ç]ϧ’ŒÙÐÃQšUo@ØÄ5pnôC?M&m±2ÅéûžËü{éÛA_ºœZí1ß[a¥8çÐ V$®¤ó¦4* eßM—z¹$u§Ér’\ÉO”ÞIH쌒é47ÂTžæHlœªÞœŸª®©ÕIDШ}Ž‚]|ßHµ~U‡5ŦÖ€©­·Huì ûD p(ÑrQë8«×´Ìj _Z%2¢"¥ †ÊS“•üHÇ’ tl‹Q IŸº´†ëÈ«à 4© å2·á2¦÷èÊ¢r¬×…dš²Hm4}£3jÁ†t†&逜-]`† +sLTùÖ‡·ZÞMÓ¡÷q¢Ÿfák±=ˆµµ±“œ»a=k]84îÍ€Æ97Ç¥ÂL x‡M0¥Y¡GùÓr{t©U¼§Kó>‹]Äò“Û¸óä#ô½+óNsãÒ±‰'üË5Œú¥ÑÓágÅ#ÕT÷vŠ…1H8?Ö˜ú,„èתiÝÁæ‰ —²AiÌ7½Ûè­cØ8°j¼?NÔ*ãÜÉq éëÐлãè\64­kw"‚£ê<ÆuÌÍÍTãór2u^Së SÍi8îká¸ëjR›ì–ð_«8 ̆e%aô õ%MÚim‹ûF{“ÊBJéWõ¤ù­ÆµÓ|±¤MÔ$k”–DÍ-`0Žewx‚òUjx4'ï‘bµ$m}šèP_CγH6´ÅXÛ@Ïq`§ªØ¨ö›¨µ ß“ÖñǤ¿ž†ÍŠ| ŒÄ%V!Ná}9ÖCoboø4ixbÏùÛÊöëáù;vc%˜ ·¶J«Aêjø­ü*©ÂÖ+`²ðÒ»Éx*ÇWe|Z¥¬$­ºJã¿1%x%Ü00ŒÓè‡ÿ7äà58‡ù «whgvÃé4ò6M>Òu} ¤ÁßDm¶êTƒÖk†_ y)g!”«D¢œÕT`¹ΘμäA±¦LwX¦õ2†ÿ†°%¹¶L ƒN• /ˆØ'Å«“ “µ‡y—1~ºayUÏÓè¿×R¶CÏñH‹ é<áLíÜíláÖ³´G[Ò [-Zê1áÜ®8-Å—gi¨5K‡ 0<Ïêl¨Üa¹¦v µÒ6jÓcé×Fîê¡R9q½4$ñhžÆA å²W‘|ú%Øo\Ã]ÇŸ¤ç T?P ãÌhè4’‹¿©|å^ÿ•Ǩfÿšä$®ÖÛª ´b¢)ä”4JUÓuëfðxJ9¦ÆL±0$îiúT4#.ÿ‘QU_Òs­½âDÍ>ñ-¾l„c>©ˆ åfµÁä&@j ½WÓ—“c3eáË^g‚©,É×:ï;C70§å^»ÊjôZðöð 3{H¦œiŽcÚÞ-Ù_b€+câ E©C;ßb5¼2ü¾Ð-åDîœç‹› f´9“mv0«”Q&^\;Ö1Ûor¥çN-ꉀžø;-."aLdd#Å;ƒ«7ÌOlk¨Cá¥_ù#lnʬ©é@6.¸µÎì’œÃúz÷ú3éÒàBpEAÊØô­pG¦êâŠíoÐ ÷E¸Îÿ8)gu“ûÒXV©tªg4ŽôËžÛ§yì/W îšjO…ÝÔÛÜ (ÜÇœ¸ ÚA,J‘€Ë<R=¬MeU ý r¨¿‚9“è´ÛñÄ[nõÙ•Z¹¼Þ‰ÌÖÎ~e0‹:«öq3Y± $#* GÅ÷úʸ¹ùjÉõ·n3Ë\93Û _¨‰$sÛÔ ¢†ÆBß‰ÄøÂ &›^ 3 ; 0'ª½ow­'žûÙoasíÊïþmüéûïàþ|¦<>3Û4Œ²³ÖPÌQ€íøÌîŽÂª" ‹˜j¨Mǫ́ur† ²™=ÙÕpM•” ‹a ™¦eÎÝ´ƒ˜Kt;)„ÁÉþ‚Ƽmf¾”"µjkÏMöþ›¦é€ S6®eËÎÃ(R~ɧ‚PÚš*/7”½òLF_%Û¦¨sb÷ÂÇYÊæH§Ë/–&¯˜Ö£+#¨{+É凕Óµ›Ï@o–=Ë-™QÍPæu YÆÒ Ã¯Ìh "3úX±ã”¡$@³:J¦™¢ä…e‚¬ rMƒ(È6äiU'c6ÎÝÎvŠk:yq(\ x7Ðéµ›MZ !~ ž)Çö ë>\ÏÏÛÀÊR4£½KJôR{)úÁé“Ì\¥”ûŸ¤/{å‰D¶‰ŽßN)·ê |áä ô[¿†ÿÁû¸³{ œµÉ¨Å&2ÔÆ¦BAöú#P©âüÛ ¶ÝâŠu“Ù@÷”ÝkúzE)ÊØ¬Ò@-a.wà+ÁNÌ¡Ø'&þÌyצV¢ífefÀÀ%ñ¬Nä+¶ÞqY™÷—*Ò¸SÛ& ¨Ù$ÝË8÷—цh®>ùÝ\®\îñº×w~ÎØ4€qíîØ§÷Å#{»<-žcv‹[Œ®ýòØ%„ÝÛb*©žÖê-§ËhBz|×–Xè€ÝÚ¢òBÈW9{š4ø¼Â)beØ¡S.7i1„ R:å]{ßšC7Rºá3 ¡Ùºï]"r©=>»0ds?˜˜Õ!–ú8ýq•0]ÖÀ}¥ÅϾ/þ÷ÿ?ýÜÓxöøº¨©ªDxNô3Ü¢©$n±ƒ^S-vnM¶¿2ð"U…»è8ŒèEŸþn$¶Cp/ØÆÎÝØ®•êY²…Ùdõgn>ÖÚß«bˆ» ìqߦæa`{‡´2[ZûèC^gQé›°ˆ³û­ÿ¹¢‘ò’Ç‹M¼¡PíÇQz v&‰§Aè'ª(&%ì ð0MD =ÌJ˜{ú¹h ¨Iiü± i2]†6„„™ ™5°94a±~Íÿz,À³0i6:’¿¨ ™Q™*fàØIPF÷© îciŒau ä¶_±°ÒÐ!ä¹DB^ðÚùoÿÁ/]êÙ‹Âé§ÞÇOýÿ+~ê¹[xéÚ-ÉYf¬€4z@©Å;ÎÎ*`l’`ÙQEÕ´ø‘À5L vâF©t­“Î`Ìì;®Äàãn)bþ˜jK a—&RVÙÜhîX‚™=רÿÝ•/¥3jVìCà¿–HØAqŽö|0Ëê÷`5tB +c°\r ìø¯”Åææ%/ö¼x`OûÆ}wÒŒµnaF ¯i>{àæÀ—åîÁôØžÓáâ ëÏ^+÷… Ý[s0€Ž•°öÛÔabѸú@ä§‹ÑÚ¼ˆ €ÙAìt­æVHvØX<¸K‘ùçÊB½Û¬ˆwÉI‹ïý‹¿ƒ»ù9Ô“GøÔ/ý?W­ÂE8º}_þ å7õ½ŠwÞqù)’RÕwSÀØngYŠ3¶nbãä6ãh*qæ„ @©ÌMΤ€Èï4x²:¤v¾´¦3fÆ@%-Ó³õ¶¶¾!x¿È@fnBnR nðô`–ؤ©hèô`Ø1ªµ|¬\ U;ÞÍ,6×Áþ }‘ÒsD=ª0[25Më‚ürˆ!Wµ»Íïp׆ͧº–í¾§½îêj¨Ä–N7S9­/yžt§$h#¿äŒÊðn'h£¿ŽÒß6ÏØ¾Ú—áñÞ*‡YœAÒ[g1f—w¢ÏŒ¼-…‹s¼7Jšb*†<¬1(8¹£(‚H|ö¹à}ø­/âÎw^Â÷çðÃ×~÷¿¿GÄ\1L×âK¿ñOñé§ŽñÌÑM—Äþáø‡$f0æ6cË;9¢µl!“3Œ3hÔÛ±U•¥Ú„A®¯«\÷Ñ­æ$F†d&]»UÙÀuVv欎ÙÔxðeÓ`})–ÕÅõÑŽ4ªÒvmMÍìX°n¿Æ&sz‡ØN~'3`Ê}³¬¿Ÿïg†6ޱŽh9›±Èe¬}žùàB²ù©n4!{š|µMÎçj½éxZ˜ ‚zBÛæ´uÜIP@µÌ'\5|,•ÖC¯E…*ëš#EGÞ'0•ºçAš?þ|Þˆ’Ë¢C䵘?\º€ÄfcOÞù›xë ïí •†·Îïáßþ{Ø=yöã…éô¾ôÿ>wû&nÔSjÈ* @¹­.¼»yÆnvk@ov?O"òãñBZ;Æ ²9®ëôÕ;t ¥d}æëµt*ñ<˜@²–ªBíµülN?OVäg›Ðî cÛÇÚÖuM3ÙGrZݳ‰í­x¤™ògï­ú8vB;ͳ²§%Aü8)Mr crU` «4 0m¥‡—…̾z²¨€Ú 1éJñŸ½Ý…'ÃðR Ò‚¦³eó÷þ_¼õ,&šÜ¦ÂÑe6–±gïŒsS« vö·krB›”ä~dbÄŸ‰±ã[n˜Y—©¾s!ÌòMÀ®sv$u/„ÅîFö&.ÑÌÞ‡­mën¶ê#©ÁQõ_#øL²þ³šgÁÁ¤43f4R21Ì 3+ûýðØíu9nÔM£ Ú ´YÊ('É1 &bl(Ü@skÝ$NgãÆ¾HÜŸU)=7ÆÜt ”©*:áA1•ÖÛ§h]-[2ø°õŒî!ya=Ò߇ú š ”Jý6ï WYâÀ¤ˆz—¬:ÛÀmXžc±¹ sUöhyF¨o@YCÎ×ÞúÙµyÁ÷iLHª¯O(ø‹ÛQ¸ÈØdNÄ¥È>û˜Z—ö²Ü]+ïëJò1'³„³QZ¦Û÷+àIÂÔÕbºu”c1WÀK¥Û*u_ kƒ©KgP7…Jg 8v"êf±œÂ›Á¦ž$›°ÊðvNñÝßù N³ì±G¤ûÔÉûv¨Ñ;»ûøîïü*æGWàÝ„ç~ö[øÔÏ|?yóYŸ%kLÊÆ´.`Âúff4’gÌF× ê° SžÃþg3ŸÌ1 [ºèæ¶^–e+Q2XÝù—.²gpS1û‘17U§ 4›ž¡iõça¬ë-±üQe”ë%4 ÄUW ƒ‚£è)jbk+eª”ºœøVpã”2aÍ?ÕëÆØÜIœ¯Q0ŽEò7…IO©‹¶²¥ˆÙ}) :¤øÒn6yX8û, Zý¹1¯¦ÖŽÂÚ㑲n¼û 0<‹6sä$+~ŸèÖ Ö@Øfìú>+?hĤ±PºØ}Âè¼½»xßý§_Á®ØÈ0“ÍÞÒßS)ØÑww[¼ù{¿|°LW /ÿê¿Å³ŸŸ½ñtš± FçŒÉÊâ“ךý†Ÿ½ëLPJìqz‡Ùá$ýÖ‚QšZbõLV±¬)&Wzéß÷å€]{nÔl'=»ÎP°Ëq&Éù»È.72:}¶ÃLÕš2¶3•á‹gþv«L™b2‡Sð2±û°õ%ëÈs,™T¶» Ö{88;Mùílslê LÛ†ÄíÌ´«N!4Ø(Ké·J©ÀÇñ¦{â€çtûkìDŒ•Î4¼›©½½·o@Œ`jd÷º¥0þR‰eZˆU´bÃ{÷µŸÁ£žNäÈÃZ‹no%ª¬4”_)¸ÓÎp÷;/ã£ï|ú‚Ú»Zø‰_ÿ<û©Gxñô–ƒÚÜ”å%€›õ÷œ€°5a€ ±Å‰í <5®ƒÓ²+I2Læ6»½®kÕ¶ÊŒJŒâ½ ºÏ9=«QÖ^yÉÙÚdHhÈÛHùĈ>k×, ›cd¢° +œ¢7o.?ÃßbRHõb 6°½\÷=³ZÚûÄÞi3Å¥'VŽÒƒÜ>[ ¶¨ íÓƒµNRÕª@kŠÇvÊf…øäìãz'+×ÖÃãÞ…þ/ ´¶·ÑN3všµ™+{Ž©·— €®¥†+ÙˆKñ›N¸¶7ŸV¡Þ†÷ð‡ÏâÝû³h×­#ȉ½¡ÂDz­?wâýÝC|÷wíü1œ‡öª ?ùßýoxîVÁ3›:#ËÎàæ––œ±¨«6ù°Ó Ú}rC¿ã]õÌÃ7/«¶úS™] Ém“©=;CÚ=·à w§¤2y2»Gß7˜°Ä1´ážûžùõ †‹©ré÷ri׺¶ßT*¨L 2Á¦ãÄïmrûs÷ÎzãØéÈXÛ˜ïð¹sÇÈr½0<–~¼ä(«y–h¹f³ß«¶w,oy óÒP:âsQx À;4`eÏ] ÙO)&2€Ãln¼·žÇ—´¼úí%úBžF'±+ È ^;ß໿ý÷Q®¨9BÝX”Ý©j[õwQ¬¥`® wŒ·þðo^X¾«„z|Ž/þã†nœâZ9Ac9ŠpfRõhÐaVÖ%‡GµíA™ŸlíêMI“ °¥ÙÌr“6u2˜ÛÈþÞà ,ìÎJ¨@ÆÂæAØí‹ÛÒξ›YísF× ÒºßÔbå¡´©­õF¿‹÷ÐW5‘,2ÓmÍ”ãÅë ö·×ÏÎ^H3ÛybEŒ±J§˜‹X!umŠc>¤—Ë‹îƒá;Ùf‡¼x9t\ !èï/qsY¯qm_óÊ_â²%ÀJÞã!Þ“÷ã’@²‡u6¸ü–DÞFòÆê¬éòm äåK} fƒÉ‰tE…ÉͰóCåUjþõEÜÿÞ§qtk¢‚Z*HÕÕ¢à6UB%¨íŽôSâžB¸‹3|ïŸÿ'à'äláÚ‹ïâ…_ú|öúmÐ ›­m>y1»1+3k­é3½k{qkÎÍêɬ3¼¤×Šøò¨" ŸY,= ,„ZÖîúw›ˆ?_tvÝè•«€ù’%&Ù>Ë3H›[âÈ6§QÅÖË€Oñ”^± ­HgYëJ uÛÆ·iWûXœlj :Æ´/d<"-Þ_&‡°þIÏä LÅ=“ ³Mœ²NÓƒ-ÜÁ"XÏ yˆ8ÄÕ¶“vA›Ø’¾Q\e.¹À^W%À€ªŸ°Ø`â—±â}|À«Ã7–§+Ô@×ÇçöÝ[³{ŒaßÀY¨TŹ›|³Iy€ˆŽÀ¸óg_ÀÉ­clŽ¥áª;€HT•¿K‘‰‹©ÖîÀ¢{¼ÅþõÏ¡mŸØf5>ÿ_|Ïœá´Çl§²1™ÐÛËœþ‰I‰¥ œÉ´h´ÑŽ ³ÅõÀÿžFk–°Q½é'ŸL@íé+ï›íÉúI¸uð‚=¹»È§QUOU±ª‘èeÁÈ6Â0ì@¶Áìk½M £™Z0[Þ“–?Xæ’u£chDÑAŠàêòÚÇgÎù”Ò‘O^¥Aˆ{j¬+{¬ð ùáí‹.2VðJØk?©ð7ž—I SÂL*J uæøVÃéÍ R°‹™Ù©Æln%R^í ×UŸ›jÁT*¨ghøáÿõ×/_q— õô Ÿÿ/¿Ï^»-Ç2:Kãð¹3•¶){%·•°ñ²1¼<ë ÀFÚuàSˆb¾>©‡cXš%Ã#ÇÁµÕõ8²¹¼ú@¾ûIEœ´.”W×âE+«ù2Æ·˜ÐBÅëÊœ?=èùõôYÚ~kTH,_zîCê‚R®k eÐɰås– 3=¢1Ø­LîF¼»¼WÊ“¼ËzAg5Å?¦¶-Ápx·k }3fýK>Hm›¢,@cº]ÝSˆ|¢˜º:UÜzöšÏÄšêœ?•dF¶è´¼íFav¼Z‚ehÆûüÓØÝ2;ªäpýÓïàùŸŸ¹v»›Àرì„,Ë—B%m̘Ar“2ÇA+bŸ#øj”ì{Š|ûìuW/„öM¬em+=d_<<ãƒÖfyó3‰®ßÂ~Tˆ®½›ó4â§vfËÔ—ç ¶ceJñ°X¾z'⑱ÌR@OíqèÛ#Ômrÿ@JLzµ|_ºÒw¨Ÿ*ô¥pÝóêôþ?Ûê áôZH– Þ¿lü¹So Ó\c§ÕNúÉ37ŸÞ N!ÌÕ„à€´†¶ˆš+àVÅx[Ä¡¹Ú†NtPÎhÆÛÿê?~¥®„ÿÖãÖs÷ñìÑ ÷«3æÖ”•Í ê«“já¬Ìøq3ÖG[Q54±­ÞAÉ] ¯ý OÓØÖ²™*í; [f4£¯Ÿõ‘…C,Áï—é³Ýµ,£wA~ÎVcX½-˜“Õþݧ@™¸wªÂ82èu ,Ñ€( 3O“µ-·\³úZ¡àÂtÏ~ä«2Pl=O%ÙÍôï`ÚxW×£ÙØÖîƒâBIÎìFÕô’³2> øH€Ï:47Ûp2†ªÇ™:›Å7Õ‚ZeEE¡"öÝfª–ö=Uq+ÙzÝ‚í¦áî·?‹Gï?u¥z¼T Æþ«ßÃó§§8¦£¤¢†c±ûßµ˜ur€OO$H*O º¬Þºo¤?³¿QõÜLjÄ~§ƒá0œ`ç໯ :fcþ{Mö <2ÌNuÏñÙÞ™…lfS„!ŽáÜi@ˆú pˆïC›ÔoLäõ×­O#&<@•>èFDbÎÐù‰È†|Xé=ÁTþÜG,^ñ¸¬`Ôàsûïã1¼óRl£_Ñ(Q/¥’qíwüŒJ[“‡ sÕ„ 8 Qûr@±5˜zkú>zÚ„æWJÌ>U³ë¹Šl.+UVb(Ë;¯ŒwþÍÏ_º.®¦ëñÿùˆ« Qhé‡ †ËI gDj·ã^pø uÖ‚™ ìock¶;iCi›Ìàò3ËA‚e»qÚD•€©E‘âµÏ8àSX‹¿c›¥¤ÈeôÙëôîPV†ƒ*-…-yÊ Ò×WPÀE°Ë\a¢˜q¥ z¹MЯ•]YÓ–ÖÒq€Öo?ÎÓ'.Ö6‰ºüÆŸÀZZ KÀ ‹8¡{~½“Ž¿WÚl=ŽÔÑØ²•ÚÙHe­~ƒÅ‡Ì˧ðõ~õm½áæ arðÙX¼²1„­±M3·S8)›ÿ^%Ân3ã£ï½Œó»7®TÏ— 7>÷žû™?ÇgOowê«©°3ɤƮɵ#¤Ú IDATቶƒJ^R&‡á¡‘NxS·l0¨iÀ¦º} F³Èíæí²>° ôìP!†+ÁýH¬Múöò"üqX‹õ€Bqè³Ê.Âv•}ù´3u *²‚~ì¦êýÔâé ৈ­ €> ør\šo›!Ž\CÓNï3Ã%í$¾``VÌùo^}§Ë¹vk‘AÎ9Ѻºïr€w¥…F¡õ—W0¶Öš ;JmCßÏn£â•IÉiÔ£c¯P7¾FD>hCõE€žÆcÎÃÖ ÆÜLÅ•ƒHìJ›Ql^ààW Ó¤>{•°›f¼ûÚ|•J¾RxéW^Ãí§á™Íuu2VS6K˲ÍNiÛ¤‡:%Øa°3ië ;¥Ë˜ÚÅ:eo7Äm¨ 2@k±#† %õƒ4P—쯩PªÈHÜ«Ùǘ¿Îôb“r@ ÉwÉ;›tœ€Î>&8Ç`ì™|V6ÝKýÕ>k®_Á²)¿œØšÕ]½¤Nv;ÿ8¹Ñt²;Ù2²bìê¡+<¥:"îV•·« rw4îzkY9”¯¾aÉe)„|b»‡¿_F7_Ðy¨@\yÆàšÚ›Þ~»·©yíëÀ°cД‚ û+ºÙ€]+ñŒ² WeÓ²3óËóÙÝ*ls·‘•Orϼ®ø…ñ…ÿúxþø:64u#k'+·8‡È·Ò KÌÌGŸcC=†3²lù20ÕÐ!v/vÁeûâ­°{l2ñí…Ò󾆴¯!äu£Ö'-mqk}5_YlÈÊ ¦ÕM.r¢z•2Ò´>ný2À+Òõõ²ú±5 #+ÍÄ\(ز̥꽄¾n’ Xš+Ð7K7v¢Öð˜®xWRií¦lÁ¤³ü;g’CÇàÄ,.Œ_^èÚÝ·ûNÏô ·)ðð. lÍAŒÔànƒ\ð˶ò=È‘v”Jºò‚ÔWØJ¬À µßåM 6ó´Ã{ü×.,ÿã†ÍÍðÒßþ#|æÚ~B"ÏÀ*Ë3Ö·™"™­k`€›ÞW^ÒÎo3Õ\»+fƒ¾­ˆ­ˆÁµÆÒ€XÒØÀ¤Ø@36ØÍ.¸UæxൽÙä`· zëŠÃDà÷z¢:Ì`Z† Îûï(è@Nèó-ãÎLM×êUa?}>¢ ä`G™ù&6G]}hNºÍ’^ûŠ[Jîdk‹`u‰¸Gi²XÑ6•†Ÿøõ?À G§(P»‚ž1t­)Uo[ ó£á[þžà*g ÎrÁå¾a}Þbÿ8ƒ‰î}Ž:»<Ø -²ômØð@ÿ¡¸u3²ö`;QÔ5PóºHÀ²¿ æÞiØÌ)£UÏ„béãöRqzTâ Kû@fBѱ¸¥*ÚÇ Ë$fÎƒÒÆN§€`Øø ˜’Ú=›ÎÄ0~rÉÛƒý8fi/~þiî䂈ªD!@À­Éa½^ß‚®<¨-;ethÿôÈÊ`|ãF/@}´ ékœž‚÷sLójÐE}›XþDÀ½Æ“ËŠ1?9è‡Ü¹®T|ðúO=¡ÆØN?õ>žyõ/ðüæD³®ê=! wk©’¶L@¼-Íx>Û‘C°€ÌÀȯ¥µ<ö%ý¶ %ÉN ÁÞ õ\¹+­‚WO‡®«ƒ’€ã€z‡¡¯R6·˜ßꋺð‰‰..ÅòÎi Ó!ÒåEÞ€•Yp/zZáa£Lÿ"–?òàõ2ïnã5Síu‘:9¼ y‹¨£#ÄJ‹‹†ŸŒîTáÿ ÍÅ;uîXqß]t å÷J!0ZHÅ}i`P=R(&¡íA‰ÜB^‹k3ŸÝ/žxt\bR–(n(n»,Eíð¸å­¼Ùaa€© ƒO€o í|ƒr´=P›?¼øw^ÿø ܰÁ3l¸: ˰Ân¹P–ÂQV~B´çB%ÝÓIÖÚ,3¢ÜwòþxèrÀ©ÑÖâ=œFKiÐó2l"‡•Ô‡Géooc„9îµ¥‘¦‚¯Ôúó3ò@Тñ¾:É,ÝÆXïëÂl¥®S¦=åN«òü±.v•´Øï)«XSµ”«’ÅË>¾~†’÷aÒ$.tKùÌâÊ'â–$‰| ß: œÔØîz¾ü¼Ö>ÝŒ­ ¢Ä¼rœÞ¥Üá4©F)ŠüÛ·+Gøî¹}OÁØ6ú4ðtÛ+kr)o†hÏé¶ØÇ3î¾ñɪµP¦ŸûÏþÏÖô†çóÕAý3³®¥™†¾p` ¥°¦¦šU]¿ÖÑî}aè IÉùz³ˆÝ[ô9Áݧüg· Љu[aÍ®Çê§g¿¹.b7Ò †˜ÿ6¶hÏÄäD윲Ìcƒ.iBcx?׿õ ©Ò^X>Û¥c6dµÛU`9E{µ°x/=~„£12–}ݰ{'u”îðá«äK¶@0öv™ì˜ª éFý,,Ær•t°vTveCi8ÆÀ‡¢ùíÈ–IgrçºÁ‡¯²³µ®æ¸ý¥ïâm¤ŒÅ Ó: ̇ZrØ{66ö‘‹Þïm=kéÇï6‚ÍÆª­,þ°-#¥kÁ—Ä%07îˆM<-$ÁJÉŒSÖ˾è³^O[—£5Àt°“Â.pg^¨8«veÕÇJ;w|"ß¶ú"Ââü[{OJ€mþ^ª½þ)€lu°§i¿*_“á™F|8#æ$~‘¿\¹£xGÌq¦E‰Æ.”˜ ùãÙìÖq¨µ?ŽðòWþO\«çèNhÝXo÷ÙöNmLã ö\?ø×Bß{X–ú# `‡Y|{•ì¿u Áu–@°Ÿ”]ê~äÁš€ô šÎZ9òvY] ,Êl:ž%·ËŸ—+>¢ÉØN߃‰3Ù# 8ÕÉhVÈ 5üùRþV–žPÈY9˜¸ÔÁ´ON¥Õ˜;G  âÞè ìÏ…5 ¿µÁ¥°Ö©/#9sΘê?ht(N™·†„.Bwº{+ŒV¤¡u8Ál:#h’Æï;§hZq8*@Ç w?áÙZ õèÏÿÜ7q›6ê? ×m •ÁÏïIY›óaéý6HŸý¬NåÈÎRš=ài{ò[%Ù>–ä ‰P‡%Ï©oú xZNƒ[ûŒ» =& À~`] RoÀg‚u) ¥‘f6 ¿7”;÷à7NvŒ ‰¡^SNC+ $\JÌg¶¬—tß×=05Ø$°»Âô'ïð¥#–ý-;ñ(íº…àXgæå‘ãY‹cM"uÏlí:æ†jRiŒÂ;M°KßNðr€0?0h=”eyK)â/äÐ=üK°¤R0O>üw?…§þ£oï-ÏÇ çwnâÃÿE|ðÍ/a>ßà “¯&)]§VÐS@)YÍ˜ê•Ø-U< Ù߯˜:¾½;´ p>ĸ{.7!§ Å€k¼gk@Ø=%™D"¯öû ·8úUE‘`G4ÇÚ=ý¹~B/nß_QÝý+˜^þ߃9s‚µY°Dè˜`96wÅW—áSmòúó‘?% E*[|ØU 0 ûqáôØ=Z^“¼R0î]fþN>«fQR‡ÒN‚BH;VªfÄ|tôÎezUÍäC‡žÑ±âÀi¤cyQ—¥5ì\‘ªì·fkK©YYØf~›ÄSÄMω!^àSƒ·Ÿâ³µ»‡'¸ûçŸÇ{úeœß¹‰‡´Å#4´é\ÏÐeUw–¶:)­É®éýÛAYQfð zHˆí`ÒH‡d1ÌM„Pß~D1a*Zº/i”ô‚õ?D>¤1¥ošYê=9X•4zòÅ©ŒÉA7È—Ý’äXôà«à’ðd­Û[=Ùý¨/v 3àr»aÀÎ?1ÅÙ“’’ÒN¢bLx?×`@ª­`}\KŒ Ìýf³æí€_»ÕýZ†'Îð˜e[žQ²›è¢Öh|ñ:Q×¹‹V^Ôi/m-,±: Ѱv)ùòV Ò}ó¯½TÍhö~dÄøhá4ø¢Ú+&{ ²U ‰…˜TI»°h©œ4ÜýöçðÔOÿå%k=p#Üý ¹‡?xg嵆óz?¶ª"ÙºŠRç#ÒÄmüi¹€ŒH÷Úଖ¨ÊÉ1ðE=äðfðí¹¬cdg°‹¶Ïƒ ŒZ¾<ÐTýiHêmî h àSKòõøRbæak)Nå¥Ðÿh¦´L~BD_.ýK*BÓ=yÂ;ËÁÓîN‘G'!¨¼]f‡è)å5mÏ…¼xª!ÐüÝBh@Æ#Q'}š^'*RÝï­˜§ø}E3÷¼~Â"…­º5ŒèõŽåŽ£×G*¾¦G2‡g霘0ÒðaÑ–WŠsU•tYb7±^fwWiÊ2dµ€Æ©û‹•Y®Íõ÷ÞøÌǼ{ßù4¾ÿ{¿ŒGgwvŒ‡t_œ¼+ù¤I!9]­¾s¨³¶Žâ< sWp8‘{¿&¯É®3Êl£ö„ì34Tk£kÒßïþ™Ð"ù c³·ãÈ|$ÿ½Z:æÛohpà4°ýæ<b/Ê"õ˜ûbäUÆø£z:ÒÑÕÜÀÎ:CÊòš=4~ lÖIB%OÎDJ xÓËúœÿ\iMæâxWZÕ³ 'p5÷&€;kÏHxâ ¯_]Aîõw:[S+÷=›¿ÇŒqX·%f—éÚ@þ_ŒEÔ U$À¬ ·iÓº24¹Þv3D‹ܺAÜS˜š€ø¤áÁ;Ï_˜¿µpöÁSxó÷~÷ß{ ïí¶8+gîrR“&~Ä$¥œõ9›]öõÀTâïnd„ï•× pÈßD#8ìB¨Àa«4ûî©IßFLgU³ø;©›Cü%û¤Í¨aì ²ƒÍvål£DRÇ͆éé8µø»¸’ Ú;ókcÄË3¶Ñ—38.ãYw*Õc×1éÒ=oìÑ$aÒo¸€¨¡œ‡ühl¼Ф$¯ÿ¢pÀ;ðð§D‚ZçUp…2‹Î”'òïε!©&{Ó/Öi–ÒÉ–â¬ÝeâαæüGCÇ`C )%âRž ÚQ#ò%u3àŒ soÛ÷NÑvÊtÈ2a~xŒ·ÿõ/àGöÜÁ÷Ë#pᘆøʆÂêCäÌ-Îå¥nÙlxVîã ¨š±Íùx-¦9ºÁ*.×]V;åšÎBr‚Zoy(3ª±¼mû¾5j™—Ûä…‰ÁW«¬|Èdb䈒šG)NSyW‚k;ÊèÂPþ‹UlZÒ ¬2ƒ¼x&l™¥Ë?0âu5hK–¨±·P…9:‚d"w‡Üý  H–Øž•ׯ0åg.ž~«¸2Ã;†›'tÖAÏvÃÞ©:ivž5€Õ‹5µw Ú+$&ÍPGÉÎ-=ø:N¨[+_¡aÐÌÐNæ«'%…©+nS*š'í…I\Z4Ÿ­1¸è$ÀÉŒGï=k/¾»?SÞû£WðÎÿñ7ðfÜ­dÕ™ŠÚ½Š15evvV®¨¶òL¾– σNiñºÈÄ¡o·âmnv¤‘î/ÚÖV¾„‚}¹'³ùè‹q¶FÏNBˆ5”Zp02µ”Ÿ¡æÈzÍó°upEàQv?íÍÒ§þSxDX( ”ÊðhToÇ6 ©±Ì.V†G—GòøåÿÒ2Äöw€\Söz/Úe@ï:€Ÿ¸ðn¸A"}h*€|0ô’9‡{ðx®øîïü*î|ÿEÜÙÌØÑ °¨«€t0|÷eq; ד¼)êîÙ¤…©²àÞe…+2cvV»¬ó:TR¯.ºÔÎmkY}o sÛH@ÓW¾>¯ýÎÙ|ØË\•JÍ›£É„0{rž¬«íÛ;¾ÉËÕïvb‘ÙU•ß±)©õ©j4­/w]3j¼ìÐ&/ØãÊuÓ—!¥çþè!\Xáj`5b›¸ê]eÚFdþZÙn&÷Ã¥Íz~?« Ø$– UXœ\ 9m¿:g²%Àލ‹Óúf”C¬ ?´IT=ogF¶ÿ%Ï–àwßYâR¸ÃXF8@Ïjƒu# ÿÝ·e&Y¹\näÚG7+š&4R6ئ‹¸/ƒ¬2"¯ƒˆ„»§×ܤ~b¦8Jâ%ê I_8ˆ_ KÇ6ö6à pt…éÃÕoi"®ó#ê=Ù©»$»¤öäp‘î=¢ó¥ÊŒïÆAW%Qö±Aý½T—bNóI¥¿t˜B¤LNæ‚"tr8¶5|©ÓIë&.î~ûsxówÿ.æ[ÐĨ,bÌ.Û.› í£”‰Ívç»µè ©>¹¡u§å§RP˜òÔ3(²eLŠkéM×^ÙÁƒ|leŠUªÌ”Ž, ùË ê“ä#ò•Û•¨?Q­k¼ôœÄm‚.?kZÂØóAô1€”}Æ™Òu2!ëÅëíÚ9a.ʹø¿8ØX©œ¾Ïz]î3e¤ôç¤O3àNë†ã=QP•†û²:Ø»ô“NW6'æšÒzè”ÉTFÒk%|ÀÝþÒ“ax x3B/: °ÞˆúlöºAe•M­„f$:rüÙÊsã3úÜ(™l©OrXÞH˜› ÖžÂÈþ¦~ F3Õóhã÷ß|oþîß=}Œ:  Í[¯óN&VF1†‰w"† dqFÀ3[ç£ò%t±ï_бUq²¨ä"·S®× £¯W®G{4ï8h.›íÂ`ïȷ䣑'&ætÖë1åbåo ` ¤Ö»‰e޵íV&1äÛÀˆÒÅÌ8#­1‚HsŒwßXì]¿¸áÒ^òX¤¯{ÛF;» f¯˜‡Zö2?p–û„TZ¥œÍo¬¾¡"K0Ô ¡¥d‰×°šÁ%µ_a„9ý1AëC}êž-ëy›^OÏ 2³5 ãlªÐÎ ¢P<_«Ø÷êñ¼õ"®½ø.¾óÛÿ›§OÀÇ: õ]ÛW–Ny¦\…2© ²âò?ÀŒp åñÅ C1xY;ñõëÉÂÏ·ÕawT~^£lÖŽÅTÑ@@°»±_­2»Ô/¡­ãí9ä_4ec‹~؃w*Ÿ^ë‹1P†—ôÀZH 6Öu6þÝâdø ‰¾Äšc͹¾VÑ%\flÝŠ£}™÷?ôë!w&, Zå^³|¼IÚ}€÷2ú³LxÅhXjûg¸bšyß=DGEUÚ yU¥LÌn!u=Îp†Þ÷¾KYJ ™âÜ7S<ÎÀY²nW³ K_‹ ¹1Ǿ{M„ÇtRpÿû/â£ï½Œ“g®£œ’¬£çEiÚ¿xŸo,~~Tltɳ¥ÆCøIkv°xwî.ÈŠîOVR½ä²“Ö¯ƒºç1º;¯»¤¢úDEjÓ’ÞÍÌ.ó÷…¼0üv–¥jX·¼kˆzq.ÛZië_†9ÑŸ{&Úï[†ÖWvׄ¾;³P^{KK¦èÇ?"o·60çŒÊ’¸ƒžØòz0ô_N|ÙÍ} €ã©þ‘Xb_ÏAÜtV+ê,§!?&Þ=ÃÛàoÉÂ6„ñÞeUÕµø/Cù»tÆŽ¼þÂꀾ0î!nt—'‡zCê“fØ„Fka3PØœTÌŽqúÂŽnN˜Ëf̨LîÃI H\`’Q!ãê|m¥êüêôº¨±ÅždH¼Õ“k àÊ`9Îøp@pn±¬w»Ïa—m¿4#f‘Ê™ÿîØù ý9¯{û©`É«ºÁnmÚç袾5^ÏËì2§^Á8ÉËê—] øÇô»¿ÅØÒžÅŸA^˜dÊ{ªùHÇ&,04’@ùßÅßE­@Û˜€Í|å‰Ú©ÒÆáÛcØ×1ö1±Úy÷žIk‹{cúvï@ŽŒ­èÁ;ká2~€9Ÿ.]€D”cuÆšÚÈP ÇBgRu©ÞOŸ`º^ÁL b‹3’l?u¶Èpfç¾tL *™!í ÙN'C=­œ€…„­HŠ›·g+vADî£è€·V—«ÃÐæc=¯±µÒÒß Ö=fùi`OÕF™2É”n¯Y\NçÀˆ<­õu Í9áLhAû3áÓf}Ü|6‚p IDAT˜‹ˆÄ°/ìë’Û‹?¤$q&ÈJ[ï7W¡¨Ù8`_&`bÄV)Ëôæpãê"!5„÷]‘!±É.Ïh®Ø ¢[K-ÔÖÄlB îÄ à1÷v#{ݺ[–ˆû˜j§‚ Áqº'GYó¬çFì¤'©‘ìŒG²Œ ÊÞd×à㛓vX™ÌàÆ*ÁI;©ìÊ"j²ªžãl u±ˆ]™ôÌ×Ϊ*Îñ@-8;ÇP;šÙo\E&:ä ™oô=³bscˆ=èd€*,T=-›%‰²˜êÆÝ6UžM·9ޱbµÕF]Ô^JvÆÜwÒw‡kö/C?vD ØiwšW]£ìöI$[8Ö‡»±Ë€«Ž3Pg— êó,ýÜÆwmSÿA}³V˜¥×)ê˳ |H¾x«ÌJøDöÃП¡BøÁ;z¼oLbUÀ0V¯û /-;WëÀµÇF4 ‚qó‚…Q8}‹ÉEµàîµ ÊìeЮH²ý§58‰#l¬‘̬*rJœ,ì¯) K½ 8ÌPZlÞ@…eâCó 褠;³È8/°ó €BÍã“ÌJùêƒÔ¾a«S×—â¯Äu‚¬,ÉuhùÖŸû` —Ž*´MUs}Âê1£ÊºªBÛs\cê¶6,ñÌ^³BÈ\ˆñ—Núx”g¡Zt)‘‰ÎÕ7¦Š€8Ê“c̰A yŸêltܳÑèò%À¶Ÿ#…˜pâ5Ÿ™œä£WuW€7KƒþÏ”W¤Ê÷JlôÚEËhO,öÈ}À[é÷W¼þdOÌJ½=Èà€hß¾wn$²¬L²*Ó84y`ñhOgH¤oØùL©Óš¸#8ò¢)»"›1ß‹í bl¤– ³‘PÐ#“Ó…À³eƒTñ…²±—Mµ,Ú€ªNQ0ƒ‹¯L¬®%E•‹¼‰gМ`uÄŒYæzSÀ‘ìè ñw2V™.m×›k¸o“0Òë}%È@‹,ûIeòwéú° î» ëp3ju0ÛîBž¯|ÏÞKí³?ú^p÷ÏJ–KöDE ‘ÃQðصÈó>³Eâyi¯&¢j4­ Ì3@iÿOåȯ8Û[À“dx…¸€¸u•µ¾B!wø¬†„ö‡5¢ø¢ï˜Ú–Ç EÃ÷BNqr~2'—ò`ö“Q5ðæ£0𛑠¬HŒ ªjÊ;N„L5U[[cVKj¨¨~’›Ç~°NÙÄ€u+vñ&ò]P¸¯ÏÌn£œò¤Ó–Lm×[þVaáË—ÈfÓ qÀEú›‘dd °táê…ݸ·¨Ý‹P÷ƒíôuÒMJ¤¶î»|zÖEC0÷Iq.÷ÀÈBzï$ÜŠ¶3<°ÌSªï~v×òÚ–3Ø*À;²®£M–™Õ^º4aeîC]h`ÂŒÝEbdoxlÀ›*ñÜfn\¥s/½ DV8c#AçcôÝÚç0s¯ÒñÁ- >„] «øÁ1·;/w;C=$Q}@vL' WJ?4ÔRÑxÖÁÊàT.nbÝ)´i‘žÈäDHúªbZÜH˜áßZxeÊv`Q­Ô7ûä‚·«Çª‚·æ™—Ùæ`Ì>3³[ÔŒÖ ¶Øšþ™º]8;0>VHÕÙ»æŒ|„ó¬a±ã„IÇqÑðÛÞèRÌ…I0fµq_¿K•rѤ‰Û‡y—L¨»©€O‰zè³B‘l}émo¬»nÆÙVÏÕRXŽÑ%&.ÜÚ»ì W¼©ò´cFç ÌÂ1l-¨d ý°Ê‘_¾åêÒœÒg"ÛM²oD“º~8ïxkñ÷’G®”1·Ðš~áì#a­#v¬Õ2ž(|aë2*¿[IY^’õ»ø24¥°I‰ã1ioËöÌήIÙy„¬NS'tõ ©£KÖ+Å<£µ äþxéÚh´ó¬Öïž0Öñ¨ û°½ÉY0Ú<êzòOÖ ={ÅÀ`2(¦Í茱ŒŠÄ¾20÷õ°ñ5ÊbeΠ‹(N_“.é—ª¤^j)É%W;«Kdœft-þØâ&¥˜úÈ@8¥‘ƒ5—÷õT/s+0Õcnh|TÁófV/x›*hr~Ž]) 쀨q“Mи€ym;DÃgUv­3}'±ßyR!Ç׆ 8H„Y)&KØÚÖ˜öàÕE3¦»z‹¼s4ž11äö¤TX÷Ãsö£×)]oölB2›¿Ê~o̬L Îh+UdK(Ï#V–é)ú7ƒuYÚ­­ðHB`¥Í°U7….ÄÔ» VZú–ÆM·ÙÇu±có2Û1 bKƒeû'Ø"¼ÞÙ­/´ÔIçD‰@,³ª­Íž¿Æ@i[Ui‡w€±òÀ¶{²Ù`ÒvXƒz Ó¼uB„SüôÕ}Äê.UƒÆC]›gAÅëõ=ö"µug ›Êi,B²›mQ}9ЕÓìŠ}yYûŽø ƒíÇj¯g1޵=zò ½ý—sY†„àGäT°ˆœlNÝÆOL§yPćiÌŒlzp’rÙ!V¬e²uÏÙXîHLf žÁ¨¥p+Ì»y‹2lÆÉGÆîcLZðé ß;7÷âG’éºá©ï„=0š” 3# :Rg+lhØ-õ7ƒ¤%˜ÁN6nd_ë¹/H\5â÷†Ó=H#XIzÝÁŸÏñÚû›(‰Ý{’Í"ìÔ u*Å ¶g'~ÁÆ‹¤Í­wí!@Ϻ­&Ü¥¬¬¥+2h‹ª"Y37Ϧíìê?œaJ]ØÁÁðuº’—Ò¦åÑ`¡æð˜Í6Ûn!²Ê ØŸ'`¢£ hŽ6¨¥²I_b²%|6Ç­üÞ˜° ÙAy;Œ%½cõ6e`ünÞAºìÅ5A‰ì,=ÎϦ4¼nºg$BWïµÄìõÑGd§ÐxUÞyùU¨ä=â8Iöm¼àó¯øJ$µnÃ{ó{Àñžºv“ïmÕ®4MLó9£VF›Å°µV­ ¿o}÷>,-­j†Ú]VÈŸJy¸ËXWV2gu™ÙÅ3´Ú!÷æcLÃ_U©ªe2é—¯åÞ-¹ /Å¢ïhWjà.t峸lbÂêEœ<íyö5¶š½´*”ú¥l²EÐÍÙæ«é/åòs‰ºûßÝ€Kg\òe>ü¾—eLº}RÖ0¢\¦‡„y¶cv|†{à •zè'ÉlZ ¥Ó~¬Ílim<Ynv“ ý˜íPØä¸X@·Â°Éÿw˜îÒ Šª×(b4¡`PY æyG\¨1P ¼©hmª\ω1¼Ù0>Ú¯÷/½ÄÀÛþ³Ü_~™àMýù¡]ßnG[I¿í­2¸0oÐ*Õ ¡¡¡´y´;tiQó}gEGjb&Ò%B÷i°¼¦VÈs~âcø¨ýÉ?•ÁU©²;Oßó‘ʤÁÏü þÙÌ&B­H¶/-HA•Ù+µ›Ø"|[kö@Û¶lŠºî–:¬7F ä®ãZq¥ÌJñäºÛ‡T%vÇÕ(ŽÇKK¸ºOÄ× L:¶ñŒ}"÷½}@zH¸ì3}ûkùÜö: }x.ýå´Ö)À”ûç¾ò™ÉÁ>ÅûoðIèÚ©ŸyÆK|ì^ªË+‹›?{°‚X’ƃª” ßÛp0нñ4¯¥t«/r]Ú³’?x‘g2ªQîÐa¸fÕB)ž¬ªÒ"]Þhú`·üºa¾ûÚu-ÿÃBÿ<Ž\X˳_KvKXìÇIVg¶;Œ}R?ŽýúÁ<ïUbk$O”e½[§$³¹ƒú1Çž†çÀb&šgÌ­½JhÜ Ÿ·Ê<ÏŒÍÄ×vÁ«³3Æ{ž¾5lÃÎò™§oó;øì”o<â`³áã´³yfn•AܦJ3ÏÜ*— ™™á*Ĩ>¬VjYïx™cs邾C²]tœÐÕŽÎßjxwßw§:Sj`DÃS©ò1Ûä g'ÙL©°Ã|éPmòB0xü,îÈ\.Ò<•E}pJËëÀg¯—`‘mx‡ÓØoÆ:<ôþ˜?Ï\j‹5à^ Á.·ÓïA•ޱî¿m&>p``Ÿ"×\ÐðÖêvü’Útµ|]Í÷L`-ãÝ—nßIb?D†™"zðs@Ÿ·ðÌLóÜ”á DmsL ÓļÛ1m˜ÏÏž»ñàóÏ<ãé7õ»¯å߀o^¸uƒ÷q¶æÝ–Í[¡²Q‡|j›™i.ÀTv«®Ø#r(Ôtìüh½SbÁúll/çrúæ Ï:+Â~@CŠÍäФF8vˆ› —ݱ3$/àª^W?ÔK¾üÏK””{Áo‹$¶¸¢×âY. ;] ià–ÜQkU“Úµÿ=β!³O³ßŒmBKw «ç޾^6Ã8ð YxôƒuìËf SH3»Ñ0™ÕL# îZB)ª‹Ÿµ¥Õ ëPW->S%óIŸNÈ`¼K0ËšF¯u Çž«Êû§NØ3M¦äý½QÂîg}$Õ6°uo'¹Þ Õ]%Úq)seay)ù"4‰ÉíÆÉóµ~Þþðà«_ýªX{éi~Cÿl×O™ÏN˜ÏùZá†yb&nØr¡M,a‡‚Z,j[c8$'/VÔÈ<ó×1©IÅZ*m v¹Õú3 ¤ùÌÛ|dnäïp¬Ý;ÇÞ”›‚Zا^•Š¥š ‡P!!ù*ÉÆcBCU}’õ86vÀ &_~Æ,+,/Ý^l)Oq2YRWôùm>gËv.”ÎMSœÕ³Ç›Ó*e½F.ïà“ò‘ÄZXô9«K àY˜\¬ÍJž¡¥®~-ÍTPí¯‘éÆ¦¡¯aKÌV+qe›räI§¦V…«Å{ò‘.¬äƒÌGçœúI_Õ½&ç‘ Ïxœ‹l÷½AÛ´1aÇ\ffž¹òŒ­#Bücì¶Ì»#æ“sƇÀó7¯3ž~š?_ÔË„¯}Mòø¿Axõ]_Æçï=Ãxñ¯ø¹wo3®=ä{Û#Æ1ñÉѮі„Ùm¹m µ™çyƒ2cƮԲÍ犎FRW9´º:½„”Ï™cî;r°±½)ä®^Ë~^kªò«]þ–ð'ã9^0pÊgJøÚQeKœâÌ‚€’!‘©Ê˜çª.òñH”—ˆtvzç «Z¦Är5L 6Cå´xÕN—\)ºs5œéö®-ýÎ.>ra™ç®þ”©r{ä—ƒQñØçº‘í^`ë×„î· ‰ˆ0½E ´n;O9hwïÄHéêeÔùŸzy)Ú'ú û})oh;Ø“—ŒÜç%—±½hÛrzQú›-¼@˜ÑÚŽKÙUÂŽ[™y¢ù|ÛZ=FãFí´\o=dæcækøw®ã…ç¾#ïùeÆ»¿ |ýuàk_ãÞ-å•ç‚€?ÞœðîññüÙ§˜wwø£Z¹bf¢c¼©Î·xÚ1Í;ÚZ¿â–z·þVo#[X«lheO®x>K³‘)zHŽnGB$ƒÏ úxW•›¶ÄjÌÅéýB† `?ˆzdÃ^² žõ•®#‘!s¾ƒ Ç$f¤%´ëÎË‘¿¬ŠÔ†‘סþV–¯dÌâôÃl’@_'û*ÔWú65¤õ´` ¬ì)ùBRbÒ,(ùGRÇÓ¬%÷`d¬0«ô]?ù’?m@i_ä&Dzö(ªg_Ð~5¦r†m5Ol$ð¡^ë#úz4i¶Ï´Åã›N(Ò ÿ²ÆµlÁØMD»sn3ƒçÍ4Íóùy;®h÷w[æã#æ•Û­Â/‹ÃñùÏ.2°î‡÷ⳌûàöÞGŒg0Ÿ3¶Ä||ÔèÑÜp2ÍØa0ƒx7¶3SePµ Ü;pV* /h.a¥Aö‡ñþ‚µÝŽÌiPχc@²ýX‹gøíÌÁ¸¯guã!Ai¼F~,+!ý­SˆêE¹‚\zö ùÓ<Ǻµ([.ÏܳÇQÅËlg`&ª°¥W™±t³ë¹Í›à$õs,m‹Ëa= ¿ÔÛúß\×ÞžDyG]ã©ùpñ§ek>&c‚a¬Îî½>¬î“pcdj™ ŠoרßeïSK³4R]´wýq¡V¥0²±CDe¬ÐܾRÄF'èD©ú¹o`Ó}°ÀÀ‰17´mm¹Ðn*´;›ËÌõ¼ÐÎ~fCíÞöœùZáç=â·'à¥{ÏðÚ"³a¯¾*yy[|ñÞ€L\¼÷p»rã‚v­ 1qãóG7ó|Þæ™ ï¶²Öl æs¯°•JÍÕc¬Ìîþðqf^ÿ¹÷Œ­kƒ3kf—È ½ñnwOð‘ó;ÜGkì“€˜…Ø„ò™ e^Ÿ=ñøäªZ©!‘þšÖZ°YrKÏ|íïu‘”gâèuŸân##Wíú@ªKÚÆôêü²ý:æ  Ä Æ¢V„pçN±ZÔe]ï ÃûJܵ50&Û ï³%„ajÇÞ©7gu9É‘ïuÙú˜ÄH0{ž}Çp5_}rÝŽy e™U'p¡™Q·Ìu‹Y·™yš6s#´¶[¾Y¨ñÙ#ÆÍë<ß—”W^z‰ñû¾úª×ôº+í‡/ñçï½Ï¸‡ùÆGŒ³SæóGŒÊMfEê ®ó¦ðn³†ÌÛZpŽnÆ'wíð‚7ᬸl† >{‚Ò=Ï'‰ÙU0¢qG{ÑZGX8&Ÿ#øÂHŽUÆh =\Kê`Äß=\eÑÉ:sþ0ëùcÖåßÃLž9£ÄBð0À«Ÿ-`÷rÅH–¹»¶îXÜ«@Y%êÔ~­’8#å¢Ê‰¸{[^Ù›ž5â8—ni=®´=–êbâÒ Íေ²òÖºàÍÏ[]§M†:¥RºYæŽ1'ðÉ é+q(™lÇœN O£ØZvcÖ×Êêà:×FçXv›ì¸íægÔ¸ÀÆàSò™²_ejIÊ:^k¾)¦Ýj­ÉÆ„{9…KHn¨Í³ô^ì5ñ Òlì~ ¡õ¹\œî¥ßþ7ªºù,W ·x̳N®T8®!´ ^ O”½Ä žÂ¶¯V ‡3£t{z æXV³]¡¡~º¾˜|Û!¯P 6`N}Â'„Ò‰vÐ×›]÷òõù<´¤QZpÏMîÿöSï¬r—ô¼·¨÷Ñ𸒶•“='v<ü˜Á]rš~¼ßçWËÕ ÉÏîÝô²e6²h*ÝX2@¦Ô333À¯1óö¼Ò®ÍÛÝTi×xšÊüÑ9ÚééÑ|÷GçÌ× ó£GŒço1~0ñëßù¿ð•·ï> |ø:€¯in¤|ÿäŸÈ÷+ߤ×>|ºüÂÓ/Ó÷QŽ¿ƒ2=ÿÃòüíO•»?¼3•餖™&:¢©Ð¼Ú†hÚÚf7ÓxC( ¾Á˜ˆ1ÍÜ&ÕZPZã*gÂŒ¢ˆŽ´+ZóK»ö‡+¾ü±Òºz¨?²û˜Î+¼x¥4žtÅ]5¾=5Yöþ¸8½ràÞx­ûyYîÁS.hôË–ûP~qé¶»|ë“«› 5´”BÜÐP˜¸Í ¥–63s%j33æ¹ZÏÌ<£ÑŽ vhmÇ([o¼­…ÎyÛ¶µÒù9x;ÍtÞж­`wŒyÛ&Úµ3ÚÍÛÓù©[çó;”¶­oµGÓÚ—ŽÞ~›ñÊ7¯¿ÊøÚ×Dë“¿ðöË ¼…ÝÙ1O·&.®1Np#nT@×6GóƒÝâ#":câIT™©6•wh hmâižÑf0í¨Ìªe®ÄuW¬/˜e§B#˜**1-^×*Ú[>)`j?ÌKž=è“ {J÷ñÎ9~Báqkþ‚´áGÙ—†=X——ÀXU¦`<þÆÛÀ¯}õUÆ×Su8Ãc¾þuÂ7¿IxõUÂKož~™Þxåó·îž«?:«w¦ëµ<ØÖ›·ëÃM4c¢v>a:žh¢‰¶ó•¦Ý®m¨`ÓDÔ*ˆ+ÊT¨µ ÖuîThÞÍE¬õ¨Éž»äÀÇqgƒýÿ¡Búó…Ux°Ó?ÉÜüã©‹??Îz”÷¼[/ñÌUór¥*LÏÑŠ[ÆÍþŸ÷Ê,G(3q!1zÎv ¡1ZCC«¥ÌËDD¡˜gž±›6¼å™vg3í6›¶m3íxK»¹œíN&Úµ íZ;™oÍçó{µçvOÍo޿Ϧ)±»W¯¿Îîk¼Êð^}•ñÊ+º‰ÀKØ=󧌛ÏÁ¨7Z«éöµ ÐŽÐÚ}*õ²—ÚŽY¶ja44µ‰Ûn'›·TP©S-ežçʬ{쨠0[ßÔˆæ"Ó­MÖcGÙk+yÂá?D`ýhS‡ïƒáIÒÛ½y¾x¨Õ}§ìeYî-L{²U»g–ié…ƒI®ˆ”:fóRb'=káã%­õ½2õ;ÔÔ‡ÏÛõÌë ™Ë¢@!ffž©¡Òäû²1¨AN'm\yf™®ïZÛÍü`ÛÚ–nQ{nSîÜçÝÝ»ü%€_{é-üÂ+ÿ)Ë ÚW»÷µ÷µ¯1¾þu~ßÀ«¸‰×púÁË ¼7woæÊµ•†§Ìp}º”sÆÑM~ôÑCF™ø g|2Om¢63Õ:•¶]2èj¥IDATMu·ku[äô²Í–Š®sj•€F¦Ú\U]ÊSÌ;=Þ{º¨ žÜ¹â~Ì*æ'.˜Ý'Áã$¹–ètù¼LÀ²!ÍJ£Ïc¿J@í·Æ8ÛÁŸòâÔÜ›½•w§*Ö=VsvéÕ.–ɶ]À;}t‹v4Þñ„©ý¿íËrɆ¿¬¾èfÙÈ gF' fòÙñð<Áóø%˜˜ÝX‹ "A @F¶dIÝ]™gѺ[²e£±1¡¡Pµ²ª²«RgÖ­3ÌPÍ÷Á:Ôpšù$3 Có`>’8êÕ¼7È,t¾¨êU3o>õÕJÉ·O;úi€eV¯aYøÅ(üמ¶0j@óà\‡sóëã›æ=oAóêï¡ö¬‰=ÚíäÝæ”~ÒëˆTöp½ Œr1TÄÔÔ¸(Ô‰KÓ,ˆ#&.5\èÉ ‡×|=ƒóX ©ó‚A4R/SÖä²›rý¾Ol˜î7WÁ7e´üò7Ýìå[ó*û5*\d´«ÊÃä^ý|rŠÍÚ÷Zþez™À´”dtKa †d@ˆ³L5'CÃ, 4_†Ÿª·(Ÿ·WÑRøD¼FD~ ÔâЫ©·4ôªê­TõvÖU_)ùöi >@„(1Êé¾%mŒg-£Ö˜zw/_Úx)f [Ëxi#/| Kà=•ޞ㸣´}Çn%?0B±n FÒsæb3 T,S<Šs–â’ûPL¼¨áUbBp&æUps&Ó CmäÝ­õ$‹.L®™ëÎâZ‡K zXsà|9VtüÒËëöäÙ,Éœ»¸¢uÏñÖ:\ª^:/t…Áµ¬¯0¬Œ”0ÁÆs;–*A€™)fÎ0oX`„fêDñÞ,58SQïT ¡xCµ—ˆj±ï­/ªšy­”TO;²{×ÛµGÃÐh·­_¯¿·òwÑ.ñîà¢ÇPóÀhÊkxþÛCã¯:o†Ú“Ú}Ƥ÷Y?•JFÛñÃãJùB,Gy7оCq.’PLRAB /d‘X ©ˆI‚Lâ…µOª&1qžˆ×oü¼å7*öc⺞Rr¹ÈÍcü·®f+K `–B®RØEîì:å\'F¯Õ×ë rÙD›HF ±,âÈÛ0¡a¡YfFX!t@f5'ÊPT]¨†h±âTƒ®j*ºçED?Ø„ìÂPù¥mêötv¢˜NVL–U"3ÛY¦KÞÍØ4Žäuó@ž?þªË›áŸîIû¾°Û*{B†kû/n¿P–ŽçT\5*HW»NTœ„‘ˆŠ#M…  3! …À Y(AÒ,¯+óB¡p¾!³ì›|„+aIõw¿øŽ¡xÛ 0gßl7kT«Ma=®oH…0œ{t †ŠQd àC2Èå¼·`>³¢++Yf§fN”,5 ªº8=IÓ@ô^èçaß~Šœ¶ú=«ÂX~iÇu›ÌÊr8õîÂY˜%<˜]ì›§gHæ0"=j-áþ¼Ëþç‚ÊžÔK]átGÚ·_èKNjۋ‹Â`(]Å¥"ÃXˆR‘0’2p–dùze€4JP¢L?I7Kn¥–vg°öm÷/¹*.*r3ݱÙNí_¹¸›6ªïápç®ô’¦gÆXœA›Å©‘ÅfYj fib¤‰Uè×RÑ,Z-ý4èÛƒ°®ôzFíÄ8Ý·f»múEd£dæ=á¹C°l²#oà÷áYËøë=ü>dJŒðÙ d¿Ú5Nwd¯x¦ÇYßI:)Uú^vwc˜œKw8”€îp(°ÃNÑë%Ò«$Ce¡ázßB‚ÿC/jwèm@â6PÙ^ž.¾’”¹4ì,ƒ.KqY«Ý†Mž×©2z‰NoôSæ¶šŒŽâ‘Р„‘‰ƒô̬X4ôÌJE3œµ‡eSí›eûxR1Ýňce84*Xóï6ýuÈnrn/ÝBhûêÕ+y9þ­q$ðšM¡þ^š­‡Òh¾ÕûÂqæ~<éŠ+ïÈ€â™Ð+Ëq¡/5àëYIî݃N {ÀÉ`(ìî±» Øé`xsaì?(ªw¤ŠEë¿ë8S¨‹6JM°[*Z§ÓÀJEã+XyhµJÙÚív~Êú`ÇTÏŒþ®Q뽚½åo²Ó}{2akå'¡¬"»…PvŒó„kLCÜ%ČɀRW>žÉþ•—Q<€v¯/pŸýÙºG‰ã^Kx[lµÛVà±é{=¾\d™•ò„\Ú“دôíóèúOƒû<¨žÙÇðónNrïÞÁ£QèúÝÀdr˜LPÀ9²ñÝ„ç'1`:¦óÞÞˆøà)ÔZ¹Ì‡/ò¶}_ÿg$Ü€VeOê3Õ|<é ÀÏ“7RÉ[üÃøìøãÕ%Ǥ´hQ½N1'¸Ü“{¶Õ&ß… Þ|Ã>Ÿ‡çóz~ð|ø3c?$ì õ\/ Z[mç¯Éò!Ë^`‚€RK‹é~2ùò13,–S«ÃÃC‚Á ¿æ=ŒI±¨È³³áA‡ãâ ŒFY6›Ms.×Õ±f—ü~‡¢Hv"ŽŒ8SÍüB¡g6fe@ªž‰ˆÔÿeS*ÉSéTïv>ë7Ükíí!Mã™ÑQç×z?f0@$5ÕËã™:›L%{—–j¦îNkçíî®.Ÿ×{çV±xÔëv; õw¦Âë öè5M‹ÆVl™o,,FäùHÄ­ª™„Ïìo ~ŸH,LLg&'§Žÿ v÷Ò»x¼?÷+§[Múcž>9‘Íæž×ÃZ±šW×ׇì=g=žÀ‘˜ßø´a_ŽÅt¡5 ¼y»"öëÐ@6›Å‹ù° Š’íˆé0~æô3Ý©¢RÀy ­(—ÕíÚ^UË»†Àï|þÀᆌ5­‰KÅÓ,ÌÌH$3Wd&f³D@Å&1Wö’D[?¾o¹\Îd ðð¦(  Ùlz5==wys“ì•x`çXS­» €ÐÖvÒhµû,Šb–ª/˜ÆÇ}÷4MзÝJF£á ®ÐÁ²ïà?(î0ŠsIEND®B`‚variety-0.8.3/data/media/variety-indicator-dark.svg000066400000000000000000000130551362063646600223120ustar00rootroot00000000000000 image/svg+xml variety-0.8.3/data/media/variety-indicator-num1.png000066400000000000000000000016351362063646600222370ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYs¬¬ÒúÙ˜tEXtSoftwarewww.inkscape.org›î<IDAT8­•_H[WÇ?çÜD“¨¥CÿÍjìh;JÇØØ“LÛí©leЗ½H_&c }Ù^*)}qco…ýÿÒ´nÝãºìêöb³Xm–µ¶ñÆÆIs“¨7×{϶fÑæ;üÂÃïÏçüÎóGà¢|~¥ßã¨c g%:4+ tPW…£&|Ïü(„PÕòÅVÃúÃ¥nGjQǪù+U*Y3µ>í¨é§'‚ ¹¿%ê[ ñIÀJ)¥ÈŒ±æÖ®÷*«—&E#ûšDM> @A}¨áÝÔüÍ/*íÀ4–û„ßÚÓ@+nŽœ˜žºúAyA€µ\ö{…Úœ^L“L%Ñ3:ù|€ö¶^­ / Î¥ØÅ}'GN%<ÅÜò!A¦›f&>³É\«ƒ²»·ç+à G(ñÕO ÏvÒ‰ÐÜáó¯?sVª½­ýÀ™3#ýGÙRȪAûŸÛ€mÛÛ‚þ Æçó¿%GíÙvÖ6$„ X<"¥”îMûŸª©­m•Ö†YÜi°a rmÍ|°“Pkâ¸ZÌÊ\nåç§R)lÛ¹ãÑçmÛ~[Ó¿tS¿LOÄQê¿ãxïþ}.|z€£ƒGi‰´lÊ™‰ßD)çÙ»ïùÙùÛsÉj«ç =£“YÊ”m¦¹ŽžÑÑ3:fÉÜŸ^Lsk~Ö‘R]ôü>7{"ŽLíjܵéµ{套9|è°ë¶ƒ`y^²,&¯L¢”ú2ýø–pùòdº·wO{ÏÞžƒ^¯·ìõzñû|®CÓþ¹X¶msi"ÆÝ……š¦¿víz¾ÜX]ýwÙeýŶÖÖ®P(äZåV­®®2'™J® !‡FGÇPñL& Õ××?>w;ÞR,DÂjjj\–µÁ_o›ˆ‘]Î.:Ž:rîÜG×ù«~=§O¼éñhg;Ú:övwuS_ß@ PGÉ,‘3rÜ]X õg³T²„ŸÁû££.U2\ÿ´ááaïîÝþ!¥ÔëÀ @ºRü!„¸"ŽÝ©–ÿ7ÊÐ3‰[ð”%IEND®B`‚variety-0.8.3/data/media/variety-indicator-num1.svg000066400000000000000000000063601362063646600222520ustar00rootroot00000000000000 image/svg+xml 1 variety-0.8.3/data/media/variety-indicator-num2.png000066400000000000000000000020341362063646600222320ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYs¬¬ÒúÙ˜tEXtSoftwarewww.inkscape.org›î<™IDAT8••_h[UÇ¿çÜÛä¦ÍÍM™¶©m¢mšR${ØD¬+‚0v¨PªŽJæKчU‘Â`/úbÉð¥úꃊŽÒl-Fç†ÂºV³n>m3]»,n!YÙò“›Üü¹½÷ø2ÃmrØÜsÎ÷÷9çwøÝsZH–s~^gS ú0òzä²°U¢³ÁùÌB3‹'•yuÊÁ0e6oT­¦Þ´ Ü ›Øsµ-¸˜Ï¾AÁ~àl4Š1¹XXèíúÔ¸{úÿG©~“‚…Ÿ „8D铸ö­o㪅Ì(aäÜÓ@rõönDV?¯/å|ú2a4ÖT‘?‘H$ÍeQ®(z{\xõ•1 >?Ø/‹úùÐÒþgç¢|)Ÿy™&E)aumµž.!²,C–eÜ‹Ç0ùö$ü/ú÷ÄØívêñ}à OyæÛƒñ±qx<p”ÇÕõ+XüÆ"‘&0¸ÜNšõSiGÌ ’CÂñÀqø†}°Z¬àyã‡^«Ï—ËÓ͸ÜÛ4ÕuÖ|XOÒoT2•4dã6B`ï´¥”Ò.SGƒ²¹VÂËQqøõÃ-½«µŸWw«%«EÚA“©$Î-ƒ¢(N¦E±¥¿P(H|¹\}ܼ¹ÅòOËPÕ]ô<Û‹÷MÃ!:ZBÕ]%¥”æóùܺS’|f¦¸üûe0ÆàÆ;“S°Z¬í’C<‡¦é÷yôKMÓ>฽?]&›Å¥ß.ÕûÉTg¾>[ïSJ0÷ñ\øæí[`Lÿ•ŽìisûîV¬yí½µ]­VP©” ­¹ÜRS¸³½©SÊ–xø{k3àrõEºÝõëvvãÄG³-Sn¼†kªŠðÅ0c߃_ÝáàÂ…pjddÐíöìèèx’*…MZ6A°Õ¡š¦áüJ‰ÇÇ[[»&×ÖÖéø9Ù94Ðß?Ô®”¥( C‹ˆÅcBèÄüüB0\“Ñh”Žú·îÞ~®T*èsõÁb±´ªê.®ÿu¡•Ò™ôC]gGOŸ>{­~TfA'OξÇóÜžϰwÈ ‡CBWW'jÕò…<$ˆÿCµVS !ß‚ÏæçÏ<22Z¾i333ûöÙ&coà Øa ÷! î›Åÿ¥qiñ°À` IEND®B`‚variety-0.8.3/data/media/variety-indicator-num2.svg000066400000000000000000000064401362063646600222520ustar00rootroot00000000000000 image/svg+xml 2 variety-0.8.3/data/media/variety-indicator-num3.png000066400000000000000000000021131362063646600222310ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYs¬¬ÒúÙ˜tEXtSoftwarewww.inkscape.org›î<ÈIDAT8••ML\U†Ÿsî Ì 3Ì ”?ù)ÿR…ji‰M‘`0…h7M4&&j4ÄMcLpa¢ ìÎMÄhB:m0TŒ‹¦“Öª ´V˜Â4è uþ€;ýÇE ™é $}W÷~ç}ŸsÎwsîì¢ht­Ùbª Ó‡ÕŠ5K Æ…©Flž}—…*[^<^Øüo¥Î”ÚŠÙÆS•H$'smÚGvWñ•=Á±ð¿¯JÔ€g/`ª”RDc‘Á’òÚSW/·â‘Ðk5ú$P!ù.÷©Àí©¡ÔºÐ#«MB‰íI ©*-){û«ã_ìL°ý¬Ý›/]¾Äl`–H4‚®ë8 ½¸@,¥ýh{šßétʺƆïVí³OûN!h϶Ûóðuùðuùè8ÖÍ–Ëܺ®Óú|k¶XY¾'×/Meøvë[˳Íx=„H)yºñÀΘÑ—5SYQ‰ÍfËbšªFʬB¡wï²¹¹ÉÔ©GP/utfõ !p:œ=)eö©i>8ÏØ¯c;ïRJÚ·QZRºk&'7·\&·ôø^àêªjz^é¡óÅNJŠK0M“ñ‰qFÇFwÍD"·ÜØÐïï.**âHë:;:yÿp:LNO²µedø“[Iâëñ ‡×~ËŒÅbèúfZÍ0’† <<ʦÊ Ü·hȯ ÃxOÓÒÝ|pŸ.ް¿j?^Ã0˜ ̱±±@mM-9Öœ ðäôJ™¿X[ßüë÷+³šž©O5äX­˜¦É\`.-(„ ¡¾ã=Ç3 ‹÷¹uû¦)¥:'††¾yáåή«^7íŒ&’ –——‰¯Ç0M…Ëé¢À[°Óçto’o‡Î²rå»3ïj.Œ.66ÖT6Ô7´Z­Ö³¦i¸ÝnŠöQ\TŒÛí&''sû†ap~ÄÏB0x_Ó´7'&®Ewkwä_ ­.«(/¯u¹\áÝ´¾¾Î°˜ÙÀ즲»¿pR~“333ª©©yøï¦ŸŠÇã‡ÊJ˲®n[Éä×ÿ¼ŽÄOh5tÏ4UÏéÓg®mg½zúúN¾a±h_VUTÕ×ÕÖ‘Ÿï&/ÏABOŽ„Y Ü™EO$’Bˆ³Bðyÿ×+©Œ]ï´ÞÞ^ka¡½[)õ:p(\À’RÌ !Æ@øç³åÿðæwÀ߉IEND®B`‚variety-0.8.3/data/media/variety-indicator-num3.svg000066400000000000000000000063601362063646600222540ustar00rootroot00000000000000 image/svg+xml 3 variety-0.8.3/data/media/variety-indicator-num4.png000066400000000000000000000017611362063646600222420ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYs¬¬ÒúÙ˜tEXtSoftwarewww.inkscape.org›î<nIDAT8•”]L[eÇï9¥ô“–Ì@‘ •]lÆ„HÌn¶0–™],jLvã ј1cL–ìFo$,Fƒ‹×^¨q×6dÞ†¸Œ Wû(cÝVÃ:(­¶P(==ïëÔnm ü““œ<ÿÿó{ßóž¼ „VWãí©N)äQ”؇  ˆƒˆ€šR Û¼/ÜB¨býâùBúŸ¥f©éý(Nóó•É·Ëmú»»ê·mÁk‰Ø1 u ðnÌ—RŠÕµä@umÓÇù»×¶^RÉè 5²(€‚ ·ç£ÐüïòëÀfr¥M(ñ# ïš/_uÍé?nM|–[`#UˆîRM±xœŸ~¾„”&]GŽáoñäÖÖÖä•Àåï÷~´¤+¯)( UJqmô*±x,WË™¢Y—Ë¥5û[~iB‰·¶ûÄ›S7 ÿÆårmË©¾®þàùó½íšTæÑR¡¥å§LLNàõTÒÙѹS06›ý]MJÕX,Íš ]FJÉÉ'±Z­; !p9\Ç5MÓœÅ7&ÇYŽ.ÑÙÑÉÞ††A·d-/¯ÕŒìfêy#ò4ÂÔôÕUÕ~ãð® ÉdÒcÙØØ\.·Ú<ùÆJ,†”’øß1¾¼øf6›óGF¯16>ÆÙÏ@¬Aj=Õ‰øï¥V6Œ,éôéôFÖÈÕ3†A:.Ú …0MùÈ¢£}ašæ{ºþÿ¥kõû9óAï3 ÁÙ{ŒÐu¤‹VkQðí»wPJþªù¼:3n!ß´–Y©ôzŸyvGÎw:x=…#eñÉ"³ó3RÓÔe À½¹™Ó>_Í­JoeÉ1ùòK¯°ooã`GŸ1 F® ”ú¾¿ÿ›Y`hhdÑïo¬oÙßr¨¬¬¬(Ø¢ëØm6ì6ùÇ`š&W†<‡—u]grrj5—°;*~‰®D^¯«­mr»Ý¥6^ õõuƒ,„ÒBhÝ}}AÈ“Á`PµµµÎÝ¿ûb*•:Xã«Ùö¶F–é?§ ˆ®DŸH©Ž_¸pqjË/z¦çÎõ¾m±èŸ7Ô5ìonj¦¢ÂƒÓé ³™!‘Lð8&ôpÍLÆB|+Ÿöõ}½”Ï(ù³zzzÊöì±w+¥Þ:à"Jñ@qD ¿àQ±þ’~ZykÓéIEND®B`‚variety-0.8.3/data/media/variety-indicator-num4.svg000066400000000000000000000064221362063646600222540ustar00rootroot00000000000000 image/svg+xml 4 variety-0.8.3/data/media/variety-indicator.png000066400000000000000000000012561362063646600213600ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYs¼ÏtEXtSoftwarewww.inkscape.org›î<+IDAT8í•KhQ†ÿsg&™¦¤š*¦5$X_ ¡Ô.TŠ EtÑj 6!“´ˆ-‚¢+»pa7âJEWÒ•´EP|€Š&Æ͘43s]„¦‰$*Ýõ_s8÷;.÷ç+!¶"ÔUp¥DÈeÓGp?çÿÆ D¸Ýd^÷8çP~¤^ݼsëý¯ÜÏv",ûš2ë?Ý¿íÞý»{E(¤ï™ôçxüÆÉz‡ÀzƒAõpÎ^ÇããêåÍ'>Í Ú9t]dþÝMñÝæènn6áúµ+³©tz’1šŠF'¾Uæ1&¨àÜ$62b(4x`³cKwoOÏbÈ™H&ÇgææÆ‚ÁK1YÎŽF"“ùª•N0èïªfÌp¹Ë媊µY­8ìõJ‡z½ÆÚÞŽŒø}uÁ[;:ž„ÃCSÃ׊]<³sÇvŸÙl®9ÃnGßñíKË£JxÕ*ô£Ñð€Îù~NËk:×óù߯â­þ +þö¾b$äÑIEND®B`‚variety-0.8.3/data/media/variety-indicator.svg000066400000000000000000000067531362063646600214020ustar00rootroot00000000000000 image/svg+xml variety-0.8.3/data/media/variety-small.svg000066400000000000000000000047111362063646600205260ustar00rootroot00000000000000 image/svg+xml variety-0.8.3/data/media/variety-very-small.svg000066400000000000000000000051421362063646600215100ustar00rootroot00000000000000 image/svg+xml variety-0.8.3/data/media/variety.svg000066400000000000000000000073311362063646600174210ustar00rootroot00000000000000 image/svg+xml variety-0.8.3/data/media/variety128.png000066400000000000000000000045351362063646600176440ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aËsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<ÚIDATxœílUWÀ?‡¶ôÚUa2‡c°87qü4º èþRÄ5Š‹fÐ&3[Üœâ6Eœ™Éf-lƒ„¹1‰S´Œ¶bH†lc%$HÑQXÿzýõÞk_ßë»Ç?ÞëVÚ÷«}÷Ýs_Ïù$'iï}÷žïí÷sϹç¾s{…”ƒ¾LS€A-FÍ1hŽ@sŒšcÐ#€æ4Ç 9FÍ1hŽ@sŒšcМÜÉl$„ÈŸòlÈ0QBÀ%༔2<á­¥”)`pðÒW47«&”Ó_ì,¨)‰‹ÍUa*¹Éf ! €j"g¿!{8|]JHô¡T.·b’Ÿ¬"’»„$l„K€w0£…lÅ–J)kâ} Ù(àQb$¿¸8‡²õÅ,º­€’’œ4c4¤COO˜óç¼ö—^z{Ç ¦ÉaY¼í“µíÀœÑËfÍÊa÷‹Ÿ¤´Ô$ÞMxZJr(.Éåór¹ã‹…M­sF{†‡%¿ÿM;§ÞøpYOw˜+õã?››+¸ý ,[9ƒe+Šøøœìÿóeÿ¤IÕÞk’ŸˆáaÉéšAN× ²k|ææ|–¯(bÙÊ">{svN”ÑZ€áaÉ«/÷NzûËuC\®âÀþæÝ˜Ç·¾3‹5÷̤°0{º‰ì‰4TõÑÑ>l˾ZšCìÞéá¾{Ø»ÇCG‡=ûÍ4Ú 9û{l߯ßoqè`¾ßÀ~×Î…Ú„æ(GÛ.àX•ö¶Ì¥–o÷óæq? oÍgí½³ùòW®cšËN9—…ã á°ä•öŸýñ¸xaˆ§¶vðÓMÔœJí‚Ó)´àX•¶Vçû膂<þË6{´•®¯?Ú 9û'åo§ß¤üþ&vnëŠõ8—£h'@å/­-!Õa`YPq¸Ÿ?häµWz …?¦Ÿ)´ÀëµØ·×¹¾?,^|¾›ÿ°‘“'üŽ×¯•ûövÇzxÒ´· ³õ‰vvnë"t®5ÐF€ºKCùg¿ê0’Rq¸ŸË›ilp¦›ÒB)a×ö.²åýXWêƒüì'MTWz3^—TõrñÂê0&D ùÓ;yú©­ŒÕ3åðù"YÙʱ*ljæj}fî¤-Àÿκû^÷þºéS<ÖN—æ¦<ÔBÝ%û[±´ØñL'[k£«Ó}ß~]~?HÅa÷_ø¥‚Ïk±ùáV.]´W[º€·O°iCÿúG¿k.´B!Éö§;±2×}:ŽÏg±ù‘Vší!Øv 00`ñìö.~ñP‹­N–Ý;=i2Uã÷[<¹¥Ý¶{¶_ž; üþ&^}¹—pXMsP]éÍŠ1ÿd¹Zdϳ[ö•‘Q@($Ù··›65sé=gÏÂúËAvnër´N­è§Ó†YG^©ò`y3[Ÿhç¼3cZ[BlùuÁ!—\ˆdË‚7*Ò¿Q”ñARÂÉ~Nžð³ø¶¾û½Ù,[1!ì­§±!į~Þ‚Ç“ÝC¾‰pñ|ú'•£SÂjϨ}<ÀMóóXWVÌê5ב——¾ Wêƒl~¸UùwëN“ŸŸ~®dN`cCˆíÏtòÒÞnîZZÄ’¥…ܹ¤ˆ™3'v@RÂÑ //<çÁç›Bã½É/HÿäQ:)´¯7Lu¥—êJ/Ó¦Á-·𥻠¹ýÎB|z:3fÄ¢ö\€Ýöð~ÝÔꥊ­§kf[\¨ D¦Q¿™´QZšÃüÓ™ÿ©é̽!—žî0mm!Z›‡µNüSJ€XxU’¨ ¨‹µð=›ç¥ì#Anbæ ¥lÆM==t°O»™7Ù@oo˜Cûb­òDs“d/~øöØå×—æpßJX´¸€M—šÍtu s¾6Àý=tÇžùw)åÚxÛ'`9ð_Àæ)œ‡ÀJ)å[ñ>pÝp—ÝQcW¢äC’@18,±/.ƒÔ_•R&üÇCIoEwp7ð¼M2ÏsÀÝÉ’ŒÜ\H­«ÿCDïk˜âš2ÍÍê‰ä4i !D>ðy`1P0áØÃZ`¢ºÇR¼®¨îP œ•RNø&ͤÆpÑŠÞ%!àÎH)÷¨b2˜/ƒ4Ç 9FÍ1hŽ@sŒšcÐ#€æ4Ç 9FÍ1hŽ@sŒšcÐ#€æ4gRSÂ2…âkÀr 4…¯Ä=3•kˆ¸ A1 (–ó‡“ $Ð ¼ì–RºâÍ–®À å]€A-FÍ1hŽ@sŒšcÐ#€æ4Ç 9ÿ AbæPBIEND®B`‚variety-0.8.3/data/media/variety14.png000066400000000000000000000013521362063646600175500ustar00rootroot00000000000000‰PNG  IHDR(–ÝãsRGB®Îé˜PLTE·¾%¸¿!¸¾$¸¿$·½'¸¿#¸¿#¸¿$¸¿$¸¿$¸¾&¸¾$¸¾$¸¿$·¾$·¾$¸¾$¸¾$¸¾$¸¿$·¿#¸¿%šŸ%y}¸¿#·¿#ª±)IK ·¾&·¾$¸¾$¸¿#·¾%{$ ¶¾&·¾#·¾$¸¿$¸¿#¸¿#¨®*CD´º)¬³'¶½%¸¿$¸¿$¸¿$¸¿$¸¿$¸¿"³¹'kp! ž¤.LM•%­´&·½%·¾$¸¾$¸¾#µ¼#‹‘$,-˜/#$ _b‰%¡§&°¶(²¸*•&=@—ž0 @@TVY\12–ž0–Ÿ,¯³+†ˆ$‚‡&†%€…$€„#„#~ƒ"~‚!}!}€!|!z"z~"ZV%0 pHYs  šœtIMEÜ '²eL(tEXtCommentCreated with GIMPW³IDAT×c``dbFV6›ƒ“‹›Êãåã`à‚ð„EDÅÄ\ I)iY9yWAQIY…AUMÄÑÐÔÒÖÑÕcÐ70426153·°´²¶a°µ³wptrvqus÷ð´aðòöñõó  ³aˆŒŠŽ‰‹OHLÒ³aHNIMKÏÈÌÊÎ ³±±aÈÍË/(,*.)-+¯¨¬d¨ª®©­«ohljnimk‘:'Ÿ‹IEND®B`‚variety-0.8.3/data/media/variety16.png000066400000000000000000000007421362063646600175540ustar00rootroot00000000000000‰PNG  IHDR‘h6sRGB®Îé pHYs  šœtIMEÜ !šŽ—tEXtCommentCreated with GIMPWOIDAT(Ï‘»JƒA„gv7äyK;kŰòA,ÄÆF0©L%b0‘ *°P¬B¢H Q¢ÈÙ±øÿ\,b<ÝYÎ9;ó «e2€2 þS²€…ÿ•!=d°h^‚$füÂ?§E 0ÝB ‚@@™ãJÔlö/@M»“-—:A:-ÒDBÞUzA ‘…¹–H2íVþêâ5i E ;_¿â¸PÚïŽÂ8Å:æw·?ú_/£ä¢˜œ¼àjÕàþîSšäW¯¿mn´ÎNâpT (e]yï)öñäS»¶¾T9ì†ÑíÍgã¼ß{/Zfs¹Y¸¾ô;[ïA ù©Ì£“Uk§ñ:klÆ™|>c#-`gm¹Ƭ¼D ŽFQ þ÷‚ I’Ll¦ˆÉÙ fÁó´¶òòE²WÊß§È JàA?P¹l ÿÒIEND®B`‚variety-0.8.3/data/media/variety16a.png000066400000000000000000000010221362063646600177050ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs$$tö<ítEXtSoftwarewww.inkscape.org›î<IDAT8¥“MK[Q†ŸñÜ|Tk4‰JZ!„"B)Št[è/èpÄEwþn\¹(tQ„‚BWAéÂDÄ]ibëF 5õ+òer3.norƒb˜33ï;3çÌUå1"ÿ5˜ð'‰˜d,ˆùýò`ôáﲑá_feõùPÕInçé’‡®‹X÷%}\>ãð×5ãAÞ¾{Ê‹QSüN‚Ýëßr¤S%¾®e™šîfîÃφhÀÁ~Ûn~ÎJEùüéüéÞnÄÌ1Éí<¦7dæ3'Õž/+—ôõ"QC±¨,-ž’N•ÚvfÛðóG‰×“O#ü9®°¸ðp.ç¾ýº¼°©VK^ŽPU@pM¶»­ªP«Q·d`ÐÚŒFÍ+Ÿ¯ñžå²Z¹+;à­hù¤›¢×—ÉTÕeýuê7éVKN?à·œv4çe‘B›±«ªšmuÞÚy¼þ¶„E$|WÕ£z¾÷;‹È° Ûtàʆª&Üà ñM”|àîôýIEND®B`‚variety-0.8.3/data/media/variety24.png000066400000000000000000000010621362063646600175470ustar00rootroot00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYs11·í(RtEXtSoftwarewww.inkscape.org›î<¯IDATH‰í•ßKSaÇ?϶“ Ô˜gíV£”è?¼óƼ² ÿ ú‚ J$º1º DQ#ˆÂÂ’.…h[AggsÛñGîœ=Ý$ì¸9N4oÂ/¼ðòå}¿ßžçý¾¢ª'BǪ~b‘ƒˆôm Ò-¨êGQUb±ÈT{‡qÕ4 i„ºe¹åÔ·ýW¶í‰ªÒÚI=™M˜ápCôüšÍç½X@@) !Q¨èAPÜ¿k‘N–¸Ø¥ ™NÓ¨{þ¯ Þ¼Þfi¡ÀÆç=žÎlq¡'ÊȵV.]>]óNà1u]åñt¶Šÿ²±Ç­?¸wÇÂ)–ë¼{»Íþ¯ÚÙ4÷¼À÷téÈ–‹Œ&I§üg|Ïfó\I²ò¡2×ÞïðhªºúÃÈÚ'mWÕƒŒå2~û'&2tu7áyði}— ¡»•óêÀqÊ|XÛ ¦Z)xè­ú ®ô¡û|UE•«ïç̸Qm !IÎÏÎ&†Äãõç:V_: š?Y$"çZZÂ7Stü³:à–°s9o\U7åäËüÿ ~»»·«ššùIEND®B`‚variety-0.8.3/data/media/variety256.png000066400000000000000000000112441362063646600176410ustar00rootroot00000000000000‰PNG  IHDR\r¨fsBIT|dˆ pHYs¯¯^‘tEXtSoftwarewww.inkscape.org›î<!IDATxœíÝ{tUåÆñïK.„€ˆ¶KTPëe­¢‘¢N¥K—3NGëÔYË^-Õ:¶ÓÚ/íx]õ:ƒ#(¥JEÑ‚¢ ê D¼ Î’û=!—sÞùã$6‘DÎÙç${Ÿý>Ÿµ\®Ã9{ï_²ó>ûÝï»÷>ÆZ‹ˆ¸i߈ˆ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"˨ cç§G£€á(„ÄmQ (Š÷uÖÚÖØ¸±Ööøðw@~¿nL$€W?ZkWôç†ú-Œ1'ó€‰ý²7¼LµÖ~Ú+Oy÷Û“aŒ¹ ØŠ¿H²&[17c2R½ò”öŒ1'ó )[©ˆtÙL±ÖnOÕ SƘÓÕÀ¡)Y¡ˆô¦˜l­}?+KIc޶‡%½29˜JàLkmQ²+JÕÀ<ÔøEÊaÄÚ\Ò’c̵À)¨EDâwAgÛKJR§Æ˜c€¡É"" kN³Ö~áuÉöA_Ä/C‰µAÏ<÷Œ1À¦D—ËÏÄä ò9åÛC8ôÐ 23§í‹„AG‡¥º:ÂÇîgõ 44D½¬f¼µv³—“ €ÀoYæ;çæñ¯¿=Œ#R~=ƒHÚ«©‰0sz%…k›]ô!kíõ^¶™LìŽ÷ó×\7’Ë.îi[".yqQsçT%²ÈÖÚã¼lËÓ€1æ[$ÐøÇOÈUã‰Óe—gü„ÜD9¶³M&Ìë à©ñ~0/o×ßx¸Ç͈¸éú'//¡æw›ìÎkŒŠ÷ƒ'å1r¤ÎùE1rd'å%²HÜm²;¯pD¼}L–ÇMˆ¸-Á¶w›ìÎkÄý`á‡èè/âE‚mÇÓÃv¼@Ü“÷ƒ4Í/âI‚mÇSKÓóøD¦q˜@Äa ‡)D¦q˜@Äa ‡)D¦q˜@Äa ‡)D¦q˜@Äa ‡)D¦q˜@Äa ‡)D¦q˜@Äa ‡)D¦q˜@Äa™~ ÁSUÙÁæM-¼÷n3Ÿ~ÒJ$b1Æ` _þ7bD£Çdsô˜,FÉfô˜,Ž•…ÑwA¦€|éãö3kz%_ìn;ègËË:ØþYkËÎ6ut§ž6„3ÆåpÚØòòÔÉ 2€ðöš&î¿«ŒhÔû:ÚÚ,»wµ±{WK—Ô3hœxÒ`ΗÃãr8ù”!de©‹$ ¡¢¼ƒ‡¨Hªñ÷&…Ï>må³O[Y¸ –ìÁ†ÓÇæpÞùyL:7Ü\õü¦ž}º†¦¦·þ^´µZ6mlfÓÆff>XIÁ„\Ο<” sɬžŽ+/ëà×|»mm–µM®m"'g'åòÝï åÌ‚23Eà¸çž©¥£ÃúZCKK”Õ+Y½²‘aÃ2¸èâ|þáÃ8ìpýyö7„9¬¢¼ƒ¯5ø]Fõõþ¼°–)WqÿÝåÌ4Hj)böü³þýû‰XÖ¬jdͪFþú”!üà‡Ã™t^ƒtÈJ)€£ª*;øŸWƒuôïË'ïç“÷óofrÉeùèâ|]_"ú-:êÏ ëhoæÑ¿/åe<þH?¹|̬¢¤¸Ýï’Òžzª®ŠðÚ+õ~—áYKK”—_¬cé’:&LÌå²Ë‡sÚØ¿ËJK -z®–¶¶ô:ú÷ÆZØPØÌ†Âf¾u|6—þp8ço¨¦ SÇÔÔDX¾,}þ}Ùõyÿ}?ý§=<ó§êë#~—”ŽYü\-m­éôïKMM„§Ÿ¬áÊ+ŠX¸ –ýûÃû³¦‚À!uµ^y9|GÿÞ47G™?¯š«~¼‡W^®ìt§ßYü|­!>ú÷¦¦:¬•\=e/o­nĺõã”Àõu–½Tçw¾)-iç¾»ÊùÕ/Šyos‹ßå†À/,ªÓù0°kg+·ÜXÊïþ­”ÿýâà> ;€¢,]âÆ¹¼¶mmá—WóØì*š›ûÿVè R8`ñóµ´8üGÞ—HIJdqSZĪKt(B®²¢ƒ%‹Ý=÷GMu„i÷•óï¿.‰ëyˆa¢¹'Ÿ¨õ¼*}üá~~yõ^™Y5 OH @ˆ}¾³•Õo¸Ùµõ*…—_¬cêOŠX¿¶Éïrú ÄæÎ©Ö¼·GµµŒî«uo@R ›ù`›æ»“µrE×þl/Û¶„ów©¡HÄòÄ£U~—åüþ†R™Yºñ@-_ÚÀÞ"=,#•¬ \wõ^v„è9… €ijв`~ße„ÖÞ¢v~û«ž{¦6ã+ €Y¸ –ú:Ý ßŸ"ËSOTs×ei• D¾ØÝÆ’Eºèg ®mâ7×S¼7}O·!a-LŸVA$‚~iÙóíüúÚb6¾Óìw)ž(Bâ¥êB58•Nšš¢ÜyË>̯I»q@”—u0^µße8ÍZXðT wÝ^–V\õ=Ò-1ƒèá+u¯@®kâÎ[ö¥Íõ¾ÀÌ+)tàšëþòæªF6¿›žçŸaµes ·ÿGz„€ïPSá·—1í¾rÓ{Je Õ×Gxt–®ø ¢m[Z¸í÷ûÿ Fߠ˪ü⪽¼·)œ×\÷‡¹³«©«ÕœP½¿µ…[o. ôéY`b_XyËM¥<ü`%--ê |M›Y¹"=¾ÜÓe¾¿Ÿ[o. ìÀ`  Ë«Ëê¹nj1~°ßïR©¼¬ƒÿº§Üï2$N}°ŸÇfóT-PZÚÎM×—0wNU`ÓÓíí–»ï(£¡A=¤t²|i=o¯ Þ`w`bS„/.ªã_¦îÕHw§9W²c».øIG3¦UPZ¬Ë†]Š÷¶sëÍûøÃme”—uø]ŽoÞx½×^ÑyºjnŽrÏå´·§G›Ð¥p]?ŸRħkõK»>ocæŒJ¿Ë$}¾³5PWm¦U´µZæÿ±†k®Ü˦nœ46F¹ûö²´¸°DnùÒ†ÀÜFœvÐ¥´¤Û~·;oÙǾÒðžX Óî-§´4XçŽâ]KK”7WãiÍi]66óó.bÖŒJ*+Âó«JÛ[M¥oË—c,'í £ÃòÊËõ\õã"æ<\IUU8®Ž{tV‹Ÿ×>Âh×ÎÖ@ܾŠèÒÞnYº¤ž«~´‡ÇfWQS“žA`-Ìœ^ÉK/¨ñ‡Ù;ëý¿. TÐ¥­-ö¥S®ØÃÜ9Ui5uØõdŸåKõm¾aW]íÿ*ÓïúS[«åÅEu,Y\Ç„‰¹|ÿÒáœYƒ1~WÖ»h¸¯œÕ+ƒ1@$ý+³:¡€.ÖÆ 763êÈ,þþ’a\xQ>CóƒÓêè°üçÝå¬}Ëÿn¡ ŒÑÇdû]‚Ð]Iq;sçTñÔ¼j¾sNãÏÊeÜY9rH†o554D™vo9ïnÐh¿KŽåw î@—¶VËšU¬YÕˆ1p‰ƒ)˜KÁY9üÕÉC4@ƒM›™>­‚êÌ\Hü† ñÿ\ÔÙèÎZر½•Û[yöO5 Íĸ‚\ &äP0>—‡¦¾wP_áÉÇ«um¿Ã²²ÔØå­7yëÍXïà¸ãS0>‡ãOÌèc²8ò¨,23½í¼ªª/<_Ë«Ëêý¤éYÙ €À³6vÑÆ®¹h##Ã0êÈLFÉfô1ÙŒ“Åèc²9êè,²{Ù©ålÛÒÂ{›[Xÿv“s72IïÔHS‘ˆ¥hO;E{ÚYßí‰ÆÆÀ£²ÈÏ„µ±i½ÆÆH¨ïUï!cml–A$A€àL„‹8&c Ÿ¨ â0€ˆÃ²"îÒ€ˆ£22L îJUˆø 3 ð ¡û _a"¾Pˆ8L â0ˆ8,@Ä:q˜@Äaq˜z"Sˆ8L â°,ÿ¿ Pˆø"(=ßoJ¼ä‡1qR.ÀÆž¬k-Xl×Ðí½Îèzôv÷÷°Ûã5_¾ÆÚÎuw{ï+ïGíWëè¶Üut½îë}ÛGù{¯£sÙn¿“žuÙ>êè|¯Ûº¾ºí®÷£l×öxýu¿ƒÞïãç§ÛÏx`=÷UZ¢þü=·k{­£ûï ûë Rt{FŽß%HÈ}]8ô½¨…Z_½̆ FçÛkÄ«AM`qGדwbÿ?Ø‘7GfH¸íxji^c(î/±¯¯Ó·ÞŠx‘`Û‰»Mvç5Jãý`I±¾KÄ‹ÛNÜm²»~€õëšhhˆzÜŒˆ›¢¬_—ÐA}@à“x?XWaöC•7#â¦ÙURW›Ð)@Üm²;¯°(‰÷ÃkV5²ze£ÇM‰¸eõÊFÖ¬J¨½”k“ ó66½4‘e¦Ý[ά•´´èt@¤7--QfͨdÚ½å‰.ºÔZoómÆãrcÎÞJt¹o|3“ï_:ŒNÌ¡#3<8ó¡"~hmR]açŽV–½TOy™§Aó¿±Ö¾íeAÏ`ŒYLò¼IÖzkí9^N6NÞrkƒˆSÚ€qÖÚ¼® ©þwç†ïHf"âÙÉ4~H²`ŒÉÖg'µ"IÄàkmR—Ú&Ƙ“€ÍÀФW&"ÓXk=Mýu—’!øÎB.šS±>éS3pq*?¤ð Ó“©Z§ˆô°˜ìuʯ7)„·ÖnÆÓ]ñ#’QbmjlgK™”ŒôºbcÎæ'öËDܰ˜j­]×+ï·0Æd?®Î%O IÀZà)àYkm¿ÝS߯ÐcCÆŒ 6Fp:p$0 Ž{&Í ü." 6®=A& Ô»¡§xXm­­ˆXHŒ1æ`@vna­­õ»—¸vô‘n"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â°L¿ HƘáÀ)Z]~ŠÖF'cR´®Rkm]ŠÖZÆZëw cŒÉ®&gÇÆ×¢$QØ lVs­µK ÀWcNægû]‹¤Ô`еv‡ß…‰Æº1ÆL¶¡ÆFgÛ:÷±tR “1æTà= ÛïZ¤_µ㬵ù]H¨c2'QãwA6ðdç>wž æZ Àï"dÀÛçÎSÄ\èw2à´ÏQtÑÑß=Úç(0ÆŒ"uùHú8¢sß;Íùó»ñóûÞùiÀÎÑà`ˆßµÈ€Úä[k;ü.ÄOÎ÷:ÿ¶ù]‡ ¸m®7~Pty×ïdÀiŸ£SŒ1£a~×"¢ø¶µvß…øM= óá¿ësƒŒzÝc^.ò»éW¯[kÿÖï"‚B=€ž.îtßxøDˆíÛKü.$HÔè…1æ,àqà4¿k‘”ø¸ÚZ«¿¯P| cÌHbO:pþª±4Sl¶Zk«ü.&¨"Ó€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8L â0€ˆÃ"Sˆ8ìÿìÆÜðšNñÍsä¥~páÝ{Ï»ßwÎ=÷Þ#ªÊF¢jCÙ7ƒoaGD¶.sΩjz©§ª,æAŸÇ# n¶EŽ>‹WTÙ/Âç“§äX{«î¿y•`â¡¡ªPÕik ÚT‘žÞFjkÝM‹–VãC€6`ÚbG\%_Á!° NÁº˜¦òá}ŠØüBEÿ{Ë›¬ŽTJ¹x!D8œA޶úè:±ƒŽÎzjëœù¶.£#1Âá ªœ2 N™ DèèÜNwÏ.ššì)*Þ‚Øü#Ãó%çR)åÙ“8½çCŒ=0°{n*pïN”D"gk“LäˆpõòwB3gnõÏ2û3k»ð—OiÅ‹}4¹ré3_‹E xþô7=Ý3 ÝŽ’L{ø+’åºÿÙìÚžñx<•(™!é”2|7Êã ƒãõ´´úh>XCðm’Ñ‘XÙ­†RÛ`›¢Ñ¹Æã£"•¨*‘qÿõ&¬®.¾ê‹"pèH ™´¢š?Û9T ¾Yœûg³¼­>¾{OqÀ­‘À˸ѿqéMRÍsr.$^¯Lâr1b5¯W&—$D¤ØgãÄàlGï›ùiU}½Ô³”8i€ß‡þµ¬¹õë-/`Y–4¹ œ"/Ö4”YÓL Œ©ê5;c'IpØ…ßf9c'hαöê) ©êÇu pž„{–ÀSå8"IEND®B`‚variety-0.8.3/data/media/variety48.png000066400000000000000000000020521362063646600175550ustar00rootroot00000000000000‰PNG  IHDR00Wù‡sBIT|dˆ pHYs11·í(RtEXtSoftwarewww.inkscape.org›î<§IDAThíš_hSWÇ?§Y’jãŸú°Z󠥊"CܨPôMðe¸ñÅâÓ^&‚:¶e(¢CE‘±‡)3Ùp¢2cóßÃYÿÐø jÕ6X“Ô´Mnkîo½ 7¦¹Í¹Mšò…çž{~ç~¿çÏïœû»W‰µŒ†j˜.ꪚðÁd…J©ùÀ¢æ2b"ò¶ TDr gY– ‹[ÈÎYÙݨRê!ÐÐÜì™^•ñx&›}$"+³9J©vàz ÐÀ¡£‹i ùfž¥ž>ã‹Ï_1ñ†tZÿåªb®^NÒ÷|¼¤ºccÂÅ Ctîèãî¿)­çTD@*eòóOqm»èÀ;öîîçðw¯I&Í’l*"àB÷ýð¥?®%Ù¹½þ™²nQgNÅJè“x3øŽ_Î'´íÞG<žáà7Q~ÿ­ðÀŽ¢®\zËŽÏúw'/mq†ÐõeÃ(_¤ãøÑÁOf‡ã59s*ÆÎí/¸ñ·ópš&|Û%Òk¸cZ"põrñQ(ièïçÀWQV­nä“ö­m~–…|¹u8irâ˜sOMNÞLk#{ГæAO¿_±¼Õ׫x1.Ñk¸r8y¸Þ‰ C¸/íÖ\ >_q5qõzk]€ÃB­›K*51¯EÞObÅ;¬2ÌIÄ”\{{ÖCL³ðÁ ·$¯îß›8‹ìÙÿáT3ãÈrÃâ ùa•ÀK ©me#«V7:®þ™„È„|ô0 0EdȺ™™ë´*T; W,E#sJ©…À6`‰F'mVhÔˆ¿jÔœ‘üƒ–]Û„ÑïÍp9ž]nÔ uÕF]@µáê4ª”Z,·4ÖI ”&€ RêS[Ùc¹«ÍE÷C·Rê ° °‡Õ”•tu§YŒ'EdŸzÑß´JEDDZu ÜL¡CÀ÷@¹_Á¬¶µ =û »XÛЯ&ýŒ:—úÏUFÍ øŒ1A²V»¡¶IEND®B`‚variety-0.8.3/data/media/variety64.png000066400000000000000000000024011362063646600175510ustar00rootroot00000000000000‰PNG  IHDR@@ªiqÞsBIT|dˆ pHYsììu85tEXtSoftwarewww.inkscape.org›î<~IDATxœíšmL[UÇG 0+ÁaŒ3¾áœJ¶,ê‡%ÎÅhŒï13.Ƙ€qYÌß>ømñ“ÔLÔ©¸„ÉÀ€,lYÄeÙ'c"Ù‹ Lf)¥”Ñh?@¥-…ÞöÞö¬kÿÉIî¹Ï¹çüŸîyîsî9JDÈg\£›€nÐM@7 è& y/@ñjF¥Ô:`]–¸d ã"2¾¢UD–`;ð$ÇKxÑ—í }MàüÞ+€t¦ÊÞxUt&¨”*.åwm°±ù¾5ä2~;ããÏóÁHÕ Ü""ÞÈøPâóÏ蘒î²B2ÓøâSŽ£Xð­hŒØâ¿["Ïù_é‘¿‚4|ä¤ö¥Qt3é YÆA›.Wˆžnoò†Q˜ö„hou³³fA¿ßü/}mn›bn.=‚¡½ÕÍ®ÚQúz¼˜ÙÚÐ"ÀèH.Çò¹Ÿ*&]!ê?tòVÝEÆþžK«-|ö±‹PȺ©ß‡¼¾{Œ¾ÞÔ¦hàä‰ΜòYÞ¯ß/Ôàdßûÿ¦’ pä°ÇP¤6Ÿ/ÌÏ'-ék%ÿq†÷Þ7ü†% ­ÅÍž×Æð›"&ŸÔOàš˜7Õôÿê£aß„¡¶†¦ÀèÈï¼ùû&˜ §EªéÀ$'ŽÏ¤õl:èëõòݱäÖp .Ç4¯¾ßëæžÏÕBpêyÏw~ªã3o|öÆŸ±: íqÖ…@}!e¾÷›{þ\–t!pÕ)ž›{>÷sÎÂ{ê—Úç€õT Ê9Çùž{.€çÓ©à› ès=^öÙÇúƒ_ö†pÉ|±¿À‹¥ç ë|0Î…U.pýTðÎýÌZȲÎæìãBçóÁøÔ ,bÎßÏþŒ“>û,¼§¿~i }°.£±Àqîù©¬ï|Öv.<§²®sKøÇùÊì÷«§á= îé©_ höĵ¹@Í¢±@‘Ôëp^»Û’±K6·uö¶§ºR‘ޏe4û¡ŠV]?jJ#¢B?2‘÷"`)íW‹é%·Þð›Åß¹éšâõËÒ…‰ñÑÂî|CajlrzPË~­Âü°ÎWæ>7È0¿Û|ÖêžÆzICû<­ë©,ªÉ3€šsŽ'w4'b—ml^õ¥]›¼šZçÆ¢l&Ú@DÁWT=(U«dâF&KÄ›˜0>S%ˆã°bÅ Ë6";®,Xáºt×ÊÏÊ¡´—njsžúÞŽÃ;}oæÉ}Õp˜g@ xÐS/d…ÏÂ{†è% í)¬ëBÀζ”'`´f=~Öµ_¹ kmoGêòŽæèF­‚Þ¨m›-ŽÉt¨˜˜É͹ ùBHÊUÛ’LΔ(*Âà  ìºL—4vGÀÈÎÜë´“Ì™l4|.Z×B‹»×Hû£½·N¶ôní o|Å Yºloü¶Ö.'ÒðÔácw~÷îò ˆƒ9åÄ5ƒ“A>°`a·ùiPϺ̧‡^’ÐÎv®u(šíîΫ5û¸qIº{Ã’ìu¦)®ò5ùr™Ñ}ÓD£6+Û®±o8ÏâÖ$†ˆ*Åøx¯ª¨y!M¹F‚Œ ϰ¤»…Jµ„)$Ó%º‚:+‹”ÏeÛð¶¯"6ÝGl³à‚ÉWlcàXHÛ G.-Ø÷Ÿ‘¦ˆj¿ü‚7ö\þ¿%ÿc— ?òÓû§xóÝîÝåP»Ôáô©ƒéó ÄÏ€+YØmfîùYp_|½¤ }ž}×ù`mM-NÕJ$öÇ?þñk÷oûôk"R¯š(•è«÷=I %Ÿöîví›&—ªáºeÍTP@ĉƒ‰Ú1Crÿûɦ$‹ÁÁqÓqF&K¨Páy!o–‚7}é|J‹;p¬”ZËÀ9kYÒ÷ÿxyßø§ƒ¬Ê´¬ ùùíÚÆPi%7\¾å¦ó¶4M<2=ýÎÏýägÛ¾ÿý¯|ý»}€wüÿ9ñìã\ú„æ T R’/öøEé9Üá¹ ÎÔ r¼D—XsKsú›ÿþ›vÙùÍk®¹æŒVM”= ‰E#„ÂSÐÒC„!Í)‡Âx‘x,J&"°¨%…ÐÊ (º ;†[ žI«ad¢ÂHÁc¦bš™„ÏèXŒ]wì 8¥ GF×âY9ŒE)†-Ù»„–—ÐÛ qz· ô:úžxݲšUWwd{{{ßðÁ÷¿ëküç'oý̇ÿèÇNÌúß"³Š}¼X³êÅää®Ã³¢Þâ¸~·ð¬ž§^–öyô_ç³®'YÓYÅnjnŠê¶Oßxþùç¼Á4Çó5:0, G´d²LL˜¬TÙ~¸ˆKÀÊhœ#µ2KZì+!-hiˆrûƒTÝ€PÃ⎠Å*©(¹DȈ)96QD(‰Aˆ%ëÆë)¶|ïÌŽµCßeNJײ?¿ˆÞx#c3¬¹¸‡ñ]RÑ€”7Âß}˜ì’ÃøÛò“ßçØ.ëFÒ¹†† ×¾¬qÃEÛÖ¾á›ß½ãã÷_ßÎ3–×;^Þ¬::áB žq›á¬»|Ú茇öXØÙA¦¹°:Çöû>ôî íõoûãd2Ñ)´æèXí§“2ƒþÑBKa$c %µé\dS«X›q/VhNÄÎظ¸‘Ö¸dxªBßD¥n¨(+‰ªº„† }š#1âº~;þ)¦‰MÛÔÊŠR"†\¼–M®£tW‰CÖ8O¨F†‡wÓòøa¾Òt9Kwè)§9RÉóÍWˆ&%/?^ZC†Ä¢vïï½í•Ÿyù5ýôùòg·Ýñððñúð×ÏÉ–5œu„³ªÓFg4´/Ð%žk]íYGçê®oÿ³¿úó?j_”¹,n&h )XÖ¹ššßEH¡ª¸¨7GAôḬ́qU–U-IJµ®ˆ$¢}6u·ÐÔ§¸@¾T`¦dP©45 ºs ”k!¥R‘2’ª7¤%‹cÙU—ðáísÞZ‡µ[/cÝy­c;,+SNX´^¼‰üúR69»•5©ÍÜ9õ}vå·³Ç|œJ!ËË Pa:DJ‰”¦Xº¤ûêÿó©÷l}|ÇÞ¯üÖþÝׯ'fÊsêÈ;^>'ñNÀ{ÜYg,´ÿ…>ì `íÙÅ4Mç¶Ûnyã†+_ÿöˆ-£Õê1’éB€Æg*ÆÔ*\\BaqùæV¾q×a²Ž&mY Ktlʲ¶+Î;'XÒä0\ÔŒJ\¸¾Ë’|ígD"4¥"L>«{’ŒƒŠ¢\t‘–¤Óœ¨pðæ×½Ÿ»Ÿ£Åñ¸j¹M[|7f„~÷]Ù„¹ 7–Rt-+Húý g×0´e)¿²îjúÇ2x¡¢æ¡5R¸¦‡4,LÓŒžκßþÎw>úò;ïzüS·Üò™»fÕÕlkÌ:ÎÖYp_D‘ОØÙyÁs}ºÏJÝv.¼ä¢¦ßú±÷…Ãï>ß®"ºß‚R ‰Â‹Læ÷Ó”Y‰ú4Ç"|ë®<6M4*éìHÐÕ”d²Xæ‡M C“À÷ؼ*‡ÍQ(U9z°Hg«Ã“‡¦ØÒÛ@2îpï£C´µ'Î31V “HqăÎã,”¾ú:F‰®è ú„‹ÞóaCœv3‡#6RøÞÈÆF‰O 3=ø$^® Ó¼Vs ‡½ ;¾®¾Rvl©1 Uôpœ(Â$c©ö–æÆ¿ýÜ?üùOþêo¿ð¡ÑÑÉ'žNœÏ®çŸ÷EÒ í-”(1{ÌõD¿õ„…¼ÿƒ·œóÖß|ë-ØFãPôc8ÙfÊÕ#x²ˆ’ÜÚ ÙD¦Lè°Þ*M3ÅUSÄ#&UÏcrÒ¥&}¦ -9‡æ¦ûË8¦ÇÑ‘<'Ø=X⢵ÍL•‹<Ù?ÅD%¤³Rã Ûh°ºØ9’gï`x"„ üðƒ\ß,¸sd†§ÌE48.¬±bU–î .ÞC¬¹íV~øþQnÁ™>L¤’>®Z“â¶¶#„Àó|Jå шƒö}¢¶À®øHÓ@“5VtÔP~xÝß¾ûª%_øêïyàñþ9õ9Ûƒ9ìYp_DqóiçIœ˜›3<»ÿú,ëjšfäëßþú[Ï9wóojá‡Z€!$RÃàäC¤¤b ë¹üµ’KO÷b~üážGv" A$fwL\?$50¤Di!¡X©ºšXªµÛ–¤c6m ÍÓÞ#cÈz ’Ò\/œéËÙtþÜù™O2xè2ÁÏ4©U8V(²®¹…Lov ¼fj¢D±0B_ÁÄHDirúÆ2çðÖ7¾ C(öî~Ó2ÑÂ2¶í`;Z)¤Äv"TŠ%ܪ›ÿ÷ÿøñ-ÿûCŸyp©÷oÝãÅçÙc»sS ÏÎÑýoÐí)€/à4ÛÂ:€ÓÔÔøá‡ß×ÓÓsåë?ƒ¤µï¹çžÏ_vÙe_á`Oì?ž÷EÔís;;¹¶uµ©'8Ksé÷¼ýítsç_ñëo —˪ZkLÃâÎ;ïeíÚ5¤³I¤°øÊ—¿A2™dÍÚå´·µ‘Ï—‰Ø­í]ô?ò({¶Ý~| Doµ H$u&ÐhZÒI¶œ³3 "ÞNP®`ŠI¼²A¥ä’l”¸•(ž¯°W­%ÖÞÅ·þåVª•ƒeÚÒj&±IÆ%R„OsSš¦¦,Jk”R¨0$Tš0 CM 4‡ûÆ)תnÈ–‹/á‹.f衇ݶ¬!¤ÔÐÄ-„$Ó„£ù™Ÿ½ê³_üàÁ‰É<'Ãû‚À= í/^g´/ØÙÑá6²Ø¢ñÓÈÏ|òÏ׬¹`+Í­=˜fZ‚»~þ ½½kø—/}‰ŽR*U˜ššæµ7ÝÀÒ%Ë™šœ$“ɰbÕ2²™>°~=a­öt–=pÜ•A @#É8ÞýÖKéZ×ѹ·¯ŸR5JyûÏ)ON¸UD,Bv±Åá]S$o|5‡³m|à}M&áþ]£´e£fi{#¶vÉ墌ŒV¹ékY²t1A ü_¸^ ×óñ]ZÍeÛ½‡è-5%Ú´ùÉý;øVOÝž‡£Àe›¤ Ȅˈ„SQaˆ§Íƒ¿çºø€¯Ç˜ßêΞpÜÿ&iiŒóe:Í%~:5qecªãC_þügpÞº5W¿ú&*ŸÃ‡v#†ÅäT‘÷¾÷ClÞt1GŽó²+¯¢³³‹Ï}î“üáüO^õªW°iÓ9„ªžw_­Vq«5-PZ€–m"0@ahEcÄá7®ÝDwW;ªëò놺ùh¨óOÿÃó/Ws"kJ̺v6šü Öi íóp‹JþwZbNæ=ïÿ©º«-i266ͺµ[øÎ¿~“õëÏçïøsFGÇøÛ¾ŸÉ‘~|à–.YŽ 6l\϶mw’Î$HÇc,_½šÞÞ%ÜÿÀƒlÞtZœh­ ‰Fk⸫¬´ÁŠõkˆm~Ú¨‰C” 3¹g'AÙ`Ø-Áð®ßO´1IGo•á¾fÒWm!å›4¤"LWt”õ+›cHC |%ÀèP’Š;,jËpèÐ(méžÖ,nªCk#ÐJaJI«Ð¸ƒH%ÄôB¦” 4CRJ  >Ž–ˆ”¢Géu?kLýÝE}Åwºj¡g—Ù÷mAp‘~™~Nkhgi>·xöŒ”Ù';.H¼¯-÷·{xxåâ›Q¡Ã#÷ßÏç·‰'vìçÿ’žžnÎ=3ûè'é^ÔMkk+!w²jå›S>ÜÏ…œË}wÜÍðÑœ{ÙÅlܰï8žõp(!9Ñb%—o9—+_µ‘ê {žì"L{4ö&Ü1ˆW-P>ýQ“¨¥}Îýí«©Ø)ÒNˆeJÂP’KE.“ØŒŒåYÚejZ°ª§ Aܱ 0Q˜Ô($Ê×<ôØ!<Ï$}ö XÖê–6mõ`YD’CâÑ2mc›%ŒÀA6„ƒ3-0º3DÊÜÉÚy÷mŒ}`ã#å¿() 'C:__öYc¸§€ôÿÞyßû¥ ñi ís¸Å N±3 Y%Ä_}7—<·aÿy‘äÇÛî玟=ÈØè8MÍ,]ÔÉ-øKš’„ïÙÆâõ‹é÷2 òØ#ðÔž|ç[ßfmG+õkø=Nez’Uë¶R9Þ.Åñ±ÖàK0”àš‹/âw~ÿ5¿}ï]ÐÙ‹jo¤è\2Çè:ü#S”’IâK×]¶„œâGm¨VAˆ4-ŠÍËbLNºr6[.ÙÈþ]‡éYÚE,žÆ¶ìº[®5†ÐH&E´ ´íQò ZrqÆ õ¬.[KT¨I MMÙ$ª.^6DºÄ™,Îè  Z€´["?bÈÔHô«­·â}—h}K ç <͵¾Ïûv/p¾NõÞÏ‚ø¥ði í ›Kì´··¼ãê7ÞxÅÎ=û8pt”ï|ïY¿a-ï}ߟrÓM¯¤ïè!>ú‘Oqï½pã+¯§VªpÕÛÿ'æðZs«ˆlµøùüa)n|å+¹óöŸpÿ½÷ÓÑ÷­›.eÕº­ÔÄ3íRëãËBhhÊ&ùí·^„2ltf²4…רÞ*÷ª"tž‹icÍÒ8¯\jSµ˜S)Y‚ZÔ¤1×Äæ5MLÎ¥˜S*úlZÝŽ[­qhÇ^š;è^¼„0ÔøžûtÅ„”èPMFÈF-Ã!ɳ"'Ê×'#B!h)I†`Ä%¦°°…B7;¨@ 3³5FÚòÐÑ(™U!r&ECc‘hT]ý`GfêÜ{Ž}œg¯µ<ß*’§¼ÕsŽsÏg_›wj §þ‘xI|ZB;K§š;wÆŽsó;ß~ÙÐàØëÿîC·"„¦¹©‘›oþüñŸþ.Cƒ a öqÍ…øì?þ+ã{÷°åúkY¶ª—²ÑHJxìܽ‡H¥Â]í¬;w 3Ãý|û_àÂ5Iúžz€ª®‡¡Ð_ \¹yV¤ =ù•é*±=ÿBy²‡RÃbül Å;(n¦-:ˆyîë˜Ñ&áÌFÔ†û ·´PÛ”ä‘í£¬[”d¬\$™d’‡Ÿ:JGsŒË^q%Ò„0˜†F‡ dˆ)C´¢|uË›DQLGД®PÑ¡5y­°ƒLAèù4!Áx€Hæ°T3®É?á’Ù¢Q•ÅÁqRK“cšdyüuìr~Ï€{/ó/ï:_€jöµ¹°Šy®Í}íB Î…vÁêà€ÏdxO;h_ [ü´•½êª«º>ù‰/þ¥e˜âU¯¾Žeqƒþ™Å'ààî+é^ºK[t„|¥Lq¼k.]B$!Þ?À@…[u©Ä!Bû$"‚ªãÔBVv;l?P¤ìÖ^ 4–4 À¶Ñ–Cí ¥çr‹Ÿ“ul;öÎw¾ó¯/m#¹þ¦W°çï¿ÀL Ød‚Úzï¥p€]?ø¶¬§åª×°ç;ßaèà}¼éõ7°Wg(W}f–žKK2Š~ïåñ¯)ÐD›žæVj"FX›A?ùc %‹Xñ†§Û=2…Ö¨˜šemÃ켯†_ó0Œ £UIÁS,ÑkÚÛ¸òª—‘K%ؼ¥…Mm:5zÖõ[±‰‰,•ÑZ`8)d$WšDQdàaÈ2ž!«DS6É´b}·æûMÂñŠCÀT(H*ŸRÕ£- -´DñÉ{É”„¦8RÕ°–JŒ|'šÀʤ "²¯Úø'¨w¿ý—œ¼¶òìÀÔ‰û8´§Úïh>«»P¤z®;~ªýŒNz¯3ÕêžVо€1Ù“,í>{Ë;b©Ôê‹Þv1ÿùÙo“Û}+fö,BÜûŸ´_z•’ËHÂäüÅø• ÖUûhvó”oýC«Ö‘ÞxΡüÍÿŒnoåÜ+Îãœk¯fÝê^Â|™®ö#ïx+%Ž'SA=yQÀy‹š˜:†ƒKM¤©LÔ(•4‡šøåC½€á©”T”¾_Æ3l|§ÆÌd€Ô„E)P˜(¬Ê¾_ kx´d2,[×M¤}1Öâqû€m€a˜(ÏEøµzë7 '[‡6¨¢RQRŽfxè+º¬ÉG€º¥5¥ÄÒ€‰Ç"”C£V#&j(l¼’¢6mP)ÒÐà3yØÄÉL‘p\*CãèXŒì¢çƼË?8^ÿžBøCž ̉{7×úÎ…vîl"9ëus5;2=¨§ÚMaÁ@Ù™fuO+hgéT}Ù“†xVu6®¿åÓ_½éCŸ¾”Ã;v3rß^âëÛ‰?:Àîl”·ýÑ»¹ãçÛñƒ"7®a`h]©aï,0!Z#œûÝ»éúÓ¿àö}Eé.¾æe<ö¾Hxî:Oxü³_£±)˺‹6P~Öí¼ã¼•Ô†÷Rvš =ÊT˜¥Ú¿É©€©¢GÑõ1lª5MYÒ•² €Œ'¨º* ¨ÍN RïX5^ºdAþAloòc¥2Çö!"&‰d¥A( <…W,óÀ}ýô)Ÿ¡1ÍŽuK[Ó’²¬û\ðK5"Ò!1©”šÛ%xìB•tg ²*E¸LZ&£~€S+“˜Ñ S\âæk®¹fǶmÛúxöXí‰åYçBk̹¯§Ú÷h¶æ³ª m“²Àgü “§ ´/ ‘âé(lȼýÕoþÓrßvjJÐû¶+˜ž#¾iZ±ÿȶ\ÐÁä˜`jlÙ·“ÖÁšò-Qœ˜ÁktØûÝÈ­/§gâAß³ÿ£eÝoý]}3÷|óßú§ïÑqå›Xœ˜" DýK‹ŠbÕ£\í§<.¨…}Æ,¦«.U/$ï…¨@aE ^H- ëóÞH¯J)AaºLƪ04V`Ïjj’ëÎKâû,U&,ÏP™˜!¨ºôíÙE[G ¥c>åªK‚iDÉמâÀ„ÇdT35Se¬äÕkVk´LZ!­¦M$*Pq‹B!ÀóIíqh¬Ìâ˜à˜ hTš\«Aå ¢q­A~F’H ¦¦lˆÆH¼ë]ïúËmÛnÿCÐsÝâk,Ͼ¶Ðnó­þ8W {ª-Ræ.È>û}N²ºgŠ»|Ú@;K³û3sƒO' óüÕïþþkW-_Ö;Ö¡¥¥;ò*JÞÖœ#Ó­D"*C–Yݾ‘ò…Ëq7ž‡qt’(’Q©hp#Èx’ÉþA²+Ö°÷mo¤³¬9p(äg?½‡K­¥|N’l6ËÇ>ö1¶o’0¬Op‘ÜE ÓÊcEÄù&ªb+¤Ë aÒ *^ˆ4 4¡&jBâkÍšK¶Ò¸å"þug?¢Ýce«ÄDrßTŒ´ï`W \7M~Æ êèŽfÆ1p © E*ü˜¦ã\‰¨Ô³ –Ù’¦În’É$Ë>öQ†ž|Œ¤e2^ 0¥ƒÓÂЗ”ˆ‹5òU‚œç ªëö"z‰É±i…eÛ´,ê¤VY¾|ùÆßú?~Åmÿø±ïò '`æ‚ý9¾ïó‹®;Ó41MÏóP깆8_˜¤”ضRêZG'ê¤\.vww¿yjjªÌ3³€fƒ5Ûý}:¨‰D¬÷¾÷½«/½ôÒ󺺺6D£Ñœã8Û¶ÓBÓ², àV«µZmúx™œ™™zðÁïÿûßÿøÈÈH•“·C™½«Âìës÷3šý#pR°êt¶¶§´s€ íìÅØN,(bîû£[wg¯ÕõYduézwIH-¾'°ú*¡Ò´é‘›H¤lò¤µM¥}Ù[Ù¾ý n¿}BˆãPõÉÒ”õǺ¾,©Ö¤@+ýÌ@¢¨wå´Rh­QZ£¼þ o`Ù²e|úß>‚iX†À£ämHrIhˆ†L—%Ž­iMÃð44¥4U ehÎ &Š0™W4$¾ãeA¹ZçÁ25[×\Îæ•óÙÏünÕ­çDÒ”$1ñ(¶iRõ\±“SE¤ÏSJe²Ù4RB­æ!žç!¥ÄBZZ:xó›ßÂCwÞK)_Ä4 L˪¯„aG†Á]÷Ýý‰?ùó?b$Sþ IDATþ>'Ï·½kȆ\ÒùÔ­¿íúõË/É5ä6MO؉=»|òå* Ù4¿ú+Wrï×ÿ™êÈ12QMÑè§Éoˆ S³//X×V&JýÛα{·ÝÿÐ=û˜àä]ü9ÚˆìŒ÷tuçö}Næyû+é^d|òêp°Å <•F‡6R8`X˜†$¨ID TÔÛï“H” i»wŠh6ŠÈÀ¡´A.•`th’k_û7¸n Ó’uX…À4E$â`[&–41 ›šçS®ÔÐZ†!ZJ”Rh]·’ FF‡YzIŸøî߆­hˆiÀbªìÒ’\´\1Y1(–\¶®1yòˆfY;L%#3ËÛàþß7hÉL–MîÞâùuГ1Í—~áUÝÂ'>ña ÄD"¤dåªRÑ(±¨ÃšÞöîcxb O)r©$ÒÐø¡¦æÖðM©äR­Ö¨Õj)ÉÊ„¡æâ‹·ò¥O}Û4q‡XÁ}Ñ¡ÇÊÎ…vv_Ö¬w½…7 S˵i ¡¡‘†² !¨ªªéYePñ¨fè^šâØP…ZM°2gP8 3Ó¸nË–h-ˆF,ÂÐGJ‰eJ¤”¤RPX"À´4ÂPHS • ‰â+M¥PóB„0‚´À«Õð}íHS2U iÏJZ“­Y‹|ÙE “Å9Í€6‰X‚ŽFÈÆ4U–´XDmEÄ XÚ¢ CÉî!E4¢q,M2 A(p½¥R) é$‚l:NoO'í-Äâ öìÛO.›à²­çóÀ#Û‰D¦óy6®_†Òš}úÈ;%Š%›É)…*l'‚ïy <Ï#¥ÑÒ@ZX5L!°HËë^ñæëþù›Ÿÿ ÏXZí8Žñk×ßtÃy´¾î¼ †rùê> ÅÐ|ã(¼w‰ÅÔQX”2–æû…¼þJÈä4û÷ K³ªWJ Ȼ:(~g©Å–äSO¹ü„g<¶Ù†ÁŸÕîÎpO7hrŸH½÷7ťЖԇ[„8>ôRïc*_£øJƒ4ˆ4A™P¦¦V¨’ÎZ(çÈ¡ir ŽHôú¦¦\èj±rE/È1úò,ÊÚX"EÕ&‘pèéÊÐÓ݆c Çɤš88pŒ –´pÏCƒèÐg|Ra7X”Ê>±(’Š šÓ’j­Þ•ÉKš3‚ KÃÓ!5ßdó2E¡bjbšbEÐÝj0±/dCì8RoU+ ¤VŒ$å1A¾¤ðB…’öÖ&2é8­M ìØ}ß­`'qdžȆûhK(ªýYìF$;inÊѽ¨…cãÓ$“qÊŸÖ\šxÌfB²)<¿Þ¾«ž‹’ ñW†X®‹¬ÁM—^ô²«o¿óGwüÙû6nºôšòïøÁ] ËLúÍ(µ†EÅ­†¤è#¯M:¬]»”ëM²¨Ër&x>ärš WðŠ‹BþåÛ#eD$4mN›Ç̘bÛX™\Ú&p¤àgC4ÖÂ÷oÓ{™ÏªzŠø©†“NhÞ¥aO½¨Ð>×ø¤\ã7fV¶í¸A×@[ ²4HЪžŒHéFÔÆwCtÍÃp7Nì9ç‡æšUGYuN+µjHkg„=S>NÔ¡«ÅaýêM=¦ †-ˆD,’±^z|K·nÆ2h9NsK†§vÑÚ%KÑÙ¥VrP:¤¹† 86èã+Z8f@W› •jùrŽË.¼•Ö¦ Øv÷khL=B¨4¹¤Ä¶%]Í BÅÊ.A±Z>™‰úì4980^!„Ú8A¯Ñ”ë"|ÊÕ*…ÑÞèlgõ‹rYÏz„5—R~„É=’Q‹ØmÅŽ¤™™š&—M22\£P(š;6E¹RŸpP B„ÔX²nz„®ÀÐR 4­­Í7¼üºW-ºîº¥WzòÇŒŽÍà8U"‘"V¤HÌjbjf˜ZU3Œà3XFíÝ-4·ÔDÔÐ\“ ! MX\·ÜetÜâ57t¬2øê7=éñ{/— ç5‡Žš\¼T㊙"|í" Þ „7µJÝ=­¹¥ª™Y 9.4!áé¶zºXÛÓi¨SõiMÀ¼ùæ›_FH$ôA¹õ”ªAè‚2¨÷o£ Ó6 j>ø­’ŒŒ¬fàñ}í{ŠÑ¡ÝP«ÑÔ ±¸E_¥\žf|â Z»˜F ­l*eE±P¥RÂŽL’m¨s±4.IFGÆ¡YúøÈ,Ú»}¤kÒ"à]¿n2>ì€L l€R”8/—·®o5X•\—\—ŸïíéYÄÉë]ÍÞâs¾¾ïÓVùtÙÚótrO倹nݺ+õ„F‡'rÐA‡ $S!, Râ‡áz LP!FP¦<óÚ–CCÛ Ë–š"ûdÖví˜$¾DsÎò8雟Ýù$×\ØÆ7¾º —åÈ©%ŒŒkœEöì;ȯüêÔÅÊuëIgš°¤IcS']¬Z1cÛìÙsŒÉ±í->RÔ‡ LËf"ï(…!¡5 3“_äÀ¼ÓI2%b¼÷‡3|ðÕ\ßG{QiË8D.©†Î±|æH cÒ¤»§™'v%ͦhwêM%T!64)L0 ¤iaYÃ00 ) †G <ùÐ2»1L‹Ñixx‹T\ßW¤³UÂàÉd7ì,®[Âß%¹ñò1Éwî°Œ€eŸ¨4Ù²T24­90b’±5‰4Øš²/˜ž éŒBS\Ͳs.¸à6;û­]»v÷ow§š€°Ð,£U/š¥Ç5ž}þ,÷¸9k4år¹MÚ%ëC²Šú«”¬»žJ)/€šC˜¦ Vóèj"š.дGN¡$söåûyðh?²_pÝËßÊS»ñ¯ßû)-9‡ý‡££c%ŊǾØ)—Ø»ïùJ iK~þà0Ó3e~튷òúKßLKƒCÔä+°w@³ëèOî»#ø4“·QóîÇ6ɸMÄ–HÛÁ3’45/aÏ®4ã}&ø!ýG+´7f¹¦àpջࣇßý¶O&«1K…i…Ä¢6ÉXŒZ¥ÊÕÁþDh¢¤Â0#(e!e‚dWŠÖ% þxÅ86¯g×Þ¡úŠ^€cõ%fðUH !!A a‚iƒíH"Q‰ã, LCòÈ}5TéZš–ÑÑÙŒ ab¬ÊÄÔ Q»‰00™œ„BQP(Mb˜%¢h„2˜R<¾#¤»]ÒÔðäN›ïí(Ñ‘±•LO „ hÏzLÕBŽ)Áí#fLM)–7B%€þ2.¬Œ¹k®ºê#†”N^@aöê’ ¦SžÖöt´´'Êl+k\w^ÓUBõ”>Ž´Ð`X'ÆD¦¡¦¥ÑBzÛ´IM¬!BXô1Í8k\ $ñ($œ#UÁw~6N2cÑÐä°cû ɤEa:$nÀ戠ÒwŒx×ÿæ÷ÿæFš³Ý88BgK™ÁÂ!úˤ²Š»î8š59öícz 3N¾ Ù·çæH©év å>ŠN@ÑPô™’'†LFÒ–Ñ´79D"!Q;µWm¢3{%{,r ? ©¹„ "ìÚUaû£É%¸«¡C‡©Öù"‡û‡ioibõŠv )™˜ÈØ$SñÅ|î€ÏÅÑ}¬í‰`‡&(Ð 1ašô?¾‡öæ¦%ÉçkÄb1Âãݹ@… ¦Vh$ …0êCY¦¥±ÌzPPk…RBüÇwŠ\õêsq;±c” šþ2BV \MÍßÇøˆ‡…JÅ@›šF'`Ú…”#I)Áî'-vì©7%Ù„OÄül'\·QP-IzršÎT€é ªeƒ5K R E2©¹ó`HÒ–4ÙPu쥱¨ù×Ų÷§,<©`vžóÓù3ÿ-$<‡NhçKa<)±bQF¿ @L0¤@!êWI³žÇ–5X!HIàƒDc5XÈ0 ª%E,cQ-*âY“pÜGZU’†O~<Ž n¸0·:Ék75²í©,ÃàŠñÄ?þ”>SӸʠ£éZnûâ÷¸æª‹Y¶8Éþ¶!ºˆ kš8fØvï(K–iîùùÏùø?|­*Ï œ„Ú@ê B㤠QÅ{>ö(AéQR=Ídý½KF'Võš”Ì+×7Vl¦âT*,Vøn@ßÀ©„…!LšH¤b¬^¾Ê¾|D"ú*lh(Ò XÞcz²ÀP1б(¼‚GµXerj†PÕ›‚0ÄJ‡hmê€ 4P@!D€”òøfÖ BßxG’Ð|’™¢KWçE<¹ó&§\\W33:E:µ3þÙ\„Cy<¡évàÒΊæÊ†€õ-°cBÔWÄ´MöyŠ“ŠZI2U•´Gº3PñÇF$GMÉg·\œ„øÓ€}ãUl;*¬*–‡/+š2&û'BQIÚ’D3šH ì4!‘B¾1s+î÷yöl¡ùæè;’ü¢@ûBÏ…V^±ÆÙ°©Ó<¾P„@† ÂãýX]®jÂPÇCi\…´@‹úëð„!ÐU‰‘ø ‚ª"ô BQÏnÂ71 …ëùT]ÅòÎ6ö ‘nÎðÃF ´W-/jcff†O|þ¢É®=£<¾C±¨-J1¯hn2q=E¡Tîñ|ƒ½E CKÚ%¬É[tNk¤ ‰ÔXÕe²¬É Á®BL¢×Œå‚Á²dÿTÀ½¦Í#6æ˜I€dÙRLÆÄŽV÷¦ ¦"<´dÏþ#tu´P-W™˜Ê³¤»ƒ‡bš{÷ïã’­34x iDD”J¥Bks3““ST¼‰r•EmØRRs}<¿>É ¨ºHe¡¤Â— „Æ0¾Ô¸®FˆúBðBÔ‡Ÿ¦ÆËL .§!k#Œ#¸îQ¦§§˜œŒàºž˜&ÑP¦2•¡èç¢ni½@Q h‹B GJ‚¦t’ÛVÜ7 <É“GLþ}¯O¹2Ô¨š&5¡’„¾Â0,¢1ƒB±Z±§oÛ69Ð_ ±¤£ìí¢TV 5µˆÄ¡\®01U#Dsl4$ %5W¡”âÚÀçuù9©1„­ ÝbÈ¥¢>¾Á}fŠ‚ÝkÆîdÓ;j’ÈXðY²DPó5±0$Tžç²÷I¥¢0EOsˆ„ÌäK¨jµ*©t‚B©Äò%Ý,[¶ˆÁ¡avíÙG*™djl‚ªP+•ÉåÒ XÈc›QžÚ½t*M±\Å4뿳n­†V(§žc­þ/{o-×u–yÿö>CÕ©ñÎó Ý«Y²$ò$±“t’†tH:, ÐM÷‚n é@ÓÐ@èÐÐÐa¦! !£CbǎǓٲ5ÏÒ•î<Ô½·æª3í½¿?êÊ‘e;vì?¾­uV­[·êœÒ¹û©wï÷}Ÿç‘:DG6Æ$0*Âv쵑 ^WüÕŸp\Áàð(©ö4Ù®ˆzušJÉb`8O³1‰‰6RZÔ8N ´¶-i4 Ž+MCÖ´ E­)ùû£’¼­Øæ8œŒ"þäÙ˜NÛPhDüÃÁŠÜÒ'¸èNV #Ž  Š(ÃÚÒ]aÛ6ZëötÂùñJ#øS^Ȳø&;érjákÞ%õzí•QöEÑöšÛß³k㺠d³YVS?C¥RmÝÒµw‹KGt‰è#[€E"„… d«G8nM<£E«Ù¡ :6(Ùž·óû¿ßÍÁƒÏµÎ‰@kkÑ\°,A2é¡t“(Ç•„áÚ—ÉÛDz[ï³,‰A†½{÷2|×^ ùtÔb™> ™4„ÊáãŸWTŠ´c‘Lj†G†ÖiB¶%ðcà W[„M0ФvZsÕf‹(PØ®K>7Ä·þ Ç¡Vo’É&Y^.ÏK`Y‚F” Õ¶ŽÞ¡ ¶4ôôšÍ$TJUFÇsÔM”2$l‹öŽ6Ê¥ Ò²éîîæ=ï{7µZ ˒ضÀrìV©Ç¶° ÛHiµVDRbŒ!Ž5Q£ch,Çôä]î¼i…F# Ù´èPºXY&Gww7[~ô§©Tª´9‰AZ‚AÇix3‚zdèŒý¡Y“$€kµKÀΛ¶ù˜ˆV1¶,àšà¦[÷ÒÖßÇòòòp-´Ö?òð#_ÿìÔÔô /$\ж—ö¶¯‹}íkBÍ»ly|eñåÖï|òÉ'¿âº®Ïç©×ë4›ÍWü3år9*•Ê+~nÏóH§ÓT«U‚ xÅÏi8ŽC.—£R©EÑ·Ãw1¤”´µµÑl6_•ûÿýºŽçyxžG©Tzgùüùó_¸ùæ›ÿ;К´Z/7Ó¾’Æ÷šQ÷^ËHûrõ®DÚ~ðƒòù¼ †!Žã<¿„úvöm,Ë" Ã~ ¼ßÍp]!Ä·¼N†$ ‰ÄwuîKÄø8މã+Ùd/Q=?1¿ÝB</¿b|Çßõýÿ^Hý¯öuâ8&“ɼà¹Ý»w¿ý½ï}ïß}⟸À·Ž¶¯yùçûÚ—)N¿ÜÒXfËŸ¾pÿÃ4|‹Â ”’F$h„‚Ū`¥¢Y­kê~2f°Ë'‘\áÄ Ürýû¹-Ïÿ-Òd­y™!m»¤ëFt$CònŒƒ¤â§iD JÊ¡i4M4”¡»„*"P‘‰hÆ ) ?²ûgþÆÿËðÐ˪œ9¼Ÿ,dyFî¾ß,ã9>–¥ù­ vcž{ˆ¥GP<r²×0r³áس‚íãDzIIÍ3ûýoÿ)®ý¿ÍO¼k;6÷2Ô—§»§‹|{Žl>‡—îàþGž¥;wÜ}ŽÝNµVãÜ…§Ù¹ý.¤t‘VcQTAˆ$¶ë1XÄàó»ÿé lÖ¤Ýù,çáî»Ò\³¡‡rå"÷ÝÄʬáë÷~•³|Ojš Eg›`tÀâúl>ûiÍ5;B}Ö£-§ØzÃùà‡~S§E*‡_ÿ•?gC_Ž;?ôvŽŸ^á«_=ÀºÑ!þú|¥AH…0*ªqjÿ_Ð?¸…·¼íÿ°n Ë»÷nd¦n(1®›¤²²Â£Ç Ì/ùÐO¾—ÍÝY~ñ?ý·KC·²)Ii9dÉ߰˜\ŽIbˆšÐÔË F»㽚аOêÛ€i^Ú¾ó%-^‹hûzè=~¹’¤çf'ç\æÒ”YÊAšÅJ†ùbŠ¥R’åªM¹"Y^…Ž4Ôš‚sóY s)f*„¿¦yЪ“[¦å¦nK Ëuñ°ÓÌ–w±P!e²GÔbÃr¬XhÂB‘ôqË ±d„ˆˆÅâ%‡ÌúÛåEœ9—ÔUWñÜbƒÒ©iäÄYû¦0'¦Óuì~B±‹ÆICnpëºÉo¸žÍ[öòå‚‹ßPTË‚{~zÃWõQ­VéîL’I%ÉdÓ´uu’Êf1Z`Û!ÛHy HaS«xúéýØŽMÖê´ p¬,¶å ƒ&’$Ôk«Øª€¯“h’$2ÓÁ[oi',u2¿’gvuúlŽO}ú ß86=i6mé¢¿Ïæ¶=YΜŒ­7lßàÐð%®„t"$Ž|¶lã7þëßqq¦ÈH.ÁÇþ좚fã¦Jõ&_~ü1„ˆQºŽU–EÏ@†DÂ&eÛTšüHíì¥Ù–äT±Âɺ`˶>úÚR‹%Nž=ÇV4FƒM=ˆyÏ;%C’ €±.‹w¾»‹nMΡá₦Ü4tõj¶dä-¼Øs÷òî¨Ëçëk6^ ½|¼¸‰D~Ð3øÚ%6¾q ŒM$l”8ŽM*'Éç-ò‡î¬CÖ·.—T!%H)lÒÉæg»9³zÓ«WsèüfŽÆoælå­,έÃrwQTš•8¤¬ FÄÄB¡¤Â!F„ #@ã-.}é¯2:ž§§gIÇ&pVHØD9p-è rswó:ìcø ¼»ÞÈX߇ØÔµé8AäKÒ3Šx¹Jl-‰“‰í^ ‰m!m—ÂÔ4ÃýiºïY’ޤÙX%™ˆ_×z/•AZ­ N"å¤p¼t«ŽúHóUÍJ) ·Çâº×Ó3Ø…åbÙ)*~H÷À=6ÍÝ;Óüî‡ÿ׎r÷Íýø•£ã6÷?1·ÔD+ÁÄ„àÌTLÒµY-ùX¶áû£X¨0Þíñ¦·\Gq¹Äá#'ɤÓ\}ÍžF­_Yâñæ2óh&iÖ òkíƒI:“FkC&ߎV!v:E¹4ÁSG—9»+ó+<þ'èkó8~z•Lê½cW£¢Fyá¦pí–ý‡ e«Î­#…iHª³gX©z`2ð3ïeú±‡ˆÖoâÖÛ,NŸ¡^ñ¹xn†É‰9Ž>~‚×õ1’vI{•jH­Rg÷æ!WÏóäsxGŠŒò•‰§WÄ2:ˆ¸~×.OpÃH’wŒFsõøÊ-F´cPeA”‚ëî±Øt}ÀÈö{ªøÔg/PB걦³Þ~;7ôñÒ{ÚKsôÿo®àåkµÂreV…‚DªÈÕ×>ÃâRìÛ‰Q¥±2kms‚fCGÐh”’Ä1$­lB#0xìoç;ÆùÜÓGY.Ìqnn9ˆM#yv_ÝÁs^•ù‰&$KMc‘Ñh#1B‚å´zÞ„aVAo"A½3dëXšL*O—h’ʧyöâ#ŠÁ{®¡?µ‰/ýñ§xäSOQíÉrüs_ {ç.þù“\˜=Ë¿Ýù”dUJ>rH±«³uƒ†‡Gñ›uV—æÉåó$RíøM BÑ Gí©¯ñƒïî⾿ÍQ:µÄæ=[;³¬NžÇŒA‡m!-ÅPÞ°3»Ö*Èä:©.-éíA ËI±qǼ{ ´ á+<+fEYÄÒ'ˆ\jKñ:†0q‰r¹B*•F«ˆ(l"±&wíÀÉ÷#í4ž.`IA"ÝIj¦AÂGÆx™ ¡&ʸL8]ܼs?ùÿ›žvú»²xÙa:»&ihÁ–a‡LR²t¶@ñÔW8ú—_`}2Cµ­Âö»‹CÇç9vðCG_7›v$¡Ú(cÙ©%¶mùMÐ1‡4éò*¹d…ÑÞ×BÄ1&ªQUà ‰ð8t®ˆÚÔYI[ ]½‰üê‡øŸò9}>@i‡®ö ¥R…s–¦kkDz÷ ¿ýÅÏ|ëNG†gNÁþ¹âyµb€ãYÔë>é„M>mÑ‘M’ñlšA©ªõ°åä`4®›Ó¢-*Ý|~úHi‘ fª.hNh®̯Æ»"žYõ„f~±Ié‚Åô¢OG,X^4 l÷øÑ;OñÆøû¯T8v¼Ðñróñйûš-‘_«ìñ•7à%k´½ÝÙ”ë(l'äôÄVÎMìâÂüŽž¸¥RV&CMCl¥Y*¹(™fqÕCIww^ÊkÒ´V„qƒ/É©óOSHÁsU‹£5Xm.r®3?W£ÞV&7~N`éaZÍ1R7Ñq ¥}´Qº%®ÑÒ±èޭݾmX\Öl¾9ËU¿÷6Ü·¸¸ÐÛŸ%ùöwpç¿kcìGvp|¦ˆS)2SñÙ—l¹¹ÜšÅÞls` UCqí/ä8õz™F³A†ttöШ…¤½N®¿æ*îÚ3È…BJ9àÂd“·÷Ðhø\¬:z‚&Ï<÷ul§Fج¡£˜( ÖÉ$IKQ¯¯²:?I±XDA‡âf,Wj¥¨V‹¸Q•sç'8uøY6ôgy×[nãšQ)BDÏsë÷Ø1˜À³¡3)ÉHC›'¹zk/×lîcË`;ù”`ׯ¾5qw…-Z4JOB§ç²¡'ǶÁv¶ ¶3ÞÛ†-Tëžk…Qñ7)Œ¡è¶¯“$»àL Ò M_—M<ä²g›AJxôÍ‚ x¤®Y·Çá7ÿy’¬Eg\â}º†ô¦á´ÕêÈ{© òºß·Hû- ¶^°€´7ÝP’FdsâüŽeS(6TÛ¶PQ@6c³°èãºA#DZÛ‘TJuüfˆ ¥c«˜0Žxvv¦ÁÃ¥ïÜÝEn"F®÷XÞ_¥·»‡ë÷†˜Ž¢EKùÑMÒS$ó.JTk†ü §3äâ}'˜,f]*ÍØM7ýŃ\øûEž©”XìÌQ¬§HgbºækÔ¿n8r®ÂÉ)pCÃ[7[ ô·n[2™¤-߉´„í+Ësd²9†‡ûùÑwßÉÃOÿggtg< eÁµÛÐ~ ¿Ö ¶r€òä2K3çiëÙB£ZGÚ6n"A»ÒíÔIg$½9œÀ£­§!\V –ÊUf †LRS-kÀç3_>É'¥Íµ;'q…ÆO´15µÈ;®ËrvfŽéÉÅEIoÚG;â0æäÉy„jpËMÛ¹þæ1:ÚoÀKjn¿a”ßù£¹°TB®@Ân%¥hýí0†Hk*µct«/ü²8gÙ‘Ptv Æn4dz ½„ó†=98Y‘Ôt´ÖßçWùÌOÚÌñ‰ÅßHò¶Lž¡þ,ù…›xöß/w-–/%÷ºî÷´ßÆïeM˜ba'§}j ‡Lˆ'- ªšJ5@)C¹â#…"ZzL©Øx^T»eá¡1Z£•Á g‘5ɉ3§éJìàÎ$Ã4«©G ÛP±fÈ-I0¡ŒAÑ"!‹x­iÃhÍ¢§#%)ÏLQVUÂ)CJ\¨_dµ˜bCïÍþÇE&+ó]5„YÅU›–P›åj@3'8h¼)pŒ ²á‰cŠ›F ãol-ñƒ ázÄ*ó³ó„qRé Ý=mäÒ M׸f}žœåoêbnv™Z­Aq!àØ¹ÛwøäÚܤh„™ë¡P˜™!>“cóH'‹Í<7Ç쪤ZœÃs]ªâ¦õ.:'å(†²’òô4~áûÿÏ»ÆYœ)aj-Á¸\6Ž·‘Ð=¼õîMX2¦´X¢£¯7ië–Ž—£††»˜žYFHв%/k[›NÈÖÏ—†1¦õ{ZŠävLÁ. ¢¦AÕ Ç(¢@QÓ°ê ÚgkìÙ­øâýŸ=ÑòñzîA8Tš†Ïòž¼Š»wöf?þØ…WßãxÕ@û2œÙK/Šª¼ØEÍ*¬†jrN UŒìTÄhjuIÄ ÍF„†00Ôª>Q¤©Uk>4ÑóÆÏÚ´HÙZƒQ!©¬ Ñ›áÀÌiÂÞ€ ™»Ú»8™¬OxTeŒ¥lä¥=,£¿ÙW%eKÊäóYå¯ï+P^´ˆ+ç§Ù¬¡¿[À’f´?ÇþÒ<LœdÃPŽ›;èÚ]¤vuˆ÷Åk‚Çp¥`¸æZš5 k=ó+ËËär×Kã¥{M±²¼ÄÊj…ö®Ç\·µƒGž+0QlR ØåÍ{7rfâX Åô²äéŘeÀÂp¶p}ÆfÕ 8ñÀI¬ñ®KL…×Ed½r¼* ý$wxiÎìåÖÏKZ–ŠÕh¹Ô¤Q‹)ùœEµ¡[ÊýBb9†ZÙ'Ša‡Q¤PªeGÚ’X›F£•&Ž ý=ÁêzrÔ™¨”Y0gÈv¹Œíêg6)@XFƒV²µ-6z­‘‚ožÛ´ªÀFKöÞ±Bý¼ÅäœÍ[¯wùÜ£g ]ž‹ìhžº2ì¸a7éF™Ï=µHg`X—ôÏzØ{àžwÃþÏŽ­@¿+I­e«•&†:a4O"½J:•'ÛÞMWO7Ò²™›\"Ód¤ße¹ô,:¸ÄÞkz‘í<ñôYž=RÀ"¶]µ‘¹¹šõ€­;H)ð$Ír…©åˆ=ÌMùò3Kd³it¨©¬Îá£85ȸ†|6ËW-pa5dk_†F2YsXž÷±ÝBiJµˆ‰é&}õ9,!Èe¬ͱu¼DÂæé‡&™^Q|íñiÇÁ¬E~ŒÁHÓŠ¬´¨‘Jµêã¶½f·ÒšgX¶ >~*Fy!ØÖ-X·ÍÐ5aÓ0ydhX*xì¼v;ÛFO±o©0š…Øp´“µáëµKÕéK¶š¯ *Þ•ãíw¡Jq¥GÏ Øµj-Z˜]EEc`aV­- …¥!ŽB0 …ÀÄ%¶e12ÔOg¦-C1"2´©4ÆöØpu7§–R›W8þµ…UÊ;bìd;qäc¤Y3sÖ€©Ð&ÆÕâÙJ AŒ%Œå·Ó¹ç‡yfß?1<žcôînÔþ³ÔW}}·A~VCø§¿y‚h¶æ [S·p1:Ãtgl(ùâ>°çã6lé¬8šÎëI$ ¯ßÄÜÂö ¢”Ãb°á÷°ñÿϛn¿ÕÅE,!@¶$Q$—2”-Ý©VâJ£TkY†(­Ð´1¸‰¿ü_þ wìÜHôħˆŒ&lDtÞþ†öÞ#-Œ-yòѧð $²–K5&g–˜?r†z-`ëu›Y,Ô°6•jSó,rI‡þŽ6~í~‡§ÿëM.– :{fš§Ç‡ŽL*AjÖK (J)«%ýÐ(H FhÚáÜ¢"½Õ¡«&X·(Øõ©Ïq¡nø½ßþ#{Û(׿ «‘b¤Ý¢Ú0X–¢æklÇ!›°™¯úD±b$cqëv;ÛIwgŽÞn—••Ò$øÓ{Ïðóºžáíoá'茴i®”lµY7ÚFiz’¾NÍèÆq²½Ø„7º‘M!Úú`æªp+·“¡|øŸ)L•l÷uÌÍ,òGÿ\á}é9þòÑ œZal];oÙÔÃÖ|Ф%°… ‚ÕfÌ…Jƒóå:…fLCÊ‘$, ) /å2IÒ™véM9ä\{ÍÈMpôÌ¹ã¼Ødúrà¾æKä1h¿MýõEN¼8Â^в‰{î¾}ç¯~ä#?{jæäŽ“ýk$Ùñ.RCiz«VÃÐiqìpæ™Ós²€\2 mxû4VÒÂÉ;”K%|öÓìÑô¯F,jœøÇOò¯ò©¬¬’t],)‘B®©ñË5Æ-sj Z·º–#âÖkÖ„øb4qräÈnìMÔ›$R rQ¡C,7ƒ1šzµÌÉÇR™+2_i°…ô'l’BpèÉ£Ô gbBi“H%É5ê¸A„¿Ødrr’Ó½CX£óW¹ïºØ²T í‡ÚàÙ sUC±àò•Ý6N)äÚɘt¬i6Ü`èËhv=«±”͸´9^ÐLKzg‡îÿ˃ÛééôØ<ÞÆÃûÎ#…"•€R-$T‚Ð׬øÿù§nãÂÌ*ÏÞ{\ÂåÐbŒ•ÜqM’¸ï<]íYn‚Ó3s41Qã _þ|“ÐoR©[”6—éIºo„zmšJm…DÆ!éåY¨ÖÁÞUT£Œ°ÊX^¿¶@£á“ }âÐçìÙæææxàänGÇu°¥…íØØ–ÀA`èHJ´heûm;Ä5¶eá èö’–$›tñ¤²EÀ Œâø±£Çxiwø×¬—Æ¿´ß`/%®Œ®.ØØ×1pëÆžŸ»ó-wÞÙ -vlº“‰ÎÏQ±$ªX@NVˆæšl— DoŽ3eŸÔÇ/f}ªwö°ôàÒ¯*†‚«X,ÁÎXÑ‚ŒAÎ…œu]Œ1xŽƒeI,)[Ú·kõÀHÅH¶iEÓHÅ€@®YWg¥ÅJ¤°4XÚ !½® ¹ŽRa•¤6T§‘jgì¦[9sô_ÿ£lêÌq. Èç\²ÚFJ`i㸉ÈGX=™ VÅàd’¶º­¦Wžæ\µ‰Wq¸nFÐ^L lmQ»½Ÿhvž{¦™šf!yGà¥,¢UŽv—åLÌÀd0T³Ý 1ËAŒ+, ‹ % Ke‘ Ø°(5"®ò˜,úÔ"IÊŠùðG Š5o¼aJ¹LÊõ¸ëÚ~þðã'¹vç]7nî`([ãˆZd¹ÖÖsÓ†Fd(6aH+ö¨°q@²çš^š¥õÚ Â^%Ù>TP¡ˆê¡ˆ›EjåÎŽ:iÏYs.0¹ÖP¡4Õ(ne–¥héÁ”)ÇÁ³böLLWå0«=·£tLS²Æ"6Ùª÷êOþÃ?å›ÎÏï[_Oã{íwØË£ë倽üH¾mÏŽ[¶÷d>l™ ïÚóç@ ]"=~3V>C÷““dcEìÆXqLçK2•£X°™i¿c]$=w€|&E±ß%õpúÈQ²]¯Ôd[WfÍ?ØuìV'¼dÕZÁ'TKƒ)TŠf0ÜßÁ®¾›Ö Äšá[ùù_ù_(ËY‹¼7›¦ÃŒ÷a,°\·c” hòÐWÇuzt¶aøZÇš´gÓk´´#‰ĺ )#A­i#ÍSlH8¬/tRŸª0×)É®VØU¶øêáäD›Ë¶j²³†ÞÐ%’;B’žMѹÎ#MÄ” y6oÎ[¼I Îdžb3"—°È&[ÜK«^Òc¼Óãø‚Ï¯ÿk‹‰É<ƒÛ%hjé<+¥€ÙbÌg>z+Çö¡ën>ýù£ô¯O1Ølƒ¬"(chš¥rÌ„ëPö²¾yÀ\ÂÃ÷+‹üJe_°/lbë†Áþ}ë¿á*suP,ãHƒc$Žì}Ûïq⳿F%.,|ƒöR•دsD‡Ðlk†È¢M|´ÂT-¦ík`§ ņs¨X!?ØOÇÕct×—¹é¶Ÿc¥^¦±¿ÕJjÛ6®ÕRï“B¶èÒ T€cÙÄJsÝŽ \ÓŸãÞ}ǩ֎ON>RJ~ìÖœ˜Z:Öø~ÄÌ¡så&»îÞÍÁÓϲZHÛË¥èíìàÜÙY–+®m(Iç—}nèab®B›ÝZ¦š°%Ÿäøš0bï*hgœ€'FN2&U,×b‚!I­f1öôó<2¶ÍÜ­»™¨ÎqÕéIF«…TLÛJÌ“®àýÇ$×ÏVû³ëM`T!m™g3‚œ%)VbiÓÝÀ .2¾A3f7øÔ}qä"’'/¬’éÈ`%<òÔiº;S4bsgë,.4-ŒFkA  FI’Rb„à‘U6níaÈmÕºýÊn~!µ²+"ªÎ³\UD t7›Tõ.(#É&JÜ=zšBøƒ\¬ú¤-pd‚j¨©ø¾1T#…ÒÐ\ËS$lØv§÷ý×Üò~RBj¥ :Œ*¿ýë¿úÔeóùòyý­?p™€yëó½ºàý®Aûmúˆ/í•€M‰w½mמ;îÚôõ9Õ®6Ñq„À mŒ¢süFæŽÜ‡;ön~Œ5O>e±GˆXP†Ì¦6:&j(G^·õࣴ·çÙ;æÑó¶Ÿ¢˜^báÄÓýï!“RœÏ]ÅîoþZäiG¶5¤ŽÍÀGJCsy‘Ó)›¹…elÛ"%I×¢Öl0n¡B”R­vÉXC“ÀÖHË0¿Päì3ÇX\Zå‹_|? I&$KUÍ5{v±q¤‹R ß§õ»R •Rcµ–ÇÚ–,È" YjÝ=¬Î\¤êÙè%­§JDyI¾”凗Â.ûàÎöîQì,K—n_ð`¯`„€‡¥O¯¶HD†Z RQõ5žR$cü–$¬ ÿùcüÂÒ\;Ô¤·-Ãõ;óüÒ{þöÍÉŸ8,qþâW wÔº©”› 8kÔ …Äcê¶Ã\ɧ=mS®iN5ðÿržwÞXåíýcÙà IDATwçÑA@ÎJâe;0ظ^¿´ÂB¥Õ":‚¡Þh°Ö…‡(gŒvuždßÜE_Òæ¶”:O—k8Òbij9׈PF0æAgr‘FõË,­ÆkÙâ–1v$‡=ûPqeår+õÂóB·—ZB_Àû]ö;ìåû×Ë…Ç@òý?wó{n]÷›)%íÅËØñ%>j‹>g€dªÔØHä×±óÚ»ñÎÇpß§¦È.ø<´i+Ù¶<ã Nõíå£7"ïÇ›/prõ˜F™[Æîdþ¿Ž¶*ø½mL„  •djµ9B` *nÙUGãCü筷òÌ£ûII‹¯ß Úðø“ûH÷Qj„$eËAÎbܶ,nÒf¥b"T!^&Á3_› é vma8ÊŠ®\Šå…%r (,• –…RÏrY˜Y$i·´‘…˜›Ø3s”®™ÇÊËŒ!S™>‡‹í ßa&i“\sîs×v‘jß»ºúÖAÛuoÁ–™xä«üº½¥£š®$» i¶ƒ‡X)\Ç&Æ!ΚILk&N79ñœËî2|ò±ìO°u8´B2Ú°µ}±Q‹·_[¢;!ùô×$5¥iÆ#Z“!V­Ž6Cµ©HZ’ ¡8z²Æ™©'ø©ÜI‡°¹ŠÑ1‰ölÏÃhX­|VŠMq V°§Mrè|’-ãýÜ:|Ž ý(ƒ8M‡k±Ù9ê V›½q E…ÙfËšaxû»˜lD¤,C.a4‚Úû¥_ø €Šc"m°m»U‡5† lªV{â­»¶°¡Óã±Ò aÃçïDZ$ݶ‡¹8ËO¿ýf¬¬M3–#‹dW¤R,•*¤<›v°05M#RüÄûßJþÒ·o¥½3K:—¶„ÕJØ8¶‹2 ,‹8Š1k4çJÂbyîÊá\:‰N¤X JKÚl,69Ÿp æ=–³ f›‚©>Mc²Ìícctï|#¶“ÂuÒ(Õ‡¥ž†•,ÉL xž…wÈälri‰mÀµÕ€\2…v4É6Ã_=é°¹+ÍJ”bÃh“33ŠsWÓÓað}…c ´0ÌÎ*F{\iMSk\Zö’R„ÊFXš\VRj(jOk:²¿ý'óþª²Å[ ŽºV¤º2O­aQ¨Æ4C‹Œ ·õe«†óÕW¸VH“É¢=µW1˜«r®àr¢ÑV/Rmë æ Ò#6yCŒ$x°¢°¤$ÔŠ}_}à §Où¼¸µÖáÅ`½4ï/¹ëñ¯¹ôÜ«u¿—=í·«Ã^¹‡Mþè½áŽM›G~«vÁ·…†TÖ!!%a½Ah ì¸UØVFÄ‚ŽÑ ˆd’îlþ¶›¸ßÒì<†\g³R'QñYÒås˜bD²£JÖ,uJΓ¤ç¯~‹«†“d{Æy6š|„ÝŠ´‘R­~ÖxMI2 Önûß|ú^þîã>®Co&G·—ÁCµ^c®ZF›û|Š[Þ1Hiʵ•¶Y)‚ˆ ˆ©TXI·½ñFŠEËèH¹,Ì-áx.ZH„ `‚A«VH„%Qhòi8"›DuÁœ« ™æßÏU(ŽÓ6¹D'“d[¶‡Is‚ƒ\¶ŽäüÑ ”ç¿L)´jõkŸ?sŒ¥…N²•a±¹ëV›Îv—ö¼À’m •J‚”¸Bƒ•EÈN§›‡™á=oÊÒ¨.ã×"âL ЖLL4èÈâ­/a!Z™\ Q ó«†DÂE:†ùJH3²©ø©ŠäÏþöo¹cŒ·_©ŸÆ¬.3ž‚m;w²Ã»À7NûÔ×öúÉà$ž·7÷$›³7£å8&=K±ù4éD@Ó”9:ÕƒÔYm ,F|Ÿfó<ç²Cìÿôï°ëý¥ê+–W«…ßû¥ÿðõ+æ¯Z;®š eÐ%Ö~/.{Ýå†Ô—Æ«u¿#Ð~ À·J<%€ÄüÛÝÞóöwýftv¿S#q„AD* ˆd+s+E¤b<6 tÒfÚ9|ôqRù1TÚÁ¹õØ~ß2ÔŠÝÅ€Òî½dÏe!™¤ÞLâï|3mù^ª A:ÙCÁ/ + ÂÂAÍ ˆ"”R-“(X‹¶×QÊ cƒ‹DG1]MŸ( ¨iA­Ù@Ń I=ŽéN¸”«>“seƇ`b²€k9 5žc³¾¿¾Žv"¥I¹™”K*—"¢ҌZ&]¶lUõiŒiE^Œ ß aB’V1Ê—dš>ÏÅ[W‹<%4U[à[ F‹GØ u´/ˆ"‡£ÓhËŸ#CÍA¤BÛ4›ÖÛ uHFu‘¡ùŽfl3Ð'PÞˆ$Nmj ©Ñ­›d‡³(«Îÿ¦fy…fÓDÊ!Ñ*&hÆŒvÁ#']D@ÊV" m‘Ô‚j`¨Õ>9O0UÑÔªUdU0YŒ8<}‚þv‡ÞÒÁ¶Áž‹#" ¯Ñ&"”s1¬MÓ;o‡"PÕN?ª ŽÛΪB;e’I†¤eš‡´˜Ç —º.¨´$Û ö%«M·ð¾øj„L0Ôáꫯ¥\^瑃P«y|ê‡ î%»e/ÙG— gƒ>zÝ2º¦°TÍѵ>‰Úm#ôžÝ$#MªMEŒP=~#݃ây|ý¹4ïº5ÉÜšd¡¨²¥_¥¸Ü¤Y+pºê“)HÚQÜ+)"ôH# bü0B¢±u@c²¨BS bL!PCIÑ•¬8½÷,óOýI 2âÝoeâ‰c|ã)fÔy¿õ?—¸ö®¯RôßCXmòøÉšn“[nX!ô‹,–“´Û#(²dMÁR±‚Ùs}¦NœMr]¶ÉÓë*k^¬˜¹ÂÖÍWß²µ{Ïuï»aemjöÔ‰'R§ŸxäK_úÒ™—¼ççÏÁ¹ó…£1Ï ¯ëþ<ÀýiÜãŸd?ö…‰˯½lÓîÑÞ?î)>£a€KÂ0"Ž:ÉF¸AŒ„D¾êøøA혓Ï>ÃìÂ$»·ìc×î‹8âE,\1„´c–{#̳KœÈìbß¿Š(çtãd¼³Ô½rý£øzÌô“ß ¡ïDw(ÇÒô:—žï  …<—Aì©¥„8 Q‰)$ŒÄ!3އH\ÀÖÕb­íÑŽ%íX¡TqHÚ‡ŽÏ êº&QT C×:~SaZ:¾¡ Ò¥Ó©S߬*‚Xúı<7:R%:Wà 0#ÇI0«´³‚…²$Õ …Á;&טҗyÞPˆí¾¹Žæùá#±ÿþ¯à‡!fÎÂÍÐ8tæÓõ…\gï6üÞ SÃiúw»ô[K´S9œ†K^"v2(M—¡>¹ü()ÛÀÐgXŽvòðs³Xz7G,ßSlÖ×}öŸ™'Vvù8}¦NÑ0lëÑ‘nL e_¡^‡÷ìL3½Ò3 £1s¥6°×æÈ¢ÂQ·“È:] É6u¾~²Åd]tDò@½)ùÇÍñk·9pâ 7ïÙÀîìõ™¼—=[%ýùešò« ]Û Jn‰S 9z6ilI¶Éç«<ÿìSÌ®BWœ ¦Öò¨:žbgÇvÿŸo¿þ½·lX›]›¾ð‘/þp,¥Ï‹}©Õ}©Ë /¶¼‚Ÿ¸¯ íq‹_je_ˆcÓ™Túš›/ùcMVíj«ÓõAÆñ¹ú^I†Äž‡ã´ý€ØõÑ}ŸlO/vF'»eœö±‡Ú¶‹0ˆ8xø!î~߯1)=¶ßøz¾öéÿ‹f©Å™cßŨ/#¨áÅ £j’`ut$pdÆv°”̳<{„‘ ÃésQÔ…v®»¢8'ˆ¥DÊÎÔ‚ † áDØ:¬8>ݺaèq@ ¬†1u)Éy¡×¦Ôô"èÌk*†® ãE$|MU©ÖœNKW…0–¨ª²£Ut Ó4ˆc‰Æhš†[“„mE(º‹*t 4T•*ßϘئÀ íÆJ›-Ãá†A† [0Õ˜–êSnV8qj‚fÅ¡Z[g €gW$ó)Xhj\¸žA>,Ñ3ÚC; YjŠ…'iW"Aо ‚›Wøð6ßy9ßúíO=Õ wHaf&&iI ý9ºÆèÑUb 7«rå°ÉäŠÏ@*fº“4TÏç»ÞrËg¼™"–Ò¦gÐâÖñ1–ŽÌã$4~ø4U©ÓŠ%¾ì$‡7ßÅܳϡÓx…+9ÑÄQÌÌLž¬½ÁáǨ4f¨¤ÿÛ½…õÅU¤}%¥Í®þãÔ‡gæú©TÛª$ˆÎÏÐí$C}?@Ó4¶ïÚ<– VÿàƒoØûoÌ|×§>ñŇ|^ïKÁ½0Öýƒû“@ûJvœ8oaíÛ.Îÿɯ}6X)&ÔvðÀ}3¸Õæ‡h2¢`($»3¼áƒAÕüÕÿñÛ2B“:›´®„ÆÖ‘M׈Ó)žXuy«-yç€Ê?/{tÉÎd¼ùªd!Ðvlåo¾»Ÿ7ܶË©²sxŒšñƒ¹³ä6ìÖ¸"Õ`¹æst²Á‚m’^²…±ž,OLT™¬®±¨95ɇõ?cYY¾òOŸE`°Ò^e÷È+Ÿ‹wîftlÂ4ÌeÑâU¶_Üã@:£ýÄÒ:DŽG¨™DaªN¤Vž]Û.æ¿ø[¦NrϽOño¿ƒ ¦Å‘Ò:ËÅ"ûK'Z¿´ë¦e}Ã#|ýÌIÎ.§UÜÙ»‡ØñMAQ øÅ{½ùb •Lÿ8ëSÇøö_üG¤”ðù®†ªBíkt¾tÒ¡ÅÛ®y ’%ò“¤1OŒÆW>Ì©º ;N±ì®K‰âE¤»»Ð¬oþý?å‹_9Æ¿ø :  D§ ž¦jXšNÂÐQLƒ.]£×2Ù–Ô°5-E'TTVBÅ|äoã¯þŸÏw¾}Šìôôt’êBîú-•ñÓø¾ÄºëE EEÕ%x …“ĬLÅÄçºRÂÀÐO=ý,§ë`𡾧ö!ì4  )+38Ó“Øcc¨¨hÆg!މ 6qŸ‰VjP¹õwЯx=_ûÆ_óÉÏÞPõÆÒÔÂÇ–æ–¦31Þ¿àüRpC^lq_&¬ÿiÀ}Řö'Œe_$0uaýÖÞôGc;eò¿ß{šB²Äæ¼ÆÔÓ·nLÌFø¦W+L{–8=@E‹)6ËnÌmªàò|ÎÕ±4“'D ÛS&ý¡ÏqW·%WnôX[1yn%¢v’ÙÙYNUWÈD!ݲÂM›tN,j4fêy…gWJ©Ê¼K ®A1•ÂRsà­Qi9,·6}&$50ÆÄÔ²ùê^‹by…‰é*ºb¡« Ù6½Æ(§æOLõ1¼Ñfvâ0;/ÙIµ£M ùZ"A¹äÊ6K¥ýùaî=ð óµ%NWæÙSS˜©,"m8Õn±+è§¡¬xëœö—8yºÌjýéBŽ zš‹G1º3”ož=Ä\­DîØÚX/Kå j¥9L;ª(w4¤±”(šŠ]ªtåKr{oe ƒÌ!ýÌ.±pp‘·Ý~ß?ô§g= &$hÔ}¶_ÒÇôÉUŽðmÆÓ:µ0¢áud} pÙëap0¦¿GÇ&jW@±$hak’L·J©¢`'”–Šg‡\þÁƒŸ4NÅ¡”’……9fgg©ôÜ7«To¸q4ËøÞn¥ºÿ[$¢ cÇѯ¸”twÛBs4¢ŒEeî8O7‡Ožfçø §§Êé¡ñá ÃúòòôÜ'ã(r^ÂÉKºÐ—ÿ™$?.{üã2Æ/¸Èÿæ·¦µíam/7^:ƒ2ø:ý¯gÐŶ`ÍSqâͤ’R( %,ú …-] ö8m"·MÅ ØbiĪdßÖ<•–ä‹Ë-EÄhÁ@‹"r…€‘¦Ž&;ºÓ±þ$·õ înpÓVƒ…CON»(µ)êZ†ÁH°«[Яڨ±Ês+ÇxHí¢<·€¯HòÄèª 0®â´b¥…fÅ8Í2Žp€ã§Ï€"ÙØŸ! =¢¸„[1˜ž›Ã6úiÔÖH'SÄ¡…¦ùè­ˆ¬lE!½½¯è;¢ÊpÉöM<öÈ6 b·A³TdC~%ásÃÈE,Ï nغ•=|Š hÜ>°“ªêâLVèÌcª qôø²R&wÑVLM²Î5=CítçœÓ‡ò;oޱ½NuïÌ •‰92×^J”Ü‚zIÎVY\MÒ®×I'`Qêè½öÊ,íõè&“°šø±ŠŽT „ªa:›&;Ó †¶4Fr)òY¡j ·%‡[ÅТ ”0 §+”[‚@ø$… _[£7æïщ¨6Í£å)ŒôÇ,ÎÛ n X­Æ ÷F´R‚ŵ5R ݘÞ§ðÝ¿ A !‰oídØñ6.©rpß“þÀN¶Åª eˆ&—¨ûYdP!1¦€#ÒI")¨ëÌN¬R¯;lÞÐÇÔ’ؾ­ÿÝ7î:ôÔ‘ÿÔ¬7.`å•Öyp_¶ûÓ$¦~’-Ÿ—ZÙ ]d зŒw§ßþÁëߟë6X;þÝ>Æ©ú²± ßo°°îÒŸ¬´öŒè˜QŒ­‡ìhúLê:µ¨ÊJ—Á”¡ÓRFS&awLY³8i8Ü¿q[F2HN'Uì„ ¿-X*vÊýîÜñÑ[[|÷>F²I·]àÚA…=Ûs<ñì=É w.ý!'—\æÚ nœ]ŒY©ÇXiZŒ„†ƒEˆÓÒ˜iªxN›Åù)’;vÓª®³ØPpã4 ë1óóUææ"VVÑ•Ôé/d±5I:ð¤KË‹hE!UWåš`Ø!ïÝ>FzÑ'K¬V¬Ë˜ ZKÓXšZâsþ#Ø"E:Á'å7è–6õSkL,¯` ¦h¹.c…UvÙn ÖÒJwçàÏU˜Iëè)ƒ…¤Â-WKæ*Ži"lûœ¾òC7&ˆ¢g‹­ŠÆâl•Oür7"ísû¾aîÿ§†KåjÈÖ â2+äÑ“Ì)N 8üÃý!Õ4Šm¢¡Ð£ªŒ©QJa9€ùJ€•¬/ÍbÛIš­eVÏ"¬=…N//3<¼…z3ÀԌ۞”8$ËõSÏr ¿ÀÝôFŒFB=‹¦Xœ¨-sÚ©26ÔÇ_>·ÉÝ[/? \YgǦ=˜‰,™¾A'&91?Çj0¾uœÞtž•cgQ¢˜P, Ša@Q£X×ÉMÚµ€8ÒŽLdi§ê\‘Ìq27À7žæÁGê²i…-ñmŸÓÏb$Ÿá†›9uУÔl3Òç`¨.[» .Õt’é5G²S¸Re´KcçHŠ\_ÅÐc ¨  j‘F1‘$akQ€Þޱ5•$*5 U6\¥`n éÕqÚAaè"ÁŽ«#Êõ˜¼‘V ¤áVlzÇÚT› H–Ñk©´ò.Æ=’P*X©Nõ[àk(Fˆ¢Ib!pê*R¨‡Ha·*è† ÉÆBo¾A»µHtÉFô$¸¾ “ÏòÅo XsÑM‰©ÍF;Û?4ð_„"~§V.=ó°^x~Å’ÇŸÚ—2ÌË­ìy`5@»eo®o—^—Ös;†‘ 5õ7´æž#.…$7«¼û}›h‹;ž ádµ%–ŠP%ãý[Rs$TÚ’0LG¹¸Íx:f§a2Ýp [’¯?lpñn…=Yw-Ç_6JL1…°ÓûøûÏKnØ ûÿ~•Þ–'¿QãŽmžÓXmÂcåUØ©€‰¯WxF4t•õ¶KÑõHh15^AK²}0ËéR•]ÝL•(—“¬Ì-S¯Ã@ÐdóökY›=Äêò Ãúñrž$ÝÑ3®$UjN󳄱`:(qç¾wóÃ{ïcãØ…äUT>d\Ç.%Ç‚PÙ¸» +Tˆ ‹ —AÏdñ–qã‘è鉑>ðÖ70»´@qµN}¶Äšv[ú=J“s|f7å|ít-=:Ò¨Ó¯øšÂÉ.ŸâñÉUþþ/näÄSùê7Þú®K¨ÎâŽMcœZå§Ø·)ÉÜY—L“4cNÄW¦t.µèʤh:å6ôfSØiƒv @hàÆÚ¹žÔ N Ò"JtÅôbZ‘@Õt:MÙ"6]®1´MÐŒCZÍÁß#yþ>¨ý³Æˆ©::J* \ÑÉõ9h±ÀV!jGdÒkU…H‘Üt³Áƒ†“|ýóûxçû"p› ž£Æ!AL€¦'‰—Àõ§@sµFÿ¸.%n,(ûÏÍ{üÕcfÃã¿ý,£Y›¹Ë v¥ÌÜ€ý_&ñ›ë+¥#Àøjо,!õ“XÛAûXÙ Ðÿä÷¶`hx§]Ÿ…­HÐÀVTÔ8bÑh¹0²ñðè'TMûpu}uê%€¾¸Æ¿?}LûÀ¾LÐÓÖïž8¾AÛÛMõžïpö‘g¹ê×·²zø E«ßEÝýÆjVÜdÈ=ÌÉ¥1ü}Ü´\¥µ¤°#©óíÙ:ª•¤í×íÍлæ®ë¼Î„•:÷Î4éÎjè®Ê“•ÿËÅRࣜ+ ÿì}UÞ´Gçöm*OG«>´U!-b–VU´P2R§ ‡«Ã…nãh’©tGømO7)iÙ!ŸH i¹ðô\lÚf×Pkå^½FgH8LW*ôI‹‡ò܉U„ª“²ÌNÎRÉfIwå1­n,#fxs/+Ó3 äúxüÈ…ZHw"…Œ#ê %ž8pˆÞ‘,ëíóZoÏ\L7 ¬Þ>@`o$å¹\{ýud²)ܦç?ñææ–¸ñ¦ëÙyÍ^ä÷þŽÉ礼r–›û5‚l@>šàȤÂå{vQT ™®ñôñ&†ÝÏ|mù² QȱºaEe”v÷3Üq·äÝRå‹}”*u–Úq, äÚK6"5›°R¥HÄD×(Š¢ÓÓ µçâØ±çiÕŠY6]~#½ûnÆ " 7 U ¦"20ì€WŽ25wŒ°-h•al§B¹A5&³]CF*¸à¤}´Ð$—†ì¥!QKpúƒ½WHUbv…HWд@uáMot¸÷™Îûôo"ZlðnÙÏÿ~°Ê‰Õ,ÉPÇï•$·]â ¿ÌÇcƒ»‡GØžTQìýÛ_àд]•x¾M"¡›iž3k•‚7‰lQ$IÝÀTfS:IúŒˆ “ß¿Æà¹tÀÔ’Êþ'}›jòË]:›¶uþ¦§—¾_ ØÕkR\ ¼g£Êã¦Fm]å]…!ß?+ÙÔ§3ÕŽhIºà©º<¹F4ßæ½1æ&ÁᨂîÞ$o¼$Ohoax°Iª5Î\s™Éå:F×(º™bqm•®T’J;@³mWåÖ7¼‹Ù‰ç9uú(ùL–•‰:ÅrG š5“lЭZÜ@ž äàÏ,1ØŸcm½‰›¨°79Jp°J×h€¶©…èvˆAÌ›ïzš¡á:MÎLœ »«‹n;ÁŽÍÉlç8c|ý±"Š•!ãVØR0)µ š3OR¼r;'÷º,.Γ.H&ž5ˆ$ô(*³ëA¸ ÿœ[?øëôNßÇÌ—âÖáÀ|™”P¹k$IRU8tßÇ©¬.á´òšÂó¢Ülsý® äü* N/U‰zkÔú2§ç¦ÑÒôuü b.J`-§Qœgôõ¯§;ŸcÓö<“K5LܺÀ“0²U¡VÈÙ*žÓl&Éå}4UPiÁ@6 u±äø)¥qÉn…H‰i5b²–ŠïIÚ¦ÏpáGí{”ñä2¿å,yìF&ÊM.ûà2 Iž¸oš'e‚'ŽßÆå8½ÚåÌ´ÃL"Á´ï1¾RÑ0Ê FrJµ-Ô°”˜’벦e£VL½å $Ç·}ôÔá§>FÑ…ÅVG©¼Š›üjë'±´¯T ¥ýá/ßtýÅ¥ä3÷aµÏÃÙkSèÂ+–ØxåµÃ§¨¶b 7\‘ƒ.c¾{§4Lç$•b©årµ¡Q ò¾À#@Ѳ†Fºé`¨:»S>4zC0$2VجéxR’§3Ê¢wš}-µt*‘‡ÐU>.tªJŠLÕæºžˆ‚l“NÅ<>³˜Pq€¤ª0ª¨œZkƒ' S7Ñ•¡ï·Óšðhظ1O.i’Õ2 öv,Ñp=¶÷¥hfl¦–‹dÒSóMfçN‘ìdûE)ÖVW”?ìˆð¶CW6GÅw‹ó„Ra=ò˜³ZlEt«<{ì½±…Ò—!ž™£±²€ BÆ®¼+i£ë:åâ* ³KˆZ›ÍC}è– áfaŒÔ† ŸêÙãôt«tIÁ»ÿíNîûá: ët‹y½ÉŸÞ‘ç‘ã%–ÚÍÎÂQ&—ꈞ¦ybg¾‡:m®Ù•âÀ‰7î YHª:æe{Ø06@ %OúÕE´¤Æ7?óQl§Í÷~’¢•fÅQ¸uû(µšO.£`'Mºï¸]×±ì$kÅ:N»a¥Pu ß(W\jÍ-'@Q^¬âº1ÒÐ8ql–Ë®ÙÁð†.f§×Q›*"ïÓr4z6KÕ&¡ÐÊy„Š l*èªDEÐnv&V…µ5†J¦«“3q}I¡ûœp¡âÂJi)(ºJz¬ÍWžÙÎÇšç·F¤3nÞ—æŠô0ÙÄ5(!HUaCOŽR{™Q] :u×gX“Øy^ÓFUUÒ퀕 d>™¡Z¬píˆÍT­F#âW®Ù:òħçO\í…ð*üÈÒþXk«'ú¬ë««íè—áU—uõ&™ªÎVyìLÈÚ’ËÅÛ,îüð;8úôÓ¬Ýs–¾a‹T*ÇܚǶ…cì¶Ê”„$§ ü–Ë:1¿˜²¸º+b:Ô‰JMK²¬X¼÷é&¯/¨œˆ5î¾Èà 2š6©ú‚ÿ°æ²­Ñ‰UNüðy¦Û1;zU6Ï´H$=.3@ÌòdQ0àÂUiÈf¢á^†2)Ô…U–+.†Œñª1TCèUp[©œÊj¹É`WšÉÉ5„]×YñJHa£› ÂHÃL¸­–´YY®RHdIªòY¶ÒŸ²™­{œX.v¾‰8æáùy vÛÔYn¯±áÒ¢§WpòIÆF7²eã‚ÕzÂ&Ú4„^\'¬7©®.1ûÜ⤠T. ÎÓŠEgqm E?E2›¤-»ù‹×ÞºBÂP¨ Jl"BI`º$“:´=A-èè“ñZK"W"¢„GÍO£Úݼ1³Êž™5Èá[è~ô©©ˆs‰GEUÈõ ±â j¾ÄR]b/àþ–Ï›ò6ó3-ÚÉ «AÈhFcS6Éj0µÒºÄ†ºõõ»¶ÿÊwÿ¼XtÞâžm/Ì(¿¢µRÊ -í…Sî.ìFq^z—û÷ïÿR"‘ØøÀ¿æêë룷·—“'OþLšHMÓØ±ckkk¬®®þ‹¯óÒûšžžþ¹kAS©;vì \.355ÅÏиàeKAooïÏå™þ¸ÏÇ4MNŸ>ý3Îùë?÷grá:ÿž8Žó/þœ¾¾>FGG9yòä¿øÝRFŸÿüçÿݧ>õ©CtfÞ¶Ï/T½lþí¹ÿû£X÷U }© àü°çÄÕW_Ý÷ÄOÜÇ«Eÿëú×õ¯ëUV©T:ÚÓÓóïè ¬>íyIß…úõZ¾Ú ÝãŸhËgçÀð®üÉ_ˆE¯EÚ0X‹CJ`j\$ÆCÉš”XªIºÌd, ‡ËBÍç‰V×…=ïfxë–÷ÿ3=[5ßca%fa>&m¨¸„hªÎ@EjÀ@u8ªB Zô$}–N†ÐôYöu/ºu7Œ˜òà·~ï÷0[ß&hÏ!"GauBUNDJB_ ôÎSzð!©(\µ×¦;!bˆ„@M«ø±Â„CrøJœô8ÿðýï¡eÓdm‹´m +*MߣÑv©;-dÿÈщ0ƒ"^8‚÷ÜpÓ'Î0¿Ô \k“ËÚ¤RiÝc¤/I¹­L§ì'Š" Ó$‘HÇN³ÁéÉ)2é ™tšÕb•‘Þ, ˬW6l!ÙÕÅç¿ôERBÒ#!Hšï}ëëXmÔYc` ‡\&Å“‡§˜˜)³uó8»ú,²ýCè¶ÍÜü [6ôQ*—™]ª3û)„cé08ÔE¹X#öc E˧ˆ½€ÄP–0 ±ÓqËEh&‘ã`õe±³ij§—0zR˜]œZ“Ô`¡ô49qì>,C%×¥à´}V×$ž'q=ˆB…DR` ‰¤F* &H$UÚn›3“UVV4C'‘TN«­Ó×ÛË-7߯3÷}Ž…ù9²I…šã“µ z •3Õž´J³-Ø>®ã6Ú² MÇ¢Z–zì3œÌ"ë1?ìt¦ÑÝŶÅ%< ¾“³PR &¬nšA‹ü|‰µ;nà’½}»ç¯Ø›4"ÈlÔ9ðµ*­8B35d¾‹­F€Áö!å)ú̘#Çbîß_'C¶l6‰…ÒJÄýó.ë"¢íKî|ç;Ùì|¥k”(Ù‹Y}–׃ʆ1dmŠMSÅn&5Š {þz™¡A›·íM FœÐ8ñXÄ?~f•„¥±ùÚ·ò´ÚÏß>ømc›5 ²½9¼8`¦T¤á¹„aˆ¢T]Èwzc)B€¦#ˆÉi`‘0{ïY_"Ðun¼v/É´ÅH6Dx:+žÍ¥;ÇÉ$L„¢ šnâ¶œv…Çžz†¯Ýó,#[v°sC/¿pÛJ«+,® ½ G§¦ùô'ÿ’Øu‘–N^SYbömoÐ30ÊÓÏ‹7n!nY|æ3ŸæÉc3ÜúºË©_:ÂÞ×ÝI­êràØ!RæåÌ,ÌóØsëlÙ<Œtæ¹êu6ßüÛ¿c|cŠÍ[3h ±¶P¡8¹†·î0>žEkE¤Æó¶Ž¡8¸§Ë”–}úzuÜHàkYl3ÄJ´á^–gWÙúæË©¸£¨X\ü:¶‘ •èšÌ̬pøH„*TmÆF’HCayÎgvF°û²ù¬­•Y*:øN„‘Tˆ¤F©hrðÙRI³{×^þùÏ~“e‹ >—ÃeAwÚæ;‡Cf[¿ÿÆ4³«mÆÞh‘³}ý®Î½Oy]¸jÄ 1$Ô숣*®¦ƒ`&"RX<î¢ÞÉŸýÙÇPe©dSÚ/Gè¸Ãö›zÕLò… ©WJD½’¥}Üí×íÛ1”,ÐzêIöZI4p­A[¶øŒnða0±u7V³FTZfK;¤×œq]Ý ŠŽC2rY#êÕ€õ¹6µLK“Ù…Ü M´ë±rªH´3GÿÆåYõLýz̶Hf$kë‚z%ÄöîÊR±C¾pÄ'­ªæq™3ƒnz(ªƒÈ™ÈD‘Ü„3½„ô$ZB ’žóÙOWIéðæ»³xY =)1<øLÏýßÏa*—ïÑéÚ”g‹qÃÖ˜é´D =”üïÖÍŒ&ñC• ޱ4]ÕdD‡DQ€ôUœH²)ryO¾ÁÑD£Y‹}ïx#“ó_@±²ô æ‰eL2)pDŠÍýI ©nÂP t•„já¹!BK §ú¹ûíï`÷ž+èëécl¸ï?ò0þz“3Ï-S»È&i¨(„ îeÔTyf~j!G9ÀoIño®¼’¶/˜-VyêÔ"Hý&šÞdeþKußYåÈñ9æ«1Íj‘3'‹¬MbßÕï¡§O§»Ï¢{´@i­NË Xm¤tƒFÝÇZsÈšÖP ¯å 4…®ŒJód‹ÕbDÃo0¶Ód¥è‡+ƒ6îåËøQŽV˜Äõùn ;•#­åع=BÁÇH:d2¦¢ÑÔ–‰”AhY'fg˜8–ftXgÛvM5ÈdS’©) /‰¢ˆë¶ÂéŸx¸Î£“1×k,®·éÊ@ÉUøëxüá›t§C>òxL£1”üÊõ)Þt‰ Ÿ÷x¦±U1°ò 9-BÕðC…™U˜Y†‘(BQTµmO^¿¾Ý6G–Ö¼I~Šžw‹/´¶¯¸^-{|!¨/ÚöI%²;ìZƒ…F•Ý^D€ öcîÔ$'- -Ûƒ¿ë2nßÿm†|GS˜7’DããŒj*õÃOsÆu¹VÑi 2SŠ(DbÐ"Xvº4>ƒ:dMÁ–m!OŸ éoºäm‹âþ s)¸t›EÏÕ1s•¥¨”*Üv}’/Ÿðh†x†£†U™³dω—êøë1q9¢ºä¢¨*s«1ss{w$¸ärÝHC¥\|ù¿dûænB¯ÍÝÿ©—’Û…{ÚáÚm9ôPà °ÉO°å-×ç b)0AgÊ|,bˆ#œ‰E’CyÞ⮳%/©ú:yß¥Ë PLÞ&pd»2ŒôØds6…ŒE6¡!ã6„yQa ‰´¹lïÚ‡Ñþ²›GèÊwsøô ÃY‰0 DçØhrÙˆÍDÓ§©è|äQºµ,îAN.E¾¡’ª‰fgÑ­4¹æ ³.Z’biE…°¹„ïvª¼i/ Hõgəݜxê,š©’Í$ˆ\ÿÿeï=ƒ&»¯3¿ßÿæÐ9¼9μ“À ‘ˆÀœ)’ÒŠT¢U’m­mjV–KëÝ•í’VkQ^I++˜Ke-E¢HQ„Ä$@$ò`0 &ÏæÍÝoç¾ùÞ¿?¼$‹Arõ]§ªëvݪþÐuûéçœÿ9ÏyÐr6Êb¥Mz¨Hèe8e‹æÙ!VÁÆ03ý8X¤ì´|êW¶è[cô2‡ —RZ-Ÿ\¾AµR&£ÄÔ\DJÄ pû}Oßhd%âhƒ¶Ó¦TOI_1i42æfMª™Ù(„˜º*v.ª®Fjzüð ›ç¯Æ<µä±wÌáùÕš-è† ¯ôtΞLH¥Æ{îVxè¨ÅÁqI*SMpk]EÉÀVS–; ^;&”Yba;»® ¨‚4‘¬m†J”(? üÇW1í·âílû=‡+Äk\¿-=>ag’ó× }Q3K˜~—½†Å§ÃÎq}t.¼îA~ã±Oó)/dƵ9ôÏ~õq„ŸòKù’€¢ž²êìœë¢ j˜Q/ªL%¹œÁê唽Ž`tÖ &lí(vS2=ÁváŽ^-C3tÖJ¦ Îߨ]Lž%tï"©Ÿ£í¾‘Bð$a{‡èòIúí#_#¥OÎ1¹üÊ3“.'e ×|òãyB½ÈoÿŸ×pmAàG|ô÷–òžuv®ä*&³ì¥Û‰é%*ÅŸ¸›Ë¿öÈ_ýk86Ëñ_|/þV„9êB¢¨ ª0þüÑ«¨)[$Þ£QL¡ÓæùgŸäÀH†_±)mj£.õ¹1j…<®m£:.ºa£êBQÉY6çû :}6_8Ë3Ÿü+îxÿ¿`ra–ö0D*’»oßÃ`ý%î=Ze¯;ÁcïØ7GX,ðŽ÷¿Í›k|òkW¹´&ÐQ˜/—°Ã>ƒ¤D^Vè§)™¿IëÚ dêÃgí룙íNݱ¹¸¥”"é©*x¶® [`4Áú=8¾ -cG•Dš î¨P²™9X$èE$ºd0\¿’F:ÏŸnrð@ÀNKÇ´\41En0è$L›¬wÌPãÂeÁ[nãuÇÊØ–‚í$¨zŒ×Wéô|ì‚Ï ýõòŠº™qÇm wŠyÇ–Åoþ]‚©+˜&XRáü’Á›Ž+¼õP¬ €’áµS :Ž*è ×¢ˆ›­„•EA{ÐEŒÙ»p’,U¥?Œw×ÁÛ5Mùÿ’$ _ÚW׵ߑ"ÿ·  ʺ¹Š­gïOüÿêϹý'>ÊÚâKôo.óß÷|Z­«tÖ,füˆbJ.俚‹‰7Ýó6xÈæÜÉ'™‘P±tbUáȼËàrŠc+DaÂFCrߤAe\ÅÈÅÂb|TÆ)ÖvÌìœFc1aô Íó×%%5C–=›ž§³{(¶ÖCÚ#\Ã"ÏšyQã´ŽŠU£¹ÜDÑý^ÈãO{Œæ9zÀ¥×ÌPÿï¿»†ºF"þ‘ ôyˆ+ :èVJ¤›”=–šàîÿëÝl|ìKTW×hýô1…¨?ùro:J¦ÆÏ]äD_¼HôŽš)h¶7@:Qj!:ºªàª1y$“BaÝÈÈ« ½~Êò×Ýë]'å¯ËóÙ¯„¤R¢¨Â®×œ÷ll>ñlûZ;¦¾ƒi_‹e_ \%Z¹zà(½ÍUìù½¦f žú*·¬/ñ!Û¦,RÄÖ6½õç}Ö Á¬¥²µÕãíÿæcŒÔFQ×Ö9wåôöÔ¹í`xîvÎn\c˜ D9ÇàC'L*eÁPËH; ô†3¹øë:…\ˆ8äð©§i‡õ.õ™¥¢…n>ñ {äð 1Ó„}¤ssâA´‰ýXÅQRͦÔk!…×KÐM UϰF F\þï·JÔÓ¨:~£ÃÌL 4‡Ø…T%d‰PÑqL‰!-¤’ ϯpß:“Ñ›µˆÌÓÉ>÷%.å Æ'sÜòâ:šR\ Ù2Êdå;‹):Ž«£«)¦‡*Š¢!3K+`hyTÍE*ˆ ™eHmwXAª ÷¼kžNO#-ö¸ç»iFEê£ ~ìï(.×Ö|†^ŠœÖyø˜Jlë,:ô7/3eviê;ôµ8!%ƒÑ…®U`~aÕõ‰ï„ µkWH[ÛLÆÇMd’Ðo§8ºB¢ÆT¥\êÍÙÔF\b½½å¶Î˜3wï«Ý>Û—615ÛÏHKк¾EëbíÐ8“Vh $†&Ñ„$V0M!ší™‘R«ÌLÎñéÒuj#5Ëæ™“CöNù\¾œ2H¡bkG4Ú’Ö ¦§ïöZm™’7|®oÔõ„A[C×Þ|@g+T™¨[(yÔ'RúÝ”|% v–Tçê¸&¨™ÁdÊNÌxEgi#¡1pQû»ÙÈý84ú Ó­vD¥âÐö‚»?}X¿+Ó¾´¯Å°ßú^b¤R+¬åÊ01C£”'mï` :ŒªÇoVL& ÷ôz¬ úìFùRc‡ß¬Õ8FÔë5n|õïX+•pU•Þâ­Œ”§XþÇ¿e¦èâÌ·˜©´pr°vQ2´`X/ñÛÿåÞzÿ~¶¯Ü`-TØñ'°l•ÙÉ=4z«l®.³¹Õýfó<Ùh&ü¡‚u(‰;Û´`Y½ åð»Õ žü?Æ44î?nÑXðG¸‰ßKÈ™‚o8ÂTõ:æh½d {מ"U‰Bšä…K,2ÂÃ\~e•I?aÜVñJ‚v/cò©—附g¯W±“æŸ5þh޵% · Qw€e(LZi¢JAì¥D¹XÕ@IQ…‹” †e’&)BÓ)põŘ}G¶i«wR˜ù1ZËëÜz0Ïå¥UâL⤒¼U¤bõqm×IK`ë ‹[1,“œßgÁ 8t$‡Ô"–ëœÀWN/ãÇ ~J’3»„5 _ qÜúî¯)N I°'lÔ­ˆÕ$Ä:ÅéJQ°–yèJF- È‹ì<{øêije ™)žPŸ+¢ I/Ì ŒŽh$‰ƒ×wéô<âLE3äË1V#BÅÀqòT-Á/¿ûa×àÜùõ„—/t0…`f‰¥Åô< $[[!B(¢3”035B.ÙfH.¬JŠ–FGêh††k©ôZ’\Az&—e‚‘©<Ýæ%1‰„ÇpQ¡ÓŠ˜š6Ù3¢â$ ¹¹#ÔFt:½”ƒóGî,rz§Çá’uds3°£H~#EþVÐ~£®ý®LûZñsÈ7eZ¨>÷({XyüQªq„œ'ÀŠu.My×Ú:Ÿª–†ëQ‹Ÿ*y4ï~“ËŸÜЧºgRe×uØS·QŒ=œë…œï'üéßL+ÛગqúÚÓso~ÿUþú‰d  XiTq*s´¯m#Ì."Ødk{ƒæÍ³ô¶|LÛ ì>‘&8®K¬T±&¦0,0­’ ]¼Ñ½„µC„IÊæV†¦‚U+rùz›ËWzTó&g4î{ã4É¥5‚µWPʇÐô×#ˆÙîÄl¶b4 5$ò`¨däÞý ˇç±>÷$…΀ ”qàæWœÆÔ3\MÒÓTa°u6¥íKÚ!ØaB¾V& ¼°Œ€®“D}¤ B¢¨*^šæ UP…ËØÿ^*°•ܨÉ܈Á©—2"U§œ‡Ry„ÆZ‹ƒ{2Ö¶C_{MÐжÎd."—w(›ÝF Í­“º»uaæ¥ÈTR)*xmQ·éÇdy áõØØ˜š-¡—è*´^ÞB5i­ÂhUCËçY<µFaÆ`Њñ6|˜´¨–dš#o=:-A"%n!@×U¢0 çU}Ÿ5?!ØÈ¸õ¸ÃÁýy²4Å3”‹UB¿Oy‹ VC2ìïº(63SHn^ÙÄÑ5‚8¥\T(g¯tb ÂÀrrdz—(L üÛVf‚öv„`§Ó'è[hù”(Sh®¦ë:Óc:Ík¨À·fT4˜vÍT×uætslÛ¾åÿyÌ{†o7ùz­~í7¥¾h¿íêªJÁj·(ž=Ãkó 4W¯3…"b-Ò¹rìvÒs§EÆ ƒˆTòL»­ËgÉZ ¦Óc~‚^’èD4@"q ƒSåŒç½ûØ@%ìÕÈž*sêrWc8ÜáÀ”Í—·èN“Å«ÜzÛC(•‡8¶WðèsÿæX[ŽÐõZ¡Cº5 7ò.z% 9S&Q$©ÔÉ É…3‹Tr9>ñçK ÃÔqõ˜‡Þ4ÁðÔ—Ñ E wþ[TÍ@¦B¤xaÆÞú—[7Yï7qì ž}á"÷-o0!uVfë”>ø y΃U¦‡=ÖÞw ÅÁ 7ïžàb~„¥›mž½ž‘;b0K\Ç Ññɶ¯¢Îì#K’8%1@¤š„8ÕÈ2£MTÅ!–‡ßüzÄü,ãûqýú2“EVw:¬l´°,—vD­¬`(Gg$õºÆù­€PähôT©ã’^ªSª ž¼b TQ)XCÆœû&Mžãñ—^ éDý6Nyw#D¹b üv W#P œœÆÎ›äçìÞd`:*í^@;LÞéâÌŽQC©h6{4.l“é5Ù¹¹³±ê3ì{„¡@Ï…hŽƒe–±Í4íòÄâ"ùnŽ[ö±l…r%d¤¦ÒîÚÕ¦R<ÄVs‘À¿kK*…Aw´‘[çî…>1ŽßéÐkosmˤæI’9Û-ÂÌt„’ m“¥Œ¥EŸ»ï+ñÿè³0îd:ŠÅô‘­¬Î`ý 9}×±’jÜô%}=¦SP™²CvvbÜ<'€“|ûéñ«[>߬B|·ôøµî‰¤ÛÉe( ž?~œI:Õ:Êæ w(:•a“OµàÁD¥¬§dŠA{Øe˜E\úÊg)©5ŒÜwŒþâ2úT•°ù"™¿µ[…«‚k^ƒÑ´Às7ÚR'îàŽèxÝ&­­C¨¬îìP,õ¹Ñ\¥é 67©9E’ÉoÖ´^ŠïeXÉÈ` 1| £bѳÞB¤Y´£z‰ÈK¸Üî3R4¨ÖtB/ä}ïŸÅÌ;I6~/qcµº6±`Ï|ÄcO_#±—þÒK‡ò‘α)F Áv‡Áµu¢Í>ÝŽG©M¼>Ä)Z¬Üð !µI3Ïì`;wÿèð¦ÎuÖ—úýnÅbkÉEŸ¯1=Òê*øÃ˜8m; KßDѶ­BÞv±•¿¿ÛòÉ{7Y]u¨×:lw#,§BÓ÷¹¶Þñ]lÇ‚üÆàŠúŒIÎêñµ—TFW"M§d)ªäfãÚfŠbJŽÜi@P£Z”€³OFt#ÁCºÊòbD¤ƒÃíï6ó7Þ«ÓâWg¹ßSåó=ç‰õ,-ìd)["fïêu:ûO ­E^QbNöv¸-–0;ÇA¿Í'úû2•Ѽƒiæ™öi$!7^~‘üüŽÝ«óÞw]£ÝÎ8p| Å 1†G"Þ~° jŒbA*áÓ×)¾e†@íqÏž)ž?½N§^çluœòvƒ\=AOÚQ@¤Y¼TžÁêo Ì«×ÁìñŒ³~ÛM01–#4Z§Ÿefb‚þÀCÅ&ñô½.¦$aH¾G˜.…z]Hdqeé*3#EV6›;:ÍúN 5Uȇe}Èæduˤµrì6WºüøG\ê{lòuL‰Ÿj¨©GèÈ8"Ž"„‘Ʃ̀ …P*Œä$c…ÝC–`#@ôò5A®¤@ 0Ôb²Vú)å MMÕ<ÖëpSÓŸ>M²rË£qn‰öNˆÚ¢k 7—}úCIQ€mCx¬ofäžåBÿ?óöãÜð#C…(•¼þNññE´Ú"~w‘þêq*è!žˆ¹±Ò¡VV±-‰¡ì›Þ;8\àQÉåÅi±Fܹа‹ Õ‚ŠLZœ[½G«¨I¿1Ï?μ—õÊgÉŸp¹ùÄn¿w„~c ×áWñ ¿úÐ]h£Ü…}\»:¤,Š¥ó9]cOQ¥0'vTÊjt¨TV§+ý×®Âwºðý“üi‘R¸:)Ç‹UènQ߸ÂúÊ*o´,~#èò6+Ïy•Oî4éŽU‘ý!¡’1à¸L—ʬO×)ÅŒu"†«;TR‰›HBK z*áŠBQø "¥¨¬nǘIÆbgÀN;#HB$A?%L$¡lÐö":Í”QSÅPwk-ËVÈ\ËèÓRA¤hY„…¨Áu.¾< ZÔ-ëèZÆÔž1Þò‘wb‘a!í T«NÖí"C…,VI\Nas˜R;XÂÔËXvŸfb P1q&öÓ¬2èm²Ù“X"ajÔ%p$q&Ñ¥C ò£9ŠÓE†~ÊÙg¯úÃ^§Taà‡%esèãd)I’ÐòSŠu“p£i,Þl³wfšá0`cs™™©ƒ¡OâóÙ3—p7÷ÓÚÝnàÜ4ØZVX78¼ÇIJ%v–´‡ÄÒ£XÊÑï™xC°±¹*@ìba¾´;ê`ÔR¬òÛ ¸óÛÚm{™N]m°íéTs9®Ûûд€Ð²0?Ç—¿Pä@ñÎø<Ã(¥˜‰©C“dÈa¿ß íeLLd]r3ârFè Ø·PÔß~Otè¿~)~Žï¬gá;SåhûÈáí¥“z@-—c’!ŸÕ4~É/FÈ’€¿ì7u†›ÿÉ-ò«“³è[+Ôš›hv…&œÙ±˜æÆeÁg>>ÀU%S'/RÖ¥‚©($™À ×DHTf’¡¢`y“¦ ?Ȱ5…vå‚B[@ˆŠ‚ÂxM‹ <ŸCüa¼‘O¬£¸ûiw¶øüK…rÑ¢ZÐxÿ¯üżIô1­T»¾»¡? á©5O»ÇG $iW¶ZäPeè*äKãØ¦DQzè®ÂÆö€Í^JÞɘ,¸ŒXŠiÐuK§’³ÍVå(7.=IéTs‚Í++”ëZÍ%trŒæŠxDTtCe§  CZí.2K¹qs‡LI¸r}™_Úä–#³Ë¡NŒ12hЋ<©â¯ë6—þ>cìtF7Îp•¬áa›eî=4ƒ©glnµðý!® ¡‘{)Ó{®6mæìB\GÅÑ%Ý^F±ª¦’C'Š<ÿ\—ž¡a{ ùi»žÑ>µˆ—$¤d´.í  öÞª!ó1?Ó‰b.¼b 3„Ÿ1*¸–Mw+eÔYà©“§MC¬pçè{C‡1ü[¥v­Ì=ñ€Ûn½ƒ#Ç¥0ìtÈ‚a(YÐ$( A*ñ3IÑ´¥B¤)‰“Œ,ÍÀÔI²” ŒÙî‚l†ôê³³³(“Ÿ¤·ô7ˆ(&-?ŒP$a÷2îÌ>šRáÅ“ç˜=ò‡o–«rÇO)5=a!Udªƒa"DŒ´„¦àŒŒñàq Í&J`rØD*1­¦ KS0•CÕpÍ&5¼,bĵ¨){&$[ oØÜsø çD ¥ö,â8·‚ŸÚxR@"q±]T¨˜†F³ã“IƒÃpÙlx¸9C/„1Ç÷Üqç]=r[d&GlÁštÉ« ³Œ^å²Í°µƒ’*Ô-$QÉê5,Çbàí®N†!–f’~ðž±)úž`vv–ûÿçŸcge™¾')æwÝìÇäÖ[R4)‰º cc&‰žz’WC( …€0¼ ÅÐ$…½ ¹H`œH8úžw³çЄЈ"A†ã¼åm'ðú*×.[ع2,Ñ0tƒ\N'É|¤H8~0Æ‹*9Ë0ˆC‚Œz%baÿ-Ôj5N¼ïlßøzª"5ŒTHò:4F¨ IA3G–ÄÑ_׆ NÐ*‚0³P šÁ½o{ÈMÄ º>…é;©ÕjüäG>Æâå—9¢i(ã’v’16«Ñ¿¸\†Ï|¯í7BòµÄ¯¿[ìŠßÝW^yå—:ô¾Ðÿ9þ9þ9¾Oœ:uêOîºë®ß†ìêl¿¡±}µ0^²»:û;â[w°~ÛûßýÓO¶Æ*eDóö%ÝVdñÔ_Þ±HS¡ÚDé€8HÒŒ,‰!ÍP\] D©Bñ–Ûx÷‘yìt›fwÀ_äÂâ Þpìõ­c$™ÊÙçhô_dÿôòή,~Œ‡Ç N_©é ‹öŽ7ôÉÒ"Iš‘ ¶¹ëÖ¹ûöûùûSÏÒì @µ1 „J&T U’·ur¶FÁT05¦)H±{€e¨ B4E"%‘¤ aê§ 3ùü´x–'O‘ýûÅ’ äBW‹øÑ~ÜÆvÛk×!Ê2Fò·¹¼Ä2ÞPÒé@ï>’ZM ‰?´øþ5/½Äs'¿D1oPpTæÊ$q¶ËPh¨ZÆ•å ‘BeÐ÷YÏ£«01:ÅúÎ"Aœ²µ²oÆå¹¤™à-oÿAöî=À#|’–7ÀÑ Ì¼D…±Œ¼êP©:xÝõÍ„ZQåü“M,Ã`g˜ai‚™#žCG s ™Ý wL"R„y{÷Írêþ’<)¶®b8µ ¢Ú<ÃYÖ!dq†ê ¤9”Ä=‰ß‰» ÛqÀPHb ùÉQøÐ{ùË3Û¬ C4UA“™&ˆ4ƒL"H KAH4MAºª¦é®‹^’"R‰ŒS’4ùºQY†"wu±ï~ýæ§Çø‡Ïþ!õñ7®ô›-rö…%¼®Of((y‡M¶"‰ÕL0"…AHÄÐQ‚‘ ™iÓTyÏŒr¥Ê©'ç«Oa»±Sú:ξË~3þ[Òãowåø±/}ü¯xï/üÛ÷ /ýÞïðG/•ùR3¥¬¶ Ÿ@d䦿1FÇñ¯^FÈ G1`~åËkl-äÇ]tš<ýò§á¿ðÇ”r ,µžemòÖ»f4wš_âÓÏÿ{æÇmöÚ![ɳËíÈP§¹aÇUc ú_ã/ýýýùÝ¿}Ó© Yer¹*¶å ê•¼Ê\=ǘfâI‰¦+Ø™Ž­ézjF’edÙn0DÊi6À‹BAH«Ûâg~õƒLîÒ´a<.S܆cQUA’ö Ó©"Ó!F½ÀÅ“ ¾ðÔ6W¸õx%ê±ÝÈh63Ò¼ÚMß2ö.ÒÄã?þÊŸPªÀDÝæðßåŸÞb$o3Yˆ¹pþ0Ÿø³OâîxêûuöÍU(÷2Ú}ÉZ¯Ç#–.E„mŸö–²bÐjHôJ‹¹Ü¡Fg5d‰”`²xI"Ô˜h(P\¸vg›wLsóãÍ|ÕSƒIkÚ$ Rd(£iNEöR4W¸EÓ‰×#¼ó›«®vÖŸ-‘+½Ä§+R&ï<ÂO?ÚCÍ9(š†©IrjŠ‘„¨i‚¡¦M,‘H4EÁ5:8ŽÈRP’ÝÓø4ŒPã!3d8D'b§Õd*»ÉWÿêc`˜Ø†ÃÒºGg' H$Ú„à¶=“ —4ff ¼ür€ Ö¶SDO X ¦iÒ¦DqD~Ö¤/cWoòSúA^ø‡Gø“GN¢q‰ï¬a¿k|7¦}Í×Ñõ;‡飌%}þð±Ž.®RÀ¤V›‚\JTÁ×u©¢¨*A&Qu³—¡ »­ÑøòçXó6nù0œÿßQ¶ïà_~øçhv7ÙÞØdÀŒá’ìó©g~ ðû çš*ÏžÌÍfÜL£ÑRxî¥4IìùH®!# 4‡0 ±4E¨__(›b+)Seƒ½“9\cWÛ¨k:®åà Ré&-úƒ&~£ Ptƒa¸Ay$I[­qéÌ…[t ínß?Åxy9{Û£dì%£"\2òþ.“„}ÞóÞ9º=ƒÆQ²M¯#‚’żàÆÅŒ'ŸÔjE #¢ÛR(;D"&Î`O½Æzg“‚¥±´¹[(±oz„¯=ÿFÞ@17Ö<ƒ„¼ Û6#5‡ë7>ùX«Þ_äô•Mœ§`)T€n’$eõæ€Þ„ΉƒUî.ÏðÕ“KT­*î)óë¿t’ñ*¬"þåƒ%¶É7šèRÒÚJQR¯))† "QQÕ‚€¢¡‘·U¬²ŠQV½¢mÜ$sv·(ª# H•4ȯû\<×å‘•Mn\!`'‹ñLß½R`8b}îß2üÙ?E¨ ‰—˜‘£eè2£/ctÅ o¢$¢¥  DZ€ !’¢¶Y’!}5"ÌŒµ€¥µ”·Ns×½{xìo^ÂßhÓuòIÆ\5ãõ‡*,¯d,ì/³z3Å’gÜbo2, ü ;'èyPR¡DCt-eljs»ø=Àú÷¿Ó~«Ivêô©Ö‡_øÇË.ç~áßsø>¿RÝCé~ˆ¸ÕG»q×´)9FgkáSû}~ȉ‚ˆ'}“’*°-“0Ö¸eöGØÛ-¬­_'"¡lðSþŸ>ý+\¸¹ÂÜÄ,Ï]ºFa$"n aÚ&OWX;Èœ¸ÀÙ*çW3‚Ô¡ßGšíößÈ@Ó ÇdNƒÞ£hÖ˜úÐ!,-‡k¦öH’ ¶ýQÔGíŒm‰¢ÄóU”~ˆ?ÐpšG1¤a×Mbþîã)ÿæ÷mfGSvæÈ$ô¼íá5 ¹9³†ª Е"5û^þÕÏÜÍWO=J†JªŒ‘³4Ù5Ʀäs%Ô¤…’ Î^ìñáw&ä B‚ÌTV6{Ü{ä ³ÓSòòy•‡ <öLƒ‹«1££.hϼÒ⡉E×ÑT–#]5ø±Ç¸7Å¥« fæÞ÷Ž;xâËרh¶9xpœÍ•.ó%‹#Ó£8{2ξØaùz„ëZH/£>aà'0h†¨†‚Іۃ IDAT4!Èé`çUôª*Ê0…1ÔEd‚h-$½’°¼8äd»Ï{æ&yjq Âc©X¦…]ÌaTvOeÓëä>÷ú(Y®Bì›ÄaÈ ô!˨%A$)ªÔµLlÛ"“a¦P³ j9]„Q°›RGqW í€,‰‹ü¬ÉÜÁ{¨-Œ ª9ÖJ2fÌ6Éå_£†ŽÚ58X+• tìs5ºqK[-FFË4W·Ñ¥†*3LFG ,ou ß  ¯uÿ }õÊÆ×dÚW.ßlFü9ggx1‚Åÿíóܹg†èЧëØén1>RÅxñQÚk˜B§<º—ìßà3ç ¦YĶ,Wαœç@í^žZúÏÿmüvÊr÷ ÓÏ®_å†ßB惔°[¡¨•qÊÛ”«y<ã§0G>ÍÏzŠóÍ)~ï3=¼ Ķv‡ØmÛav¤@-ù§È¶Räʀƭ:ñÑ"m?A¤+èÝ.Õ/j¸<Æó}ŠcS¨å ñ¨L'™œß d!çož"0ŠI åÔæ¹û£w“¥)áPP¤ÃHnž-oVÿ:›½3ÔK.†nà.IZ"À4vÖa{;bæ€BœZøº¾Ÿ}p›ß7JQ)2=i17o3ô2ryƒ|>!—¯0:RæÊÕn*e×Tvõšyµµß`xd9¢?ÉR“R–Ð$E79G%H2±#Ìð›i>F¤*Ýù-Þ|ç~ò… ½A†’ë†ôý·Þ7Æo¨ñØÓiÝE;!(—"œX%õX»&° :vNÓ`è*š¡¢vp@_°Iz ¤@¦ÝÌè ¹Ùìp¾ëÑsT>n°CÀ¦ ŠŽYÈc×\¬²‰]ÝmU‹i?õóG~þg …‚V¥ÑU·\®E2‰Pº-f%öÉÙGoœ"¡Q™¡K¼,e´à…>©’¡ÄñÖeT)¾ÊÚŠOkõ:o}ß–/®ñÌç#Þô¦×·Lž"à¶{ ¼|ÎæÄ½5¼@#(U‘¡dg;`a!cg¬/m“ ‡í†ES©ÕJ¬hÑ÷!Ïo‹oeÚ×rïú&ËÙÎ¥—v^È4y‡B¹¹Ä?à'Žîç”ßå]Ú)öÌ®#'ÌÝÇcëÆ6Û'OóL#f&í#Ûk\ž\ÀqÂìV¯FÄwÏR­¿“w½~’L Ùì|œV– ØÞt›É°Ô”щ·˜ãøxƒfWA(É©å”,ûQæ*ûÈgøÌéŒwæ‰}5Ÿ¸HrÃÛýr©¤qvoÄc*¿è‘;§£Ÿ(fŠ“¯cMÔ¡TÀÈ[ȼ…V1éu68½ü§ÓMNd¯ç—ÿõ[HQ°-‹ØSˆ¢˜4QÑ’1”Ha¼´áØÝZƒs´‡×É AOríZŸý‡¦)TJËuÆ& ò,I1Þà–Æ } ¯c è [!½n̈"8}eÛ.à:«ó†Ë¥›;ôûV]çðs÷w>óäìy–n&´)¿öóGxe}›‹ËCr®F&ˆµ”$¯bt FÜv¸ÎN³…®TY_êrò n?>ͱ#öŽ[Ä[=:„ ¿K¬&Ã%Ÿ2ÜVÑ‚Â|Æúu=Þ5Š6‘(QŠuÌDF "Ü•¸I)ˆ–S¶N÷¹¾Þ犈yIx\÷ºÄC‰‚†PT4ÛÁÌ[hŽŠf)hÆ®¦:R¥Óïa>ý÷üÀ½5l×áÜåk¼óèA†[MÞú“ÿú Áõ'ž§_=Ä-rƒK¡Ë÷2‘Òç9k{¼LÐi°ÙÜB4ŸyŒšžßÅ­×уGæ¦9ù…ë³ÅèHŸGÊ}ýñ¹€…(N•¸wn’Õk7ÁM˜6MŠõ<'WÙÜ‚p[¢e/]oPßsE,Ë"—“L×´ö³ßÛ¿çû.+ÿ®–|ñ°ýÝ/þ¯+þÁòâý ·~ôyü‹ŸäÇÏü”ímêã7üÙÄû{ç[¨¸‹.‡ÿË—xdtKuö>ü^ƦªraýÿàÊÕËì‘dV™'nü=+­«ŒWõФ×Up¥‚Ëáè¶µIÉJJ8\ápn@ÎðxníV&´>Vmœ[Ê_À<Û¡ù…eúà ©HF' ƒ—›?Pcá/Z8m£^ ž3Q .ÎdYÉAÉE¸&Š W®Ÿá«K_¥kwÉY6f®’¥ëÄX¬5òÜvðNúÁ"õÒqÃm ö^†ñ&Z¥@ÍœÅ)8ºJ«¸ÍÞz€®·M7\Ä‹W¼U5Ñmèõ»ì4n"¥O5w ×Q Ó” ‘„IÊJÓçù¥ ,.öYÛöXÞè3âÙ³bðâ©.ÿ"Î{ç;Í»|êä“̼ÑgnÃ¥6•cûúnDhvÌÔ¬Šnëd±ÏÈÞË×ô|Éå«m¦g\f­Œ½ ó´[×ð6ÖxÓ»ocój‡'žÜä¶Ø{̦:bQ©k,õQK02«ÓÚNˆMÔD#¡~J¬eˆÈ€®DÚbKröü&•›)CnäU”ªÅÅk‹(Š‚",„n ›:ª¥– Äi†âïòËÞªJ{§B~¬Ìß~åiÞøú»ð·\{lÿå~¯}î7©çtv6Wy8?$?Y§ðÊ‹¼÷zý}õqMöÍ%rO¼ÀóW/¡è6=?FÜÿ ÷çÙ÷Î=$qžéºŽŸö™Ù¦X4ØZ“Üýº~nH©œÐßz€ã{'0½”TQ`¥ÉÛna³£’„8©a¾œ'˜«! yrƒÛNµ>õ•o#Êï ØïÚoýð·º{e@ÖߨxáúoüÎÃCGáÜ¿úYFj 6« ×K³¼s¤Å¼õO9}óRE ÏýäÿÄÒ?DøìIԳϒ-̳µyÛL¹ïÈXþqkœÍ•”ý “Ýûøïîúu½ô1{–µÍ„ñ±)Šå—Yo˜ô«·P-¾/\cÇkÐÚhrñòK<¯ÜI«½ÃÌü8ÛÿùERE%_)’i š£âÚ.•Dçè+:Õñ ²=yRÇ@ÍÛX•øŽQnº«¨ºAaZe^GÓ¡×T±0”^ 0È —fD2c* ;a?Aw‰:)/\j¥ _Š›,æÀ)k쬶v+-TË@è»`E‹É$™¡J&¾¾ù?‰Ùé¶ØÚ\çj–bf‚é‰ a«Ï©çOrýé³ «.¦®rúñUÖ;} ŽÅÖZ‹ÙœÉõ¾Ä4-Þzÿ!þóŸ|Š»F\±Æ@K74–K~¼ˆ®‘tÒBƒÔìè0†ÌÈÒ*ˆˆT†XùQqޏ`=ö"éÄ[¦‘7sÚ,úcgþæÞ;ʲ«¾óýì}ÒÍ©rUwUW'u”Z©"cc0xð¿Á¼53ž±ßZŒ±Ÿ×,‡ñ`›dl†d0B(Š„B«Õ¹»:TŽ7ß{âÞûýq«¥–ÜÂx­ñZïTÕ:µî­ºç¬}öwÿÂþý¾_VvöÓÍ¥ØÄÝ'ÅeW_[ƒ/ÿ³-ÖKöR ½Ô?¾H¢Ï5ñV­q«-Ë +”dz¬•5ßomàðþß`j­ÍÐM¯¥i`ƒH( ¨ Íò©i6½ó¬<ȦÑ~²`CñÛXÞa²FßPs {He}|õ(×ä@½ÂÕ7NÓ ñðñÌ/Ì34p;oßú:á ,5Ë‘Õyr#/Ï!}å¿€¸ÓÅX.äE'E__™l±H9›Á´2ÈñI.…r%VÚÅN9X–…Ýi³¼ø Oœù& N’ê°qŒí5é‰7Åùú6ø:ÆË%ìØòÅÄá'mH+?ƒç&¬Î[,Î jó û¯½‘U‘-}lÙå086@-X&—M“qJì¾|€vg™´;ÂÊü å‚K§cHåmr%›°“àFGKÜýí9– Ò Ë€ÓŸ" F.+"öt™íh®éKÑ |æÎØ$aÂwggYz"FµÞö.¦[ËÂ*µ(Ê4óË>Õ8BŠ å2›·•x÷ÇvÂL‹¾¡,«b…[o@ÔóT[1Õy ^ÈHÅâè£mvÜæ1ûÚJÂøÎ4­ZÂsóu6d) &àì\Ä)ßçIÓdYÄŒÞ4ÂÊcÓtÎöú ¥t°=‰ôDZa»+eYå&HÙSIP…>Γ©ôÑi4yöà ìd CÃ%º ‹lÚ²c§ÏaºMâ(FJ ©bRsg™ê¢ FÆ*|ñ ߣû8ý•©¦×jb9PêgÙì%“Ù‡Ž›”–‘±ˆQ¹Œ4>ŽíûY̳S8óϱü–Wb¿ñ*N-’<|̳ ¬Ìž¢ÿÿDËo d­R®Ù½•»îzpí_ê‹@kŒ1/á>~)Ò/Wªuäðc©]»´ð9?TáŽ;°×º˜~Mfß-˜ûœgç–ò>Á¾«ÿó[‡É]¿—®°ÉÚPÚqÏÍ`ïH io£oäT|›&ßÀ÷~ðe¾Øú:»Ëmž=x–»î—¼æ¦A'O6³—ÅF›Õ„rzã…IÆÂïb‘ÝRäØÜNœ~øB”ÒˆDãņ¬e3\,’©ä± ):Ù4R œ´ƒ“’¸FÓšzŒ§gîâðÒ³´¬.Þ°&·K3rËVâòm£p“Ø>#ýðŠËŽíïÀòEcŽTd=‹™ÃšB¿ÆIÃÝ÷<Êä„`0·ÄÌù禖Ù8>†+†¨ÕV9{v†tN ì¼baŤó,Iè'¸‹»òüèÞUæfk¤Ê’TAc¥@b ¨Õªd‹’T΂lH&§VŒßrI² +3šêjL”Xôíñ°S‚§¾ÛÀØŠl&¢(Þüî~ž8qžƒ³kœüøû6•yÍm;Ù<>†Õ-aÍj [רŸ‹!Ž©F)†·$ËH¥ÄUWïäu7]N lº‹Óø­»¯eæˆOv`ˆöZbÚC;)Î-Ï0:2IÅ Œ 3ßìОmЫ^ïiù€Æ:: OŸ$?êÒ÷êë¨1H§¥1'Éõ9¹gŒLqÞÎ=g[dƒÌZ”®Øq—Éí»X‘šåÇO2pÙ.І\Öah¨Ÿ‡y¶Ê¥CÒKƒö%@½TùE–6j7kÿ×+ÛG¦êݽõ†Ïµ7]ÎSñuø¹[‡¹â.{6O]šáWÿèQnú÷w°qd#›®ÝÁÙLßm¯ÅjwÈ%';ýŒ¥ê0Ožñ©¸ÿ…Wíw9='˜nÛ MÚäJƒìï°g{†SÕ™^8ÀáÙ[_IÁÞH5(xeFó-¥83ßëª(ŠŽté å }}2i{<Œ?Їøø›LòÛÉ/4iÆi¬½¿„Úšc¸X$Šâ E°sqöÝ™F®»srÆU×ÑRÕ®S¾n7RfÑJÓjuŒC–WUþyHú²à½”{,øçVöyK ¨A³x`6ßûþÍ«$3÷qòü¤oý8w¿‡ÔûX BÄø®~Íë WæqwîaêÞ‡Ùþ–W“î+“;ušjÃBº1…üQ®ÓWÜÅÚr‡ž9—×4–=2…ã㓚) ¼_&ò¿HÞqX[zãϳ²œc­qŽÁ+]Ÿvhú½ÆlÏÎ`ÓK%2¥MÉu0Êbeqbˆ}›z-$gg¡«™™kQ‹( [è”ÀíØ4» J(ü†&i[4f~ÃÆÊÙdúl–V5gÎ&”J’@*†¶ÂìLÈ@©DÜÒ<ø«d’4ú ¼¿N(«xvÈ[ß´ÇžXbþä2ý“0±%Ź'CßЩ,Ïfv*`í|šÉ7F0.èj´P$êµZô*ß{t^Çd-¼~‹Ü0¤ûÁÉW"eoK+ 5V¬A ÔzLÛŠ›ò Hf™Øš¥œš:ÎôùÜ¡lÏ#[)G1«ssäRiF''(M7ÐÂæÙC zNQ°Zäûh®­!ý6: h^¿`í/K£o*œÈ84ÐÑ!I°FÌáG:Í:í¨CvYøñ1ÊÏ­°ùÐ÷™Û8—ÓèÃ4GGQI̱S3tÄB­ºzÎ^®¸é>ÿÅŠ¨—JÎ'@òw÷Ї?÷Žc¾j£à»s¼5ŸçïþêÿaprݾEªãœh¶¸öm¿Àó4g“¯xË…"ŒÀ‚‰ŠK½‘ðõ“>¨52r‘¾‰€f,‘F%¥`~í,è 2~ÏRôUªtÚctÛ§8QŸÇ¨>b¹J¡D­Q§½Ú+®H)U*ÏÆIõÔÐûºÓTWfùÑâyÆŸF¹cY8®$q@¤c°²e2ãØE2}}lsØ0PSeÒÂa¶¾J1g±s[ʰ" Q$¿Óæì¹gÏpÃ+qo+QJï£V]æÈS>3ówsjj‰ÛÇyý;¶òö÷FØ©nºW^ÈlÂ2N +s~ØBÅ’J™…¹BÚ&cœ”dy¶ËðHŠý[‡8·ÒÁiy´Z´tHЄ­˜”“¦ÝTdm—²%iÇ´ …+,wXä²iÖN·©Ñx]IÁ7”$±ÄîOqf®J±m{‰LÑfÈ·xï{2œoú=Óàð,ªa馃 ³ç{Å!ٜıA®Ë z4°€Æ`„XŸ`¦G›6d†,ò‚ܘ¡2j“+\[ …E¢ Qbˆ6ôôbíÞgŸ<1ƒÒš¼sÙŽ N/Î162Lí|“M›7Ó"üzR.‹ }*ùq¼Ìòù”“Fu µf‹ÜbÒýÏáEmdEÐM• ñVD_! ?솤Ì0óÌ'ftÃe8‰øùLÝ}íGœ{f†ù;Äæw¾Žh´LFØXX‰u—_ØKºýT6Æ—ïó–öäs+gþîê ýÕ‘§¦89WeÏlàúÛðº?æáÿñ)þ÷Øo¹hyŠôø/¡¶l¤èH2ÂPf†‘™ôgÚÜû@D¹ä‚s†[öL°y Ï=§Î2¿}‚9ï1¬Tñ=¯`˾ëyâÙYÂè<~Xei©Êâ\@mUrîìA&6 ®Þz5K3ü¶ÆKKÖæçÙ¼;‹‡di!D‡Š>‡þ¼*!Sô(älÜzŠÙ¹ mȦH§-†”Íï½ã5žå±‹ŒgÓX)Õs—¥dH—Qĸ® Óñ—l:MËÈŽºtMÄÞÔϜߡ:6ÍÜa‹n:¤>c¨­¼² ³œ =G'´Z6±YWj_ŸJúL z¯ #p2†ì›âf‹Ê¤¤8`Ñ_vHÛKH‚$1ºXË’=íßõ¡àæ«!9׿Èsg°°)”*t‚á°ÎøŽ=ô•87}Ž´ç’K¥81ui»4k«$«k¸R[=^,G:¯H#ò8·Ôf)gQºòJ²}E*›8ô‰——èj‰B’ñ<„FÇ ceÑw>€½© 3M;_gxÂ&¨Â½IÄÖŸ»‘öÖ´Z!tmþöi£»/1Ž?5®èF_F£Ö¢'wéðâ6½Ì¯ýÇßø¯ïšè¼³kjÏ44gí,Î@¯Å*HÐ9qŒ‰ë_Eib”! ZH„ÒŒy‚OÝ…trT×Nã¥%‚&Å,¥¼Ç\½A§¶m´PÇ]BÒG.ß%˜ÙI¬FÇDñ*kÉÚ¿üÎóã¿úÂ÷éw–xté ‰ˆ0( ¶ ¥ 8ž@ØáH„kÈç\¼œF¦rDÎ$…|ŽHz(#"M¬$›‡·3߸¹Åƒ4ªŠÚš`ÓÖ> …ÓÓg˜Ü´‹ÕÖ2Bh‘r± "Æ–i¤Äq“v{f5¤Y¬-C£cH0Z24¢ùå·ˆ<ÃÓO?ÃÐpžµZ›á¡ IÑé,*%K ˜ 6ä²qd0Úà‡šBŸCÙñ¸¢\!•Ê0·Z£”O‘¹Œá½×ò•oN;d$—AD‚nÔ%MšzÛÇs-¼¬$U1~BÚqÈ%ˈÄжËüjÝvét)q?‰X( W^±››®¿Š/ýõçñƒ%^˜°l“d,2I: ž#ðl‰…@#zŒXfÝ`‹ž*»%-®ÝñA¾û­/súÜöW߽箠זw±ôå…¶¼‹ÕâÍËöâÞÚ  µ×Aû¼¸ô§?ýé[>ðüÙO±Ô/{ضeYDQô\HXJ‰ëº$Iòo"®ìº=¿8ŽÿÍD/¾Ný«*Ü~¦Ã¶mlÛ&Š"´¾$µîÿï¯#„Àu]”Rÿf"ÚÿV÷ás“$á£ýè{>÷¹Ï¢×GÛå­Ú‹Aû"­ÚK^Ìv~)Eø´m[ÙéƒßüR¦”ߢÒG ¡2ıAi Âb]´!è1NÓëeT • QŠDÒN¯h»¯o’¾ XV L:Âø4cT5¤„¬é€và3µªiG!3‹ýéµU…›³ùoÛê“ã+w`ēȰ͹Å`xï{ßÃæ\qø0 ”¥`£[" ²P ¤DG‚ñÛ÷©Ö‹@˜Ç)OB=áPµË±¢Í5ç˜ J,ç'èD¥ŽqptŠN;a¬±ÉÙÈ6ëzNÏžç'¢P~é ðþçºtÃU~xÛ¹F†[6¾Žµ¹ïЭžÇ’­vÊ&‰Ú~jEÅ é|­ŒR½Ø1ñq¼–¶‹$ ‰ƒT6¼ƒèÈãˆÚ`–…í9t“~m×ñxæø1¤´°„Á–¬/P½Î¡½ÜX](f)Û7æŸûk«ó<ôÐ7@[äòã=óy@`[a˜ eO˜Ì–=ñ®N3FˈÁ"ÅR‰$‰¶C’$a‚mÛw+™ÂN¾þ•ÏEao[O¯;ßF€Ï/¤Fk´ŒAi…Öm4JiÂ0!Iz[G½¹ßS-øøÇ?Îìì_ûÇopBŠç}T‰ ÷Ý{͉ÀÂ` 4 tÏ-¢7fÆ€6Akp=—~ìc>ü ÷Ýw×ô'>ñÉ÷\XŸ LǼ$£ü"-ŸKì×^*¥Ö?,I}ùKŸù›·¿åš?mf HC$4}ƒBKŒX–MÊõÂ($ŒÂXG…†(V,Ò¶$Ÿñ8÷6½ýwع£Ó{"€¤YéÀRƒfí<ͺÏbµÍ'ëœh8Üz ©Ž59AßÌiv¿™gf—ùýÿöUòB’ǰØR$IÈôô4ñš7^k"”…^j‘<ør÷V©Œö"6˜b*Yt5@¸)èXû0Íõ‡f€+m–7}„üoýWþñ×ÿ#,’œ IDAT÷V+Èü Â¥ó›Ù›ûuŽ\æ¯Ä²”ü‘·“훋$?ìr`âZÞ!¹üóŸgùÿþù ãù;X>=ÆÙóŒ\³ 5ÿ'$‘¦½6‹ëÙ+ÌÏœâÔ l,0±!G± “Ę8DAàWÉ—J¤³EÚÑ"ÂîÇï„DF¢|Ÿ57™{¿E!9Ž;h¥QV‘gÛŒ”Žžâ'G§z+¶#p-ÈÚ!%u_Síê±MÎVŒ “}…\†n,¨×ªÌ ä¸ã[F:g¡µÅ­7 19š¢”`x`'ž±PÊÇR£¶‰°£–›'jf ³.IÐD›ˆju†V£C1W)¸ïá«ùúW>ƒ”FôJ•Öa#„xÞ"*Õ£6UJ‘Ä1q’'Š0ŽñýˆÀWDÑ À¨V«ËáÏþòô’]¤%1²—æ¶„\7@!ž°p¸B…H¤Öcˆµ&BiE¬‰2$Z±Z«²úã`©å?Æ ¹¢—Æ´ú%8üQ—*§ºðáÏ«WÿæŸÜýè•Wì|Æq¯žEC ‚H“(ÓU€Ò‰–„±Ä÷‚P††XiK#„C)Žyø‘3 ¼¶³¾®õVPcÉuOÍ`)EÒT,øƒyfÛ윋YÖ”.ÛN4}ˆþÎWé–C¬”¡UõÉ÷—Ñ6A†¨Bá¦0ÍóēșӈëvcŽÍc‚ZÄöÍ=Ž(Ë Vªˆá :µ ZÈÖã,†!G:W²?Zá@òPv37Îf÷Ò tÿwÙìÍó;Ç?B×Íñã×îgÞ?ÈKŸç{¯ZaëÁ~¹¾?k;t$}k|äïŸÚÓétÍ%ŠÃ˜¸€ ëxù ØyæWHÙ"—±(Ò#—)Ð+7•EÊõ~Q·€'5.6¡¬ÒêtÝ€Bi];†—Êrôè)N›â”e(À „DÖ…¸²7ÂD³ýH¹`ÛqB‚n›áÁA.Ûn3±=ÏôyŸlÉ! E,zÿBgp”HTÏ—scr…AêK6õÅéJ–¨“Âq#²^«äÒjE,­ÍÐélÇÑ‚Dôú€{D×/€OkÝÛýíÙ¦‹Þ1hÝ‹”-«S›xýït:]ÒÙÜ#†”=&×߇žUB èWJ‰À•’”× Bc° hc0B¢BA§ÙâªËKüà ~ä"<] ¸?SãÅ ½0/µ´7þÊwò׿øÿV%Z„D1¡éU# 0n/áÇŠndC«¥â„´~ß« 8Ûñ½Ô…¡ÂÄàŒ«YU˜HK‚Û$öADŠ©þèÛôí¾ +—¡ûÀ=d26VE°¶Ö@ë a:˜\Ój¢?ÿôãÂGÿ|ánœÛ®ádµ‹qÌ &ca:Æ—ˆR¢^!€0ë#ºîŽÕo;Á÷ò®¥ßäÞͯâ@ü4;/p}æ.†7ÞÀ-ÕéÞûÌ eQ˜;?T¡}æû<»å·ùR¼…6iN¾ƒO”àÜ1ÎÿFoü¤¹HßÐZˆeC&oXoÝ­ ¬ss‹8®M9—Çs]œB/S&V!A{†¾¾½v-q‹C´|èÔ«tŠd+ÛÑ*?9^g­ —otXm86t¢ÞäMŒa-6#ÑcèO 2¶!g[¤\¯7¶Z÷¼Û071¶!ææk'H¥$žUgqþ1Šù!Üì‰ñVBÐ5>  uÒ™g–)å““¹Ì¡Éºm–ÃY”2$‰FÉu!2#AŠ^›ß…Ék Z)´(­QZ%Š$Ñ$±A) £l •ÄѺë¯{´ªRˆu‹*žw“¥\Ÿ;B …k;8¶CÆr(X’ŒNÈi‡œÑè8B)E—˜¶- FÅ( ‰îÅãìk}ûÀ‰ƒaêEðâ„ä›ß¥sÿˆb™LËÇʦ1Õb~©-×±ŒF—nŒn.!6lÄñ‚¸Š roIöϰtîOظœå_!YÛ—&IǼòóó¨ùÿÉù·ß̳»Æù½ŸÜÉw^ÃÁ×ÝÈ–æÎý&«·ôó±G¾ŠÕÿë8Þ!>3õ_hÀÈ®«HÚ R…<™Ân¢¨FÙ­ñ¦lJ¥€ŽD#ST[‚Á>I©¼ l“ÔQ›°z€°Ry=J÷î·$T—kXÃC¸)Hç=NžˆxÕU{lãœ?ËùÕˆH üc£µBC1Ž×dS6”O(‚3ç[؎ũ皌åËdsYêaL§ҮϓÍ6Xa©¾BÓW ·Q] Î)–æÖ0žKjxÓ§æî`Ü.6þšM”$t×ãYc –å Œ@Kô^SJ“Äz=I¥‰TL±d³0‘$IÏ%¾Àkø|üÉ?ê…kH!À€H)„íàº)R–K CÉr°$Ù$!1†DZ4¢iÙÄIL,ñzFD¸÷pp© ±ëK{¼/:ÌzÀþ³ìÓ^øýbÀZ7úÚWüíû?øº›b…Ýõ ~hˆB…š«ÓÎ9”—cÖ C@ËhfÃYtìRÉ8´UqžïíçÑ•îEwö1~µ‰èv±tDJvq¬ÇI°3µ5³õ¼_c"Ýb6yËb¨,9³çôNsn†Ú=wP¼á¸ïz'Éý¢_»ëÈqh)D,@¹è\m[È–‰ÄÄÂ^êóüI âùýþýóüêFnßÊþ|Л§vë/lßJ&èG.OQ~š5~3‚/OðøÀNú®|”3ßúm¶ß¾™±ùWrp39Ül ‡hbTó<¶0ì ðH»!­So¦È”ªä2¢ê÷‰â-8ú…ŒÀÍ5p²I§2½1hA`$4}¼L@jÃ6Þ÷Ûú>ßú4Wn*196ŠçÌsf)î%PLB`$FHVZ†J¿$çêõ: W&heaKI³©h®: )~p÷ Å|›=;7²oû¢~…JKͧOÔIT‰üe9la±\¯ÆšTÖ£Ûêâd8µ|Ža74äâ2I¢ðƒÛ`l ƤìÙ˜$Q$±B% ‰0Üpki'Ç—ùƒß}¢nF’h…JÄz\+Öbƒ4¦Ðu {^†0ò±¤M:—G'†L&‹kI<\<¥È[’² $–E„AÚ6q“’Q¢Ök0˜ð̹ù/pQ¨y ÀþÌeŒ—®à)ù‹­m¼^ûû÷<{îo¾æÎÂ`áþJ@œò(œXD(MË*Òl;´3aÐë…|ËÛ}¾½Ò¢¼ÍA/obr“Ãï›#£»¼ÐD »¿ÛãÆBèc¡mÒŠ²ŽÈZÛÒÌ«nJ¡˜njÞ¾1Ãñ¥&ªO+î­ÂBXd2’ÖÙÓ #Äu{QÓóè°kµÁ,€“Æ4 ˆ By?DÌ×)‹Ä3X•aÌPµ¸8o'¯ x|û·­¾k¾óÿr"sâç?@íkŸ&7à2tù­ )CåŸ%[®³­¹ÌÍO~ Ùx¿uÙõ|éé38-ðÃÿü—Œ¬þ Úù.p šWfѶ!nÌ4ª$íHÔ4d&5VAQȵ°³;X«žÁ« º­³$¡G¥àé€t!ÄÊ[`[ë6E¨«µ&ÆIÓ?¸™÷Þþnü¹ƒüÞçž`SY1ÑŸbc,6 k s-ï|ìý¼é­ûÁ³ùÞÿ)ÑÊ<žeÀXKkƒ4õš¡-°y|ÏsiFYž9¹†gBF“¶nÚÆø[ÞL+î:x˜™é%²®2M¦BÕvW™²+xòè9zÖ>Q ZK¤4-ÑF€Q= «”^÷ÒŒdölÈØFMß@†+_1Ì›{>«+„ ¨Hu¥íIl×ôâvcz,¢¶E¡X¶SX––K6[ÆõRÄa—¡Á ÊÒEVWÈ©' I ‰’RiõÆ*•Ò‹”ç;6»F6Òœ?‡*„ìW(ÝKfznž DãÞ=ð¥—ìË&¡ÌEEÿ Õ‹­í… Åëà™_ºÿ'?¿çš±ÿ0ämÌãLw²2„V„êÔTM„• IL†bÎaOFóƒ¥?xv…ûžM1R ¸}ôš¦Y #š†¨²ûœ¯'t|ŸÅ–¡Œ ‡Œw%Ç–þr\SUpObc„‹6 ^U¨^“hðí„Mï~;íÿu¶ÐÈJ™ÎÙ:œ×äö- »V5†ÈCzYä {‰T+í (b˜A ž·¶›>‚=zžçüi F(ýC?zŽ÷³ãÅ*ÇVŽrÝžAz¡2OòµÔ¼æ¹£Œëm}ñë}ì{•Ç¡¿Á¿ƒ‹ö mF¶¿‰µÓÑ^™auNP ó°}Ua4&¥9ô`ƒ3g7^n3¾O‘‘ÔVBÒõ'ÉÜFÐíuAZSð\06r8;=Ëèè(Ýö9*• ×]s=µÃ:YcÜisÃ;ßÁeÃèv’áö±xð FÛha“$šXK¥Y«w8³°ÊP_™ñ!B1ËÁ#g銓§Î²s´LøÜQ&úBšM ä›A§ó˜Ä.®9½Ò¥üðA‚ àæW¿…¹óóœn+º~ÌÐHŠá‘ Z)Nïô0!!Qúùl°V=ðNŸí"ekËçC¤l1ë߼‘»¿1…m‹õÔ„A)ÛÆs\¤í °Ó!—Ë%ЍÓÅ‘Xšfk7̲³o•AB­˜=…²l”IH’žž®²—ijõ‹ËËu^//Ü—Í¿,h/²¶ÿãÅ–Vð‚µ½P9eÝý迼å·m}ôpã £e›…”æt§Å¾~;a¬\a¢ÏæÑÓs ÿëñ:o¾qß~ò ±–ÔÏuX\Ls;À² fÕ †¸®9jâùNH­•¢Õé³áÕWfIr«Ü;ìkƤV\ögmª2à[µ!®«ÏóL Œ£ÒèÃøE4;KÊ.`ßôndéˆZá× rA‚htÑ«-챦˜F[…!AèçQ>zßùÕ)vl$÷Ú OÜý8WU§ù¹‘¯2ýÚg¹}ø·™Ü§ÙúdkšTü¬3;ØÐ¿ƒ;'¾Ciù9rÛnä¹U{š£vY0H·Ñ̾ḛ-»4…>èÛ¤ÁòhPó™hÜHЩj:Mßöëɶ£L‚°2|ë¡Gyßm¯A¦Ê¤¤M½Qg! (óÜé'xöÐ!¶¦p¼"®¦õìCœÑ å‘aÎ>{'~»ÇóƆX ¢DQ‘KZ{n–ûžaÛÖa”z«ÅÖ±n¸ær¬|‰t&M¹”g2eóO|‰”ë‘u^VRo|õŽgù_{»®¾šµz‹V«ËÉsóX6¸ž¢ÓöIŒÅà`š“Ç5©´‡61Ãc)ºm‡0T4ë>A2uzßÿÄCì¸l¢—x²-®å 'Í“ÄÉz `/†aš5îíÕ* Çvð»m,ÇÁõòx©,ù\…¤ÛÁrb×ðã¹SäºMv”yj¡A+NèA !Daˆ1 ËIôMzÞé…$ÔËųÌ´/s¼´Øâb7ùB|+¿ðÙ‡ÿøçßÿ– vÿž „øAnÛiSW>•Z‹+*.O4‚VÀÿàZõV®™Pf1€å½Òm‡¬ÒEå|‚´anÙp²1]XöCÖÖ¸jÿc²Ìà ÃÍ×V˜h´ùÌߵطþûï:\ñ©„n"Ù’ê‘a›PÛù Ô±³$G‘¾ùƒ0r³t áÚÅJ`ÚPˆJú+»qüü½,ýù_°ñ¾¤>ö]ý§SüMøçìkÁÑ'ÿ’±·¼‡w~“Ý' ›é;°@vì ÝÓ§yå†>œþ7pßG_˕ǾÀ§Ÿäø_Αì~|$†8ö!ª30¹ÚÔC½Ê¨A‹¡ÛRè®Äø!JÂä¤a³6Ø®… 4Þ€A’h‚N·—è›ZX௿öeö §Ù½ç&ìT†°1UãѧpÃžÝøq@J¤–†ã?}ˆ8…cgP:!Œ#´6¸¶½b„í—såu;¹ÿ¡'™š©u#ÜtŽxj†´»LGHaQÄö2~ù^vݰŸÎéS|ñKßà“{û÷ïÆì'Õ8Ožc`›Ç§Ÿ‚fÍ06áѬE¨@’+H ¢<&íYL¯“-xlØä±mûçϵIb‹Xò¹,¯|ós3Ë”+ýC.ýƒ9êµ.¬ï $QO¸Ú ULÊuÉä²´»] ¤Ýj!…@AÌ,ͳl²]ž®/“ÏäX"ª:¤­¡V$@+‰?«ñyÁÂþKI¨^R/û² ½ÄöÏÅÀ½`m/l~>ÿÓíøíÇxâ·ßõÁ·~Îu‹Cq£”ÁQyüN@ytm‹lÅÅu¶J dª—Ðj=Ó[ 6Ó]ÅB¨‰xúá6)Ç0Ûö™jè(¢Øé²!›"¿6Dfh©³s42)Zi›vÞæC!BC9kH»bðœgQ&Ö¹iØý+hsµÔ"®)ÜJ‹$¸.Ú’ˆ”Ñ«¬ï<ï¾fÛM é¯o:<Ü~ —ìÄÎwÙ}hösGxÕÚ0[žšA\¹D²éVDßF‚Çï…ù§›ø9¶N7¹:™bî¾î ô÷WÇm\'C}ùQs•xY W?zÆf&HøÅ›rcI¯|.0¨ž¾ `!œ4NªL’8tk+(¥‘N€” µÈ°Ô¯ÎQì¦ÖjЪ.0Tʮ˩¤°-eA*•áìÜ&ê¬J?R Ôó7½G'˜Ÿ]æìñs&>t’«öŒóÞÛ_Ç`_GĽ½R­¨V«xn’¿ºÈÁ{¾Ãù©i6(Š&'üˆII·ÍÑ3UF+ù^æW@%D¡fMG¤Ó&²„QÈÉc]”64ëÕUE}ÍP€Ý{‚.¯}ÃNš5®Â+¥èt‰¢tÚí1bh…+%–Ñ„¡O§’ÎeÉX½k cŒ¢Ûn‘$ "‰X"JÒe|t#­ªA<O¹¬„"cµ9²†÷ðâºâµ•ý© }9,óBl{±›ü"O?¿ü“=ñ[o|÷Ÿ|™–Áv:Y‹šc¸l5qIãiÂ8Æñ$~àw{ÅßÚtaEÓŒbηz².¾pÒ'hø y«Õ:‰à˜fm´ÀÁpžPvQ'ƈ°2Gë_=©¨”lòF3KÂZ ƒˆ Cd®Þÿ÷ gt{õ¨gÛ$êÞP)ã]¶¡/‘ud·§ÕÓ«uí-2ÿé³'ö#|/[ÄzMÌÒOŽrnæAâyž|Š•W?ÎM´¹åìÇûî |óÑŸà“^Ûú·?~Þi¾¸xŽÛÍ5˜å5Ž^ª@¢›ôo¾ ±FÇ9CÇ?AÞQ k+Âyƒqä,œA™Ja¥3h¯Œ/ò褀›N“vs=·¾ Û †f$™nĨ©iúWjì&“ÉÒj;œ_žÃ¶]„€ŽïSk40F“O9mH9’JÚí%jÛ8NO±>ŸóxæÈ4;ú3Œ”ع¹[àôãby‚Ä÷Ù¸i3G?Í©ãg)÷¥©·!ԣߛ^aг¹¾«Ø8Anh#kIB+XZˆp\ÁØ˜ËØ†Ýn›Å9EàryF½‹eC­ÞfqÑpöTdz¸õ–ÅlÁ@H»ÑÁ’Ã?•†l&…%Àï ÝN ? z…«¶…NÛ²iµk8Fˆ.LÕ(º" I„gKÒ^Šn¬­øþ'L¯ƒçh/XÙŸ¹%ïgíOÉ$ë‹Î@+×oHâ‡w>qlÃx对q×SZ ¯bp‰ëØh©,C¤ ÙMH—lZ&nO7”N@+eh§kȦæÁF‡Ài0>ä“qG§j OÀ¯¾«Â#_„¿ÿúU£ÙwµÃ&Û· žTŠ¡±!”™#ÑšµÐЈTbèu2YƒüÀ{ÉÍ.“ÌÏ¡¥ƒ611Atଡ~d¹“µY($Ð>zaGo}zgµ÷;¤&Û,%Ãć§r-æÞÛaí‘~åÌ,)²Üÿz‹›OQ¿._fwÜÏ–?:KôÚ!ìƒ)žüÎ4‹o¼™ÕãKŒ~¨—E¯ž?J®ÝpK8d'¶Ñ·ëf&ÞÖ¢zrŠæÂiQ#;˜GØ.F¥p3Yœl‘lnéyh%»Uªµi"¿ ¹³orõV?Œ©F†™•yÍÎ3ZÌ²Ö È9Hp¤1ŠDk,!â„J>ƒ66~¬Éy6¶ÕãRrR)¼Tš'O.®ÖØuË>òñ¢· ~¿ëS«5‰×©fÒ•ö^?ˆÔ°y½@TJûÁu=¢(¤Ö‰A*š­.Ž5ØÓ/6½û)å2TW:4[ ÇËÐ?”Ðjùd 6qdð» £¡ÓÒÐÖ|ïîãì¿v3#%¦m\i!Ó’ååÒ2HÍNÛq_¨K¥„´0 h©1h´–˜D# Œ"0’nУL¨ˆh±ÛùízέƒõbÐ^\TqI°¾Ô5†‹º|^î¸éÛK]b›Zø.t¹ôºR¿÷©ÿô+Û/Ûô!À÷{õœ¶-Hâ^É}+ÐþÿÚ;÷(Ë®ºÎöã<î³nݪ®®êw§Óy`^#I“Œ uâkp@F]ލÃb–££ãÖˆãGtÇD +¨`!¤É³:I¿««ººÞuß÷¼öÞóÇ©êT*UÝiìÁüÖ:ëœs«î½çžs>ç·÷oÿ~ßæ•Ò ßuí-ȯ=Àd·OÜïà %>ódƒÈk°½’ÒXL)¤ŽnÕ2VÌ8ñT—Wl-ðÙÃRR9vÔa¨*0¢ÀC}d`ZqãË_ÁFv2y×çüÁ[!²¸Åœ˜Áú>òª=JÜä2¡\Æ… !Ðm„›c¹Ô#?á CW¼†'÷Ð<ùÇW0¶4J5ˆà(×NÍÀÚ!«3áóHùrBÕæªCÇxX7Ù¾©Dõ™”d˵·–ÑöqˆNrë¿DãÉ’yà•ëäÑMKœôÑ^€ç—Ñ^\Ÿ~g.¯ß-ÖPÒ‘Ï›¦YáL>E86ïùwûô§hµ;cdk™o,ÑM …"±•´¢ˆ$‰r ‘Câk…'žT‹y=/&£T,àù»¿ç‡Xê6™}æ~6ïÚI¡XD)…Ͳ|(f¹yé˜Ì ´·œËK><"îLõ 8“æ1]!º„-]ÊþÑäyÙü@°k×0ó§›ôÓåIŒÉëfÓd%¯xÈ'Ñ“‚‘M¡¨ÉRXXHˆ"Ë»ÞõSt >}ÇX÷l¬ȻBÖå`b9x¥yÆÔòCM öÙa¥#Çýç¿¿çž»x¶VvÅÛ®†wmÍì†ýÙí:à žÛVË‹^îê¹mÃ~p÷îÝßwÎ/"Ïñô<ï¢ÕI^èZÞ•ú]c iš^€#ÌíbÕ‹^ì:Tß÷B\ÔZéžçS) 2\Ó 3ÄQ‡Mõ›kƒ¼ïß¿š?yQ'¥V¤Z­â{B¸¼^K9œÌ˵œ–(­ ž§¬œ@* Êlj|Ì®—ä³±m¹Òò›z—]êxãÞÂøÄ!¾úÄSüø;ÞÂoüÏ¿à¶7ìâozY²‹¥ãìùνl{-G’,’¥}À¡u‘,íÑîžæÔéŒÔ¯'Îê|âŸä7~û¯0Þ ÈÚ•j;ÊUüb x_æ“f»„,íô–Hzó¤Ýl O@z•Ex~•×ÜÀÿ·âuîBÙ/€}‚òîûøÞW½’¥™Ó\U(ò¤³$Úã’ sÆ!ü›fƒŸ+xIBYkêÕå`6±¼kvŠÞ6ÂÇg43Ë|3ºûR‚±àûð®Yä>ü»”¡Z‰Z­ÌÀ@™Áz™b%Äó}’¥6 Ççé6{ø¡‡(t?õ£„…Å.§¦ÛÌ5úÌ·{tã˜êpxð~úí¿ÉìÌ4iš`°gp.[NutXg0Öâ0ùµ\«[wÀ­®òÁ9Ó;rºqàÝ ‹ss»^eÏY…óˆo0´²½ú1(–ìyñÑüÔŸÿê/¼âõ·ÝúŸ|¡ ÂåÕ"žpøB¢e–OÌœf¤‘á(’^³I†´føÒP,:*d™e. I³ÎåOæ|(Æà>Rùh#QJŲ,¦X,R +(åQ,„8g™Y˜â¥—oå—~üõTBKLAùômD©Ÿ2RªP.QÎ`ºY“Ù kS¬1dÎâ„!èißÓøZ"¤DIÏó ‹E<-ÑYL«ÓæHaŽ]»;Ç`iú¯¹º7Ýf©ô>ÁG~FÒ ÇyäÉ_ddà*¾sßí oÚXœS(íðƒm8—€%=Lck¯~'YÒãáÇ“f „‹Y—´±±Q"/· §,FDáˆ2EŽ`¬Ç›o›æò›4ÿð¿à±Çªüú/ý6Az%ŸF¨ânƒ¥¥%g¦Ù)}6ù’n„4dR"³„b¹ÌèRƒrÉc è‘E~ÕÃö ûû=~mt+OaêUŠÀ÷ˆ³!ê£$V173Em @)ô©”(Q,R©)”Ëø&±†¤ì#³ ß×¥°Ö‘d)Y” „ZQ Qäc­¡17O»Ý¦ÛHðtHcð\®páœEk§ 4º3—˸J!—õªä2¬2ïÓ B!9rbú©_XlÏ5¾XÏ,œçÏYf#XY¯ ­ûv€ÿòß?zÏá§Ÿ>ýÞ·ÿÐ-†jÔ*ÅR?e âá ƒ1’(N(|õøB¥)ÉâbžUBµZÍ+e¥ Ͳ<áò(¤Ò©a¡¶\½!ÐR`qÜüÒí|ß»™™ïÇ=|ô(ÎIzQŸñÙ.¯~ín¾{…R©>ĉ!K-Y&°™¤oýLÓK IfIŒiñDFAJ<¥P„R•"d?ó¡gGkPß&(m=ìЃ¾Êó¨«˦ŠfL°ÞšÓÿi¯Åé1â¤É#O˜}×}áj<þµÏpÅÀUü½tÚGùôçÞÇ¥Û~kùŒ/!Ì6* ‡1=’¤„ |„§N%ÑÙå;ßþ(Ûô1^3~„Ù5“_ëÑOëüÈ›ÞÂu»Bl÷BÏG}¢¨C aÔ™Cù!í4¥—¦湬X&-$¶,`wу-'z,9GQXnQšzÑgÉW¼:µáKŠ>'6yø‰Ó\ÿ²K©—k,4#NÍœâÆ¯Ä4Aà š T¸P#=•{ cQÆ¡,(!•"ÔšÐOHŸ_+ Öèe}b¡ÈdzXçžWĹ¥‚üá'ä™éHòÛM"„Bv’Ô$÷8þùöâæzÀ® :­m¿à¾ÅùŽÓ®g«‡äò­ýûêÿ±ŸºëŸ:~òä»~ë½?ù[Ãի=ápIŠ Re*šjˆI„“kÑž@ƒ)¬ËåO¶oBÈ\¿¯EDqŒö| ¡"ÍÒÔrÕÞLš2:Z¡hç[ 3þñÞ§9¹°@³mñµ‚­Ãe| ›‡k\5·ˆ(¤8| «œIÁ¦Dô#EEGËqGÉø|$ÆIÏGû:ôA9RŽ GŠÅe’$õiÇ1²,¨”|²j‚T)åò«d>MsöÓ$™Åi¸jL03ý6ŒFæiLÝB·¾‰¹~¿»{?¿ð£äÕ*®â&ñÀF¤Ù0iTBxåK.ÈÐ~Ÿ=·eè¡/±}$¡ùfŸÇ§Zp<äÈ„ã÷Þ»ÏÅx3˜tkæÉRK@þ”Þ¬4¬B§s³ ¨r …äšM„.cb®Éå¯†Šƒ¡”=^È?>ÜÅ/¹¢\", ârÈ~P¨”Q:Òö¢Œ'Lrêøý(£ÕIHÅ[ÞñÝxOæ{h_â2—‡ÁaB)‡'¶hOá{ŠÀÓô3‹Nój§j±†J|´P$69SEdl Î!…$ôÊyÕy6m5÷°ÏBÛí7ÿò«‡nÿ˜sv%à´²¬»ÞðÎy5‹W켡=K¡ü ”Ï{Ë:Ûî«O>=ýÖ_þ÷ýá~þ?îþ¾ÄJâ(ŸB£“ZÏöØ3$¨—@«\ÓY‹“«A)\¬¾ùº]øÚR+KêUŸ08§1Ö`¬ÃC’Z’ÄÑêEôú•Ú'À¥Ä®Î¦š%Î!0&edd+=öO !Â2G–¦ˆLcÓG€4P‘)C:£¦|ÕC…Sd3RæI¹åâŽÄ‡Ì#í$N¢MBÔƒvCaåÂbB'˜E(ƒ•1©U_'ò&µ„ž¥"iæÑ#JúfR¯@K?L±/ñ³.?÷Î3× \ ¶‰pGnkpQëy¸‚‡ËÂY®lòŠWäÁû26Y^Ò”žÜý4üâ›Ø3V"ÉžBÊSXÑÅÄ‹Ä}([ñ¨:A·à!”‡õ%l‚ÔõúŒCZGEk¨ƒ31С:`Øò9Cß³lÀ• ¦¾ž˜§TPH•‹™dÆ10T¡j5¥^L¹ZEy±Ü’RÞ2´Z`—aŒÀó5~fñ=Mài|O£“”e%6W‡iÇ=º~‘~‘d Ö9ŒÍ°Î"œ¥Zôè']ŒÍÂG Aj¢¼¤]ˆt®qüw:ôé;y¶ÿº!^íaÏ;]q#ûº<íy€»6-kuî²]h¶ì›~ùCú¹û·‡víÚý®B±T”Ú#µ†AÓ:6ŦRÆ%»¶P(6™Ë¤Î ´Ã0X-ãûO úý„nÇÒîvóT7 §ç¬²°4ËRc‚Vw‰V¯E»;ËRcŽ~Ô[Vˆ7T+u”òÙ22Äæí¯§Ù.Rˆ H Ö¬(+QÖà9Kè4³YŸ-K†fÉ.­ãƧ©ÔÍb¯:œß0BzŠbA¢„OÔµ˜HÑ<”œfÞ³ì|)ÐúÒ]A±j‘ ¼Ê KÂRÑUp©·H15D~®ÓTKžVHî°8—!é‚K¦‰p>Vip!c×ö¹ôÁ¶zìi 柄ROðÊË,ïþž2È>¾‚,ž&‰Ç)Q7¿´3.å„ö‰3ƒÕà²<Œí51æ™8ææz‰bUáÂ>¢œ@1ÁÍiÆü‡a¸î† váš÷388BšNb­Å˜ /PôI·Ùbn±ÁäÉi®ÞUf æc“%y7Äy·È*´vXãð¼es)ÏHÉ(ßúc›¨ôZýÍn›Ä¤ Érí«@ ¤ RÜD/j¢…‡ŠÔ¦¤&n9µÿýû‡ynsxm“øléŠçm_wóø€»öÀÖ6ÎÀû‘?ûø'vnÛñoyã›Þµ}dô’L;pÉÖ*†ù¹%††Á÷%Σ°Â*oâ¤lA¸e“qïWþ–“§sdü½¸G%PbŒ(„aSêµýv¡Ú0{ölCš ­(EKÍñ‰c´£;£2¡ÉÅάUÄÆÒEp¤µˆr)[I2=Gik•¤Yæ{® ¾ä*ŽÏ7Qu‡™6´ÂzmE×@ÉSX©éF’è²6-›ƒ6· ‘¡Gb ÃUA=“Èù- vsŒª[’~™J¬º›aJȺKY)dOÑTš¥4!—åSœËÏ“ðpB „#UŠ þî„ëßצõ˜Ï’ ·-sŠ¢ëstþäÝtˆt'°v’4>L–ôˆcG·™·tZÆrÐsl-Ó¦ƒ¬bzMT’Ò•û[sì*Ò1 …ÒzK„ð8ۣР!q’R0šÃÓ}.Ùsž'&¿¬µ,5:lÞ6ÆâÒZXœ‚/Üý ·Þ¸…  RåÍcƒEè\1QÈ\"6—BÍ“#Rãð‚üÞ)Qèj¼†ÂWŠ^š¤)‰uH¡1ÆxIš"ÃW:8&Ý#¾óWž™|`œçºØ•¢šOçíeáŸÙ§=¸°¾ äs€e¹?>yrúwÿÿóÆWÝü©7¿öÕï¹tǦW–TF©A QäOKøÅqÔÇóv^!AQjv”#æ”À¦)“‹)CCŽ¥SG9¸Ø@J“&|V–)¨‘ëq*êp¢5M3kSÐuísÅð0µ-#œnµ¹òúÝ|Ö«pdü$[·mç©SÓŒŸœe°˜pÕ»é%Kó}¶xEÈ$Æ ;/T„MeúاfHfB¢Í=FG3[eñX—-EŸ‘§o¤pGobÃ(‹/½“’ ˆ£ŒHÈLÓˆ›+,G9=œÔàD¾¹,¨õø1»´Á©#EÊ-Å {G'~dqã‚¶K µÝX¹gÇ1f“.ÒéYúh/ä—ÚZÁ’¯¹9U|5jcÂ"2¹Ø¦×m±¿PÂÅ–ÒžUÏçá1%ƒ·ÕÒjk”+’ôarºAg³¡à¢„›O&âûå À‘ƒ‡)/ Û‹Xì¤Jù0‹•á{, !/?ÕÝ™°h’ú©Å*‰ò<:½>µ¡~¨‘J¢µ$Œ‹6§§ç‰Z lãø‰§ØSñéE#nšËF|‚’GkrŽÇTŸÓAQcGêHlÆpe€ß—m\Ò@d1NÅPñQv–³4MÌÉù9„ËÈLÆý­…)k ™ÔK´ËÆ)þéä ™U8Y ëO1ì?iqì±4ë¾¼D7<øÄáb¡°eÿ(³Ûbp–âÞŒÞãÄÕ#¼Qu†zñôŠt¬ÙÅKCÚYƒ’{n_ Έn N:ðõNq[}Š3 «šG¦SŠÖ2R”|åk¿öë}w HÍ Y‰&sF·VÝYcrºÀà°&ïfiM–9’Ì ¥"Ôƒå°3ñÔÁOüŽÿ㯽ù.ÏBºº6vmNqÆsa=ïáõìBD_¸«#fŠç{ÛÕõ¹ýÁíw>ü·ßùžþØÛ^yëµW¼§ø;mfP²‹%2P‡C‡¦ªWC‰’]jµ*ý¨ÍŽm£lbaq‘ÁZÈöK·ÑëÜ„ެÓbvv†™¥>ãéaÆŸÙgrz†ÓI›+ÇŠDiгøEðu.ø†ÃfýüH#À ŠÄZRéçÉA‰E€°Œ’¶PùgèYò˜Î,íÞ"óK1~=àñgšìl,ÐÝìH¾ÚFVÊZ˜ÁÛ,:- 2(¿G¢{à,5´- UÀœiÓ³ôzí,æš‘å@§”ÀʰXÞ6Cíu=䩬!¨(IˆfK-åÏwxÕkJ”kcXY&µSdÑýö&,ÎZf%'g—/ñ`‰èÄݲb¸P`z|| 4ÎeøBr_Ôgç´GùD)—ëŽxð/¬„¹¾¡™9ÞÊ#w?Æ?ðZ––úŒmV8cYl6øÌí÷qðËϰek#Çgö1‰Ïí÷M¢¥$,x( žÊEï­hu"<Ïã%— ¡|FÓ>™2Ð éôsO[¬jœÈ0©‚D¡L‚2†TJ2)‚äôÒñÛ?v×þïgN\âYoºžg=›w½ À‚våÖI¾X+ ·ò7Éó›Êfùxž£«ü¡?ûäç~Ç÷ïýÉÛ^½oïØÈÍÛjÕ›JþH $åBÞ§ÚÿøI|-ól$?9×Záy“ ò™Ö¶ †ŠÁ2µZ€_ßÄÎ+®æUCE–{ÌÌvè÷ú$í ݘ»ïÿ'QD,Žãˆ°‚“a"\¿YŠHÚØná…2Ö+²ʽôCœâŒA%œ*ϯ#â¢yk‹8£XhX¶W=fºŽé¸Íæ~‘9R‚ÁSÌv£ EZÅ”F×ñ²ÁOz‹ØTòŒdïÀÎoÓqФ…JFçD—ç§?Œ´Èåb,'HØôþ&ñŒ ~8%i‡,¤.†:Ùåò—k^½ÀÈv‘(ë’tNÐnYK‚Ƭ`bÒqd2¿ ²Ñ%“–^jè)ƒ…Ÿ‹¯íÞNÒÍx¸Û潕ôÄR…þqxÙåƒüߣ³ÔcÍSQ›‰ÇŽÐî,°åš[xêÄ$#ƒ%%Z+‚çç96Û“šfÇ ¥äí?ðö\·—^£ÇáÇÒiGô{)qlÐJÅ1ÍF—½{«Ô$šãðĨ@¡Ï@P#²Bõ1QŒ#ëL/Í~áÎGîü“‡Ží_©ÐYñ¦«·×Âú‚T¿^`áB»r ”ò­Ø À+[ ­âÙ­ÉO„t?IÒßûÌßß Ü èŸ¸õ».»ù²Ý7Ã}[áŠC“§…Ã`LF–%8g VTפ'•RÑÁ!”V\uéNn¾ñ¤’l®S ‰ã !7ﻎnÔà#wü<Èמgó`—Í.ÍХĥ}L’?¹…pËÍ ™gÍlÚžŸ„¬C!2‹‰Z8“!\‰$MqVÓI¶íñÆêÕ|jòIÊý‰¦X–,t|* §…O×X&ÚŽÀ"|Ÿ©†ášÚ^vc<8ÿ ­é”©Å”}+§ØÅHc@+„pJ0ø½}äV‡7­Ø}S‘ƒŸÌxÙ>Ž··ÙýZÍn­ /Å C’Ì‘DGˆzí†`q&ÇáÄŒO/+;úøÔº)Ê“LûàT‹C'A±T1[4iÏRZDχkvø¢ëskVb*KèïÜÉ釙8~”æôqúÃ5¬Í%WS騽c -%¥>¾òèwn}ë-ø›.Ź”ï¸õ²|XÐla⌴c%qŽ­Í[®â’§8xª @XˆI:m2¿IKÌœnM|塯¼ï÷~îÑ(WK¤k¶W;—Õºigõ®Â.(´°.¸°1¼«½îzMå•’¿ÕyÍêOïÙÿÄŸÞ³ÿ ðñ¿òÌЉÃÙ+¥}NÈkqTR n9×C€À"”ª(åóøS›øÒþ-ƒ"ÛǶqÍ•»Ù¼i8O¹«©U-8›7w 4™3JÂ-‹ˆ9Î[Ÿù28ƒ›=„ÔéTËéo ›Y\FzMÀ—üM÷kôµ£àh÷R:‹“‚ë |М ˜µóŒ÷+¼õš_n:žˆòxzŒ’ò_ŒŸ*®\‹ü0œ%ŠeP0o3xMMµ§˜žè²ïýã“)—ÿªbð”á¶Ž¦Pª“$¤É8qoNægS§%§¦ǧ³­•kn¡sÈæbj*¶¸º@JéÄL! ÌBŸÃS-^v½¦mwN7X’’§Ó>"!˜Ÿ¢í2îÿüƒm3â2:<’g"YËé©%YžC®S¤“ˆbAŠRWÙ¶<}‰Ã9ƒµ•¦$QLÜíàDÏŒ…uä¬Â9—5Ç{üàC_þ›Ï}éþ¿úÜW'xnÄwE¼0ã¹®loë†ÙNÿ»bZ8'¸+}Þ•eåi”OÇöì‰X©Zw¥n÷9Ë<ãàŽü=ÒwC]wˆapuu´ˆ:ÈÁ~OUžè.–8q4Dê2¾)ÊlªQ- ²yx3?ý³/çÖë¯äž€òòþ¡MYºjn›Ü³æy`feïŒPX®p‘öc Î€Ë 7]w)/¿ñFîøÛ;˜™aŽ,û-*\äXZL(â‡aHµ8pû¶p´Ûà¯M©•±²I&%ÍÅÌÌglª04Tǃ”a2œçðßšÐoª½ßfì¸B±ÿ‘ŒÖaKvÒòŠ ¾ã=ÛXj´0æ4qgš¨sÓ’SãðÌ1˱ ÁñAy`„,ËøîïÚǽŸ½›,²ˆÄ’i‹˜˜ÇÙ<ÖÅ0×lñçGDHv}i3£.·KCˆà 1Û¯ÛÁ=û‘"™8tÃ^÷³\÷²—"´"Mr*%5¾ÊÕkeŸ^¦è´{˵¸rE)kqIœô:ÞR³ÑZ\˜[X\˜[\œžšYœšnÌ7{ ù—ŸœŸ™™‰y.|«ƒHëm¯moä]Ÿç…ΣÊçëþ‚çà υvõþJµÐzÕCëí¯]¯,«?O¬³°ÎúEûö°µ#ë 7®] îÚíµ9ÃIÄ\t`á-l.¬ÔjàVC¨V­å9– eÍ6¼í·£­võöZØV»ÄëÁ½¬k¿?ß¹À}C =óe{ݵ뵰­†ñlÛkßs./»²íxÞou[/¹ç\Þv#Ï{¶ý`½¨Þuµ}C¡…szݵëõ¼ïùº‘‡=ÛÃãEûÖ´yVÖë¼Âõ<ðÙš¿ëå!Äž Оùâå¶pÜÚõzð­Àʪõ é»nÔ4~ÚomÛ¨yz®>îÚ×^ˆ7Ýp(çbºb%züBlõ;‹*k^[ £Ýàõ³5…9Ëþ‹öícgƒx=X7Ú_ï=Ï~ت{÷,|¡]±µð™&ôÚ!"VíÃÙ¡|!âýöµàYÆÕÛèõç}æ7Öû¦5Ïfgi:ÃÆÞòl^ôÅ`Ó¿n;[jõöZÖ .]ì>ë¹ì_$´+¶öäœÄëú"¸ÿ:m#`×¾Æ:û¬½ÿ¾™°ž9ŽÇðuÛY"Ñpþp¾ó·¶Ï¼áÿþK€ò\ö- íFv˜_´ øÖt=ûÿÄç@|Q4XuIEND®B`‚variety-0.8.3/data/media/vrty-login.png000066400000000000000000001737661362063646600200550ustar00rootroot00000000000000‰PNG  IHDR´™‚éÈsBIT|dˆ pHYsÞÞîD'®tEXtSoftwarewww.inkscape.org›î< IDATxœì½y˜\Wu¯ýî}Ω¹ºº«çIÝRkže[²-Ûòlƒ'0¶ÁĆ€aøòqIn$—$<7 .\HÀ&ƃ‰ Ø`˳l˲æ¡[=ÏCÍUgØûû£TV©\-‰€ñÔ¿çÙÏ©>U]§ªÏ9o¯µöZk ­5 zmJ!~ÇÑ ÉRbἿ6t Ì÷ÜéÀãdÀ¼Ï-ãõ¯8¼JuˆyŸÎÏÕTí¨Ü§Oò\qçÂ…ôºÓ^EšÕ`Pm[¹¯ÚïWÓ|7¾:Éó'…Å(^Z€Ã+¬SádUöUÄš—‚@UÙ7ßöø.\`¯Y-ÀáR(œÊUöUó½W¥N ÕFé9Ue_µmñ‡… í5§8ü–u (T>.Âéü|*HT·Üu¨Eu@TH¼Æµ‡ß‚~+¡ò†—U¶óí›åÇ©Ô|V‚âø ¯N±¯•à¨à €8wÛÖ¶[Þsë™guÆòE‹:Û=<#ëxIJw2øÌŸÞ¼_0‚4=ü:Èxê9‚¾Z´g /G'<¾þ©·±§o’Ñ´Ãh"Êö0Á EA¼%ÄÜ\Ÿ°ðá²bE#J l[sðÐ4: G_˜^ßUÛ·g`nÇÞ£‰!^ …Ò6_ö\%,*ÝJK¢Z<Xp3~ÛZ°þ:æ³JÖB¥Uàç8J[?à_²rYõ·¼éÌÍ[Wl:gã5í–øM )%†6ÐÚa:ø6ÛÙªa&ßÏñá5õÇ‘ÒG0´Ç+þCîYÔÀh"Ï3}ýøÂ‚¼€éÉ<áôÏfp<—ŽÖ Qƒ§÷ ÑÑgd2Íî£iú&ÓÖùëZ»ëÍîBZ (í=yd4ólÞQiŠ`( ÿ±m …cßß.Û:‹xeÏJ ¢´oÁŠø-k¿‚NÓ˜ å0(·‚œ‡À›n¼~ù͸íÒ¶¥í+Üüˆh¯[‚SJJA”©=6-¿S Ú¢ËÙ7ø=”ÓCkÃ&”§ÑJ“žœ¥©®•í»'98’`*•§Áô¶™Íä‘V˜†?žð1—¶ÉdajVñ‹çŽP6ÑŽdQgËçQ¯ç™½³¬è©Y´Úg.Òg¶\wh<³s×`ú‰½ƒÉ^Š@(ÁÁäŽ}ÿr@”,*——µŠòx„`¿u-¸§©_ å3¥˜B%ÇFãp¼ÿýï_{Ûm·]ÖÓÓ³ø7ùÙý~?Ñh”L&C.—ûM¾õ ¹ûî»ù™Ï|æIŠPÈWlKÖD¹RîjTºóÎf,âå×NSep˜oŠr¾`c¹«P„LJ?üáµûØÇ®jkkëx™¿–e!„À¶m^Žs/„`dddðÓŸþôÝ·ß~ûŠP(,E8”Fy|b>@,Ä!^!-Àá4t0Ts#Êg Ê-… BÇFhÞºuë[ï¿ÿþõÿsÝ*ÆÒ“Dç\šPlùÊÿÇù×Ihó${7­¡oUnx'ço;;ŸÄõ\@qç]?媫/fÿ¾ƒìÛw„C8tè0‹Ú¸ámײoï>êjéî©é'vðüC@ã¡Ý­A Zâ †€¿õB¶\¼ êšÐŽ$›5`ô)Rc.H#œÂëdôH_»Iüã_áo½\÷÷}nh:õ£œíMpYŽÃ¢Ü’8™1/ àðòi!æp  åp¨f-”»%(„AD@_ \þØcùÇÆÆx~r˜ #‚!à…Ö:ÚŸ|€‰š »¯¾Œ§¾u·ÝȆÖnZZëÈf§Z ÐÌL§¸ó{÷ñèöX¦ÅO<É™gžÁe—^ÂY›7"ðqá¶Ë`õšä Š]}}¤q1Š^<âůhÐh„ÖM“w^°†³·-A5/ÅËç±ÓŠô‘LíÄNÎRpsX1‡`|œé‰4É):nè'äM‹ÚˆïŒŽ–æ5ï}H¡®uÕjY•n[‘‚'j!ñ2k'Ñi€¡2£±d-TÆŽApSkc÷Ùúó[üwŸkUéI„Vh­¹Þ”[³²¶/_ÁêgŸ¦nëÚo}7cçofãù[I&Ó ÐÖÖ„eèá]·þ…B¡¡>ò‘ð•¯~™;Î\OCC‘H Éd–DrбñQ R³¸EÙד¢øYä±]ç®èbóæv_…”>̰ fi;‘mçÚÓdº®Emÿn H6EkÍÄl–TÊåœUmþí;ÇÞtÑšöÍOž¸;™·Ÿ/û›UKûž¯št¿e-ÀaýŠ`(ÏS¨æBD€ðâÅÝ[Ó9®êöóuo»šÉ}OQ˜ ×õ±Ì(Р™é ñç„‚a¦fGÙrñEX–Ÿ‘áQGá÷Çùú׿Ɨ¾ô5n½åZ>ø‡bjj”Õ+· <³ÎØLOO7¦i233ƒR.SSÓ8í€|ÑZÐh¡A«c˜Ð ô1›]²¤!þ&° ÐÔBîÀ L"œd|D¢'bgÁÆA7ù)Ì¥hj‰PñãÙðàs}ø-ƒŽz}CMçûû'R?òðÄõü5!Õ¿%-â·¨8TÑ<µ§†J(„p ©»î£Ÿ¼Ñ§›ïùÇÏ5 üñG~‡î‹Që+žqÛÕ<÷ÕïãÏÃuQ<Îþçöqñ¥[ìÇÉY<ƒÛoÿ!¿÷O²rÕ ¾öµæð®x‹ UÏÑÞƒÔÔ5³wÿ^ž~fÍÍ8‰Y6Ÿw.W]u?ûÙO ‡kñÐØB#µ*!pÐÇy kV®àŒw\…?Ö€kvâÜýerá²{8r¸Ÿ„ÀòI¦GL"~jgM ?KÏ¿Œ<°iiޤ90œB Vº`sÝY­—.k‰tÜõÔÀ·3¶;Åüp˜¯’´'Ls.è7«8Tè4œª¡4y€pת5‹nøÔ_ÞŒÇ[ÄH?Ùlq:ñÀÞÇh߸œ»¿uøŒMpÞßÞÆèŸ~ƒL0ÄO¾úø«ø<Ï<³åº|ö¯¾Äðø £c“üÎ-ïäÀþ½|ó›ß%‹ð•k¯%V×Èò•+Y´¨ ˧I$’ÔÕMWWC}Y¶~-o~óÅô÷O2 8xhÜbÁ4 Ù¸a=o¾üoé{þ곿7ôüc‘ç¿ý+7ž…Ö­{{šë®{3#Gž`ÅÚ.˜àG® Ù/ÉììãÚkÞO¾`³gÏ!.ºè|®Øt&cCcÜtãõ¬[ûÿrôèQ„v¹XíæÆù»Ÿží>Æs;ž¡w —§Ÿz¿fí9— ï½r9¶\x.šœæ„[°8% }|ä–Ëw¶‘é%¸z™íPX²//°{Vm"Ÿû%æºÓ2H|ÕY,_ÜÌ"“`û$V öô' û%ñ Å¢XœÎ†0o¾ò úöÖtɲ?úÖý{¿÷Åïüâ)NÝb¾éÌùŠ·ôkjeªˆ3̆ʩÊJÖBˆœyÉëÞtË»ßcN ˜¹9 _„tvtÑ|ŸâÇ>M¬µ€»îzœšhœ›>þAvï;ÀÃÏ13ÓÏú kùüßü—]vË–öðo|úǯð¾÷¼›ú–zÚë;ˆ_y#ÃGàº6Ë–/Fxy/íäÌMgðÐOÿ‹©ÉQÚûŸ¡eÓ6:Úyá9°…Zï*ð„à¶«Î'Òê¡#mø6¬Áéõ„S2þü$žJ‘ë8  óÕqc“@·6` ?OÁ#ã °yMœ{¦¹r]÷>3LgcaH²é,{ž|†Žz:;Ú}ÿã½í·®_ÚÒñ¾ÏÞq·Rz¾Òòjr9îV¼øÚëá7§8Ó<ÈjÙ%«¡”ú\îJD€¨aš›W­ë¹et÷Sf¯“¦»«‡õ—]IgCßúòט›Ãggxïûn`ëÖ-<óÌ~þæ _Æ2 Þñö·b¸.ÿëKŸchxˆñ¡Qdv–uë—ð“ÿ¼šE]¬[·‰õÎä‘»¿ÏEoº‚îh+;¸xgãcCøý N†¶vv=ø ñk± ”ÆàjRrÞYëÐf'ùèÇï%ï_Æì°…k)TzˆÑŒSKc¬ÜBª'8ò$#c05xÂh’Ž›¡¿oSI–v„¹ýqË(æLØy…?à²jã:,Ÿë¸¼ùÜž‹îøì;B7}úöÿ¨8-Õz\Vv¯‚ŠjΗs Ñ7xä©_ò†T5«¡|º²<±©äJD€è…=ç)×}×ã?Ð GjY½æ,jjc„ëjÙþð£/  0ÈÐÝUÌ”þׯ|—ÞÃ}¼ëÖxøÛ_`ï“Ï¡¾Àó»ö°xI«6l`ÇDߑü禷ÒÐÓCk{#cc}|ê“J¬0ÁC_ù,ùô·üñ»XÙÕFMM«ßv5®¹iå²°FMŽ“æÐLÓæd%üÎåÐØÒ„wäaÜ– Ø®E²y5y¥ÈFÝ5NßÏ2$’)ÆÂ‹™œN0°ã1v>:ÉÎûv˜Ésp2@4¢%îgóº6¢¡­ a–wÖ°rIˆ3¶­ ¶µŸÏÄ2~Ëä¼5­[¾ù?®ºˆ–ý=÷ÌJ)èÕò$ªUÅÎwNÿ»£ø&ú•®ª×˜,æu'ª Ku%«¡<‡!²±§õŒÕ‘w<|dJæ öyxƒEóâ3É079‚aJÚ[bœ•™¤whŒ©GWÂâu|ósïçùñ4 ;vsÏ÷±aj˜e7ÜLÿas ž¼ç¤§çí×s÷¿ƒ‰Ÿ=Å rû2wÝóUþì/þŽõk·ÒÖÚHÁ+°rËj<%ùéOÁÒžÜ Î!wÿý´iE‚$ Eéûk´ÖÄ|’lDÝ&¼dŠüÐ^òé$Fj”LÚObb'¨ÈšËZÇØópÛÑhdÚ‚þá9<¿ÀÆM›É¸>tXrÍU!jšš‘³ã¬¿úzˆ‡AY˜N±ÿ‹á¯Ak¸ö’ð_õdá÷¿ð£R½¿eµ¸CeG©—œÞSü|*•ŽS9+rBïKxýYox8œ"ÎP™]²*]‰H[{ûª?<§ùÖétNú ž`}>Ï¡çŸGO¥0¼À‡.¿„Oßp)ËV,§±³3$ØÿƒŸÐv^‡>ñ-Ä‘¬^ÒÛï§mÛ9,éébßžÅlÞ²_]ŒúÇïç¬ÍÝèù2m›/àá; ü¶¢mfˆOŸ­7^˹›7к²‡u«—á%2t¶Õ0öáߥ$ƒˆ,»ŒµÖKj=DbŽBzŠœ¬'=&Hd ¦öæˆFHٚљ9”T¤!§Àö¹ds G ²HÜL±°«=ê°çІYƒ‘™eq÷Z|«Ú1»0;¯&ß;–†2Qvìúwý'ïŒ]‰Reå¾Oó±­,{îT8Yгr õu Š7<ª¨tá̆rw" „šÛoZ½ä¶;Gµo‰bj³Ò ïßÃ’¥=lY³œE·ü«®~|ï3|ë;ÙóÈL0‘ÌðÀö›˜˜bòÐQ‚ËÛiÞ9Êìº/ZÃôTоÞ ECì;8Hsã,,ÛÌÀÁIú~ÖÎÎÒ<|„«¯¿’Á?ùcº7ŸGÓ’$x¦¥ÝLÎÌpçÿ’Ëßu «—295†C±°¡\[šjéŽDÈÎ ™µñœ&'¦ÉO“MI¦g N"aD™)P–AÆqq$<°•ƒi=ÕÔØ!ÛÅK8„í vj†`¨åL£í^ü¦‚ü n&ÇÜÀŠPØÂàæs;¯N¼ë¼üŸûч˜¿ƒõKа81QˆùâI'SùûH^j©”b^P¼–!ñ††Ã)¬†ùb '¸õµ‘¶%Íáßë 5G@×H\àÜžþä–›9ëíï!gÏð·ñ9Žüý—é’³ëï?ëL¾“l¤aø!tîÜš~ü03Ñ0b:Çôä ¤Ú–óÔö'ÙöŸ"~ôÖ=÷¡ž~‚ƒcY÷þ÷ðþÿÜqÙ¿ý—^‰À¤ôQMc4ÆÌX92Nº$1<…ãN3;eqÒd26)ÏCIÌ‘t=<×%㸤D!p¥$wìlnjŒ¸åñ³‡&™V<ñã,^ØM03‰ž8„—ž%?ÄÎæØ÷ÔêëkÉ„} ÍQ sAÜ{Ûû·¶ç¿öØðvNlz[ÍÍ(ÃÊ}åç¶òôá°éâóyèá'ù£ÿŸ:gG#­¼££–C¡Vša6fû¨ß°‘H$Â3ÏpáuKq àyðè£û¸æº-ø¬ Gõ±ïöq¡šBð ¼?º‘¹þiâOîäÐTs6Kb:Ë¡ñ1’ÛÎú«¶q×—ý¼áåûùîÜÔì9@6k³ñúèÜ}Óˆ¢õ±ì­q2²^夙Á¬sIÎJ2"ÇlÚ& øk}ŒÍäð+“9­ñ”¦ \ ®ä•¢®µ•ššþz‡Cvf€ˆÏ¢?ãrïãƒÌN'hoÜ¿Æ"™Õ %H<òž‡ëNSPšdl\r¶9O¿=擃 [õñÒ•¶Ê­„Ò¹+o{_Ú:ÆJ8œj†ädKVê5›Þý†-Ù®b5”ÇÊ;7•܈0ÅHziľýíoßtÅW\ðë|˲ˆÅb/{#)%‘HÓ4™››C©ùbx¿Þ1jkk±m›t:ýk¿ßàààÐÖ­[¿dÛöR@†ã¥ß¥Æ1å–EIåç¶ýò}¥×Tª§³POùk+Ýžo²× Þèp(T•ƒ¡ÒZ(MWÖp ŸúÔ§Îþüç?ÿ»¯óÙ¬W…î¸ãŽŸÝ|óÍ?¤‡$E8d8Þ¢¼im¹ù_ÍUœo=Ñ’*-…Êõ<\N´^~å…{^+€xCÂa«¡€,o_r#"¡PÄBaºW¬¶>¶¬ËììŒ0;ìòü¾ø5‘&…ôk’ ArZÑíâÞ{Ÿ%<ýIÄÌ7(Y)pëg ´²Â0L ŸA!gbZÌŒx$§ Fûò  uhZ!PgbEM[¯`ÕϺu«FJ0-óØe©1¤Ä4%–e€-‘Bâx®ë¢U)(­‘†çy(¥Ž¥zk|–ŸoÿÇwiî©çæÏ\iºDýšOQpÙÔG5ç-8ŽbhZsî*ƒ™„Ãè¬Áæåš½Ó”´Õ)Þ§ÉåaQdò‚}̯ÃH@°¤­ƒïýù>þñ?à¾þå*•-x_.8Þ~ŠpHsÜz(u’*‡Cå¹­¶¦hµtíjnDå¡åMhª­îU¾­—xÍXoô˜Cµ¼†jýOˆ7ô,õ½3ð¯^×›µ¨Ûà’š_ì>ž™93š¸éãmgw`!aeöÅÄ©‹C,S#,ð‰rL”‰eb}h-Hä0¤K×bˆ…%öøˆE=Ätþñ$h”FïŒ}’Ñ‘a,Ÿ-1¤‡”Z L©1,¨©‘¸®Æ”šX$H¾à’Íçq]HLC·= 0L‰ÖǬåbù,LÓÀ0ŠŠ4<âñBæð£QÇú9Ä¢a´Ö8ŽÃÔŒÆ2- Ž‹ck4Å›ÖÅkÍ\Ú#`7iVÕjF’.Ù,Á¢FMÞóèŠ ¦SŠšA,¨i‹ÃÑII]H±¨ŽŒ²yˆÚbÛS¤sàéc¹¤„޶⑆ukBoùÉÏžþOŽßdå®`58œjâÊñJw¢Ú:¡vÙãòÕ½Jû+;jW®îUÒ«o88T¨Ú˜ÊVò/6p‰ÕZuoº¦ãj5™ã…cÜóÀ.šj-]š¦¶Ö Ÿ^UËÝ<òD?}C³$ó‚m·öÂ!5àxË ÐJàiP®‡Ö[ICŽúðòšÜtºÅµyÅ¡Ãñ:Í‘gSøµ¦{C;³“Iü-4!Ë R+ih‘L9äó6Ým­$ÓÓøƒAÚš}Äjb,íjãù½‡ÈçÒ€ Ä (žÙ5A]&g<\[`šŸ é {ämp¤'5óŠöFÅÆ:ÁØœ`.«YÝ ýc‚¦¸`&©ˆaq»AK½¦oÒcÛJ“‰”b*©¨˜,iöÈÚŠ¹´A2#˜I»´57àº=‹[q ÝÝí[ÎÚ˜Ú³cçþ½eçÌâø©*Îke7ðòmµÎSpb`±Ü}(BµÕ½Ì²Çåm÷½Š÷.׫o(8œF^CåLÅ –íW¶]{éÊxäžÑ£Œ ¥xÇ[׳~Qht?s}s|ÿùvöN•cI]«Ã¾âm¶Z;¨ÖhC- C¢•ÄÑ-%hE°6€° ÜĨÁµóÌJ,$áï`ã¦&…¹<±úz ÇhŒ‡èhÒ´/êÆ4’ô Îѵ®‘É‘ Íůeù$glZA(”§±a Š÷N’Éeim2:•Aj)ÂD#‚‰I›p¤!ÑÚ£©N ̤m<ú%¬‡¶†n'ûú5uuàhƒpÄ% ´ÔJÜ‚fy›¤&äñÂ4× ë3 E!apxÜ£`ÿgžL&il¨£&$kH’É ë[Õe;v2pìE¥"¸ÒÍ[‡—¬4« 6GÂþU–e´žqÖy‘UKÖ„Ÿ|p{ز¬°išhÓLƒLk)SžòRy·8:Ø»ÿè@ï '.ûW‚Cù¨\“£ZÍǼ¬^zCÁ¡B•VCåjÖ'tîXæë9<1|ö¾™`"ã`øCÜqïü7iÖ¬ŠóäÓÍÜ÷Lކ:Áå+[éˆû‰ú¹BÑ­ph H¶(ý¤(î”Ã&µA´i ]ȧ\ˆœEê€dÿá þÏ/èªঠõ‡ÉÙ–ßbq»Ÿå«6Œ63;²‹s·ÔcYVuX£uü–@JH§ò9:ËÁ$gÞÊ¥Ž{„˱%`]P€?€*wi IDATòÀµ]ðÀ'j8°'¥>”â-ëfX»Êbf,C8¤±É`|`€–¬]ÑÅÞÃûY?Lr$ÏÀŽÿó†sX»n wŽ?Ë[®9—CX¶zO<½“K·½•XíF†“Ž9´4u1R?Mgk-Ï>?N{[-¨âŸËQ‚¹¬ ›WÈ6A}D³¼Õ£³¥ŽEm«pšÖÒTÿg9p;A¿$äSø}‚‚§i®‡‰9Øu D d÷~A.'™+Ø´Ôeqrðî´à£úÏS(¥8Ò7B]¼aÀàl_0~dÆ9¾²ViÖ@"``½{­c®kÝfM(>=3Çèh’ñéY\Zšë@k<­q”B{%”’hÏÀ<öVR€4 þPmg4z®‹ÎýèÿsIa×¾;þÒßö=0;í%8^-šåÄÆ¹ó¹-0O«»W Þ0p¨Òþ­rZ«ZŽCœ³!ÞõÎ3–¬2D¤ÙœÃ;χ™™<(ÓPxvD¢€0%¦*àe\ò©³)8ÞÓ¬î*^„À´Ð¸Ú@å]¤ia…[˜£±¶€ôI2s)V×ɧӄ|šp8O"9MÔWtk/Ügïá êã ,éðñÀ;¹rc÷í8Ä£³3DÖEÙµsšd.E:•¦8_0ƒákÂÓƒÄk»ˆÔ„X»ºå™˜œej2I(æCJKJ"B;L&òhW ˜4Õ ð‹í«Ag*–uJÇ#11 ‰!$Ò0~‹½»ýLL*ܼƒÏŠLå8k[ïËÌñ–[ ü¤Þ °—t*‹å3I¦ÒD£aÂá³3^kwShéщìÇã*h ù‰KÃë®Ylmñ»ùšŸ ô±}¦…d²€Ö 0°í ñ:âñ´Ö(¥ðJ—†PHC!MÓ’X>‰a†DÊâ­òÌcø¯¸iÓå‹–8[|`ô§w|Óþ…] ]víTΆ”®·J•Q „¾êñ†C™*Í=ɉîÄK ¬>xëšKÍ ÃÄ\ •O³o(ÃÑC)FóÃôNÛ˜Éù«è鈰¨)@Ár ‡†œ-æ ÈâL‚b‰´Yl∧ÂÓhÛÅ4Ú41µ‡Òà(ˆ†ò¨€&¶ÈG|¶€=gá(.Ê˳´†€„’ìí›du0Çïó-´éñÀÞI>´®›øɘðSïâž=ȶ ÖòÂÞ=´6¶âj§ÇÈóð#ýH#‡ã»öNsöÙŸ¸þOXÖ±”üÏ?"è÷cR`bÎešÎ‚bm‡¢9náØ Q ÓHÃ@ AAhÏÂ0¶ÒÕà¹'v‹Xäýyj|‚¾íIÔ†øý~ÁcÛ|ë#û„|ä³YâqÒÉ,v®ÀòåK© …Ï:úà³ Ž¹ëÚ|‘/^_wñòÖ`CÁÎbù\*3LÏøå´M("1:K8¤¥¹‘LÆ&T8Z¡´@b!¤BHFqê×瘦@ÀC#I$2üû?×ñæÏ_sýηžynÿ¶ßißûÓé§xélHåÌX¹TÅãWÊõFƒC9ÉOk†bíòºæUÝÑõ3“3xvŠLÖc4U`çH’Þ¾$:,Ée4ï>'ÆâV“Œ]ÀïÌ¥sKZâ@±^tÑXÇæÌ„FJh )=„!ž–ž­±¤@ø4Áz?^®@ j’™u¨mÌ&}ô,2qÇò<µ+eJì˲$h Jì‚I@‚oj†‰‚Ç¡Ó\ù¡+¹þ­gsç]?`ÓšÕ>¸m8ÚŸ$±š"^ï£`{ìÝ—íâ)Å£ogç#G°&Û˜Éôã÷Y$ ‡K°G(žˆY„}=&Ÿ"6Èd4­Û¶]EÑÍta#™ìçY¹&†Éqäp†iÂu¾ú` GÜ)R¹â}28:M¾ ˆ…¬]ÕųÏ@S˜–ÑØÕÙÜÕ?8>ñ–õÁÖ¿g˦ Ê&à³P¦BZ‚Âä8R‡i¨‘Lfèjo%™ÊÓ°PZã)…”‡Ö…BHaxHCc)ZI”vð´B+g³õÊeÌ„¦âo¾Ñ}o¼Iw~ïê^­Oéj6^Õ­îÞp¨H•®–9WŠz—V«z1y˕͑Gs)’;Çúѵv«‡{ÐG½ õ!E*]@‹GGòD|š¡Á,¦2ÉÛ”R¸…✽6K þi­ix˜Rá9àæ=„Ï%ñ¼c‹šxn1¿ÆÉCC‡Ä±=šº,ÀC‰bƒ•þ$]‹ÃLM˜jöÓÝœá’1~ºg3¨ÙtAÓOìäswüª^ÑÓÙÎOy€Ž¶3YÔ¾˜áñýt/j``haûpÝ Ž*ÖMÙlßþ þñŸþi´'A{à `.RkO"ñÐA‰ ¦"1˜ùô]øcu\ÝÑÈ¢¡~ÎÜÖÄ/Ž84-‰´ÇˆDk9¼KaM…©±Å±%ðlòèí¢¹¡!%Ò¬]½ŠÚÚÚUsÉÌ¢š˜¿ýožÌ°º‚"E,d09›£ 0æhêjÂŒM$0 `ù Væò„‚Ïõ^l¯´B)וxŽDJaŒc«›+ò\.¼"ÂÒõ}LÍÒÜ´˜‰É9Öœ1uÙ[Üdóý§þ¿ùÜi¥f—gOBE«»ßÀeÿkë ^jÞUkäR†´Lj Žl>¬ž@»ì¹3ãjš"´D’è„Gm­Á²Veçñ~6ÁšÎ þ‚bÏ”sBBwì²®Fè¢k¡rš¬çbÂíx¸nqêÐ ù¦B4B§> SãDñÓgA‰¢Adù4CiêbôN$™Lù™Iäè},G,`rÆŠ:¶w ÝaÒA›ÔÞ;Ê‘¾$»÷ÞÅÔ„âªkÙ³;Í‘ÃYBþ'@6Y,klœs¶‰Äc&!© ›¸®‡6j‚>¤©È»’‚9Gá/˜¬÷Á­9¿MÒÐ6ƒ·:‰u¶CŸ1É®3š²™:0J(< BsÞfPñÞ0 I¼¾†ÅÍ,Y²ˆç_8L*¥³¥ž‡~ŒH(X{ÑùgÖ>úÄS¬X¶”imຆ”ì?L.—§½£•vÏ!çjjk9ÜÛ%-jkjPž‡ã¸H)p]Ÿ'ñ\ëz8¶C¡P@ÊâT´Ö ´G0¬Ùr‘KßÑ#ÌÎ0›È’L(„4Ù|N˺æ†ðǾ÷ͯÌÎØ#Ç®µjµÕ*>K±‡â…ú*°^÷p¨’YÙ¯¡jö´XkïøI.ø;oö0Ñ„óO°w8Ãô ¢»F#& [ò‹CUFf3Ô#ôjbÑ<«Ú‚ÅêG-ðH›âT&Eg™œS „Â3l¤öƒ­‘>„ÄS ÓÖCâå5¾ 8ž‰ôk¼‚ÆÍ <·t3™(­qÓÌ% ¬ìjçpÿ0Mí~¹{W ¦÷Ù\uÅfæFŽp×ý}¤³³€Bðó¦ÑÚÄÍMAÆ&s˜–Æu®2yaÖÄÐ>Ú$tÍ º•$¤äs¬l6èht…4~ŸÆm- ×Ih’ìƒç2’Œ4èû¹_ÀdÅ*Xç7˜šö±s—˶ó$N @,an.ÍH €iŽ1>9M$A¹|Ž`(ÈO=Ͷó·2<4‚0Šõ!vº@KcÛ!ŸÏ“ñ< 4õõä²9,Ÿ×ó0…Be(´60-+5¶ Rj C ¥‰ÖÏsyîáz:–] /`# ˜KxŒ¥Qfº}ËEò>ù‡t:=̉(¯·˜¯£UI¯¸õðº†C…;ó7r)O•~1ÙÕànìh€_>#(R Ù¼CÀoàdŽ$4ŽcqÎ <2†Î9DcQÒH²s6G&L‡­ž‡]ÐBàzEsY0 ІÆP ÂVxÒAú@xPº˜UéI´Z€Åf7§ðl§‹_Ñq  ‘L¥e^*öõãó™HX¥ Z+xðñ§H¦†Yt_ZÌͦÈ$ÍõŽ'éHZMî+]‡·'òÔK±Ø@5*¼:‹ÆRrpÞ>âqtÌdjFÐûC‡¹”Is‹‡eI\©ŸñX¶Tw4¡‡§ ¢5ŠÝ\‚>˜˜)fHº®ƒB21>C.[@+p\‡LÁaÝš•´·5HfÙ³ï5Ñ(3Sä—|:CMM ÉdšDbŽÚÚz¦g’¤’Y\´È"„Às] ùZYÅ¡>×B*å˜híGy¦i ¢3¨µæ‡÷&—/ÐÒÖL}sˆP]#¿Mbv ­Mº—æj=Oüþ/’ÿ¢c»å ¨\9üdeÞ¯¸õðº†C…*sÊg)^²®eŠØlÞX:;$h0]QÍ\ÞÃS‚ˆ_ÒWì­ ŒO%If<¦³Š¨Oc…¬ÏÀk²,ìÚ£ßÇ8æ©}(05Âm: J ]©‹þ®r]„”PJ¤B€ ʤ­³ƒ4Ô72<2R¬£P‹®LÈe]LSð› ,òù,™Œ&¶Èf\¤LNgñ´Æ”‚áÑ ‰§¦% …ƒœ·õ|ÚWuØòEX¤pâ Ã/Ñ ºÙcÀ|çî 톱@À¥½>HS³…Ô33¿”´Ä°$ýs¶E8$((…í˜Ø6˜Ñ @œp8ÌÕW]ÃŽOâ©b\ k{$æR ¡Ë“Éçxþ…ƒDÂA–/é ©¹žýú˜˜žBHÉäÔ4†iÒ70ˆëx,én-9Ü;@sk;Ý˹ã[ÿI¡`£µ‹.žW,•ÐXżÊÁ°L¤a"¥hÇÅq<˜à…ç²Ã&o½¥Ž3Î$“µ™™±EÓ^Ùó»?ûáå¥\••œ&UàÀ+l=¼nK¶+܉ÊàcyZt© zìØ¨â·ÝvÛÖw½ë]or]÷ÅæÊæ(Ro\)‹óá¦i¾¸- ˲¨¯¯GJI&“yñõ¥!DqªìØg®ü§õ] c"‘@€T*E¡PxYŽQR©aŒëº$“É—åÁ`P(D2™Äqœ—å?úÑxßûÞwÇ{Q”úQT6«)/;?¡Ìû•²Þ–CµYŠù‘¥Æ.ÁÍ›7/ 8Žƒçy'ô8^¼©‹I2Æ P°,ë„¡ŽM—Åb±^_)å‹ï{‡ÿšÉD£Q¢Ñèÿ/uŠÅb/ëû—Ë4MÀËzŒººº—õýßûÞ÷^Ñ××7øÙÏ~ö1Ž×g”·JUœå‰SU{?¼z]ZÙÕb %”¬†ZŠC-êî¾:ðþ¨åFKâ˜J<Ù vÁdýu7©_ÁS|ƒ ÏÃg â1‡ ß¤&¢ $5Q?¡°C˜Ì%‰ŒÂÀñiG2“–¤lÍ\V“-xháÒÓ’ÅsôNùƒ÷~»iš¯=ñyüø‰&"ƒÔÈ0a#HPj|>MÄgÓR„ŒÊ ÈF±•¥qqÑ"‹#rä¶mðqñ•íä£,ß\@ú×qtW?wÞ=Œ²ûú&g]üÁÊEAßak$Ïìvi¨3¨_rú¹Û} ÏäОi¾ñåqÝ[©]»šûúý8JñÎk.çÆkÎGkMÁÍ399>³yÓuŸÉdrÓ@‚Ö”¬‡ò‘¬‡WÊrx½¯xUYWi5”W^¾8S±($¦É(MÆÕd‡Ý}6GsM± é‰8¼g©¤K6#Èe%® Žò°]ÅlÊ`dBÐ{ÔãPŸ`x"ÈtÊÏȬŸÞ ?½ú& Ž †F`x¬Ú¥oJÐ?m2>æq÷=?dhº¥Z+t©S4Ch,ËG(`ð` ¤0p¤‡´4YQ §4yWtS9ÍIr8ÓÆç³‘†!]û§gô©ûÉe„š–cu˜é— Iý#.as5†}Ò#¨ç_@ô¢ía¬¶Ë™}РuBsî~hêÒäê%OŽžû¯,»û3ÎÜ„@ú4ûí.¢‹× %˜Þe8LÛ3x2IN;d] ÒEJÀEB¹hŠÓx`Í»øí)lw†ú°CÝêuä;ã<öƒGØ8òr.AªÎjFÚq‡žÂŒ\H"¥¦±ŽÎ¯'Ö¹•õSÔà] }–Íá@’Ú[Ïf,Aö ü>‹`ÀBHŸÏaø xÉ1„ã0<äR(L@>ˆã9˜&gž¡>¾7çàé4PBú‘ÒD‰« ÅÇÊdpZX´5™ÔÖ­ ©³½GŸ!‘00t€±¤A~.ƒyßÿf¼w’Ïüþz{ûع?A®ÛdÃ&?Ú qçíI|¾ í1Áèxžæ†õuÅd3¡CüÕ_|.ëÖv3Ö”ý‡²üåä?qÅu[yöù^î¼ÿan¸ü„´¨­©ã77]ö¹¿þßÛGÆyŽWt–ú@”F©“T©æâ„܇߶^wp(S%$Ê“žæËoðÅAÚ„kϬÜ,°¬ê]š ©i¯·ùÈuÃì ñãg›˜MúÒBZˆb›3 žÄVy¥)(£h0–%éŸö«=M!›/Z,m …Dh %M´°ÈÊ<=1Ë\Ï6b¤©}î>R½»È›¨ïŸÀtpƶw‘˜ÞÁ\t'=N…«¾óß´~TÞE)­rhí •Bi×Nà>jküxn†ó.^ÇÃ9xbŽœ¨'g´2ž«CKÍtRPòѯ¥¡y9Ϭ¥}‰§Ÿ:Ì÷Îkêëê9xh³ÛG:éñ̾<í-‚÷ßýÎw9¼oó×wð¾Öñ¯·oÇ4-&Fgøáí±ñÜuì>|€ÕËÑo$V[C( ÿó?ÿõ›®¿á#·óÒu?OVÅùŠâõ 8Ñj(=®¶Å €Ø°Š¦·~À@§ µYV´õóÀÎ&~úB;ÒP¸xHC€ ¥È¹ÇÇÖØ¶ [ÐxLj«<²i…ëh,ŸÔâÅKCa ”…)üÃd -K»Iå\6åf1BqV5»[ LI’Ó“ìßù0s¹çYÛ¶ž‰%µLfö <Z ¸´,Z0.vÆe6•!¸)ÈåS4F 2°¨¹s<Ïö]S\ð‹ÇÈ÷Ù$<‡Õn3f[øt ­5q<¥‰/¾ oç3`jþõiEí I<ìS­‹šXXm=†i ×.nÞcÕªE<òÈ.vìOpÇ÷~ɇ>ºˆœ3Å‘ýSXB“L Œ,B{ÉÙðÀ0Áp#©ÙAáb 6ŽáxúöeHs> ‹¦ÄÏmW44ƱDù¼…%=&æéjjå}íq”›gtÂ!w°@}m˜lîÿgï½Ã,¹ÊsßßZwìœgzrÍ(²„#dc!&ØØà&s¯}ác›{À8a|Ž9ÆÆ6™Œ(K €FšÑMžžé¸»{çPi­uÿØÓCO«I®¿ç©§jﵫvÕ[_zßÏ&Œ$ãU‹j+„B[jÿ–úç­ìàMo»‘ƒÞË–ËvòÀì÷Q‘ Ym²ûþ}ä:rÄå/qñE«YÕ•Æ÷%’àjßs¿„Q‹§‡¥¡ÅOL-êÿà°˜dµ0•y)Ñêl 8ÜCö†7X¹̱ ?Ñ #=Ÿ¹o aâE¹Ž:ýÝEŸ%Hl’’Ä ¥&Ì•A)!‰ ­¦"Ž$qÔæu ,Œ‘(% ¥à.V¡Î»€ŸóR5AçÜžTŒïä¶¿ú+~éç¯åÔØ.iÂæ|›;òØaͼç¯àÌÌ z­JÞêB'1Òd;zyô¾ùö½G¨ AÃfêÄQ>÷Í»XÕ5ÈîÇÆ¹æšYZV•D„õ©lbf|Ý=#DÍ2ÚïãÐã ~q×ZŽìH÷“rSä29,ÒT6Õzˆ©ŒÇ$Ê%NÍ2~zŠ-ú¸n×&ÂxŽVÐb¸×å+÷†øB“ñ C½íú5ç¯æ¿õ^}îÓ,µØôêKxY]qÇ]û0 æç癚eÿƒØû@7£)2)וîÅ;7m¿ï¡Çïgù‰á1?ˆç~¨Èi?Sà°L«ôÂöbD¶—,îâåß?l]•ë\–bû¬íüÕÞ >qëz³mx7©”¡\ó›ì#‰-Z±Á¨voL”ÒÄ‘ R#Úo®c!½ ±±Ò"c%4›ód¸pm7ÊØ¤û‘IÄ­w`¸Sðù8o~ÿñ¾y‚—_>@o¦›[n?Ê鹘UC9RžK´u3^û¦_§züô{¹nºÎÜŠµlß<·oßC©TÇö]ŠÅ"Q7¦‚€¡~[¦Y³rdû}=þçÃÓIËýWXñ<ØâØmá¤/G¶:›{øÓwÈWlÃÏÅÎ/\]´äsw/À"|††¢©qðÈZPß4#MGÖ«-25u†Â-  Æj³:“•¸¼bÃF¸õßø•Çþ• Š‚ñf†éBƒZX"½w’T_Œ}íZæú@Soç,„iBˆ¶ü±iv"È&‚cßKèÕÐ §JSì= Ù1n18a8nA½õï 5æ&r$Êæý2ïÝÇ «$sÃ0oKxÂ0œK(× o[¹.ƒëz !—íŲð³9Rév9R Í–-#|ùžSj!…ŠÍ5—®çÑ=G9pH±iÅ«Ï3ô t‘„UÂVˆ--â8Æ–mvehÛÅÏdÁ– 9Ïà¥;ˆ“„(L0R¶4NS0_\¶m#ßÙ7ɱcÇù|#û»¯p×ÃG2ÃE[»À™§«# Ç ö´IX·|ä/¨Ìϲ±ËcjÃcãuŽÕOb[’l.E#ˆPÊàûq¬q36­Pcˆ¨ÖÌžì1<“\þO ~ÖK™ðÔLÌs@ââ¢û}¯•»žË_±±Ì_5A­)81ÙÃüÜZ­ARYM®ÛO34”¦»ËÇuÓhåÓÝ"›IµÕ“Œi«+)ˆ¢rXåØì ßû/ì›äÛóMNéFNao1šj"s5씡i50º‰0BX*@è&Æ„hÂöÚD£MH.ë1´Ùãꟗøà`w|Ž‡î·æÙön‰cÁ‘cSôü÷7qºUç‰r‰5¯}wÏdêà=Äe˜«V¼vüqžé†¥¡^‡CMA³Ù¤ÕªÓh”°S)üTŠÂ\ m ÕR‰Í›Ö±qm–ÙJÄD¡Æ¡½“èȧЌøÜ'èê¡8Uàð‰½ß *n¢•" •Pª‡<1Ód¾r|>f÷ ìŸ(q¢P!1-Kõ`ßñÇN™œ+4j廟†Èb¶”¢Þ°éls> ¦6õlìã nr÷ý{ùÖ7áô©"ÇŽNÏ÷1:¡ÙjR®Ô¨×š”KEÃüPoÿjž]¾a9Ú÷ f?ËžÃba—¥3ÏQ%ìkvˆAÛâGÈ4<½íiq³Jó'·Ú̳HË%H JÛ”*1äû% IDATqÜVŽ’v¢Ëj³r@‹6µXŨD3}òaît²Ü°¾;ˆu‹c“æj’Án {Hѹ¡—z§D"#ÚÜcBrF˜Ä™ŒIÐA„— 1]0°Z0y·`óÃÊë63¸u=3·|…î‹•ÛW#“4WíÊÒÅ4f¸¡9’2Ì»0†Â˜a|¢Áƒ“†Q$£› ™<ø¾‡ãº¸®‡mÛ´‚€¡!êµ:ùŽa”2¼õ.æ#Ÿ¸“¹’fM·$Œ5[FRÌ6$S3'Èdmâù€8©¢ã2–í“4ã¶dI|“O§èöÒžC¶H”M‡‘v;ñE@1pi)M+h+‹Z=ÄkŠE.Ú²žw¾á*öÝ{ß=1Øe¨ÇÛM32Ônè §Ãgh(M­!ùþÁÐÍF rˆ®¼Ï­w!T]¹ ]9Ÿ|ÊÆ¶ ëG7OÍòÌÀðµŸpxŠF‘Å.Úb~Åb€°{ýÝÏ×g»h´Éû^2Ëï~¾ƒP…8¶K •â<_Ö5ZEı"hÆDQ„Ö¥ :1$qBœ£rä4]«yÍJ‡ÌÔᬡcÀaݶ4S]v;_!t›À…AI;õ $`,,Ùf¡À²È¯ëCYEœ´¦Ò2ä\˜ºçã_=ÆÔØÞ“bۋϧú§_åÎÛçy$´˜;0ÆôÔ99ÏÀ_4ƒ˜r ʺmÁÚœAJI*•&›í@8.IµTffzœ|>G6“gÇŽm\°ý v*°îê5L˜àú«GøÞ‘2î™äª‹û1• öíc¤³‡LOÛ5í§1¬ÈD¬_ŸÇµ]Ý3Tëa]PÖij" Ö†½‡kd\ƒëZØh2¾ä/?õmšZӕϰrd˜ÉYÍÆ”äâ.‡o®RQ‚öøÜ <~¤HÔX»vÛ·²kçF“î[úÌÏYýÆ|ö–#*" àXV›8g fеä:|:8k/tÅâg–Ør¤«…/bqîáì—³j@<¯¤Ë×—ùý×áƒÿ¼–@A¥‚aÐʧÑLhÔ#Â@“$ q£…V ¥5JiŒrÈ…cˆ$áñ±“l8ïr^%ò<õ1ëìa—·•05…Ò­ÚÌOq¶[_¡Ah0í(#0hjI–ºYIÖw;ï‘KAçŠÓ§&9ÑŸÁ °ÝNìì*:Ö\D}l7V*” S…&_~à$Z¦ñR> ásÿúûºêrI’:ÓUÃ.ê#í+ÑÛeÓhD$ØÄªÝÔ¶œ žçñß|9ýš®ŒƒQ ³•€[ïcï¡ý}LNT‘:»²”KU¤£­ö(D¡0F.€Ãâëõ?ýÔS¶—¡g/¬<„å„]:ù=»èþàMò‚?~»¼ê…ú܇K›ùúé7ã¸i|ßÇ÷}<ÏÃ÷}ºººÈf³DQ„eY¸®{V/b©Ä‚&ð#éA8ŽC>Ÿ?Sj|~Äbòù<®ëR©Tžq)%ÙlÛŸ/˜Q ¨×ë?òÿ Ã0ým ”iÓ¸kœKá^Vüå…LHþTƒÃSL±ZÊ¡X‡4m`ÈÑV|::2ôNý›ýÚ”÷ÂzSÇjÛ¹sî¸^ß÷I¥Rç¬ÀÂuݳâ1KAb±ºühñ_öÂY±X,õôô|˜68”hë;ü§‡ŸÊ°bPXX/×ËpNâ‘'·O[€Ui`¾³ÛÌ\¹yA⌭Ëícnê·ùôÿê`pªNµËg {#ÎøQ|_RÓ kÖod͇?Î'þøOxàþûp¤¤=÷B ¥…83Ö­ÍБùÒvB ´B‹3ÒÇZsãM7ñ;ïþ f¾ú·ø"bv¾N*—cÓ{?€ç¥°¥DX’Ý>ÌÄáSä»;™¯4/0µ÷0zÈàÊ>d:2†0Š9x|’z9 ³3G Åëß|3[7 °û¯aÌéåŠÇÂê<{ûaÕþéZŒ†$Òì4sž! Z¾d4T{m’)˜èÔl _sÁ®¬+|F†¬qWré=÷ñØC{ø£?üsF:©4BNOÏa ¤!ˆ –Ývçgk†Î4±Š9]ŽH[6W®M±q$¡bpéö•(Ý`~¾Ž4ŸüòaÞrà ^ÿÞ?ãú«v!ëSlqرZ²qmµÙ"]^!ÁÑM¸édvéu—ƒ¯!ÛãûH¦ÁîÞ «hŽíåñ{þ®É“Ÿ–.?qû©‡E¶0,‚…ù—‹‡Ö,¦j/ž¬mÿÃmzúúË­.Ý‘¹qžû´O«ÕâÔüAtúKš™ZÈÑùG¸îÄ øîý¸¶-%Ö™ŠÃYœ4†$IÐR`”FZ-$ ‰”F C"_¸å‹üò•Ûè°*J°]›lZ`‹ÏÎ"„DEÜþ™oÒI1Ö™V§K0s¸E(,ŒQ8áÒ—¶H… )8~ðIz’ÓëÏÃêˆùNÏ,#9F:ª´¶¯¤~×Q5¦h$¸P²¢špÍ„C¹¦¨:‚ÛVŬZgsÉQÍc=6^LÂéˆÃÃ6éSs?~œãÇÇÈqÁyÃ|íÛ{H9ª˜–²jÍ„¹–a×ùøÈÿ9~ó÷¾Hi|Šü@†ohîYE&ŸáÏþñ!2Ÿ(ô(·ZTššÕý’±±1¦'&èÉX´bI#<úD“ /_G4öµFLG0´%)fæÂo‹EPA…M¬f™i’Ô§(U[-ž üDÅfêÚ§—!W-×˰¸5zé4«…0c1+ά/Ýoª÷?Ѽ0Gr®m¿HóÚ·‡L… ¾¤šò6¶Š™¢(³,\ÛÆ±Ï„N[¯Òu]¤mḖ8ΙC …¢Ó‘HÛÂ’Ž´°5˜î–! Cì3IHÛ¶ÚÞƒÝ>ƒ1Hc0B`[6±JÀ$x.lȳit˜mW]ÂïþÏ¿CZ tô1Ðy2‰”gZ4ëuBËâë_þ•xkzÐËq“¥Áó]rQÂ:Ï! Ýö(9©1®Elò · Ë%&Oh쵿ôE3‘̤St=Ñàe`vÕ C¥€BÁåÁM!;¡¨-Æ…  ™S=|y¥Å¨’œ_®0-Cå ·äêüÚ™« 6P®ÇdèÉ%89±¹7Mg&ÍÞÉ&#½‚ZžõyÅË;™:)ÈX ³•WïèAúŠ©Ã'¸ôE)UZ¼ú¥«øÆž <~‚í´‡å$‰¤T׌cúó.Ÿ½½Îõ×dYsñ0Íùi¤eÐÖ1ºÁïíÄ0q[úD­n¹H£pš='Íi–Ÿ€µ`ÿ)äéjÀá<†¥aÄRP8«*½èµx½Ý¯¸îE—íëì_SOy¢à–øôƒð®Ë`¨§ùÝìòó‚·–ù³ÏæHçRø½ Í̆!–”mukiá8Ö™$¤%%ÆqHTB¹Þ ¼îº‹yÑúAöžœæ‰É¥Û¿Ëjße:TD¢Ý ¥5(m°³9ŒVØŽÅÈÀ <ˡ֬$1iÏC8Q¬±DBbÐtú6M“`¹6Iƒ?cS¯Fø¾‹J ˜ªœÓ†‡Ò”EбBц4 #\&KQÞæá>›aÏâS´H,6M&L­²(O¸aŸæ««S¬ÏûÜ¿"f.¨•ÔÙ1€q¢¶ Fäó.ý)›Ò€Ïè@v*ÁšÑ„¼YóÁë&ùûz9^ ñmɉbŽ_z©Oý¢!)¾rï*k¹t{ŠZ«Ý§!TŠR˜³ˆ£iõ0.8/¨ÖÈu9WJØÎ$­ÙÌŒ?Bwÿ儿4ã§NñÐ NñÌ °` ŒÌœ™ù‚Ã)’ùL¡ÄBža9é·?‡Ì™%Nûù^þ¢«ÏÛ¾é‚b:ež­3Sj0ÕÔÜÜÛäß¿½Ž×^sŒC/<@\{‘ÂsšÜrèFf*eÊ‘Ooµ«lÇFJ‰ã¸4F%Hia$QÄõ/ÝEÜàŸo+ÕÉ}!ŽB²)>òß^ÍïþÍ—B¢”Â$šh~žj±EgwžôÇýw=@wÚf°7G­2Ø›ãØé"F@WÊeºT£¿'ÏcOÔØÔ×M¥Ú$cVŽô15[eUožF3¢™ίiöÅ*qÁG·öPCv 8{Ï÷¸x2bû\ˆßeÐÇÈð­Œ$ g¹)Šù|Ë{ŽL؆ΰm:E¾¯­éhII)<Ç&Š ¶%Ùµª )Ã]>×î¨âÛþèw>.90á±#yƧçx@v`§ÓL•šdÏÛÊwDJh5b^ûfHÙ68!R "M- d¦K ßß«),n|Í*z:{0Bǰpˆ›M¥ ]=1qmš™ùjøø¤™aùb¹Ú9öBò+žSpxžTr—ë|\®d¹XÝi9PÈ.¬/Ú±iÃë^ý’}ÏËi –VHÇ!ˆ¢X£ÊÈóÉ¿NóÎw%¬Žž‡Ãzz»bG„gOü}ÓE†œt¥t;a¨B€Ä ã­~Ê'¶˜ªTp3]ìÝ{ŒeÛªMþêŸo£¿#ÅT©QíéZõ†fß×fîõ¬è¢^«ðà] K%"Aƒ3%êaŒ²Rô ô±ª‘pº±I3†–ô@%l”‰pÒ)Zõvó˜ ­Ÿj·CvÙ9[EJIÿ)ˆ›6…ÈçX¥"Ì΋üν”Š >33vÀ·"‹Ac‘µ%uÚfÀÑ>X„ º²'fCTV UDGÆFņÎÁ,_ú–Ë©#Y~ýŽ6Éû’[:¸p üÝW Ì5%¹¬á¶ûá•W°}Ó(•r•±ÆÔ9ß‹2ÐL4VKIÛØ–àØt‹ó=Ý6«_5/]”†T*K:ßGj$1IPá‘áež¤òôLM|‹nî³ç$~설XdO÷k?â²´ÿ|©·°¸ú°à)¤- MO¹…õM¯¾ö%o½ñ•oɤüœ–‘ñé‹\i°m‡aU§×ŒŸž&èôùß÷®åh!õ㞦É.ÚZáƒož@‡EÂ0{÷Ýe?²çð4j¹÷—ëKxV»Y´^ÚðœäSz ùlºï׿äæukF6`„A ­"Q kã¼Æ‘ü•YŸ©Rî$ìö˜©+T¢øðmkøý—Ÿ`}ÿóÓ=øt¶ã|Åo½cޝ—’$iÏÍÔ²-[O{âZcTŒ2pýK/gìð!¦¦çˆ“„Û¾y7R †-ŪË.äÖ;ï#1/Þ:D(BF:X¾ ôÓT'+(#i…’Ã'gh…1—ž¿š_ß¼âªcÛv@ÃÏ]¶Eœß™#±4\s~Æ$Z‘÷ Û1ÔW8 ö ÒQ8JÏQÍ¡xå´æ´Vl®µ‹=ašãAšov9ttfé\áP™Ëð×}„éËk¤s]¼Êë¤TxàãÇ©ø’0në+d\A.# ÑttùØ‘ I4ãµ+'ñ|š3†×þÁJúÒ1×nŠx÷_å]7𛯰ñœžnrâxÀ†­>¨NyVaFS ™3ÝH Ç’ÄJãºRi„2t{šc“…YÍ©|Œ7¿)ËåCš Y€”êqíîczŒ'÷â,]ž4ïÌkÉ29Šç+Ôø¡Áá)@ᩚ’žî½gÜÕ¢õRt]œ_Xڙ⹅ ½ø‚›v¬|SWG¦## !]ÄÀáþä……´>´iž¢flnžJERo%vâñþ¿åcocÓÈ _é¼tg‹ÌÌ—ø<Š8cÛ –e‘Äq»ÙÉ´%\Ù³Ÿ|X'-Áù”‹kÛ¨ÈãÈcûètS w¤˜'Hå,,20DILO|%q½4«FÙºíŠI€/óôY«·¬ÂõÝöÍa 4ºÍ•„ÀÖê.öWÆ8†<1sŒ"Åž!‹74'Aæ’˜'V  Ë A¥†ˆ$*.qô@BÆå¦èÍ»¸NŽ( Ú!ljt ±½öS=ÓaÓ7jÓÝíÐÝi!$Ö8Nû¢q=µJD®7aÐw™Ò>›×$lX§ˆ‚yzó>ql]'‰ÂWJŠeM‡/@ \!¢­"i(V Ýy—Tʦ܈8Y6t¸’J¨øËOÝÍ·ïã×­¤£·]çs_9rИ§„¥à°¸Ì¹0¡{a–$)Ÿ€xÖàð  ðT‰”åb©§ÝÍS¬—æÀa±zô0,N…0eÚ’÷šf5£pš†£V‹•‘ÃÊ$‹ß¿‰ééÓœ I#)2²r^iŽoµB2ÆÅŽ-jqȇÞóVL¢Ûzšgô',Ûv%y·}/l_iØü‹+kã96i_(…Y iß'ÐÐ(•èêL! ÒP èìö©Ï%ÌÍ*²iC#øv‚QF7É: À‚Ðh´–X åjaBoÆf®…ZHóiD6§*šÓŪñªk†X3u(øƒ/?Á“ç¦,\Ç £ð<†Å¦–¬—ëxÎâYÃ2À° à\Y¶å@♼‡§ò4–z ‹U£Ͻ\È3œ†—ÝüŽ‹®|íͯ¯¸ÛŠtB3‰ ’h4®njÌQžÅOçØýè9>ÆŽë¯gªg„ºÛSë–$‰5­Xð»ÿ¶Ž?¼éèOăxÅ®ˆO¼«Ì{þ2J䙓$0¦]fT*Â1 â„D²2&ŒcBÒ ZÄ*!%%¶1ä,Aµ01]cÝêG)‰ëX4Æ@&Ón7ö=Ä2Ÿf”`‚ƒDX!ÒâŒü`$Z´Ë¤^:Aht •’”Ë hY=Å­Ä8Òb° ³èf„k;Ô#‰ Û£î‡F¸xÇ|óŽ[ψߴ[ÅW ÚôfÚ9¯Ô".i6øŠ™Ù€Ñµ)R.µ¨bEkü&åàFŠÁ$ÖM¯F¦•Éb¼6øä3š(f]£êüÕnͯ^ݾ+¡5 e$Õ@“v@JM&%(4 sAB”h„”Åx9b¼8NÞŽŸ(55<ù¡–â\PXzs‹3?_¸Ú’åËK×?§ÉÊg‡§†Å ȧK$>“7±ÜöÂë¥y†…¹‚‹aqò,0üÜM¿rþ¿öž×[õ+1†¦R˜(FY%œ>pœ‡#GÆ(NNòÒW]ÍðK¯ápMÖ›xªÍn&‡j61&F%6ÕÀæýŸæão=Í–ÑçotûSÙ+wÅüÅ»«¼óÏÓh-Îä ‚öÓ mÚ OZQk¶p\IKC1 ±%âÇ6Ì…†rµÉ|©Îh_–â| á„´BP!R T¢°¤ Ö–¤9WG+Ýæi‰g4 Ûãî’X¡Œ¡¯¿ƒ0&5­.›|·C–.>;7E¿ïS¶!hÂúH0j²D2 'bÖ]~9[·]ÇÄáÇØºv5µf·¿åW81WäÈýŒÙÂÉ5‰—Þ5q˾l~Ôå{ßGÛ%SÌ͵¸íˆE¤ÚeìuyŸÓÍ¡5£9—´ CÅîY›8ÖˆÈðê iŽÏ‡tuMjœ˜7|x§Íí'Òîw«óöƒ±™XÅÆœe[.N<.|Ëi.¬c~p_,„‹sÏi˜ñ”àð À° ,>g*É<[pXܽtÍúfXT™¸é¦×÷Þw¿ý—LRµ¬8Æ61ëÖmà‘ǤR(R+ÍÑ»r™\Š8© ba¥Q¡X-¢µ¦¤ÛU ¨3zŽŠ(މ£ˆ8Ž ’˜°aøµ?Iñ¿ÓbËè ?©âSïoñksQg.H!éK;œ¨Õè±sQÌp.C  ya°…`‹K_ú 6oÙB½vš9HbÚÉE)¶´pl FãØ×µÛýR`Ùmn)-”1HÑž«a åZH˲-S9.»è*þþSK#T“Ëna¹O@RÔ„q‘[;Òxé˜ °é“Á¬YÕÅÀy[pvlaeÿ(QR׆©Â ß{ì.Ê倔ç’Íf9:—£ór‡O8\\kRsSlà™\'¦&˜2G#%"šÉD<À šD:=lؾ†/ýþ<=;7pË}Êňé8arJ³e(ÅЊ.2™ «†è®MPo8¬OKÖºœš yë.‡(Ž)×Vö§yÿeM´Ùÿ¸³ŠýAšUÎ W¯ZQÜ{bÅÌ´Úu°žúÚéøÐÞR¼ß,úêx27hqço¸èw‡ ßÒ0ãLjeõžžªçàIb­K^/þýåbÁ–æ,Xô÷Ë ¾]HBž­Lìܹsô£ýè›Ç9 z™L†L&C©T"ŽcŽ×Ó&Ôè¶bÒÅY©3€Ç$IBEOZÂ0$Žcâ8Æ Þså×YÙQxV'ü¹¶ƒó›ùêÉ›qÜÔ“c<ÏÃó<\×=+³ ‘Ëåèéé¡X,Ç1Bˆ³Ë‚ý¸%ô\.GGG³³³„aøãê“̲,úúúBP(P (ùšmÛôõõQ¯×©ÕjÏéÿŽ¢(Þ½{÷Á}ìcßy衇&ië94Ï,-ÚÓ¸ô4k=,,K½'1=€x8<0,׈´ì%ï-õ&ƒËâÿ¿x{©g²”Hµ´:‘2™L&ÿ¹Ï}î—ÏJÌ/w>¿· ÑtmƒƒRŠ8Ž—†ÅEŽhðö‹¾øˆ£ÕÜ5ÿv\/M*•z’`ÌR X,³XMj©X̉ļ0¦”RwÞyç£úЇnÛ½{÷4?‡…õP,€D@;ÄX¨p,ÄÒÄæÏ߬ËÎ|à\zôrc¾Kp/K½‰¥ààòä\Ã9Š·½ím/‹'m>þèÃ{ˆÑ¾)ò®`×5ëÙóý1®|é~Ï\µ‹ø¡‡PuÍáºCϪº‡-’é9ê›øòvÓµB29mÓªE´BŦásÊã—ßù[|á_þ…Ùƒûq(#ÈYÛ¬tøèo‡l[ÿÜþçÎný¾Å]ÅwpàñCLLÑß?ÄéÙSlì£ÜTlÛ°™•£q²9zóy<3Íö ×`ŸuȤcŒ´¨”- ÍržIbŒí£„…ë÷°}ÓùÜþgˉñƒœ”Ë?þÎ[Pq;Þ_¬v…´áŒŽ…´Œ²ÉÆ.¿xÅk0LÒ“÷Heæ0•"w.pçñÃö•¸J-.c´…ˆ #kFh¨,ïú‡/òšWüß?>‹n[àWØíðʲñ,ϵñ=—”íÐç{¬HÛŒºUáP–eQ16sÊ04’ç>öj®¹ì&&&Úú‘  ÂX\õ:Ø~ôõŠs‚\ R1$±Lí¶¼ûKámÅ3KÔ¡–‚D@ÛƒX O ?,8œ“sx¡ÖÅ]‰O5oÒ^²½4ÌXìA,ÞÇ‚-¥]‹›'"Óžçm)—Ë›wßû=FÒiÁȆ͘pŽƒgÉR¨¹¤cÉÑ¢Ïêl¤#º:"dï:üL…o<:Ã¥¯è`åp–©‰"r)MS NÏÖ‰eƒ¹¹9<È ÛF+MÕ• % )Ç¡PP¼éÿ‘|ö£†ík_x–í+.Väžú?-üLšH+a“Z½ÌØdßi{éÀ¡×ÛÎñ™Ã öõÓ=˜#n6 ¢?×M\K°|…'CD VÊ¡ÑÔ„a‹¹ÓMFúWñå{¾Í±Úifë%^SÛÁÌáIf³ûJó »½äBÓJ˜“ š^¾}x?%1GwOŽ5Í.^·’VÚeïÄ$ߟ>ÅdµÄðÑiÜÕ=Lx„9]jÆM¥ÎTa΄ë)z2]$aÈÔü ¹Œf¾>E±ÚbÓhŽjé0)gÛ‘ØN§.H-| ýípë[=N_6Ïú‘•<NðŠÌfÇN¡­ÝŸÕÃCtôäø…üU|éð^½i{ÿ.ÎŒ°cÛ6?yWød2‚”ç0«cyl?­“ò#ýx9A6mŸ¥¤´…ñÚ†Á°m§¡se…UÛÁéñ‘Ý”"å…4ÒkЛ=˜ [Ô‹È¡ÕǤ#¹¼¯I0ÝÄ– I’0šµ)$. „…‘.²q]‡U¾Ãº´Ï¦¼M¯o3šO“ËXäÓ6‘ªÙܸ ›ö˜CO‡$IB¥aÐ2!#+\+ ±c¸é·l6oS„Z’$ }…]±ñlHÛDN„)ùî+o_¹q³½þŸþR}¶\0žú>z*[ gËœ? @œ‡eú–K@.e?.®,Þ^ìA,õž 0,ÝßââpÈår/B8qsz¦JçÇþc ‚逴Ÿ°ªÇÃ×Ìå™Ü³‡‘«. uÞ%Ø~‚ç¥éÌ[”'޳ö² FÔKôæ V:Eºš } + C$IÂj)©7Ķ‹¥A[‚qË"t «,ÁDïý¸Í''býÊç>AöLvýeŠÿ¥>ðׂš†°!±ÌLœ&½ióÓŒ—b,²Tj0y²Fa¾ÈdaôÑhŒºø2ÁÖ–Ù†¡ªÍÐáÚ- 쀷½øeôöæè›VLÍLãHÆä<½ýô>ïüÂ?ò’­›ùð/½œ’røÌ{tÙP>U¢äuТ=keO'¦\cÚX‹X:æÆ]yVö4m¡5Ó.á ctL*`¨Q-y°¿J­U¦X/ãµêüÞ׎2]*¡lÉ`>O÷Ð(9Wò­½‡èl \‘"3Ú@ë’õ|êÂ"06Xi„íÐå9¬H9léòÙÖaÓ“wéît1ÒÃvØeЬ®9œÐ>:$‰Ï€™% Œ"À0,cqÅu6Gþ#¦7o3¼UjC­æ°n•áè ™oÍ9ô´ÊfãzkÃoýOýÛ·|:ú§GïÓûY¾˃„^´>ÛÿðÃØržÃÒ.M>.W5XPW: Ž…û¦—É5¯Ü%¶îX+6ô°JÊ ª}šO*a›hL笅1 °•nÚ¶}ê×$B$زŽe‹…g BÐÉ$Ƥ}g›`Ygö$à< Æ /Õè·µÿFéa$C¢Û'Àõÿ ý’…@/bÁ„gãJ[B¢¤h·ØÚÏùhÞg¶×\iHÙ¿÷IŸ‰ÈPnÆôùYšåy’XÑ f™ŸÿÒ»Ê,_Õ¾Ýèn ïHЈN‚”åŽÄI”Y «˜‘Y…f¥‘3ÚЄ ¹š)J䌭$Št o4í}y_•Þ<ÿöB…F5@Ž@‹/âEfgwgfeÝûåwÎ=ç; Ÿ™gjCæ×|„mÎôU˜èç>ú%ò)„eÆU ž=u†tÒæM‡÷°|î"KË«¤3]ÜåõÓ‡; 6Ò4Xì tÅÄÒt"Ug8­³½`1ZÑIm„¢ |…(^_#=:±F/™ ƒáÇÄÞúÖ±Y'‡õ¯lAn[L~,æð‡fŒ˜;.Ø{·ÊèˆG»£ÑWñ‰bé€0$eÈ#’nþÉ_Ôæ¡Ýþýóçá—Ùš¶J@Ƽر™<¾mõ Â–ªájáÄVµæ¦ËxÇ9ø‡?'ÿõh™=††ýjoàŸ‡ÍŸ…·é±Í·ÏÃØ¸se™úw‚ÞúOùª$üºÛÿñÖ›â¸Ç¯*CËõ/¦™žŸAF1q¬°²Òbû^ƒtF'm–X\˜ÂÎä¸xÉã9µÌ!uzmÎ9êúlÏ^‡ç.žàŽ]Ÿ=ÆÍc·°¼ÐåMû÷1cÂÓç&PT_Ø_]™bûh…óõiúSd.KœHQè+²pÿÃT—«¤KiR}ª …ïÿõŸdnu•£O¢µVgiUaÛGðž›â/Ž_æ-yÉÂrÀX%ÃÄr“Ò°Ïô©9R7¹`Ã7ÎLñÅ3óìÞ•$x\ší±óžm8 S|´ÅAø«Ï=Éܶƒ£Ï4ÙaºŒ ¬3÷ŠT¸3mñÞýšž`µ#¨÷$Ã%›|ÞD$4¢@Áó5z¡†!À‹¡ ¦e3!Ñ#È:>ç?MÀ®›t²cVÈò¤¤ô¦˜JN2fu»Éž7û؉VG§<rùr†}»Úôz>õ@PÊÇò‡îÞµmLŽÿáïGŸèu^1œØÀ•asâÛ"ˆW+Ÿ¾²8ãJoÆ—ÃÿvÜññ_’ÿGÂ$ûm¼ù7ð]ÆÛnñe›ùýˆfÇ£op;ã ˆ^ÄÚJEc0¯1yá­NNÏaû6µRxUÌd…ùåó,Ìgai}éß7y‚‘¤’ËÒXâ/g&Q3&ßj.ò×ßEØmpÓè(5þiâ þNŸ’w³Cø!òàԸ˶}Ûiz!nºR±Ä@!OóÜ$v¯Í-?öƒ¬¶R,]¬ñ–Áƒ{©u¶BÃ÷ˆçz”vôÓ<·Œqh”éú÷¾uùù·pâ›ÆÃ(ôÝ2À¥SçîztI†‹jN»˜áÁ•©VÀA ¶ÓÄ–ÀJè ÁHF§ìëø±N+Ö®N¬jøB!V"–#ƒ®´t‰PuT/$Š$Z¼¾¥¤ K›!©<,MKì²£úûÜ#ìÅ<ýyÉþÃå}ËK‡ö4ñÀXY‰ô}ª-80ʾ_ûò§þãoGæû/U¯rm(ø¾¹®$‡­*¯TW6Ž˜€ù‘÷ËkÿÓOÈ_þî«…7ðà]7züÞ‡LþéTéÕéÙeV£A wÉ£O߬ÓX«Ç>—'Πsöì· VéuêÌÏ?I§×cei×_W[u¿Å»ÆRêC_kò£ºš¤aš3ÓSìÜ·ƒÆâ*”Áîkvs)±ÄL’n«N!™¥¶¶†§KZ ì¿ñz2é4¾ïrüäYžxø9Þ{{‘'?ÿã·¿™ÔÎkøø£YùüQíÛ…;2¸´s¸¬°sÌÀ²%–k²Ö6Ðm UJˆU–!!AÎõÐt:ß ðÕ¡>_#¢Åà |^GgdÛºç†ÓÖ舀†+ÉhpÇǬLÄ<÷u›{LÓÇ©*“1nÏÇéJJ¶ÀQ);Þý{¿#?ô«ÿ!úÄÆ¨^ÚÚ½q]åñB‘WSr‹Ç^© òÊ„¤è¿÷ò¦þ”üÕ7ˆá{?ûnEvÈft†Óå’dYhÌÏ®´kœ>w’•Z@äiæ¦O15}™sçŽS«vÑTL*ƒ‘Z÷lÈôQëºÌ™ g'1„düÐ.rSâ™*g/Mà•t2ãžž|”k¬!ÔX¡¯¯!%f¹@Õõ¨ô’ÏdP„ä+Ÿÿ*Ÿüø_:]ºF1?AóÑÏròô,ÁÚ*'d¥±HumŠþkö“êOS)eÑòI–Ðô4~]’Ðk„9Çg"RûÞCòž»xÊ]!¶ã æý&^‡e'äRuÝtÿ¶"cceÚ}ƒ<§ pÑÉ3ã—èØy¬¡Ò,Tg¹pñYÊ9“bÆÂÊYè¹Ù„NÞÒH:Ù”I*³¾Ò%+©ú èÍ^H½¥’Rt¤ Ž㺂z7&?qý;VVg³±”˜¬ JA*Y r‰ˆr2dïvqàW~Áü ëgíGû/qUçÅ}»åIá+9I½RXq5õð’Ú†c~õ‡ä/Hñ¿Ž“õÿß %¼çÖ:ûp ·Ze±ÕfqµM_9Ïñsçè¶Z¬­uɤ~½‡Ó„#·]C6‘ãòÅó¸]TQaáÙu»þL2ÃâÜ{{ÑWÂÔ ªÏ]¦ªø,ÆéÙUNÚ>×:?–¾•D¯HFOl›ØTyó½ïcphU,ÎLqâÙÓ86ûÇGØ»m'áî੯ÞO¤åyëƒZ,ÌðÜ™yŽG«Z+Xà¤#˜lµYu-VÝOŸ4¹íí×0üž,_ûÊ_’(¤ø‡ÿwåì ŸúlÌÓ­ _œ] h¨XÚúwã¥ég±ÕÎü4ùdkÏ!ºžÇH9Ëä>I­ÙæÔbƒ‘RžÙ§¾Àø=?LöÀ]xFˆÖš¡öÑC.žÃ­-SºñNö¥Ñ¹D£ÒK œdK¡œ7˜ë:”*†*Iä‚@#Ò<ê5ÁÐÁ€‚®pù¤Š×9rCD`Äx½Ý´‘ô"¾ÿ]Á GÏ${|¥}/*…ÍWÈKÄ•2¯ õ Ë÷+F¶R/ /þý(·¼A ßû¸{‹óK; µ¥TÅdu¾Ûuð;EÎÏ)hªE³í²sû¶ïØÏ¥3ϲcÛ8SӬͷé^² àÚRŽ5§ƒ®¤ªÁS>ClÅ$Ò‘©±Í(0ñø9¬VÈî»L´Éi”ÁíÙe†¯ÙCiÛ¤"©®,rêø)Ò#ÃyËPØGt¹ËgŽçH•#.søà›û©¯®1"nØÙ¢cµñ޼—Æ7?‰’[*­†ÇXÉä̱¦×ˆëgCoãÌ¥á©Ë<²Tá›—§BrOÎâ®þõeûó\škàßëðÄÃÿzÓáÐ`–tF!‘ϳ½œÅ´TVUƒÖ³Ÿeá —L3”3˜i;4Ú5rš ëŒs'…bŽÝ{+<{j ]ÜV€³jH9¨=AØ1ˆí. ͈>ÓÆN¹´‰Ǭ-„ÇC_ûºÊ[oQÍÇ‹(eT¦æB3âÈ þÙü»{÷?¾ðY^$„*É—’„ÊËmçà‹W:ÊܪŸâeó'ï¸VÜòÏY´oà_C9—™ÚešÝ"éÙ$·M7ìÇ*fK5°L•„i³P›ç‰o~„ŽbfÀì#èUY^ZW×ÃMB¬Fœ™a ™#—N3Õ]b /Oú†>{òAÞÜ?Njgã–]Ì>wžêcßB*’ÂÁ}Ä1f›ÚRÙóÓ 'Ò,//A©Æ7íò#ÿö—ùò?þw~â£tº „p÷/ÝÀ„èãÁ¿?Íÿ®þ#?^Ö9³3|@ãüœä ¡D¬BغÀ{œX9Á§ÿn™¸™æðÍÛøÔOßÅäD ©¨(ëaÅrÃa÷¶~¶í(£(O?[ Ýˆ¤ÆÔ|• ç¡%²Ù,+« #AigŠÕv—ª`'v2M/ð©vÖ÷Ü¥‹SôW˜˜¯y="_28.èÕ9iÒë„ôlÛM¢%]ª5E†´ãBW‹pÁÀŸÎH²¡¤Ð/º!‘!¨µ"Ê•ÍÞû¶Ì;×.âK?Ë‹¤°Ù'b³‚ج^µöájä°ùþV W  ¼ù}Ãv~§ õ ¼>¸s[ßþŒ‹¦Xt¼Ã4 Ž©dóص&—Ï. $3D–$7’¤\Hàº-nf:›e.³N‹­û>©bëúx½h3t"äxu–·ï»‡ßýE¯¶†&¬DŠØ6Xû§§XìvyîØ±õ™ŸªŠÛl±}l„sÏœàbX#šœå¹…¿¹ï‘~”ªÒJŽ3sq}À¤5±ÀÛúU9‡-‡YnOóÕ³=>üïâ“ÿˆýÅSô—M†Cö\[&r’ÿza™RÊä`ß vÛ =uš‡Îõê¿÷þ_¦•¨ªO·YÅ´4n¼®!"¡`X;A „¢‚¢£€¬®¬âvBêõ.¶ËZu\~][Or^º´HlJ]¿“G9…z9bF É$¾ˆh‡V ɤ\\?@1!ŽbÔöºÃµß©U#C¢j! [P[‘ı‚¢…¸>èVˆÖðùõ½ç‡ïð[S `£ ksCÖæ®Í õ°‘˜|ÅääV§WÞ^­”ZþÒû•[ßÖ™ëøÀ-»n,I§L4+‰n¦@‰ ãÅ Iä3¤rIlËÂPa,WdOÅf8›à¤¹þ«Î:3ÍuM'+bæÎŸgh¬L7ïpjm–¢j iæ;·B8¨& šY‹ÝƒÛIF1sÏ¥ju1E‚1‘â½ÃcÔ½‚£ò€ÙåÞ–d¹ KŽÉ¹µKÆŠ”‚ a²Vè0´'ͧ_`¥jrª#?ý8X\8S'cab– ϬiÃüøa•áþˆµÉÎuz—ù@ÅfÎZW’I—vÓÅuÔ¶ŠiéD´×zÂÀ°-¤¢+ Š®SÈ«„iI_9…ï§iÔ ˆ$¦K04‹¹©e†nàš½EŽ_ <ÕvÀÀ¨DÆà·Uº©.¹HÐí@B h¹1D*k ˆ¥B؉Ðu‰G "¦@ÜPðÃAD1’IYÙÏüÐè½oþÄ¥¿äEr¸²css˜±Q¿÷ŠêáÕ’›ï¿ìÚ1(Æ¿Óú^?èšd×® …\ ¿bJƒÔà(–eÅåB - Ê&©èHTªô VZäG®Ã0 ö<Œ÷Ô1„ïÑ #ªõµ£-ÂåGvÜŒœZf­ÛÅŸ]¦ÔU9?=ŧÃo3ûR¢³—¹ï¡¯q¡àð»ßCŸ–'e”i‡Ë&o»k7ýñß3æw¸>írb2`…™yЛ‚ÅˆÂ€C]¼¬Â›ò ääÜœépý¸Êιsx ›ñQÁÊÅî|«¤Õ‘ˆÀç«ON1¸M¡&:h©!‰ÏÕ%b~”m *¹¤F*i¢ ž’tWG šAEëvxAŒT%11–Œèu;¤ ÈD‚d¾Ÿ•ÙYä9†·Y”‡T¼É˜ÔAÁÔ¼OŠ1ËiMÐòbdž8.ôº1aG`*!­zÍC±\ £K*ÖXm@/¨Ótº\÷ͨ^;vqä#×$Nüß§:O±^xeÇæIl|¹¿L=\¹^®¦ ®¬iØÜ"½aÇ–üÆV~ìM‡Ä»^óUü¾+˜lŒò7 Û^÷}°mû%~š¦½àõ°Ùãa#gmÛ6£££´Z-æçç·ôËøç"™LÒßßÏìì,½Þw×å[UUFFFh·Û¬¬¬¼&?¦i S«Õ¨×ëß•ÏhB0 ƒééiêõzóð?:;;»Ô&ÐâŶïvï ³˜+O4^ÒÖýœ2ÄWÜ./Æ oz#ªø_ÚÇÈȉD‚d2I2™|(6bÃ1JQ”ç§z_iþ’ÏçÉçó¯ôRÿlìØñ/gŒ‘H$(—˯ùs ½¦ÏùJØ»w/@ú¾ûî{ÿ­·Þúç¼”6Ä•m߯¨^‰®ÖÌñBåÕÉ ®òßÀ÷ :õS,~óç s;ûÞñó¼çßý<õ¬E!—e¤˜¡J ÉB»ÅJ»ËÂÚ2‘ÿ|‚[Jðc„@?ߨ†*!–üןùEJ¾Ê£=ÃûÌŒoï§¿”¢”3ØÕç2~æçŽ’S ¡„bÚàoÿä#,9mžøÚìÜ¿‹Ã;Gù›Ï?Ê_|þ$;vìàgßu)=Þòîwqâô4A¯É7ìãK_yF'æÈõ×08¼‹ÜÐüÖ¼—n{…Œ%س§Ds©ŠÛ=ŒMc Öp’ô¶"vÊFÄ"¸SóIìÅÐ f¿qŒìáQìþ+“ ô_¿‡(Þ†`'_øìGð{-ìµQtŸ³\ΞuˆQX˜ H¤¤“’¾¼N.gá e(•uVVWùÚƒ³=Ú%ŠuJe]è46R7ßvÛmC>ú膽œÇKÃŒ€u‚ØL [æ®$‡«Õ_oU`>p4šÛºÈò |/â‰Ç\îv<@ÿͤá,¡¨#hJ C3PYê6Xí¶ñÂ=¥¢h:BqHÅD T Aˆ¥JršÊ™¥ ¨r„z#Ä´UÆ·³s[?¦#}É„Á¶‚ÅÎñ •ÊŒ£:Šªãôº´»]ÜXá—çpb›·Þ¾Ÿm£%ÒÙG®çš]efgg™ž™d ©Ñîºì*X4½ˆnÑZŒŽð\)Ç®=»f¹öŽÐëvY "v”Êœ›ñ˜Y @„¬tC:¢‰Í…%Ÿc§?Ç­o*²2¿Ì¶ñ$;v¥ºvœÅéUj³Uê“U:^ˆnHzË+¿VGÖšt&:4›>Cc:—¾x‘ØJ’°"ÜåÊp…ÅÉTË p/S7ÎÊtQr&ª¥Ô§Ñö¸4éS¯K²E•}{, yU V{TWTV׺IJËòr“bAå-w'@Q±R‚ÀW8ñ¬ÂbU7ßzë›}ôÑÖÕÃf–êá%{}ó©ÅVÊa³ZØl.²ðÄ$õf7^MÛ¢øš¯ä7ðšãòœ RÑè?8HÇܲ=b&-Ñ2’ð¹3ˆJ–ôî%™Æ ]b¡`k:I Ö§j…¡Oì)tØTäóÓvÕâ0QÊäÀö=œ8;M&cÑ_ÉSªäè4¨zišìϧIi|„ª "IàÕ&SâÝï&VÊ:°U*t:u{âI,ßâËLsðö€¤ºþxãûè®5X›^?äøƒOðÎïOòÁ›n¢æ ––œœ¨Ç1"X›>ÃŽ¡LL<ÇÔâ ƒ•aNŸ[ଇÔX]=ƒZŸâÆ;~ŒbY#_6É”hÕš¬V;ÔZ.¡¢ã81ÍjÓ‹éËZDø ÅRÈG1“_¯QmA5¶_“dqÅÃ÷±-Z×N4%«ýÔê‚JÒ¹Ét‰r)äºC&N—D"²4T$ b–œšaÎÐÍ.§§&9w2ÅÈÆÐ€J"©cÙ&a`°´à’]»Æ®í/|ajaÍᥱ¹Fi#9yÕÐBãxcJΕªa+’Ø\Áï|&þøïÿ¤ø5)ÞßË8yIá”Λ>Pb×@áðxŠ„¦S—ÊÞ,Ê×'(§ òûÇðMÑÑXŸÇ)"ˆBºçæH 8â,ò¦l—‡t Ï÷HZ’”è‘K§Pã¿×f°˜d°h“N›ôçlL-FD*Jã»=ÂhÝØ7RMŽ\·‹ ×F1 †K–ÇǹvÏV>÷(š*‘¦Í¥³lŽ9Øg1±Ø¡-5ž~ðaòj†n¾§ÃÜJ“˜˜¤ab™)Ù”…>ïЫ5©™ƒôz.¢7Cµµîòn§ÜÐ'YÉ`glšÍ6¦†iÄ~€žL —»(OÍáT âœëûÄžO Œ´B&§Ón¹ø‘À"b­Ú£4× z¡NͼŽÓgªUˆD•=b’d²vN! ×p½.×Ý,9þÄ™Ò6|ožš]#[ O¬¬D” ’LI’f/ÄÔ=,UÁÔí#¼ûÎ_ü/÷÷¼Øg±Ùm+㥗…WË9|;ÄàÚ¾/:yÇ~ñ÷ï¹E|à5ZÇoà5FÁÇîÓù¾Ÿ|ýcšå¡´*Cã„Æj(Iõ¥i ùéÇpÿê!’﹑?r'Õ¹‰~)B„Eþ§¾ŒVØMQ]¤ç«äcpi2sêráY†*Ãdr&é”ÉÐx‘B)K1•À6m4;¦HU[߸¶@à‡!½žG4{œé£§É³4wîf|¸HuµÊm·ì ’·84.9PNã» Š‰€uãn&Í;ï}‹3sÜ÷àe–:N§Ç@2E®ãÄ}ÈÈ" ËÒ…³8íºåRê\žíqi© @­îÑiy,N,cZ:Æ¢K¥/OàºD M쌊X ‘œšOûèa˜ÌÅ=òi†ㆂ’­d,Föf;!®ÓnÃÄœ·^ÚnŠHÒóTl³B¯ žçqÕÚ)Ž­H ¡rêœàm×V¸õPË”h†¢F„~@½á‹š½^ ¹k×Î[m]|¥ëÅ]^jåx5/ʰZ|; É+‰a#ó©²NÊû~;üì¹O¨»¶pík±˜ßÀk‹ûѰ*Ь~TB4«‹ÒUVÓ )J ©J*70Õñ1ÿñ ÿtŒ ÷¥F(ôÓ䇲ûtž>ËþVÀÜ7/P½Ã¢Ý†ŽÑB¤KèŠ`xÀ¢×]–Š&AÐ%DÆ:2V ÂM׉â˜8M7øØ {è°°ÇvsútmÙƒòø‰‹TÒë´Ýj±¿$ñA·åðôÉÖÅyÞúî}\˜msæä<í^‚°Sc ))X*–€°>ºØOß®½,'TÌkö³07Ï â2¶ÿ sþÌ:94Z!¦*xô+Ømi(ç;TAfÔdà®~̨C3ððÑÑ’1¹½9d6Ï…y—ÂùT€¹Òê´}¿å`GÈ&)ªu-$Ÿ©€lN²´ Ža9|M§×ÖÈö|ùK“ôò|â“Ç8r}?wÝ8BNÉ1vmŠÕUK“01×F×CÚ 7Rˆ ÛöÈéJâÞæÍŸ~¦÷¶V¯zj±U(peÿ÷ËB ^Ì~º€†8ïû­àOÛ=ª¯å¢~ÿ|Ôš‚ÇNY\{¤€!UDØÆõë¥ËRbÙ&Ã&-“t.û’›îáöјëG×öi„úEÚµj›ÝGgH)1å mìIQ°hUzžD3ÆvŒ²=¿.¯5U)BAWSèjE±BAHAzD‘K‡4[uîøá»H ìÜqÓû+s]Z.édU_/KFZ<øDƒ[¢Ó…ñáˆ=ƒ » ÝÕY†S;²U žŠîSVÚôÆòEú‡úлM2Ò'ì¶AªhRÁ_œE|ö×û"Ê}é”ÀïúÈ D•’²%H/vé.40‰(ïëcºã#Êiê‘Mǹáí{±…ÎêŠÄ0U’iU5éú‚ ëÒ<»Êâñ9ʃ°sOD¹ è>ÈEÕÐ4nÏc­à)S’ÏBóYQª åÒ\¸ä3;]ãô©:'NõXk)¬ÕcjM‡zϧéù´=ܳ“ëÙÚôùÛr±¾ÚiÅFüq¥zØP/3Œ=1Éê០~õ~Vyû[‰·Û&é×bq¿ÿy¸üùgm¶ LÅ%/ašŠZx~¨…x"F—*fÆ¢'CúŸ¼LrTEUÂa(®.1óÈI ¿yçí6 Ï#U3YIëLO„”Édm¥JЬ“´zÈ„/{1q ¢ÐCÆ q,‘B¾ê Ë$ ò;v .=Ì7ßö)‚ GóÔw]_âÔô}ùˆtR#—Œ¨(”LГ!9çYš—fh5«„m‡f@iLbšÓNª“ãGŸ#ˆçfÚX¦A·Þ¤ô8oÇXÒa|t½vÃ6UzqLBFÄ)…„RwaR:¡Rºm³fu®N¥Ö%76HóÒ4J×A„ Ž®z]ªK»îÀ­u©.wi·¶W„ªàõ,:õáJªêa'\:®‡aD¡M6§0^ân”´ ÇŸs8{>@×;ôê •!Bü `q1fr>ÀNHÂ=Ã)CÚ-7j³51leTûBÞA–Ã.^)ßà³I5ðâÈ®îÅyªïýÍðïF~4øÅ¿úzü©z'~}F@½\þàSÉñq M¢ÔÏa$«˜ C³PU•å5×@D¨D¨cÜt-—ó§YÂVŒ¨†Ø¸ës ÙÈ„$ç†S¡ñàKytæ{´ž/‡pë]Jå,#Ú¡ï#Ôõ¾€®×¦çÖñUB¯Šß]&t«ÄQ›Vs E†ÔÌk™¿‘µ¡¾VåâùËdr Â8 Vëàô$ެt ÖQQUÉîŠÉô¥.gÏ.áz*¥l†^+¦¹BÆÒX«­Wdöª=º ŸrB¢{>NÙÀRbb] WLâN‡‰ó5ò–Çà¸EwÕ¡q~…æ·f!o‘Ibä-\Ý 0nS;»Æòé:]!IìÍbé ú ä“)$¶Šø(ê*Ét•åÅ"J#Õ< Ë]œª…ˆsä²Jù2–¢2,°ìßt:IÛÅÖ}ܺ$èIzš¡ê£r/WUЛ»¯_U9làJÕ xñècãŒôÊ£ " ÖZ?öÑð~]áë¿üyÍX…B.%RÄ(ñóîÑQ„ŒcD#£E(a„†¨A„„hAëRË–sÅ¡Áb©@³ZÅHXhÖVÖ0íB }<üõÑØD}"F±“Èn%ŽQ„ºŽfYí6Qè k§I.˜'bT ˆ"¼Xè©¡a:Ó†É4j&H²¸´Œïû4jËH!Ø^¶A›ô<Á¡í>ï¸îµ­øíÂõàÿúLR¹¦Ó@Ï ’:òÕD³3¨Ï“BÒêY¬8u†³YN/­`//qd¾ËÅÛPsãŒcß:Ãä=;©œ8ÆÔMcä9÷Žpƒ®—äØL“=ÐI&“X™$+g0òÛü R®‡QàBvŠŽÛuQD„*ÝvÄÈM°þø>â^× °í$±„j»C¯·nQç8>Å„ƒŒ—Uò…óUŸù M«§"¤ŽšÌÕz„šCÍ5è`‡*±„¢Ýd<ï0¶céŠé“ÈG¨Zž §¡ÊšQÀ×O?D©ÞÏò¤Òcc1nW§ÞI† ;·¢Ùì°X;iûë_+@¤‘0<úöÝÈáÖñ]_<¿pŒ—*‡ ‚ØêÄBð|—æÕê6öØ1l¨‡«ùäo8ÍlVª¢~ôo¢gØznæfó˜Í¾”/éã¸áú!}l|t°Ýì ÷Qîï£Öè-ùÄŒ×ð©û¿…á‡tˆ±AGWHÇ1 GÇ ë&èžxM•„TØ&ÖA{|+çNsX18†DD8‘ +AaŠå0btç.:]m¨D"“åÜÙ6½N‹¹ù]S¸ý€IàÃT'Ïûo®óöï1øð¤b·S¨„(½ÝGuvn]èJˆ¢ìÈ²Ò i(SURáñÐå€GŸeWF§vÇnúnßÁìèµÈ0Âk·X\ŠøB»À“ž$³,8³j2äÇøQ€äÍB)I˯>‘+ð|‰PÀ q¤â„Q¨ D€¦i´[MR†‘È’* 25³ˆm)x®ÏÅÉ*CÏϘH&$‰”ήÁ¶!pš’éyÛíÐöuÚµ€¤ÖåšTÞy{†Ï~)b¡–BµLRÖ ¶Òd­öêQ·Ë;¢žì!p×g ºª·BâYŸ•jŒ TO%‹O¼axs†8ŠI¤Uü\½€¦€⮵PÓIòE›pªCm­F¨©„U‡ÞšËʢǙ“k¨Â¡´£C±$‰”Uß#†X‰¨³Àê|ŠýãÛדx~©…<<×Âó4L3"Ÿ]ß²vQ2›\ßšK˜îÊinõ¶sõSWS xñ´bS½¼4÷mº¿™ 6þÝæÐcƒ¶ÊŒ^I W­Ù0¨Ø 'ÐRõ9>r3ùRžé©E"' 6;OºRad{šêZƒD"ôc\) ŠBàërD•‚A= ˆŠc˜š†’¨’X^ R‚8dâüyÞ‘+£vjèv’^»‡G@\)ÓY^¤Cw~žn9O*ŠKmQíÕ qÄÄZ›rÒà7/òûê _‡–׃ÿóOu[9Þ´kà H”û±†®ÃîABt¯‹E¨jšÓµfOVI$Ú¨ÛêŒË Åò³êÉm‡Y±» På+Ù~†‡*\^­"´gC‹‡º5ŽMÏ’HÑÛaqèú< Ûb%Œ]Ÿáñ Ç/Í \C„Îú’ˆ‚ˆFàÇ1†ãë*NÛ#“­Ðn¬ûU^œ¸Èè`‘¥z—¹¹5tC¡ÝZw¾Î19% ÎÑÓ­H(\žosû=Y†‹ßwo™(‡ù'CjY% “óAÀÔ’ÁBmŒî°‚P0žu‘Êzƒ·ì`´CâHR²b:½= ná5BVB‰:ïÓß/Ð 9”]%ìlŠùÇ/3ñÀý·)¸«3t܈îÄA+@Ñ$S3«3±Gc¥N½c6IåçXZÊð–»xèë.VL3îÉ ÒÃOcV:Ì-ì!lYt{.‘Òñàè±'èïw‘øô œ®àà.RF£íôÔaZõ©Áœ%íZ/j±51\5)ùjW/–Xnô°•ëíæ¤åfrØØð[‘ÃFYçÆ)É&rh©©óß 3ö¦ÿ*r¶NwtŒëö_³ÓH¬w:±ïI=’ Š]*t;޹½QåÑÑí¤&NrH3x"r0ƒMå8UàðBãFž¡Þ,CºÉ©¥Uh*BS¹<ØG¯Ñ¤P®ph?ÜÓÂñÒxž/:«>wðù©Û<^áÔ®¿ñ':k ›»ß{3–¿€î/`õ¡ŠªÛ$Žt%ÔBU¡ã;(ÁeŠå2=ËPÆ$XéÕcÙ$çíq–z´t «ó´˜ž¯QÕBŠyÁà,ÍŽÇh*ÃùNÒd„ã{˜‰³—'iO-"Eûæ[%HL–Ûk4½yU¡Yo’Ïd ™cȰñ½Es‰…`mµÆÜüåJg©ËZs=`tcV—${ʃtÛuŒœ`xÀg‡pÏÞâõE¢ÐOpù‚Âcßh âšhTLÐn($L…™ÕG|×ÁT:¦Í@Ø‚f#f°OÁ‹¡b –lCeµ’IÄøaÌcÏúÜzÛ }Û+œúÚyœ‰å»v L&T$™¤N¾_åâ”O)/±S¦¡ êF!'ÌÓNxh¦ÃSS—ht†Ptƒz­Éð0hf]­‘¼ÈÜ©íH-b­æáàɪ,Ϋhš¦(8=·k£ë’s«Ð¬¯QéS•ý»³Û>V]ååä°1¼™¿„¶P›Ã É‹qeSÖf§™€—Ÿ¥nN~\mHÎæÙ~Ä¡·#Ã×fÚÕ.×\{Kú+%Z_y‚JŸMéÀAìD? ñXBÒ#DA` ˆÛsL¯Ã;&/sÉH1…Œ(ÅôÈÏ_àœç³½»H¯”Lk‰nÑ/.ÙIRÃCô‚ó(¦N¸LõQÕ&®"y÷=‚Ÿ¼-x}ˆÁƒßþ3›ó—BÞúão%›·°ì´¨†™&e%Ñ‚]ñQ„‰¢( &D{öÙ&B¸8±FlFL%}ýi¶YEµY¬»ÌÖæX¬FXZŠDBcû`‚DOeºé²¯b ‘¢Oϰ\5éH•ûœf0m§V°æ”ûb:‘O¬%Ñ"º' Qd®ã°£’å‘£'Ù³­Ÿ'β{|Œ™…UZÝxµJ«Õä‘G.pçMwQ“‡3ÄSÓœnk”•€³§$}9ƒo|K2îÄB¢%U.~m™á¾…H@í¹9T]‚Èdfç{äo¹…»ŽðÄ#Ó"Œ+“-d:ϱYŽMnËZLLtš‘o‘$Kã¬BÇì!´5…j[ ™’DQ"ê«’v]Ðlº í 5dsùÄc¡c¢¥Øz^™ˆ| ÄVfW÷JƳ›‰àjja+å°9¹9™zþÊ|èCºýÞ{ï}ëÕ6‡a ÒétX^^¾ª¹ÆæÇã8~ÉEQ†ë5þAàû>AàyÞ W††A†,//ãº.G†Îòon|ôùéÏÿ²ðC•OŸü3†±å¥ëú &.F.‰D‚±±1ÖÖÖh4[z6\yÿÕËåÈår,,,|WLZTUett€©©)‚ xÍ_ò,úûû¿«F-–e144Äêê*µZí5þ ˜T*ÅÔÔ½^'žxâñøÃ Ôž¿6L`º¬—!le³uùôá¼\)l.’ÚP›•ÅÕØióã¡ÇFH²Y5l†§ëzóàÁƒ¯ú¡¤R)*•ÊV?ËËþ¼™Â0$Š"‚ xáÚ ×u_¸Çyár]—b±È¾Ü3¼o×ëC A¤qÿ‡‰sײ£ß|Á°eãvüe+‚Ø0qfttô…1÷ÿ³Ä°ÿ&-Ï›|×ð/aÔ244ô]ß…ã8I¶N@nÆËŽ3¯V¼Alä"®L`lÕêâÊÝ ‡ðcƒ©6’.Ïà8õÍÆé‹% Ãd¥Ven- ‚〠,3Æ© Þ}罜¸¼Äòj QŸ'9:J+2¡ÛÃYœ§R)r³\"“8Z-pb­MŽnèSëÔðoýD¡»ž üŠE¬þ2ûDÈ|õ$»Æ¡¾%Þ·ëÉ×%ÇàG*Ÿ:÷ƒ,ú,«‰)]:Â%©Xª‹¯šøJWhè1Ä^ ""$"kö±¸<Ï“'þ‰}×hØ– “FU2tE¼°Š¢ûš‰ª¤ˆ„ÃÄÅ—cœú+B¡(‚ß4ê1޾·~š—N 1¦äûný0ü'ÅN²)lRRîK‘µ3t]‡ Œ°lƒSæqýˆDJgy¹G%k4#††˜]˜%fyÕC‘¥¬É‰s.¾sïû~ˆXKóÈÃß ãõ°uO‹)f4ò•(Ôˆ„B%oqþÄ2¥6óOµY©9HGâG ¶P>¤ã,DdrEVœ&FB2y¦ÃèAÁüi•ä C¼ZâG?ø^ÿ£O‘T%CÁÐÔ¬D±ˆchÆH[‚¸ƒ£¤„ºÞÙ·cüÕ׉qº! ÝMB|Æ‚G’9p˜¿>¾ R ª5Љ£„ð| ºBŒ ¨)A“ q¼þ%†qAú>˳“ ®¾· )àUrW!ˆÍ%–›ˆÇžW6rl&‘ͤ±VlV îóïÉàù¯Éé‹¿þÂï²Ú‘äŒ+-È[ õaë̶"NžèÕ»<üÀWÐÒd¢‚»èó®ßúN}õ›Lžäß½sãèç8ù¥S<²²‹/NÕ1˜j»F,C¼0$Y¬ ö¬­â,Ì¢i bbÔ¤"Éßq=½Žk|pÿëC ^¨ò±S÷2åŒ`Z(`:zBC±#"Ó¡#]z±‡ï‡ÈÈCÊ.^âÖbÏþ ˜ìI’ˤS’»îG‹õûö¤µü8ŸÿÆh ó# +¡ph(µ97»Æí‡û.$øèïÅ­€á IDAT_àÌy‡wß:Ä—ÕÅþù‹Oý-¹m ­YÒF¶`qøº<2™^†µÞ2~`cž‡¥SZ—ôj‚éfÈ{@£Ñ0Y~¨A§rÞm!Cå9…Þ'cD! AÜ‘¼å­·pþÏ>ÃP>‰–Ô!­oÓˆ µh**Q "ŠQuA¤ âXâM9ÔÎø\˜¨Sk{L„-"B`è 3n›–Þ†¿ÿe²„ÐÖkCt%D‹}R"ÆRB:Xª ô=LEà!ISaµÚ" £u÷®X ØÀqm›—îÃok循‡ä«„d±¹bã±+ßÈf²ØH`^yt©ðb×§ø­:õýÞí,7Bzfžz-de%d[ŸÓ'aHæ4‚¤Õ“Ü]8Å”«³ûg~ŽÃ–ÊðÿÇÞ{‡Éy]gž¿{¿\¹ªC5:!7A€˜DQ¤HÉ’¬,Y9õhmyµ‡õjìI;c¯å0¶ìÇI¶GÁ’lÉ–´”˜s&H€‘Ñ t@çîê®üÅ{÷BƒÙÛµÏîÁÓ]á)tÕWu¿·Î}Ï9ï›39ó3?FmôG­›O<Ãá” ox³Ø[_Á·¢FÇ×< |âz;–¤qi&>b~‰z}žhÿ•Œ”^æG¯<øºß{'“þ&Ò)|.O>Áñ4†Õ" EËo" ‡´tP–`%¬…s¨¤Ö9²´WabF¶ÅCP©ŸÃ2Óteûq­!Ta‘®a]drš·Ü5DÚ4¸õ¶>FÇ lkŽv;¢Ô EGà·i¦ÆGN&Üqç qÓj†¸©,(¦×q¸ãší¬¶k3±´BzfŠÍ}ej3d{Ò˜)ÅÂ’µ¬xÇyºryf«U\íñ‡_œb¾iÑ[LVÛ¤ç|r½ŠBAP(JÚ+‚žÝþ\Ä‘™UÒF‹ýð›ùÜ—_`yIó+?÷~ó—žàùGŽSX‘Y¯È±y6¬°j&¸}šð´MÜ‚êtHbA&mi»3_á&9SâeVÙÄD"–bH Ì“DJ¤ÔH PIMáŸð™mñ©ñq~@8ØÂdAÇÌ Ÿ4ÊpÝiTÚA»ŸÌÓãÔ?ô)„Ñ™@U:DGõ8ÂÐ /I@KŒ8&e𴢄U+…” ù¬ƒÖ "œm’2Šé—¯Lüƒ«øŸ$0»6{ñ€Ä¥Ox¹'¿8ÃXËßÞR©4¦LãÙݼ÷»xôÀÝ(<YµÓlÞ<Š“ƒV3Â2³XFŒjµð-ÁÉÑy¸ ÒY‹8Lh65•j„ë*òèÓ²¾ÜÅâÒ<;6ÏØ~‚C6e°W†í›ûˆZ vlËó•{'qËyR+uRy›£gklØ• ´ÀÐ6•…»àP=m#,IjÎÀè-òÀ#G¸qÿFµ8»8ÁìB…õ#ÝdMMɦk2è‘nþúONҮŤÓ.²­X·Ñe©aØ QÓ&6:D«ghRžÀ*ØX)‰¨«ÎBÏ›ÔY(” œÐÇÎM5øÆR•ŸØ¸žC W ÆD‰m§p³VÎÅJèØBŸ|ŽÔ“Ÿ#ø¡Ÿ%i)âÐÀ×òü&\¡µ@) P1ݦI*cá MC ,éЗuȹaóŸGŠýOy\þ# q1I¹vûâ˵Ç^ k$æÅÚúkcá1áŸoüà]×—öm½‘[vÜʇßÞ -Qm,óÐ+g¸Í«±¡”&Ü}ÓJóÓ»oâéVÌCñ¶¼ý§è_çRÉwóÒlƒÇ¬anÚ³‡dËýá_R©-Ò]Ìa>ÅP} [TKYö§]z[-žX5H»?tM›ÝóàëB>¡ä?~ú N ‡žëê4cŸ(pür³‚ž±Þ‚"=PÄèÊ#Ò†Qdýp?NÑEêˆ#Ó/R2@ ´„ÿÆãƒïx7IœÐj5 üE¶zƒ´r=œ[X¥­&i„ãäÓ\ÇÄ5SÄIßÇNá×^~F³ã–Í•ˆ¾ÌëË'ùøG{èêʰ}k†A—¹¥€¡~X¡X"•Épêl…tšA•bÑ`q)¦§h3?ÓdüDƒrœþ=9üVH£Ó º¬˜å¶¢˜·H9àÇŠ /Æí%Å|¾M·rQ;M¶íìbÓ¦ª­ „!î›ÃŒ]Ü|‹;¯éæúë2|ú›/1ÿ"­<²¿B±’Š T¹“ Rå˜f[œ_°Ûµ ô\ˆ¹ÑÂrÂ(F"ÑZ ˆµ§f—9Ý žÉ—+3Ô33µ –—Â-fHu{8y;cb4 L¿BüõßfpG–u·Þ‚R9³‹Åªd›f4´‰’˜\c…™EG!®›¢·±ÀŽ¥ãœÞ~=$ÓJø~ƒo?7¹äúeãŸe€ûOÈ$ø.÷¯=^^tûR7ž‹@# ºÿ±çë?ñÞw—Ƨ^!6yþ…“|éëÏ‘Êäû\vîøà¸4ÚŠÝŽ`ô¹#ø¦àÌ+/Ó½é- HÁê±C¤ö]ÃÞ-Ãm®r»|‰9ÂRÂð¶}ÜWÉÑœ˜%>r”SË“L…]\TÙ¹¿Îþ±…שÁIò뿹•c'sX>+µ½–M~!¦gÔ"7jãÔžá‘í-’ZWÆÌç03.2ãawy4kóœ|ŠƒjžMC»¸óŽÈ®;ñ¬ÕjI´nš¤mAwVÒ]Úϱ™çÑÉ Ë'(å#üšft´ÎÈŽ!„©Ùµw7ýeM±”%‰ ipÕmWĵù6ä!B31Õ¦ÕŠ›Y!Ÿ\k¥I¥çl´Óœœ®°X‹°³#2x2dïdLÿ™9^9TeºßäÌx@9ññn㥱%ŽŒù¤Ò&I#¦â¬c+DÝ&;ä°wWmßGE’ú’ÅØË‹4SÜy[™8 ¹q$ͩóz¾ÉÎk×1Ý^Ä“)ld6¡¹`М‹Ù¸Áfz1$¨t€’>A4#dÎÀð$º!´B ¡}:déD‹±™:/‰˜1Ñâl»FÐVHm€0Žƒ›Mael Wb:i@®+ÃÀæœ|å¬Ïý.lÑl·yùä(o»b;Íù%îúÉß W™Âª¶˜¨Ì3œ_eFôÌ=Ç5½1¹uVEš¦°Í6¿º¤.U“ÿ®ñ/rÇþ. qñ‹ø®ÿ•W;+×âr£á1ç™Bq÷ú¯ýÕŸbg›?±ÄøT¶+º‰•à+_ZàÎ}¾ù7±éÿÆ_ô–©´[ÈÞG?û&½HßæõÌ¿r”öíoCžüo=þE’ùEæè£of‰ÏÔv2ø¾Ù8²…z¹‡]¿ÿk<9|5×ï©óŸ>¼ø:58I>ù[#Œ¾TÄ• }º*’}£&ö>…¾nìtYpÉuq{ ˜]yŒbÛs0 ÉØÙ—xbòqj^Œëá$Q’cŽØXàÄXëv¿™@M0R¾…Jí,µö[Šï¢±¥w/IóRë?€cYTò ¼÷®mT[ ĺÉrë0~»†Ö&n:E˜4¨,¯ ãÒéØÍås‹Ÿv¢©¶#&–›èñ£œ8Ven¡ÍÄlJ&Ké*¹n—æ²Ï+Š~7¦ð¿}Œ?ü­¿â†ý Ûow¸vC'ç0¹sr¢M¡W1ìXž…ŠÚônÎqv¬Å\¥Æä´‹—I§=®ÜUäùÔ,g§W2=vÞ²—¾ñ _xŽ3c`¦^ÂÀpšñƒmŒô®·*1çLÛ ˜¡%1µBµ4IF/+¤)ЖI},bì•y¼Ùˆ'Ÿ3Yƒºs|q)B;HËÁ´m„k"m "B)MÆÄaHV´É$ ú×­#ÕÓÍ>ÏȦaÚ ‹Œ>4ÍÏâ<öõOQN)¦—Û\ÓSbÝú~6W šlÚ~«/¿@SK<[òÕo}©ÎE–|'@\ö\ýÃZ\ξûŒK·k÷_š5\¤3Ú]Gî{ê?ß67wŒ„| G²~«ÍÊBÈU7õ1¼Ýa÷s£L½Éõˆùc÷ü­J Õ ž~_ûŒÝÿ0ïںȄ0˜sû¸Óçöÿ§<Í@ÑG, •yê¿Å›¢ûøå}ËÈ×i+ñŸ~k„“ǺIY&®å‘2<¶UÓô×]Ì%ì|#åáóäºò8™fÚÃ0LtФ´˜œ{‘žt“õ®$Ó’îU,ÇgÀ;‹/bNŸ;‹—ó9rdŠjýKìYG¥ñž;‡P2¤?³$3S=L-i¢uÌ©É9œŒ‰ifðœ!R^ˆŠ>ü OÞ3ÁÿÜlÏ%jvÞ·sS-ê­+ã07ã³4糘ˆ4Œ¯®²®Kb§ Væ‚Íïë7‚¥_ÿ}öÞ¼V0ÊÈؼ0}Žýf/Wmñ¨®ú‹Â Üá0wÚbál»&q6X¤R>×_ÕÇßÞýû®! z7Àc/ùl»Ãä¥ñ&+1;·ylzSŒ0Ò;Þd“Ê åðÒÝ‚{ fO7X9ï ½¢JÆP WÛèá FÁ!˜Œøú+3 ™w'ufz`Û¾uL?x!(Ó²Ž R ðI´Eœè@GÒVHÒ–šÕ—ORŸfy÷ý=y¢•/¾x‰§ž#ìÉQÌf8rôO –ÏÖ­Y=y† •p<4¹mßVú{½:ß®ðv)@p¹ûÿUÀárq9À€ok®¹t¢ór’t íïŸ}ÿ‡ÞÞ|Ë{ÒÖ¢éD‰É‰ƒçxáÉÍû<†r>SíWú"GÕ€¢ÐÈž.¤åQ››ÆËfØÒí‚eÓ“<ÐN39ò#ŒáPºj?µ $ëÈ0ä&÷I~ùÊo½.À†‚_ÿë99V"eÙS²™0”÷IÔ’GÊÍprn™-;»)åCŠ—þêõLœ:‡!Jåƒ;ê¼ãçzøò7¦ñ½Ej3&VZaZi^¼·Âu´Y<Ó >k³n{gí®¬0bgq,Ü@°t¬E]øœ®5™‘Šç:î&“åcUî¿ç±Ž0„aÏlÃÓQàátªF ‰V!“«éÞu,¡2Ñœ‚(&mKÂ¥zÖq|tLÐI1³°DÊËPY˜¤¶’!Uê¦ÛÔ$HFOÍ×.:×.¯]æðÏŒËMv^Vé:IT8¿P;Uès¯X¿…sÓ3|æÏV¹ýönÞñÁ:S³mâ@3µÐ"[Op¬è~Z«u„ÄQÐy¢l–#ùawÝJn¾NÛkÓ³åV¤kÇNºÃÁÅg¹¶TçÇ¿òºC¬L>ùk}¼t0M6'H›&á7_ P,Ïæ '±l\ÇÁN»ä<S€š;ÍcÇ¿ÄñÕWˆl‰[¬²uWÄÆ[û‘å25Û¦]YXŽ]dÏ“3Çát3a°œ©¬HEw7>¨(X&§Å”Ž‘š_øiÞpk ;]fa¡IX/ñžn#j·X®Ìb[’VÒ ]P´›3ç)ÁÔ–%ñrW\_äð‹MÎŽ5H•L,7ƶ„c ¬˜D\O4H—`uÎÀ÷cZ+>Ø&“a@0Þf˶UöÛ[5ݦäå{‰QN7ñÛ ¿.y÷B¦&ÛˆÁ„ßý/’‚?VÀH+n¹a˜ÖKÐß½ÄK‡ër9ÒR¬Zì¸Õàðó5ü‹í7[ĺS­˜IB[l‚—¥Ù 87˜&íµ($i‚8 š„@ é L'ÁHL)LG`e†+f‚­„ŒØ2ÐCöÎ=yå‰iÕ}z ÞsÇ~ª±bnb ו ôÙdâ,sõU¶lïÁŠR˜Žf±ÞÂÊz¬74‹çÎ1³X©ñí¾˜—\ ^Op€ïTœR\f[DãG9úî+†®ºïø!žzaÛßnÑŠ–ˆV"ZukÀàåù6»óS¬·ç9]7ÐK«l½ªDv¸›ÒÒqÎ…=¸×ÜÅò¹9r]¶Œ ¼ð8Ý•q6f·rÏ#sßϜ蔣¾Ç%’¿=õ#Œ|™nébš.Ý^žB6O)•!㦱\C)<Û —q±ŸÚÄS¼pônN[g©ª±!É5ÖF‹zÿ^ÎÆWR›îcšt»ˆNÓ/hÆÑì~‹ÉðFP¾¤ÜŸgz¶Æ±£ó5“‰•Uø³3+ÉuÃM7)rÝà×ÒÜrã~"Ý`ltœ8 yäž“{YQ›ƒþ~‹®MðÖ_„‘«»¨®Ä´!]}Óc!µF›+¯ï¢Vo³R©ãu@‘62´£AÛ„¦!iµB’À!B'Ô–¥Yi+B_ * Q“¨‚€LŒGè.ÅFg”~y9ÃRèsø¥Üؤ<ôä96uñ«p€»»9{¢E~»‡ßlÉ¥ ð뚥ӂž2äFÚ¬N[´ˆy.lr8ô ˆÝYL•*ˆr£iZX+ VÌ´@fÀr;fçqq P±D˜‚z½ÁÁÇðãïÙÏÔT•}Y´“c¹ÐÝ•Gmîca%¤gÝf„Zf£L #i#Ý<¯<ô G|‚=7ÜJ_Æ¥·'½Ê·ÿ— ¸ ^/p¸”{¸ .Õ†ˆ>ûùg޽çCïIö]µÑh«U–[Äbˆ-žRhÞuË[0ò W½xríÏ‘L|•FBÞ{íKÚ眼oó•®û¹wÜbɸ…Å¿ü ÝZ Ü aÀ}Ç*Ž‘\þU¿†%‚ß||Na®yDzɥsdsY¼liI,i%OÒ?Êèò^iã`ë…Œ¤+j lG¸}´¢¾°SåñR }ÅDä ë3„ 111DZ²úÒ2ûöôpýõ}؆ËÌL•Gï;Z6¸âê,Wß´žî!Í`ÿuÔZ¬®Npìð"Ï?|š£ jËšTNSì½!ëdlJ@ÏF8v1“å•*¶H ´1#ƒ®Tfŧ²à‡>Ù.¿¡ñr~Õ@;´"üZ§<¬&T—Ý›3ØyÁÔ¬ÏSÔpÓ’ì€A¾7ŠšxF†ÕeÁ×þ~ŽLa‡i,a2;ßä±D®+hJæ—–‘މ@S´X<¥°´Éìt€çºhSóèg[¿ZK|¡iŠ¥’Åe8¿hµt§ ذ^—Óc’ê»(03 ÛÓ”CDŠ(Lˆ]¥ÁJKˆ-Õàôhz3¡«ÜÃúBžboSh*~†Ñù1J°~Ë5TWWɤ2ÔšM¼l†Ù‡µnÏž">0ÊK‡'xõK÷RgíïšA|ÏÁᇭK¸.Î.‡py)¨/-ãë‡3›» ;™^=Çÿ}ßiÚ+š|^â¤àßuÅýéO2×þÊv™½=ýœüÚ_³$æX™_á&/fƒÏÞ}Š\zˆvë ¥³gH®Úêî¦[àÆÞéïõ[B¤$ÿõ¹^N/—¹¾ÏÅu=r…08)ÃqH[6]ÂÆ^>ËË'ŸàTs’á‘T˜¶ ¦ àev¾Dª´7[B›=œ[úêàF¨FBÿ¦ oý‘~¢vD`ú`4h¶!ŒáÌ™Ef¦—q͛޼ž‘Rv‚~Š¥uØ¢Ìfôô óçjÔ¤6¹öM1½Ãšb¤°‹m[öS­P™ 1 a3–.K‹1®­©­¶ CEÐŽèHSJ,æfÛ´* ù!±$Ž| Í儨aá×üåÎ7rØNÐ1Ž&U–XÂ$öcÂv‘ÅÒÙ&ùÐè¤Í FbtNXÇA’å†Ã†a›|ÉfAÖIê‚ÅÕ„© åu6Aäcá‘ϦXœh’q 4FiM"tç,Ó …F«Îr6,p²n7¤ [†TQc»Óìü•ÂX`Æ¥!p2õÉ6“gg)•²X©…¬Mº”åÜÂ"e/K}¥Á@¾‹BÚF‡!=¥"AÛGù-ºûzè[Wfl|­ ÙlÏ.//Wxõ ÷bŽï"(¿/¶k—kq±çÚ¶"¯}ã¾£o}gi³”’Z£Á¦á A9À6 —…¿þÅO3É‘ÙSÄã¸êúk(nÜÀs‘Oê«ãöÒeoTËœK*g%°ˆ‚,Ó““Œ\äøÑˆ‘=šþõOK,K00\b]‘î^iXr3•å!ÚT'3?á99v]™â·ÎæÐ¬Ä ´›‚vÈj¥É虃,Uæ¸y–æÚgÃëËœ>5Ky£‹ŒA–!ˆIu¡Í¾]yüͶk»˜ze…úhÀ´ý„r¿G3LpÉÿrýnŽÏW[\Á ?dáu‡rõ—õ¥€^•ÅV.ž%q¢„BÆa) ˜©2Ø_b÷î œãª7¤9|ªInkÂéGcU‰UŽŽƒ&E«0q:ÄIÙD*ê|hbmÁêW/Åù `–%ðÊ^¯Aa“¤8 Å’Eʘ†D I”Æ5‘RhÀÃä]‹ß'ˆ"Žžœæ†+Ó̬;}ˆn½š#O±ûÚMx=›]‹Z«…l50œ42›bbzShß'jûÌŒã; /õÀ½”oxm«ÿqiÖp©å€xø¾æán‰ÐI§°,‹þ>—\6C£°¡¼ƒU×fìþûÂg¨Î4¸ñž¯óÀŸ~ S… oz;ûÂÓ¼oC§ŽÎpu"Øh˜­Ô˜™mòAñ{ ½û{+ %’?>¼—³­** !1H§Ó`”]!{žçÎÞË©æ4–'ˆ …t¡˜“³`y#%0Òš|·¢«+"S´²&©¾JE›¶“ÃO HŠØÂÆs³ì¿Í ·M³ºèòè>…‚͵7n!›µ |딨©yÒ©4f §Â° Ò–ÉÀÖ,iGjÍyFO?ʉsg ƧT§EzY t“Ÿú©ÍX–Åât ­aÑ©ã¦$å¢K»Ú¢²’ΘŒlí¨>· ZÂôÑ:AR¶‰cÅ”×§qRÙ¸-nž¡a¬^æ}»‡¶íÂL•í4«­„+·Mí*¬FB-0|Ÿ±©%®º%àt©·W(¦Ë¼PŸ¤Õ°Ñ} HLœA…íZ,/)ˆ®¬Àqñlj“°®§Œišç‰4 qZwZ¦]Ï$=hPÚf“„Ò:A1o³%Ž4ÐB±Ö8J R`K‰ oZôïÝÆß|ÑE›’c‹ o؛ŠSÓól¸ng¦ÙÕ×"¨HÇ`u¹B¾\âÀ㇘©h2Iui‰$ ©®.åÛ3ñµŸ´rqY±—×:.ê¸x„ûbÉ8‡ŽðKÈ9 ¾ð…/üÛÝ»wï½øï™¦Ioo/óóóDQÔÕú‚€KEDQD†tÚí6ív›V«Å­}ǵ}¾‡tªŸå=L6·]Ð]èêꢯ¯v»Mض}A‹¡cBcbÆ=†5‘–‹.ŽËÝ. ‹E¦¦¦ˆ¢è5=FÏófaaá56ééé¡T*]6y-Ãó<Ö¯_O¥Raqqñ5ƒ)‹ôöö299ù/>žf³Ù¸é¦›þ½RªBGä¥JGä¥IGäŧ“•¯5^ ­µ~]À.Äŋͮ)C¥è€CÈ…›o¾yÓ#<ò+æÚÆí|\ªôt©²Óš€Ë(´Z-šÍ&Fƒf³ÉUÎ1’yú{qèÄÚäžéŸaQíý–µë—j1 Ó4‘R^ˆ*0üÿñÿ½xâ‰'^|ÃÞðt€a•WÁ¡Í·ƒÃÅ PÀáûa[±—ÛV|‡ÃÖ“O>9ûË¿úïžÙ¶é&ÓçÕ›BÖ­Ëãz6–cЬšŒMqó7³usµÆ‘Ñ^š§]oÒÔš¶RÔ jµµz›+úç;0ôG”|ö…7qÿ™&./ÒT;PÃdצ^Þpà ã‰Ãý÷û ŸA«¥5^*E#ÉbhIÌ /¿D¢4ÒX Ñá•Ö$ê¦ilC’µ5Å”Àµ Lúo}I&ÍC|™0Lp]I©d²y0cšÒÁ2\Â8ê(j)V AÑløH[ÒS.á¥]âÈG˜qàûMRV­#ÜÂM<üÈ3ÌÍN_ø\ ”!;¬½>Ïoh…J­QZ]8Œ•&‰Â0!I:â‰'Žðª¯íZvpqòÿ+ ɵIÍo#$é ÿ'üÇ÷Ýù®û …¬›èÕ•##yüFŽ™™€é©•SÛðÉ¿w/qð q«NT­×MêAB%jD1ÕºO¥Byõ5?Ø8‘üŽ[xúhz°Ê‘åˆÑjD¤Áëäábza'§Wyð«Ï“v Ò¶É|¥…—òh·}Þ­-úÂcÓVôj‡ƒ§[“½°‚6 •Ñ]ihv¬ÞeÆEÛgjŽK'é— RÇsóužxß;¸îÙß%½ç,éTDþ©ob\ý›T¾õ÷µÿ’Zo‘÷o~+ÍÖ×÷<Âcë>À·®ßÀ¾x’—>r OjÌÏ}˜}K<»-䉇k|ļ´ý¡Ÿ°¼0‰e J놘ãô鈱¢Íæ-åm t‚8PqÏØNÔ'qŠD‘$Œ Q‚¸U#²nF=y?]æ Ú¯€,4'άàÊ–ïóä‘3˜Òì÷µ4¦!ˆ•¦ÀD­ƒ¥½MÑ —,Ò©­fg¦×lá‰G?Mºh‡®¼ƒô‹ä<‡¡Þ+qó8:B‡-H@%1ž“. xÙZ¬"hCТ¶:ÃJu•´›£Ñ¬’®.ñ;ÿ×ïw> !PâD‘h²sŠ^6Ô ƒ:Ÿ‡QDE‰"ðCü " Žu¬”:Ê«ÀpaV‰^¿RæZ\Fÿ»õ:|‡7g³,//´+–JwéHc;H‡Z]Ð?p­ú±W5!£ˆ ðiW}ü¹aœ¢ÚŽñ-ð㎓Š;.P¯eĉäkOìáÌdŽbË!mȘPi`ägbþòk/:UÒ%‡°æSJ Òn€Àèï?á¡ï} ž~~ú¨–:z™³¡F­Ë!çʑȥ%ÄP¤†!XF‹yžr×¢³ÐžTt›!·ú:‡J;y¾ÝÅM«ÏSXž…Æ§ÙØ7ÁŸNóåEþýÍ{8í§äÿg÷}žöÉ·±ã•yzGá«sc,§nã'—‡YÿâƒüïwüD»í/’éD·³ÄÑ*–çÒð-NœkqmJ3=“ïñ1 £sBHT1†ã Ä2l ;¥$:&Ï8 CTfˆ¤¹Œ›ò8zà$Õê<•Z‹Pk\SÒŠ;]ˆaØi:’R+Ž4yWã` ƒ8Ó$J±u¸È®)º šuM>“ÇLi”¬³ˆ¥Ž›¸aƒN0¥AâÄ¡Ce2aüØi¢T‹Ár‘\IÖ.’éÎR¯û,.Tu¥Ã‘¡AÄ*!QhÝ1iºIçõ›H²(¥;ªI(Å!¥¨óªxì@\\ ¼˜”\;/Œ>¼Þ™|göpqqqÅbÍ´×ìg=ûж‘«nv;§¢…Ü0×칑ÕjƒÉ‰ N:È•»®&ˆ‚fŒkd©KhF!x’8„0ìH»‡±d¬R`k×k“=ÄÊàîû˜›/1‰J𸠤‚6 áÓ}™Íû÷ “ÕÇ&°[¬Ê3=±Â«´ŒBºYL¡î”àóŸÅîëGÏTOƸód¢!%$ÕsϭЇ0-11.”ã:¿Ûrãܽý+ÌÖûù€|/ŸÖóW›«ì:±Ä;–Ÿ§Û{'ÆËKtÍÿ9?ð¥ëPÓ³œüA‹ °B{Ëôß®`Û±ˆñL/ŸèyÖUW#OOR8{€ÒÞ^™‚…¾u$¾‰!z{%vÎfÏ•1‘£Y©TE)Ÿ'—É`{Vjð€$9‡[Ì/šd²eZÀÊÂ<®·|y¢q–S皟lrÓö¹´ÁèLƒ0ø¼HJ=PDúüIÚÔlM)%qLcÙ!IŒÖŠf³Éá—kô.HnÃFò¥:¬áH›ééã4 ¤Ry ;‹Õ0 A{¾D¤‡It•…®Ò–h®Vèí-`’¦¨Sô¦û‰ƒ0ŠÏWGðdgXKs¾`z>{PŠ$8IHbEÇĉ" #’„N¿„Ö±Rê^†‹·ßÁ/ðí™Ã…ø~‡µX…5¥¨5€XË,.ˆ0k'޽o×ÞÒû·mÛÈ`ÿN'‹Šê4ªU¼”GwˆI¿Ù¦DYAbkA;R„‘&Nྒྷë¹}Ó$–ñ¯Û6+ƒo¼ùJWFdM» -I”OJ&ôº I:ÃÊè)*3$í:Âßka‰ÎÛ±¦MÔ€K¬~þÏQB¢ Yœ33ˆk®F>–ˆŽb)$j¨ˆ´%ñêrh#ÒrÑa¤­çÿõ¤<~òÉ"ö•Ë<{âOÙߵ³{ÒÌæêh>p.àÜßâ•ý<_¾áþÛ—ÿ”ß\àg·þ6ÆÔ …ÃOò˜]ácî“\glÆ=ÁÍ­"n½Ÿs™¿¤k㈛x¹,ZçüeòæoºÂ$›QWà·æîJ1_ó@.Ðß;€4„ÔØj’Ðԛ㸩²å7Å- Æbe¹Šmõàd¸jw?˜§\ÞBwÞÅǘœo1[Wh!‰ݱµ´­@P´5J ¢HQH9$Z`HÑéÁ’“£ ¼ŒE£0?^Ák ,Çæ\µI­¢ƒEJ½!w•³K‹4BØØ·¥ÅçÉ¥š¬ÎÕѦCw©LPŒ0Ìfª„Š«KmŒ‚ 2y¾çA«¤S.Eœ'Øq´F²K´ðÙÑË‹&Îg5¢O+Å<¯fÛ—r—‡ïˆ×þ‘nÉ5­‡5]ɵ­Åš¸ýÔ#ž¼úúyC¤«å0Zàà‹ÇYYñÉåÓ$Iš˜0„v¤ˆ…F™`»Š0è(÷ I’š.Ÿ^Ç]Ûÿõ:$cepïÑ›Xlô’R–%È:ºCBZŠ´' ÷d92Û KWÉõ&ÌT:©Ûú]ž›é¸0)%è.KXX¡ùåσR>öoAz˜Í g *³Èt †ƒö\tÖCÕÛˆ”DÇ r^ë0h­AkD^ ¦#>Õ¿ŽÙÏñ“lþ´Ã†W³Ín>ƒù¶Ÿ![¤ï•oö‡»ŽóÊ(7. pÆÝÄKïyêaûèØz–¨f²8}sÄÀΤ@u²˜0j’Ô'qmƒ­1†)6 4©Õ=ÊÅ3xÙ $íÇÑq‰Y…zLq@‚“Æ0†± ),ˆÀO44CRͯ8ÌotA'Üÿü›ºl¶ `ÛóèsUfk1)«“†·“8JXÅfs*Ƴ5BJ i`Ë•H !h5‹Sš ½y=ëó’9Ïú"×ïÞÅî]½ÔÛI163ÏÄÙÝÝýfS´hÔB´Ì`¥RÂÑi¦–æÈ÷xÒ¥$òÔC?ˆR ‰Ô¥"4-Êÿ’t€!މ…æÆ7uQ.÷SÊI †xæ™)T§MÓ£ä>Îós\>sønsßW„äűöÂ.uö¾˜wX+uZ€¥”²ž|ðø~þ?òóåò ÅO16zˆÕ•&ét˲YªÅœYÔä³ÇhÃÂJí# XCE„©Ñ­„¸ñ­§z¹cdCþËË»‰2¸÷Ô-,T˸:Æ3,´i`F V»IF Ò†¦å%¼¼ê“ÊCÐ̪˜‘4¨š mêQ#Š­ò4ΞÁ;FaÇÆ`?úS¿Oô³Äžzí$ˆfBmf–‰®·3„k’x£Ø*ö#ÛSpQ Tõ†ˆ·Ð‹#|ì”üìÓû,'séßû%†û×S¹›b“ò_ý6™šRTâÊþåà£ìîÝ÷•ã Ìd2»…Gå~Øz˜ç‡þ#{y†!1Œ4IØ¢½t Õ¬5bDSP9,èÙbâgr¥¤·Ž•ê<Ý9‹úô"‹ËCƒŒÁ«‘éVH´ewV†pñㄹù%B-é.—¹úŽ÷qý“<þìQî}æ(›z ¿ä`™!£ še?a݆ü›¼Ÿ­#D$|éã¿„m™ØRu*=Rk0¤MyTÃ4›‡ú:Ž]R2Uµ˜œ¥ß¬â˜Š½[v²ëªñCŸÿñÀSÄ~@Æ’ bÌ0"ñ[ “;"ÊXœ[âÅs3 l†8Ž;%éD E‚”¹9•tDm¥H´:_¥œ:ÒD«„k÷máäñE¥Ñ‰"Šõ#ZSáU³šËeßuKq±ÔÂëßEÝúâÌáR€ð¹¨'âÅçž~ð›O}é×ÿÏßüÐÈÈ^¦Çÿ€É‰Ç ÃÛ¶Y©†œ™j0Ø›"“1±¥DÍ7q—[Ô|o ð Â6,¿RâÍ{–ÿEÇ”hƒ{Gocq¥Œ«v,pSq”A=ŠQZà p$­ú KqL·N˜j<%ÈÒ!˜ôù_ÇOµ‰÷ÇÄ®Iæ®ýpê4Q}sê9Ô¹gѹ4¢± QB'T€|â$Æ´lŒ\ŠDÚH·þ¹5º-ààrhy†_Ê>F3ÒTz=¼­;X¦9²ÌmµSôúïèÞ7±þö¬³]ܰhc^Ù¢öÒŸávÿo½Ynј‰ù…¿7y_W‹ûÖLc^§©Åj×WÐQ ¾`ùœæ¡ÃÛÏhöÝ.ð¥ƒÔ .Ñ^ZÁs`ýNÛºãv”é"ݽ“¤]ÇAa’¨½B'CàHºÊ{xã[†1ò=|ùoîæM#yGÐ `ýö|üÞO*“A-L"óÝl½z;+gÏ(…’(Ò(×^±‘MÙ ç9`yáªXa».*NðdŒã:¤ÊCCÄ!±E‚¢K(Ò^Š©Å*AqÎãŠwþ0¡ïsð‘g8rxŠÈX"Š5R‚¡5–#‰“ ¢X¡´BkP̘`b¬J¡$HÍÆM%`¥u-ŠÔüš5øtÀáâjÅ?6º}!^wp¸(ô%×/GL^lÀ{Ákóóõ?žß¾ëʾÛß|Ç›kÕ:ƒƒƒ,/-¡µbi±ÉÉê­„þ® ÝI—‡Ûíqr´ÉŒŸ)›¤•CRpøãG6¢„Ë]Wþó¶±2yàìí,/÷áù Ž2°ã„(lQS‚v”Ðö«±&öÚ\Y<7Úf{Öâç‡ÇW|HLÂLSáTBÕYõV@S…\ñ¿¾¹yÍ?û¶•C¥ª+ Þø"ζ4,‚ÑÊAb#4òÆÝ„I óK«ÈìœBt8‡õÁnáÎŽýS’tQ3qøw©U+¼½ø&b=M3_áøâ1®¿ÂÅ÷¦0½ëa âñÚ½X¯ü o±¶pJoæ›7¼ƒkß9Àoj3mÞÍÅ„ª0s î~K£ÏИ™biZ°h–*Á’Æ•ЍŸ™æþ§$ýEÁͷĤ%Ь¬.ÀI]A«Ùq_)rŽ ÚÄO,&¦¦éí]‡L“vmn»ë}Œ½2FW¾Eµ6Ï5;\>ü+? Aü&õ…–NžFšJ˜Ä±"R’$Ö,­68;[¡˜Ë2\6Y×[fjvŠ'·1g'ص±Œé¼HO¦Í© Ó³é·S(/‹ŠCn‰´ö©øpè¹ÓD¾OyÓÕ\[ÜJ¾§›V;Â4%[¶çظ)ÃË*T*Jk¤!‰ã„󢌨¤ã£mž|t–b¡„J4q¬ïÓš¯68]LH^LF®9Ì}W¾¾OÀáÈÖ¶1—÷Ù\Ë ÌOþâ'¾ùà]·–ËëÊWú­¾ßÄ4L_±²Ü&WÈâ•-d5äTEwO-Ò˜kQ 8ò‚O0»DT€~ÕáC“ÛøÄí£d½z‰³æxtâÍÔ*ÜœÐÀ‰Õ¶Æ+7©× ªmŬo²ÎÑt§4?ö–,êÄ*?˜ÙWPl?æ/¢üá©4»–W8çkêÄJ¨§·†7È&ÉR…TÿýO |sUtËEK!²î£WÛX½)’BèF‰…kª¹ÝÓs|Îþ·ýíTo]G’†ƒDŽÕá6’i’ ÆìKß@F) 6ƒm¬Û#Ó R.µ‰ˆÚ¨¬$ôÚšX4Î&¤‡zéݼÇì”cÍ,ÄðÐÁCüÄ;ßMwC»ÅJ¥‚œþ>âê Ç_xŽ ^!ÉæÈçËØ­UNß÷ƒ;¯ÆÊH¤ÍSŸûÚJ£¤Ä:­6U?¤Û”twhv¹ï›Ï³kÇ:„1Êìü•vÈÛ®Þľý¶„Ò@?–#¹"üöí¡œµ¹éª8"ft|‘C§—yû[¯aÿw¡¥||­xâž#x)ˆ¢„Õj\1å$Ä*!r@Dô”]ægÚ´[­5ó³5þöKmvïh F£H?Á«þ—ƒÃÅeÌK³†µóí;ÔÛ¾/Àᢸ4{XËàU€¸œa¯ßÿøö\³»´qÓ†Á(òIgRd i×w±i¨D:cn{Ìù³ü?íy´]W}ß?{ï3Þù̓¦'Kžd[–å l° fqH„6MVX4i`%iš´¡I× Zš²Ò•´M¡i © i 0 6àIx–dM–d=é=½y¸Ó÷Þýã¾g_=¿'™Ûè·ÖYgxçÞwî=gîoÿöï÷Ý£›<&æ!Š2Ž3¸E‹ß;JÛ¦ôyËì/ò w_Ç?{ã3ìÞÖÞð‚µŽøüc=lÙýÌ'R‹œÜjˆK†LÁB&hd!ÓÍgš-¤¿÷åqv¼v‘ƒì \¹áê<ÿå› ¼yW‰ß½µÉ¯?"ùæþˆeE!‰ÆÊ2AC‘Ëýø4µ_üúwÞŒð*Q†ØB ò”lâ Nu i@lß"LÊóÉPþêŽ7òSÃTŽþǃ%ê“.¿¢ÞMñË_á¹·¡æ×¸òX•«ÒÓ›_á¿8Æm›FQÆm{îbìÉSü£þ«øù?×øw\òÞ¯±áš?õ¯ÐoüÊwˆ›Ó„…€þ]¯£1ñ$ªØ¢°SPKsZ‰EY…IRG00lø‘¯,ñY·C› %Z[’XÓj¶Áƒ'Ÿ=οù÷ÿ–v ±k÷møžCÒj139ÎÁ£‡ÉÛslê'79ÖH·ÌáOòÔS*Ħ-”tQŽDçš$³Xa)ùÖ{êÞÿƒ£ýœm¤S)c;ªlÚÒÃÂÜ"Ij˜>›±Ô´óÆò  ÉúpX;J±aVd·½là°fäÎõV'¾‘t>ìZBÒX+ô"ª#ý/³}×%ôm»†\kR·„rÚMhÖÊUjER©ùx<ýØ,³3ž§ˆ£ ¡`a±ÁÂÃM“eö“IlNÒ©´Ü¨Kq¾QŠ—¿çëzp®± ‡ ˆz=9ÚßWø¤ç©Ÿ.=ÇHËd}‘á+/%Ë3|WrçköPZ9¾'¨/urÕ}Ï'Š ,j=±»?$ÖÇ—Ì& %bi(úïÇÞŠ3=KúÀCä÷ÝÛÓ‹¬‘D)ÞLú•~Ĉƒp°é1dÞît(º¢<­c÷²íæûi·–y°ÝK-9ÌÜXƒæ;ÙwßñDZ3^æOÞ§ø—÷òàØvâŽp—ž!üpçvíç)ȧ =ù}»}Þo‹ÜòšãKSŠ1a¹HœMà›Ùtç%8·g ŒOÒxö­© "$þ¨‡W H/Ä+V(”ñK¸~ ‰—‰Z“ij è‡+†{Yj,å–‰…ÆHrÉΡNÍ/3TrI³œÌ|?@ØNf¡#!Ê5•BˆC'ø(ÕÞ \ÏxúÐ?rYoñGþIvíÚA',ÔÛœ85I}¹I¬s4OLq'4$ÖRèÑ Å^›ÁqãFsbÿ4Ê™'Mr·‚5$q§š¶ÝÌØ<Òßãrèp 儌í(Q_n#•ÅXˆÛš41_4Æ>É `hsa¯áE`ØH)þe‡5¶^÷Îõº×«Ûbn¾½ïÛ<Üúà/ýø{ûªµ¢µåË·bl†rß ‚Lâ{®BZ\åf8XâÈàû’ÌÓ-C”\)ÃÎ/¢¥R‰—¬0ßZÀ9góŒñ,g qݨayV³#ÕTv»ü[ã#v†ÖQKÞÜû`D¿ Ihy΃m‹‹Há`¤%Ð?Ї3¶‰S¿÷—lÍ„£ÛàíoÄsôR]) ¶oíHÄô ÔBè/`K¢TBè9ÐS Ô9_°V%²}ö¾ÂÑvLÓÿ·}Žæ@‹Ê£‡øð'>Á¶·Â%;+ì=“;‚¥hŒz4Œ}ò ð×#mÚ·™ŸÈø…[gøõ¥¯òdÏ0[ÓêÏ"Þ‚W¬G $­ != ›‡©í¼œ¸1OÒœ"×Ëh›à{}8^ˆë•N€AÑjÍ’GmÒ´É-QR¢0ìpÙØ´“ˆ¨ÝÆJÉbs‰³Ë-&——é-úd¸Ô­CÁÑ,´RŒÍq¥ÄU'Õ(¥Q|G¡¤ƒ6ˆB¹‚×?L_Xå–ËúxÇÛ_ÇU{÷ ¥¤˜¥¤IBOÑ#é 1V¡­!Ës<ÏÇbÖtD\T§´ÞQ×uh²,7 #²Êv†¶pj|W ¤rYX‚åz„²‚ŒœF£Ù¹· :7ûŒá¯éÄZœ«Ñ°‘Nú]ŠìïLÏá|¶F ¦»áwÇVu|^‡YˆY‰)ßtÓM[>úѾ¯\.=_¼bÌ9K·îÃÚíÕ¿¯ŠÇ¬~_Ý: RJ …›7ofyy™f³yŽ0˪öÂùDZÖÓ_X{, C6oÞÌÙ³gi6›ß“ïÚq†††‚€ÉÉÉï¹`J©Tbdd„3gÎ|ÏßûÕ &#„`ttèåy~Áל»Î2n}Ó^>öÿÁAÍÕWÝÄ–Í—ñ‰»ïæõ¯½žæü<ß9|Œ7Ýv×^óF¾þ­¯°­o¯z ›GoFiºDžµ±6ÇskhÒŒ¦™™}†v”qÍ•ï¤\íáw>üR3²àøE?D:BÉÎÁ 1:Ãä yÚÄd 6«CÞ³Œ4ÉŸDzuì2ÞðÚ›Qéq”8…rªC?ÉÝö)&ÆOÑïù,êœT9ô>–f¦¹:t¸¬•SÐOH¥\…"#øB³Á®Ñ*Çæš,ÍRžS©ö ;Þ¼•›®®ñ{¾ˆ5–Ðwð=— ðð}?tq…ÝŽi.FcR˜¯|ó[_ø£ÿ¯q.V‡/c6ÃzC˜ç¼rà/î^tkO®ˆs!QJïyÏûn¿éÖ·½ÃS¨¾²'¡Vaj•õX3×ИÀ§Ùh"¤À!-ʱ†'@JK ޲8Êà:¾(”rp¸ŽÁ•–<Š —<Ž¨Ö ¡˜hx|ò KüÉÇÆ"Ð:Ãó<”Tdy†R‚4VÔ~2Ò4kð¼)ªå\×¥·Öƒ49KÍ{.á†]½Œö÷"´¤¶­Ì=û%¿D5¬ú^G ÏÈm¶R"lR`„@H‰ë;„…×SHÑ)–(rDçsÖ“ÄyF£ÙæŽ÷ÝÁ?yïõlÝ$ÙòÛcïæYÜü«H±¤}gäAî¸ázz]—k—¯¶()(×añ/ÄV¡ÐâÜTéîŒÈdè/xy$Ï—9Ùm¥0v ÇøØ;<93ιÁÇîщµC—ÝsÏž·,û|ö²†\°¬{Ý—¬9§;ÓRù½÷~ñ‰g<:þOùƒo¹ñ†›_—çÆuTF¥¨¨‹äyN}©Í|nHšJA¹â ³£,ÚRiÉsè+{ ZiŽÑP.yxÆ" ˆô[qÅ¥;¾ýëxïÛnº~÷^×q¤]ù%m. „Ñ R ÒĸWvtü²S6l-¨}¤’‹ƒE¢Q(G ¤‰ÀJRâÄ.ƒ=%vnéÇ îÁ¢;ÝWÒSóÑ+Bª=UEµä!„¦¿\"Šùå˜8ϘŸÙ|„ NS&mƒÞJ0ðQŽÃ lw´+´Ñ]ÂZ*'5–¶ë‰ÎŒY †Ì‚N’á&–ÐïÌ·`´èÌmS¤pQH‘pˆÒœ2Ylhy†eßPr-ÈŒ¢ ®ÞJ,†ü4ÒÖ÷Qu¡:hXZøcŒ…j(pfvs2ý:åS·q|â‹”‹o_¹­l½sÓSÌ2Y>€ˆp¤/W:”´Ùvý6=‰{—ûÃ"‹&Å9bùÊ#šßø‰M(3‰ÖãHwdD–.°2ß2E©V>Ç¥E° qA’Q*¹&ð kÚ sØa1A[B)â5Ã%ÎLçx=›‹~Y1.}ö‰„°ä£C tžsâÙ–çëø^Àòb›f;æŽ;¯ÁºÁòWï}äËûïŸÿ¶Öf-ºƒŽßMIöwx…À6ô à\@伨s€sݬnUëäð±ãéû~ù·þç7]ußo¾ÿ]?|Å•Ûv O1±ì°ïÄž•bÍ«¹yÕž Š5‹Ú"]ËBªHÓ„ýŠ^§ÉÐ@«s²8EZƒpjEf^`ì-³kû Õ²b¸7 ðr°ÐŠ ‰1H i*ˆ“œ8αRq6Ši¶ÒÜ¢„!Ë4=‚3§Ÿ!>Yš0ÑÔlÛº•TG|úä0¾_«Ñy Fão5ÊZÊRS)e•1(s Ù ÄÒ”v4‚<‡\aRÌx4;±QNžI)èµÈC:’¤8ƒJ RQ2[°èÌ× Å ô`hS¡ž-Q’Ff‰s˜b?aà‘Î|š›vÀ|«Ók´Zƒˆh¤IÙ$”AzGaWâRZoirõ;Ž“?è"vÏZÌ1Íò ¸r›åg切3ƒuN“§ó˜ô:MÑqçóÔ¬ÂXM€EøEl¥iÚQ3Ñî¤V‡U‹…RÑÓàª+B˜ÍHŸM½%¨ZŽº[pö×)–ÊD¢3T)¤¤·¯ÀÞ=W±mÛ&ŽŸš&‰¢ø¾‡öãSŸûú×ͨι0X/èø7.Ç~)öŠÃëöº=ˆµ.T7$6’¼Oø¾}ãûö<ýSï¸ã²_}ÿ»îÊeÿX,™•D­”…¶åðlÄXÕéL¤µ@@oA×3¤²Tm›™S $¾&k,Ò?؇#V†7Œ%mµÑBËßèÅu,qj‰Ú–,×4›)I’`¥dfiÑÞ iÒâÌÜŽŸ>ÂñÓÇ™]˜ÀšÐHá …£ý}›©öTh.-súTÀP^  ¹£]¬h+‘”1x$>WF1½ãSˆþÏNƪ1±;ƒéë£TéE(IÁ—ຠŠL)ФÌåŸy³=’%ØÖHÈ‘“åÕä¥ϓئ`>”m•G¡œÍxê$Nc Ý‹“ž!2†0_‘Ò_Lƒ A!t a=„RÑU coj2ø¶ˆù9‡òõ ¯/xòk £%Åþ™Œ¯üZ ë  äiŒ> z›/'–ÖrçÁ™Ö)n@šePge¾Å<§QŸãѬ“lUÛRÁVs¨wô3°4'u'é& ©Ô =”/Ç~ç¯ JeÒhc Y–qêô,§Oßë:yœGÍ7羜™|ºã ÝÉMku!»EcÏ †ïÆk€WÖQ¬^íbty¹Ä9I^ ‡n ºèSŸ½ï©O}ö¾#o{Û^UëÙºwph䊠X,»Â*C³Õ@é„@æ (¦·§@)Ò¨A¹$ pÈɲœúr‹0p(C¬©$B*¤PŠÄ¹èd@ÚŒ8n²ïñ¯2~ö$GN"Éʾ"ÉÛHeÀDTJe†Ë7Wneaa‰@%4EÀ`ï“ÓgyúÈA.»þJ¶Æ%\­:qÓYÇž©Ï‚É)8$Sóœíñ˜ë)r«rËÏÝÀ©ý‹\œeû¦ ¡¨qºmÉ[- źÂH‡FêqpVd”MG!zjV’!Ø¡-ºæF7*¶(Ú‰N¡ƒ·lˆÜi”vˆ‹Ic‘.EOà'S´DÀŒˆÈ»“Î ;é-FÈNyˆLJ¯ð·§\õ÷[,>Rv-á²ÇØRòhoðŽ=@,!mŒÖ‹dñqâØ&Ðntl[ÆrD6%0.`ûq Ú-r¶ Ú-²’"n4©Œ.t\I%(^S Ÿ“ddÄ‘$(:Ì'ClÛ¿"ïÙyJ-RJ]®ºOMÌÏ|¡ÑjLq. ’®ý Ð­ÑÐý¬ÿ­Á¯08À†€X›b½¶¯µÞÈE·²õ*|:7¿çžÏïžB„7_wãØM×î¹úÊK¶_±cÛȨÁ:†ë‚N.Cœ$ø®"ÃÎí2j‰ãIà9.Ž ÒóN"•Ì<ª}°åRAè Â0`zºAßt/‘´ÕÒæ’h™áÞÚñ½v‰Rà1;7Go¡Ž#«Ô—és4 ‰Âxrÿ£œYZB¥üW·L($qÞ¢µXˆë´tƒ4ÍÙT«1R«PëïãáÆÉÂÞѼArÑ2SäY<™ jA³!¨/ æ:ï›—]H GÍ& Ç[M¤ô‘.”˜LŽ[Ãä|̶™g§ÀZˆg$¨€%?a[êAº©ŸÃk:ÛqèÀŸÿ‹O=òWÇÉW=€îùX6Ú_ë)¼”nÄß ð …¼ð¡×©â\µµXÛ½X¯‹áñBBU´fßÜçN7ž;=>Ü«”r· TG«#}µj¹Rí­+=¿Ü[ ËÕbP*AÉS"tù!PÂÐìI©—ê<ýÔIü@ÐÓS¢V)âzq¼Ì`J%da±ÄÖ̓,/ø·ˆ&s‹mZ3“<Þh3?³Èñ™Ç©"›Ì™]˜£-2ú´¦Þja3À Ásy¬MÁ,A†íˆµ"Ðb%·LX°–9cÀñ°BÑ0”D8é¨[A»Ýæ©CsôŠqe¨Ôc–*Ðßï@РõP™›wg,œ¥}X°{¤À™ýmœBFKÔñ¤À‹-^· u1I£íéœÞrÖ©#Qò…ÛhõJå¤ÅH…;’S¹½Éô¨N6©§2Ž>—^íñÆ­’…hK´“)¢èI3fq^0;m˜·—´Z-lµ@4¾H£(¹4(q|aZÐ)¹ô¸?nóN×câ`”êbOsQ¶[gÎ&}÷ԛǵ­×ÎÌÔgò¼~tŠÙgææ9óíÍÏ‹ºÎñîgt½‰ï àež!ùRmLÊÕõڪ͵êQ«õ«…\ç¨[wsÖl;k^{ŽèÌšemYy÷5®½æ‹öò³µ d½€÷ÚnëF?B«|-(Ö[ò5ËFóM¼Hî þö`€W à‚€X еJRÝ l gÍùkÁ Öüîu÷õt_ãE{åØÚF¸^²Ý…±Öcí^¯…ÁFPX/¶ð=¼Šà/¼¸1®Õ~XO´¶»¡;¬×z ëy  ÒÀEÏá•dçóàÅ u-ÖBb#P¬=G¯yýzAöå0|¯À¯28¬ÚKô"6*äZëœkÏëœY ˆµ×²î¥ÿ >îEûþÙzc#ï¡;én=b=H¬ÀzÆõb ß7o¡Û^•p€ ½ˆÕõKE7{ ëu#.ä1\Á+Ó·—ÒÍx)ÇÎ7ñ}õºíU ‡Uû. Ñ}l=ñÚµðX/๑·p±;ñÊ· &»·× nŒµÇ/ä%|_½…n{ÕÃaÕ^$º·W÷_*.t¼è1¼úl£F»Q\à|À8_,áEP€ï?à«vH¬®7:v¡å|¯_ï^´Wž](@¹ž'±,6:½÷íìül°?ppXµu 7êî¿vÿ|0¸è1¼ºÍ®³}>Oâ|_ïo/¼ùßACý…C·Ç›è޾бÎY+öê±õñR¶×Áß™—°ž]„û€Gq¾íõö/tü¢½òm£ôÝB£sàeÔ /Âá¶,`ý?xöRàpÞs_N@è¶‹pø.í<°8ç´ïû…\´—«]°A½\a°ÖþÊäRÑ(»m¡IEND®B`‚variety-0.8.3/data/media/vrty-users.png000066400000000000000000002024111362063646600200620ustar00rootroot00000000000000‰PNG  IHDRÆdÁxsBIT|dˆ pHYs““FÜtEXtSoftwarewww.inkscape.org›î< IDATxœì½mŒ\éuç÷?çy¹÷ÖK7›dqHŠ£™¡(J&e[cJò‹ì cËpÛp⬳A`mˆ³ù’AÈË~È#ŒäS°±½‘µÊ–×ÞõÎZoÝÒpFœsD6YC›UÕ÷Þçåœ|¨ªîê&9I3ÒŒÍ3vUuõ­[ÿzîù=ÿsž{‹TOâI<‰'ñ$žÄ“˜¿wàI<‰'ñ$žÄ“x/Å0>‰'ñ$žÄ“xKñŒOâI<‰'ñ$žÄR<ã“xOâI<‰'±öû½ßMíyàQëˆö>údµÑÛŠ‡´}ñDÛ·ß®¶Ot}ûADôm‰õDÛ·;ãö[I¶ó´÷¯¶ï 0- ·«´>4¦/_¾üP¹¨÷}8{“Íÿy?ˆßM|ë$½eYÛKûù–Ûz¢ín¨.òÊ®$·—Çíã?¥¿«Úâ1“âe9¥+ð°¶³û6¿›Úî‡ß²o[ÛÝçÑÃ7ÞФ÷âþ-@¸ A`éø¸ûÜ3WÖßöìûÂ…³zyqg~cvìnâo;(—S¬.Í65Ð××ßž¶gÏž}¤V/ÍíË:´vø®h{ñ¢>Š–[µ}4gÚ^Ü÷Ô+sm/¼Å殸ð(mùàï(gùöaîÍ·qÀ•+WÞÖ¸½páÂ<×^Þ—k—^wöâ³×}iûžã£`xùòeZ@p€óѾqõ,½0æµþÍoùa>w\qø<€3ç×g/såaX.ƒòo $wËKáúR2ÙžÝùÝÍñM¹ÇløEàxÿøŽ6WqƒÁ`çþþ¤~ñâE]ˆºx¿ Ú.ßWÝ Âe‡ÃùíóÀy`|ó&½…´èŸÙY|kmbÇû\Û=0Ü)\\ÚyìÊú:-àwu8¤óçwÿôÅ›ã·Ì çŽ÷wÇíUàü\Û‡€yñÒìöÒÖÞïœYÅþ*Ün¾½ˆ3 ^6®nÐ xaçï¯õ¯½¥¶§Ç§w´ù<>3çÏ(®Ìîo\¸  X.@¹×VÒ{BÛï+ß /W‡ôÎïðÖõ9 l¾~t¦é‡Sn¿ñðÁðÔ‰¾¾2¿}4R`ŽÕk §ÇÇõó¸Š3çŠ+ÀÆ…ùAñ>‡ä[Áð"€+ëg6†„óÀÍ›3mFœÜÜÝÑs\ Ï.½Àk@¿ÚM.‡z‡t뀵µ™¶Çç‰ýÌàŒW°±”pv!9ÃäûEWàíÃp8ΟÇé¹¶£Ñˆ`2™ÐlÄ8Ôã‡Çmu{WÛ^oS]]àڵ㺠ËeP^ºxI—ùûIÛG:Ã%b®íÕ³C:Ïá6F#:à•£vÔÅkãú!mŸíW;9áÔfO7œY[Óñâ.0×åe\ÂÅKûV2¼´}”3œåÛ‹X¿re6ɸl\Ð ØàZµFÐ{}s'ßÞ~£OÏîÛþkž:1žmúe`òÌQ€Q=šçÚÓ:3&CÅ•™¶g/\P\¾üH~sÂ÷ŒoÄ]ž¥Î×^¼IkÕˆ6_?Jø0ÐcL£bJ'p#?%¨Üîàßkvn÷– ·¬Äj–\BWßÀXk»:>ÑW¼ Ü{fSÕkzúÜqýüÕ}|Ÿrç{¸(7íÀðìÆlàßµïun/Ý.îÏÆmYŽ´Ûíêk˜As–׎W\}’ï+¹Ï^¾|i·DºpÝg‡´ BtB§0ƒŸèÄ àÖtvüsÝîlïn•~Ï{—ªPÈ£ROt‡ú€Ô¯tËzíºž;Þ×…£Üã&÷M>ÞË€$ž5³IÜEà"°~å  Žõ¯pkÕuÚ|½Gýê6@·èRuwD8ø»GŨõ÷f“ºpp1‘» láЊâPZÓi;U×OéÑg&º±;9Ò[sg¹>ê 0ƒä²‹TÅ÷\Ûï)¿7»ÎpÃ~5aׯу»5u|C¥ëÓû-¶KàÍlðד°£iÕózÿ>Ðéψ6Mµ› }@/Žu;”º*éZÛÕqÝ×H.œäp ï@îânïå"®¬_¡ÁÙ ^Àµ›×hmt‹6¤þø¦[ô`m•ºõ„¦Í6m·=Âa nkjÃ,¹„ñ¢÷ïfھЪ¨t2žh§ìh¯ê)¬Œ¶ôAwUöïêÑÍC:šCr¸~FàÂÙ ½Œ÷6 ÷QqéÒÌ.;ÃóçÏãæÍ›´€áSOÍ@Ø4ktà@MMÓPÛö)ö[: „Ù¸Òöþì‡s^&Þ«Z¥–åXïW•–£®v»£= \[[Ók׎ë`°þ–€|¯è à±@\”I¯žRCŒFôÊÑ ÙqMvm@fÚ×-q•¨ié~éàA€ÚH[¡Gv¤}"­x§si±ê': S§ §Z*ã-•ªÐÜ-õÄh¨èWŠC=ÝXß…$Öß?€\"\Zr‡Àœ\¥›×®Ñ¹sçp«ªèàë¯S¿ªhT ©ë+ªÜˆÊ{%nLÎNi2.hm °ãí1;Ì&"ÝÞÌ„à>ú€^¿Õ˜ºÚƾ6­ãšNC­kí@Çu­÷žyF±¾Ž›£‘?}Zׇ縲ã"/-÷$¿Ç€üžq/â±þé¹mÑÆ.¯ÌaX¹šnWvÁ\O¸1yÉmGjMIÎ$€¶N„^w÷E'S•UˆÙj‘Ùiè8]«²„ìµMS­S¡ÇúQêXé4ŒôAÛÕ3G¦2ª×/·N_ÓGò=Ç¥žÁ£€xíæ1ZÝ¢Þуt{|ºk+4šv©ªÐ-7äªíÐv·¦&T´5ÝâPŠ1R‘ŠYò.#@Ji'Xku ÀZ§®ñ ŒáœÓ~êKé­}¡Õ´ÒÁ*d{ÜÕ•jªÓîŠ~4Y™:ª'oŽt|ü´ŸÇpýŒ^8{A/ãòC€ü~&šÇ9Äýîð!®­Q9qÛö©ßo)„.m» wbE©Š”b¤2•3MË™¦yI[cgcÖ6V­uÚ¸FmíÔ¹Z·½W7õ:ñSí…U)˱޿_é¡CAn÷ûÚÛœrÉE¾'¹¿8/—îô ÏéÅ›§©š;ÃeZ[25-q7ÒƒqÁ\Eâˆb‡¸LD1Ñ4eêu»ØNyÏgرF)´5ªÎª8«Úl«x«R;?ѕԑeP cA¿RlökkŠã×tQjÅ{Ë%Sà1@ì÷éøõŠîö^§CUE+EAyü w|I¥+(Õ›ì­'ok:d°_y@oÜ.ºÅñ=°ž˜1OšmŽ…§˜"QÛpòŽrΔr"TsMS&cÍÎû´Áj0F­‰ZJ)Î:íf•Ö:ígÈu«¦9šÒŒ·µ“Ïž²ßMÜ9%Z@Ñ„™ÆÁõ¹`ƒšÖj*³ØÆjª²T)IŒ=Y@r«ëjÓH·ÛÕÛ·oëÓO?-ä¥K—öhù=ä’¶—/.âÒ âæiÚèÌÑ ½±Ùc³ÖÐÈŽùH³Bì6 =š˜šñ¼][î™jn™SAä…(y"Ÿ‰’4y¦qifšªe­k 4A q2µV+I¢Ö¨Hi¬æn~îÈÝéDWW{’R#yTjêõÙé@–¹põ ¿pÜã/_¦K¸ˆõ33 Wét¿O£ëíy²“!¯VžÐsåÖ-kypÐQnW~‹W¥„ûȰ¥·¹¬Ã‘JThÛÙ¤¹(œ6¨‘ÅiSY’Zב±xµže+'µaUîå¨ã 5N¨*¤Ž+ŠI_¶ê ©7ÍIе“µ^u°äƽ4K¸;“æwÛ=¾«`$"ZlþòåK{zˆƒ«géZÿ&µwnp¿zŠÂÄsõÁšâØq*-çzÂÛIM×[–`X³Ú–5ö‘Y-sâLšˆ %2Ñ>ÔËšÔ kV2*Yˆp!ë…¢HEÈf© e.ºò ÉBUžF™†JŸé×·µ8ò´œ×áùõ}=ÈY¢¡ï%ᯬŸ¡ÁÙ :°!¿~w“ªC}šÜ ܳ‰]¯¤ú~âÖdþfÞ6R+‹™ò„ÁhÁµ©¹ -·Lœr¢`K¶”Ý,ÁHÞMâÎ=¾« ü¥Óe—¸±>`tB§ÆOÑ-—@œ$6†=Û ÃÜr+lŒ!6†• 3Qb"æHÌD™I ‘QŠ2ÓÖa–gU&ÕÌrR§"⬨ŠXBÖ&‹#ÍÂÈ"N#—¬Y$IÇH¾›[YIɱ‘جʉ£ÙØìi½v]Ç×úz~0ä÷Ò=¾•K¼>z‘O®U4éyêM†¼Vy²½ŠM=æ$ÑpÙr•³ñ:1ç¹/µaߘ¾.%k”½LMÅ`““§LDB”˜ùP+ªÊÔhÛŠfã¥HÊ…vy’XjöYL™s[å7c@½ìŒÉ÷›BrшµÇsšÔ2ªƒNzéM‚^ÕÚ?=ÖÁp¨g7.è÷Žï w¡8+ž9³ë??\çƒÏ¥4Üä<.ù`wæ§!›Ä˜¬† 1Ó:YãaX`ƲÀªÉ:û fΪF…™IBœIiq)ŸÀ(©(+kVb#)«€UHD„(KD6DY€LjR&ÎŽšÌbSbΉ(—̹kL¾¿„Ë(¦ßˆ½TîM6õ…ÁYž_×+W€³³Yø»YZ}Tétáû7Qu|üÝ•vÂ÷Lïò­pÏÔå”&&g2iL0Ù6Mh¶sk“fS·Ù4hL£b'N‰8qâLÄ"Bb„T•`íb_”E”‰Õ¨«k¬Ä™‰sIe®ˆ³#›ÙÜq”Êà3Øç.K&Se¶’û•ÜèxƒÔ“ph¢g0,¹ÇÝ2Ê»Çe(.÷—]â°Ûåþ¼dú¦ˆ)æ@„êlLªhi\NP¯FD¬S5ÌÌjÕ0DÄœ™……Œ1Ä2×v™HYXÕ¨äœUÔYTD™€ŒH9€2›”@”ÑPÎÖú”RÞ¤µ¹t29*O?ÝÊÂ=îÂqwQÙ»Çe(^—v\"nŽ ÇOÒk¯ ¹ðý·&г^â÷z›¼U–\n9fãœá”‚¥®šœœõ9Yj$[km¶’5&[#bÅkU ,ŒªGóÄMÂÄÀ2‰HEHÕ¨@UTU‘3Íà—23§,’8sJœ'“’±I›&cSk}RL³e!ʽ¤iÖd|(È£Üã»Ç=PÜ[:ÅÍÓôJqƒËÍ»r‹+y"lœ±] #6µ&;›Y,³ÚÌÖ²Âd2– )L6Ö°Âde3‘(a){+“BXYUU&Ê*ÈJ)³PÒsNÆPIÉ'—CÊ–“K”€ŒÉ=’9çxxUN¤]÷xntRvV¯./Ìyµ]†âÞÒ)h0Üà™K,ykõ›\›¢-x¥_ÍÁ8ÛR³aÀVÔÚ‚‚í!Yçk[j¶%ZÛ·É8 ¶Ô`¼ÉÆSfÇÊŽ2[)QžU’Ô°BI“²F…D±ÔH “›ìs“M(R‹"5dÒ6ª4 6µêS­E ÁäT Eí'2>?7¹¶’U^Ý:(“^#½IÐáàŒ †˜Ã³‰ðŽÃñ㣡x–ŽõoR{§àt`æ‹,&sœï·ÖV0"ÎzMVà,…à"³³06Qr”È¥LÎ’X[…ZÍdEa0 bÉj˜”„  &U…©ä¨Â@&ÃI2ARRN†4B9 k4ŒHš“­ÑÈjKL,1%F6½"7/¯n5b{G¥8ÒÊ­ñq=3\WàøH(ž¹BØÐ†¼ëW¹ÓMÝ%"™¢èš\·vÊцºvM® Ñ5,6ÆÆÕ¹u gÛH²­dM± É À¢JÊLÌ,y“fa@,([²ÙeÊžM*Ø&'&9v©ÇŽ+£N\¬ ½˜I©ò.±¸´Ú)SSS®<çV¶vÜãÖÇŽÈøÖø‘¥ÕwŽí'ž=Kƒõuž=J½MËÀfâ=³ª‘XØÔd­dg ÃÙœmbrLÉc,9#b¸YGœ-ŒVÌÜ™•D˜˜çÃEHólDD•ÈdU•œ‘•5!#‹P‘¤ÖFÉ9©ju1圬hŒl’­±É¸˜0¡¬ÊY„sÓD9~ÜäÅ9Kp|ÇûŽ;×ÝÄžÒé‹k×¹¤Nw×%ŽÓÈølŒ6­ëbiËFm†qÙ1[+`'`Ç$–ÈØrŽR+l ) ,±lˆIT Ê g€H*YT™5«0SRÉ™”“jN¬’DsbhäÄQ$'ƒ-l”9 S¢äc“*O)›œï¤Ž¬XÍm˳Ӽ8/­}7ชûK§Ãi‡û‡ïrÙ«x4,ÍÚJc Þ¼e‰íA-¥àJRëxÛUÜºŠ’íPpÕ®²j+D[¢±‹qãh [ÊL’Ù’Ï¿ŸIHJªl$$R!έ (R97°©F•êäR­.60i*ELRÄmkcÓI­P²Ê©•Õydʼf›ÜLj¿yHÝm¹>ªõäÚ9ÙY˜ó.Àñãã ˆ¥ÒiÑÂìºÄÞÌ!2;§Éb'Y=9"šÝÎäT“ÏGBN„œB­²j)ÃØ@•¡`!%–™«ÉH`dQ “B@”TfNQÈDRI$ˆJa)˜¬Ž‚f((Øì¢DÒ” 'шK‰9ó ÷-r[ /J«œ•wŽß ŠLù.s…šË¦ 0ÉX›¹µÒ T\Dë’ªk¥ñpµDߤֵWçè‰.H°AÅ“LRµ™ã¬"MB`0fÿ`FRu`ae1 l‰²SNŽLòê“7+¸X€£5E,ÙO=—¡"DGETæXGŸ¸ÊévR(9‡;Y)›Ô“S;"¸5Vœ*6–áøÝï¸ß).ú‰××ÖøäRé”(f1Dbr­$g½K6Ev†É1“ƒªçùصPO6;"rp³1-Ö’ZecŒ™µÈ ŠÃÁ€Æ×útrí ¯±¿ñÀ”«³&Û`Iœ±iì|G,§ÖÎstF[_rv ¾rÑ•]«(¸’‚«L°Évl2V“ñœ¥ÌJ†”€E¥ƒ43i̤Id2¹›[á\‹Ouö©Q§Ù¦©Ú¨êèbdÆbb¦"q±Íˆb‹¶9%ÛÊ1›ä“p››­VÂÓ+ypäY¹þ…Ýw|‡àøŽ€ñQP fýD º|¬ï9U#wºÖuÄ$¶g މ]NêmV/ /Þˆñ Z¨¨W…‡ÂCàTgpÈž=ñéÖ|ø•7ÿ%:öüÏŒÛ7±¶¥ÙÙ+Ç:þúÅA¼vç¥Ï}põµ©ÓË_ºþ…— ”ˆ%D€3·„à(Íþg¢-bá%²Æ´ —ª1g “¥U §òÂଠÇïdAη†â€ LøÁ¶˜"ˆi*5’’Kd,$;q1Õ¹M$û(â“ßjôµ&ߤà[ˆk%¸Z²‹íá9øþÁŸ¸þ•W©yÊþäú7¿Q¼ñæܽwÛM&BÕ©püøq|àøQô¦ös/<ÿ ý½Ïýñg-srÊɳ(–p±$<ÙàÙ…’](­kYl( Æh("E0G"¤d;eòÒOMes‰¬49Ü›÷rŽßYÏq¿SÜßOìv»|3gSn9ι±¼¢¦L… †œ­‹ÌŽ ž ÞYëõ€zcà «7€WVo@ÎrÆÀ¨ýÔþÔGnßžzå•—ù¹S?ðÓ£û[FÈ9ÏG-ÐétqðàB3~5§æú'>qN>ÿ¹?øÃ¬’ “hÑ( ! BÊ 1¥ ((dÑè!›\Òh­OÀƒy?y29*½Þ¦‡CyÔ¢œïŽâùÓ³Òé©ñSt;ß4NŒ™(_ˆµQ,»Ò&J. {öÙ!/Æû@Z&¯l¼’ñlÈ)±W&GÆXÛêÃùˆ‰rŠCó!rî9½{2Þr‚’‚É‚º=Ðê*4ãÕØN¯ûO½ >÷ûŸUh’œ "IޤšS$ÍÁ*µ"ˆSà¬!g ̲¦h`¢Ós¤çL| IDAT=¥N‡SÞ¬¥Å 7G'rª}ZpíšbŽó1;÷;·ó?ÛÅ~ŸŽÜYåû“!÷WO²ÉcÃâp°ÂÑú¨Îqƨó½•äKm|aÄW&z¯mQqëK ¾gƒ+Mt5®BrG{èÄ¿ñóë÷þz{ødÍŸ»_o#¦0ÿ"Áš«*¹÷ê Þ¼þÉAOîó?ÛŠKÛbR­E¬µõ±j)B#6´(Û–94© ‰mÉ…l(æÌ18Š,.±ø$r6ý<ÞŠr ×È#[2ë;î‡ã;PIú®«%ƒâ‘u~fÞO´M2ºb:÷[›º…—Çê©b—<„ R)f`¤’TЬ\°ÂK–Baüè—ÿͯnþ±Ÿ„ûü‘£Ÿüéë÷^DÒ¤ŒÝÕ({ÏÖÐ=û9»ßñ}œXùÖ_ÿçÒ-ÊúÀK¯|óå¯LÚsË,-3·b´5†[¢¬š62k4Ã!{Œ6ÌJ«J›ý8ÈëG¦òÂâ‹<âêøu0à“¦àUllEÛ6’±š³q±õ‘á³æ" ù ¡HY‹±¨s(ÉEÒàëœýÇ>ýüÉËw¶jþèÿÀOö ‚yçøÂ 4©EÇ"³Ž "P"01¶cƒÃÅ*~þìâ…ùQä—ïÿI±ZæëùîÕúîä¾'*v­g^Mëm-lë,·­ j¼ÈD6!Z©’Ï)µžóJ‡s;ï;>ÇEoìÛÈrŠËP`¶Ê’ˆY”N©] ì¬Ù¢SÉ…1\0k¡"…1Æ[’‚ž™ýÏÿ¿õKÿÇ?þ]†Š9ñ̇þõo\!´‹yhªb÷‹Ñtö  ¢×+_nÞº~êÔ©üÑ?ûÒŸÿùŸn$‘A•[iE¹Íy6~C¤@,í  ¥Ð—Š$Q•³sÔ4IR*ò ŽgeoŽ;«¦Åró>»²ÏNŒÙ.ź Ö¸ÒZJ.föYÉ›¼ VçÕ¢P2…€ ÉpÁd¼ö½ùñ_l®þ‘ñÏ|è$…ð\zý †]ë€yÛTiçø_Î…‚`€#Ç_k_{ùþ㟠޽´ý/þtYZR ”¥%HKš[JÔ²¤6³V´†5ä&Å$&º*Ä:%¥4Jypb‘&‚ý‹r¾C8>Чû}ºqg•ïOJ.ðÀX”Ƭx£ÔZ²KIœµêHÕ;ª gÈ{´…ƒ%š¢2©phŠ.g_évѵÁçÞü‹ñ9º:8ù7qí¹AûÏñŒ»…¸xÆÞÃÉnFß´p$€$„±xµ6x½=ˆ[¹‹ñnØsx¶¨_Ûܺýç«òÑ~ýõ¯ÞüÆÆ$•¡EÑ6ðmmÛ l#¨ (Ú˜5D­Úœb*‚µƒ7‘´HùAÈ Mn±’ßM8~W`Ü=OQq—i§|ºŠ­66i´ÄÆÍ`˜zËê!¦È1—d¸„RIJÍTTHÖâùgö—îL®º5}å9hÍKyßyèÒB(]+ö¯-O¿ò…/ÿ¿Ï¤-Œ6¤Úšƒ6b´õF±¦¥ƒ÷¦•,Ñô9˜‰KSiÓ‘eJ 8>Î9~;%ÕùAðx(Ói³ñ]1ØædëÀµš $ç3r$–)’¤2h.£ä¢ÕT¶‹ú̧~1õÎ)§çH – ~÷µ†ÿõåÿ=[AUÚx¬>ëÜìLêéL'“Y‚™çã¶Ægî¿”`ºr°xõîjþÃõÒ†g×:˜¶$×xk·%ÛÆ·¶u$-¾ dB4­¾ŸR»ý88Îä|›ýÆ÷CñÆÜëõxE ¥í¤`£%GPo™œH.T¸€‘Â(L¹$BÉŽ ƒ\2qa /¼ð³¿øå—?³¾qm¦ã;«++øø~ôúÁµêþò/ÿbC3µYµÕVÕ4:»ÝälZâÜ›VÁ!‹Æ%ú"GSI„³ªÍãqÁ`*Ëp¼xé¢.¾åÛ·3q÷BñÆ .{=.04cXsxŘf;¹ÈÞYÎÎ8öYØF!%“-\ªE¥21—llæ¢üÈÇ~‡·?¿þU`îXÞ¹ prü™ÏÙziúâŸoÑF²´VRC"MVjr“•ZV´9j0mÒÚXJïrÎÝÒ x/ÍÇíÛÓö[A±7)y8‡¢Ú`a ë]v±VϾñ¥W¢ÂR*ÅÒC O©ôÊŽ …G[>ÿÔñ³_Ür§ïÓÚg¾|·©`%þãÿ‹_Õÿ®wtVï‡üà;©ÐæM¤‚4âÏý§ñŸÝþu$€“=‹§ýÖç>~ ½ôåÍ›ë5ЦɾmÔ7AmÀmT×$µ-©mA¨ Ž)„h"r›(ù´ ǧlɵGÀQ¿‹ñƒqùŠ6—q‰–{ŠÏ öC±°ÄµKÞYõAl“ ©P)È%ƒÊ,¨(U¨ì”_Z­ŸÚœ¾üÜÎ’Îâw3Ǧ@ŽT§_½·uû•{·Ãïౌš  [Ôj¥ul…´¦ BÏ hYEKm*h ŽûœãEÌOåøp\$m…âò¥ùåÝΜyÈ)vz‡MØšØÂX›³sjj.|”XRA ¢•X&ä*‰–YsÙJªž:ûôÇÚ¿¹ÿ»™i~Næsé’->{ÿó×ÿQPE§¿‚N· "@Á†ÑÖ-þþ¿ó÷SÆçÿìÏ1º;ÂÖèMÄÐÎr"øþÛùUò+€¶ï¡kÕ«ºÂ¯|ã¯_þ½‚\ÃdšÊpMdÇhH¸1Æ7–´I ¡ÀÆFc\¬U’—œV:œ_›r]¹ƒìY­ú6àø¸Õ§kkk¼pŠeYò›"¦JÛ¶Û.ZvLêêULa­B(™¨d¢Ò@+"”̨>þñþØW¾úÒGŽàƒŸùW_üÊÜú}7‡çcÞfUàÀÊ NœxêÕ£G¿òÕ/¿ø{9k“‰jMÚT‹šFT1hL«ˆA¡‡¸ŽéÙ"÷6÷:ÇÅ‚œ·ÆyNX\ïôêÕ«Ü?}šVç+O ]³f»Që|×ZD—„}Ž(¬ …+Z*¸d£eV[1s©LeñCç>–¾ö¥ú£'~&|å_Í›lö^ôP—Š Û[C›?©>ñS©þÚ—þoHnH¤æš25€4ŒÜQcmŽçàÄĘ}l‹qêviP`ŽW_ÓáúÞ9oŽó§Íέ=sfÅk}ºñô×J£ã`s!ÎÇÂ%UÏN½'šSi¨-HéX˦ÒJ¬ ¥ó+û›)}d­øg^~eDŠÿýÿž¯B£XéÏ[Š û/}€hß„h£}°¢ˆÛÕsøÏ‡ÿ.^ '@óÃáC«{¦«/Åðà«­ú&±«Ûd›(ÔDöMVÓ±MP´)X¢œ‰¦u‘úmJ£&°’'½FîÜØ’þ鱞?^–/#÷}ß9—J¨gÎÌNÉÀp°ÓS\@qÊÆj\EƵÙ\¨dE J•À–µC¤ÕÁþ>Ö¯VãµÑç¬-欳ᱯ\úí†.N+bÂø¦›};wYygËÏø8îÇ¿½ùæÍ¯’¡š Õ ª‰Scj4lm#Ö—¶U‘h Áq8•9óói>Äw ì9WñòeÂúÂÙÝžâCP,œÓV=i(`¹HYÊœ¹T¤JXË”s•AUÈ¡Ó?~àì×ÿöt®ÄãØâüÙ?Bi,ŠÒX…HÞ©JÕÛ5~ù~¿þëÿ!bLðŽqáïÿ²îÜz˜§)@ñÁÞüŸø5,®ò°ðéx wGÃß~ðÆƒ¯:æÚƒkS;˜ÚYÔ*Ük°´P $–á8ép^½kr84ÑoŽ;“޹_†â¢§hEˆ) ÇR­)(jÅL%­T†µ2ÌÕG?òÑO~yãÿÞƒ“ý¯ŠlðŽÆR½•¤À|ä¹WU›ß¹}çÍ{YP#S@5€Z‘kÛ¤$-8µ Ó> ÇaNéÙ¼AÎÅK—vÎ%y”¶ËW´¹|iþ­ëëôâÚu>7:IoÆ•[<­ÄÚ¾k·rã­/ …1˜ÑP¥ª%3W`ª”L%DUç‡>õ[ñ¯ÿòdž>Eyôvã´çç¢RüÔÏ^oo½ñ;ùέ»$¨¡©&Ñ:Snlæš‘›,hÙhkEÛ¼G“º—Ú¹I³žã·ÇÉÜⲄóó×F/òÃP,l.¢ó6»Ð 0N½Í±ÔL¥a)Je9V†Q9 Õ‡VÜѪûÔ¿ÿ…ÍæäVXè¨c)ñß?õ¿à§ùKˆ“ üê*ŒsØÉã¶ÃÙ1O‚ÜF´÷·àVzø+úaüæÍßDŸ§˜ÙÎÙ[]õŒO-¯óÍ7~û~ăH¾Î‚:‘«£¸:‹ÎáZÕ¢µL!1‡ÇÁñäÚ99{zq±*è;\ŒóÙ¯e(®ŸÙ=OñàóGéXßóý%§hšÆ¹XúiC%k,AZIGMîæ„žBû†´O¤ý~àÓÿöýöÆo¼>ú"³ƒv`ÈX$Ý=ÿ©>ü€ÝËììùMno|áš»àv{ðúÖQ¯ýæóùñ_AÆ R^!Ê}"t‘©+àX+K(IS‘“ú³OZØV{¿I&ô=Ïô¸Iƒ!9³N—/_Þé¿ì¿@5ð0¯¬Ÿ¡«s(ÞÁ” L¸Ó²ñ˜)‡‚ĦÌj+êX’.=ÊÔ‡bЕ“?ùƒÿiù¦üFóÆhñΆ§Îú\ÿbøudÍP™yHã ˆæyMb¶«÷îÞÁßû•_ÆJ¯BQ:Xkñ?v†U§·Û#Â×ᅫ-wšó‹O±þÚm¬æÎo~ðGOÿ2÷•¸o=í"™®ê°jEÑ”$\(‹Ï9ºŠ¶mÑÓÛ³Õfãïö¨ó ÎnЕõ3´ø>DÅãµÅ|4, 8ž¥·‚"$’¨4Le&[iFW™ºíAµÏÀÊO~ú§žÿà?ôÿ⯾ú(Î÷hs—C U.eolwìï&ë=ý³Å†u6Æ7^ºþ\ÝðýéÿÉ_!`,}‚öÚc¡.4wŒA k ¨-ˆw­q¹j-³˜²,¹×Ûä7 >}ú4-¾XùòÒ×kí×vïÕ‚æ_ö>?Oq¶ú´Ë®Üb'ÆÎÆ8ÛΡh…%)#¥Ž!t è‚¹'@_+å'ÿµç«Ïý'íŸýÓ“2Ùéò.KP¤¹ZËz-îï OàçÐÒß-ž«; {¶},r†*Ú?ý§'m½ý߸OþÔó¢ºB@?}£¦›n$êhi3‰©ˆb¼3Ám¶6LÑ”¶Ç¯7¸ó4 Ú^~Ú.x¹ÅÑZE½É·V[,œâ ŠÔ  ÒÂU"\‘5Uô„ÑËྈ®üر#Ïol÷íŸÜØžAqg8Í:¯ò·ñ³ý¿Fœl ả·+›Î{*;ã@‹Õ 5 &ÄÉ?^|gŠ¿™åÙ ¶ZÁÿó7Û'oë¡ÿèÇ>päy‘¼’Á}QôTs¤Ý é8.ÊÙ{RoE|.¢Óq°v­4[«ŽïO†³ÓT õ+ Ë—wýÔ£òÁ·ŠoÛ1.J¨—‹m°N£׸½sƒÓGi­ï4fˆøä¯6¨“*f3PFe{8Hg~û•›_ú 1m;‡)YÝVB ¡Ú–T Q²­uMP©b΃ãüÓæýÙyŽkçF²½ýF`w–¸¿„zfýÌÎ…ÀW‹§yëP6½m1Õ\9wŠ…£"¦TfÕŠ€J¤ÒQ’NV鸪üþÒví̳—õœÝ¿òÚŸáÊ묮B§ÛGÎ lf“’?û4þÑÿøßáÞèˆ …÷H±ÅÏý¯`íðoÞþæb£9àŸüÌ  Þ7aÛIû=·iž^ù¿Æ_ßüŠ!Þ6 )‘ÙfB- Ú€j0ZeiI8P‡Ãöý”ü˜V¶¿’6åH[ȹϬ 6.èâ*#ûûb[l3 ¸ÛíòÝ»žSšZéÛI¥mH<“zITZC¥0J¨tŒJÌÃÒaâÎÏÿÜÏÿÖüÑŸ§³É½õ±´˜d„¨Hªxê ÃáÎ(#g ôÀv#8¸jÑ-[Û[E¯âVï,å,/8Û4ûL?ùñj»]ÿ;_üÒ¿,BÛ¢˜j¢$ÛªT³Ñ&‰k@©ÍààcŽeÙÀh¾Zu"O?ý´ŒF#y«sµØæÂüoîŸõ}¾7MÖ–bJ.e³ÅVre %2u”©¢€Œé”ç>ýŸþѧf¯€ßÊuó<Ïò®ÉEÊ „ ™i¶PLg¿SÊ„h 21” y+U±[éŠO|Û_ûÒ?dÛdL¡º Åvf©‰rM‘vÔXÑ6±¥1•ãjN±Y•g‘_¼9»Àþ~ãBÛýPÜí+^ Ápƒ»ƒß ŒÉ#\ÚÔFgT<Š@Z€©4J¥ÐaC(w ´ã;>tè·þÙíéI"žO6ö½q"üWOýoxÁ q´ðÿ³öîAv¥Ç}دû{œsîcfî ˜±Á‚Ø%°O.É%)š»|I$M=i+±ÉªØV$j)‰¤JVJ.U @*VÅË’ìJ9®R*U¶Ë…¨”rÙ±Ei)’¦$rI.w$±»X<`^wfîë¼¾îüqÎ`ñæv0À{ïùNŸïûºÝ¿î/Ù3SíËãPj<ˆîVPõW¶û4Q ]_‡*`1¾Éá—~ S<ªæ±î|VUAÌxßltæ•õîï0ÃjICµ4Tøa)EJdFª”yE–çYa,>¶E0Ãû‰0»2”ª ÀÉ|ã] F{ë·\#õâ<8rr‘ºÝw>Ð¥7¦Ze0„iÓØÈlîŒ+ Ý1Š"Ô`¦†"4@h’P3î4±j~¾ØÕ‹îzK¿ÚhC=sˆ&F”$  h¶Ú|é‹¿Œþ`„}³ G’Ø!ͤ(ÀUªÎ3ÌÃPÀ³¹Î#¬F#ý|Î^~>™jýAØ~¯Úß”U™˜+ÿ]„€RU¨TäÐ8!õ#¨3“: ™âÔ,\<‰gOœô˜êØ©½ÆSÜ}°pE¶‰(M³ºNQM(c[Xr,UøÔYŠ «&*h*Sƒ¡MUnNÏÌþÔ¿ù£wh[·0Šc'{+ øåŸÄ‡žŠqÏ”H°ÖWüÅ‹¾ùbŠ¿ýÓm<8gà,c”+^<›á_üÛ^¹X"v;ûÒ E+Çò›ß}1Ú»gÏçUé7PùŠ$˜Ä€H ÊUÛacµ,SíY`>޵Ùlj·Û¥•£Giqq'NœÀî+ï8r•ŒóгuG›#sèRÖæÕ’Œ›`3ê[ŠwÎf^J IlLe44@Úp3ÙßÒ¯þ‡®]äÞÉõo\!ˆ AÉÀëÓSøö½ðÒü>,Mµ°Ç(Ø ÁŠÀ…€É4Ç«ëxhyï?ss[}dÎÖ^Õ®¡@̀Ͽõu$o?ò…ÁÒÙÿ$ Ù@c µTÖ9RòT‘LÅÆ&ΞݯÉà àè \\ij'Ž8®cþ»”¨ íägWNñÊ`™ÓäA6› #>·edœwÁe€×;FÒiS•hÒœŸ˜úÕo,©Ü®IEN¾ß_¤E¥­ê›<ƒ«BûÛz$€  @÷úUÄT^ãš×s–ˆâ+éÁG¦&¿t~«ÿÏÌÁ…@#0J$†”DQºH€!VᑚÐ@»i¿Uêá6è4fcÐã'NÐq=¦D;>ÀíÈÆ1 µzP‹„Ù@~¹É!ÜãÔ´&Ä 3ã‰seð¥†Hˆb‚$ÄÒ€P“š`j™ûà—^ºôåƒTÁÝZ½t½»2–‚±ÝצqñkûpMÿe¨*T¸*”¬€mep¤`°—.]3#d@’V^W »gþÝA¼ã3߇Ö}³ûÙ*ÔâsO>ø‘3/¼òµß³)Äpˆ jÄ«ÀkOJMÚ‘:µ[Ðaë 3z©Ó•K³GiñÈ"Nœ8=¶“·vo05ZÄ,íÝZÙOf0ñ¨4yim‰-Y<=ˆ"R“"a–†Bš`4Y¸Ù8Ðþýô>‚æ motÇ«Þå¬A©u A1½gÖXtW—a¬CA(¦gö@T±¾Õ‡1‘( )¾õͯágžý,¶GíXîöâ¯y *3]l ¡„ÏM?µp¦ûWg—I©JüWÆšYU +Ĩ¨ÊH}sB{Úì§XFÐ#óuÀÉÅ#8uâŽU±ëÎáÅÅE:ZmöÔjpQ4M6ÎĪuž >Ø…\¶œ@¹a¨lÐ|ô‘G[^^ÿåW^?‡[h*$B` Áû_Oá§?ƒú×y¥‡Çøô»üÌ»âjÔ%¥"ðÔ}Þûb¬ä‚ßøU\\ã@ÆùòëâqVV×ÀDÿÓÇ?öá3ñÕ¯üSÝ„N  ”IIŒ2‹º<×Ð 5%tUDíF¢½àðÒ’ž^Y=~ü8]{dÕø’ÇNX\¤v§.˰-ŽØæ…¥…uä]̹+…=D$Ùe›DÚ´½ó1Z_ù|þêË ÏàÚýŒ@y„(Ïñ/ß÷ü«w=‚ Ì©ÁCÍ<2±nv0ÅHØÀ°A¡‚~™¡—çxió þã`¿ß[Ǫ!Ê2|æ›/áç¾û2çvnì*‘íWóWN-8æìÞñØÊ^;õdž@6(ÔXQeCªpj¬ŠCS‡ÃLckd×´l—Š¥Ã4{ô4è‰ãÇéØñãxÕåN‡O¿@îñÔNÚL²ex*7!oØ„M¥ôTRƒˆ5$n H“ˆ›LÚ|t¦ýØ¥Tž{©›W1•]©ï«à"³fÉ3P™Ïqè€ØÞEÆÑºk­Uz J1$/Ði¦ˆQ@IqujxW4@€ïuó…··'þÉ\ÿüÛ+½ïÒ PÃ0J@’©·^Ë,W"e?T’ ­™¦^X~‡/´eqtÇÞ|‹·!w†Çñx@÷…Ôˆ(ÿAÆÓ’795¥ÖÇjËûYÒ8@n0SCš¢h=°ç‰/}ïÒ— »!BĶ£…bùÅy,g6Š¢ÀÖÖ*-³1°ÎÂ9c Œaq]v@01Ðë÷qéÒÒ¶cxï; {£®Å…¯Î¡ÿF Q'…q‚™:p[M——¿|ðÈýO}é‡ç¿û{T-¦<)T¸T±Ä‚Iš7¡Óâ$­NÚµ—èÈ3ÐSNœ¨<˜Ýx±b¡ÃóGOP{þS´|é,OÃ~ïγž.­ ‰CQx0"Bˆ‰)a RÑdPSTZGç¾8xiŠ ƒRÌÕæ‚‰PªÂ¨Võ‰ $I‚(i (K€¹½û053gþûßþÇ¢°–á½Ç½àÐñ̽ ‡.às¯Cj²”„€ÄF(E*Ã{ƒç«Z=ûÍ¿<°q`êgÒ‹ÿ—e@‰X¼B„U A@-ÉúCY¯Oj{é²¾º¶¬íì‚<ƒÎö"¨ŒýÎÝ?Žíêââ"7›M!pš¦†HL"›Zq’©·ÆDF5VB¢* %mª É„Ö…‹W>yá¥Ú»Åj# c >þÞ~ú©(@ •Њ v¹šqI«èG@PÌð[oÿÍ?\eÝÿ7*D?ùÿþôàcG|ìô™×¾§J #Jå@¢ZhƤLªÈŒ64ÖÜ%*uv0Ð W®ðáÇ¥v(®ºÜõB¨É"È6÷‘ Kl1£,±Îˆ-¬:eö*Ѹ4š(´a€†(7¡ÚÂ¥óŸ/./` 7¾-Tóx5IðëŸýYœk5ðTsþî}OàÝ“û+gY "Š ²¡¨?gˆð©¹ÃPRl–¾·qÿè‡_Ã?üÀ“¸Øiã×þì?#\•¿¡†EX_þ˜»ÿð™pöô‹@‰Ôˆ¨$ƒ*•ÐÒ°šRtʰ”Ê¢Öil¡¯âÚK‡ÝE:¶K·Z?;àj´ì¥V…I.ÜÈ(7ŒšÒæZzFä…ÊH$$ Nˆ©Ò&ˆ›NÆ„çÞ–•K¡7öè¨ö)ƒêÕ¡Òê·õë|¾ÊS]ý¾kôUÙÕ±Q¼±nÀ«ý #±Ïšjþ¯?ÜH_$âjtB V%8Až©w¢ª amÈ–\Q¼ôþÙ†v; ­Ì>O‹GVpüÄ)?vg¨ñ¶sŒ;hqÌB=JGö.ò›0Q“£i!‡GðeT*Çšâ†jh w { IDAT’¢E@K­Ncþ×V窵=Þ°¯-°­¾J±§ÿÏw`mý ºkk`cÆc{S¬ª¾)ü¢˜y×UeðÀ¡Ã°Cƒ »¹Žû?¸Šù‡Pç–L€Ôf€phú©3?¸ðÝßcK=fêƒ0°Ð° ¡4ŠÈج(MÚZøF™E+áÀ$©å«YªWMšps°ÓåÉèŽmŸ.²9Û(s§ûœ‹˜Êk)CS!M7!Ú¢¶ŸŒ~/_mgji[Ã×è´Žvüi÷85¸ŒIaüy÷‡˜hMbïÜš&D®aüÕ_dØÔú­þäEkN½ü]lt×a c«Lñõÿ6zeºÉc­KqÚî?3xy韡o˜úÄÔÏC3P¢‘ˆ¤Ò|#§‘+|^”½³å+Û%§ŽžÒÝ-ã®-͸p!bk3CTš(ê¹ÌZGÃØ›ÅRR „n¨VD&myÇCO\¸xåóW–—ox/ד¬TüïÇfñÀ´­6„° CloÆ_Ãu6–UL~ m¿ùO×ñífÕl¼éò½:6ð÷½çÌ·¿óíßQ¥¾}Qê+ÉPÉ ­#¶>¥¬È´Iy\¶‹8•Ƙ0 dwgœc»Z›]ÍBíðdt›™5ƒAi÷Æb³`|)Æ[N#“h(–¹¡@e I[öðc‡+ç?V®lcá› ¡‘eøõO~o{ÿGðëoÿ1 v_Çw½sÊ ôÚm¸Z\¿_¡0Ì`"üÔ7þ5lwøoþxûד*ݳC†²÷.ü§üÒ…?V¢¾ôAÔ‡êŒ2‡QN­×¬€/bÄE>Ú,Gf²|tEVgõÔÑñžPë¶f¡>ây>ü©6~©g¼™6fOÃÄié²(v€F4)7Ü€-kríGg¢Ç. å¹¥aQGå*'õ†K’*„ø¯îù1¿yj•c¬~_{cãc]9°–J/c÷>žnt¡¡*õº2qŸ> å;áMׯ‚T§eTñ®½É?y%}1õ‰ÐWÑ14˜!$OÉú4eY–>¶… Ͳ4ƒpÏÞMéž¹š¥z+_r,·ÏJÝF‹@ÅB]¢SËM½˜{%L@fGv<Ó5á&Ùß!;“3“ì(ã¨PS²±Á—E•[D˜ˆc§&´ÉDÍé÷Ü÷Å|=­óY ¾•}{›¬gÈÇgŽüÙà qóóûÑj¶êZFJgK›9‚zØÁp¨4i(Is0Ê?q§FQ84çqp«Ô_–ÃÚŽÃε~ÆFñªe@ØæVæ«€ @àÓO7ÐÈMVÌnÝÖßDÀ×¾ñWßõî'U M¨6i¡Øiˆ·’\iÙ…2²@0«"fmÍs¿?G‡޾܉ÇiÌHE]¡'÷w)¶-¶6æ=.âQ®Öj •NE&‘bUITB# 44¥»òyYY©ï÷ͱëÝWæ<Ì‘Çñ[= ã î˜wJÛvÚŽòí0£Ç:Úù¿Š  ÿôñO⇭â<Üts”ªù«R~,~ò}B$ i( QªyA‘z—åÁLOŒ‰üû¹>µ—Ó³Ø5o·ÃâÉ“„§ŸA7IhöÁCTõ?4)‹àB)ŽŠ<"¸B1+V›hó}sG/gúÜ¥QQé@0r£ÃPlHÛÂwÏ%Ý5o©~}Û»N”½Fl ºš W{sÓT/+m#ËÕ‘<÷¾¹ö£ j´¡ ¤ŠÊبó®WÁ™¦3,Þl™ÖTÌÝdÌR=¹ÍR¥[O.€9~üø-ßDD¤Ç'ˆŽ¬,Ò‘æ{hió”q-âŽKL™åÖ´Ù:ñ>H)!&áD)4j’ᦠZ†Ì§—¶N?96мíÒÝr #8ûü\¹tÌ·oϯUEÇ`fˆÒt„­­M¤i (aj?áÞw*ŒØ|} ¯þÉAÌ?±\­¢z, àrÿµÎD´çBQ ×µ") 1  *Ίdj”#‰vZ‰ÂM©®1¦^ŸÂ½gÎcåó{ñ•_¡¯|å+t ÀÑ•YZ+/r3Ÿån#3Ô[·Ù„±R–OÊ‘¥ªÞ‹A ¨6•Ñ"Ñ–™Œmxzí`Åܦ-¼I»tÍ¿EOMÄSC8·' ·±‰t8‚¨`0ècéâèv×Qä&&'"¡D¿×C:asséiE ‚Îô ºkøÈž£x¤sÿöoô”ÇSõo©Aè£vtA YS@ Ré,ÂoŒäB©Ê(.5³¢ëEŽÖl¢³+³8¹ØÄç÷®àÄW*ÝÀÊÊ 8p€WW§Xö9NEŒ+É: . …·Œ¨„ÆP“p¨r^€¶Ôšœ˜úÒÙó×"]-;î½GbüþoNƒÒÈ–wŒÜ›žÂŽ&®¯©Ú+‘ @{ÛøÈ5ñGÖ‡áÛZçÏÛKKËïšžíœO‡£5€D%!!R‘„P%Ä"jr+Q´¥Þ÷‘¦©=z‹‹‹Ø»w/¾Rëveq‘VŽ®ÐýK‡éìÚ JÓ7#‹¡q¶)Ö>—2¶ÊqAÒ°¨Ë2ˆZ$hñäôեΛÔr Yšhãò'ïkÎÞ$Öt­¯ÿÊø™ÓQ‚ÿ·{ŸùÚב›[gš¶gîÖÂòÅw™©éó2J×`X TD VXœ©¢„ZÎE8Ò8ŠôžÙŽnœßÂìÑœ\àó{÷âD=g¬ÔÝmî§ Ý)G¦éJ¶ZÄ®dòACl¬‰EBD eK‰š*h¯úÙ+â³£ [k‰ë·=ŸÁƒñe”y€a"µ¡4@;mª¢aˆñ|•PŽFH‰,^ â˃Çá)Üþ£&`#¸8*ß­¢¦LÊ!%r¨P( ‚*$G©Ž§y¶©½´…Ãí)½`Wpÿß¹_Ÿ€ãÀñÛ¸ìíY˜±…¯ÑâWV¹ì£ÐŒy«X7¶QEYæˆØ†‡Ñˆ@1¨BŒ;ï|4öíVÛŸ`»mÎmˆ@ ‡µK]Эw¦ëß‚jU†01‰éÎ4²¬êW¹ûûØÏüR@ÿB ¯ÿûƒxãëoC2ÓC(ÌUjPF dÃçξëem€h@ŠC8*KõNK+â¬m´L[ÍUn'=ºÔéVµ'«ÓŽ×,ŽÑb‚[ÓdŸµŒ'cU‚³68%x§IYÖåÒh<<÷HÑM*èv€è6õÂh=Ç[¸øúy´Úmì™ÝƒF£‰©©î½ï~@¯·…³¯Ÿt¦:ÛH¬,KŒa¼þÚkèmmážC‡ñÉýObŒo÷‰)„!äâ_j™{”54Hˆ8†R„R}V¨w̶dc£‚ÌhÓ4)/cÀ/,µ·kÇß»XoÞÛh±ÛeV5€šJk ;*à¡&RA¬Œ˜€„ÀÉþýó?uyuuaÛռɜ­.( GÀ?øÅ)Ѐ ù n^bAŠ¢ÒëuVo>!Šö2~òéÆÍtµvò"‡újï›™bá«JĤޚÂEâ,‘"1Þ{NÓõçæhiiiœ£Ýž·ÏxöwÉvfiÃÅ’þç/Üå–ÞªâåªÛ( C4@î”nx_>é"¨†Û TRçÄ Šüµï/D‡þTªš(4f Û*œZ"¸¼Pku`ØDlmÌèí£¤Û%=Jx8rä9y’ŽÎ>OÝNBûK™?@,#Ãâ ‹5ÊΊ±Ž­z ˆ”+(aؤåñÓ_¾0XP®#“×p-nz+ 1ø›—wù¤(ÓQͬ¢äW+ ¨Icã—åh„q¤ÂÇ >1õ}üíé¿ÄígújÝÖWýoôÞIA‰2Å*ˆ‰±Þë¢ÄY–‰ZG#³Ùs¼/±t°&âTqÜÖZ¾Í˜¤n»‡óí%j'=jÞ;E[…[ÂV,3; ð ˶q<¿¹øPVî;\-Õã(*ä&b¬ÅÛÞv ÀÂÁpßý÷c~ÿ~t:Ó°ÆâÒ¥%¬­­‚˜Þ„<ŠÎô‹£+G·OÍh]¾Ìq×ò†ª!‚!JL(sg˜<”#Žx1ÒçúƒnÃäl_´ƒŸÿé6Pôêâ;MÖUXÑë¡è à'&`¢¨V’€ˆON‚™­uQæ)®êƒÊ±D±Ž©6ðÜÏMb0ª6¾ƒõõ½—O-¼çÉ'?LЄ‰båÀ—…úP’ïl…õ#ËÞ{N;š«Qã©£U×–Ù£+Ô^:LZq1³²2M)óà ‰c¼" ˆƒj¢J ÷9`<7ê<ÝlÞ\;7#vݵ(P…ïîãù¾{0þÀ Є q4f žI\¼5edMBf°^£Æ:×øÂÒÍž:JpêÔ,-nS¿åi­¿ÆqºÁ£Ä3©5ÂÎ+®TõÖ«„‚*‰¢l¼}2ù(HQ|QE!n;:Çxºù}4UØf…†²:,t<Ç´¼&<{µ±Ô e°­*²¡ÒDÛöpU7ƒÛ‘Ú2^\#"!lD¡ˆJU‚8áÂ’Z3J<ÇÍ D–ú-OÀ3X­„ŠÊT""xÃäT‚%J  f0pw»|¹FKK‡iöèQžAÒín£E³ -VllÔa¯B+E Ž »™}¿š½øÊ¨Ý…aSQMìzëÍ¢"ênMwóí¾xù[î FD‰²µÛ¨±W¡FÛÛGÉþ.µ—–höÔ)Zš?}Z6WH(7JÁJgYY$™x¶á~å¯/ïZ/½à“˜J€M0IRq úƒ7jY•ZO•m••YÁ$\܉ñˆ¹‚MiÜÝàT¡¬Ø×𿢪 „b!Db¬¯Ž(´.”â4--‹7ÑãÍžãÑK‡Û *ð_ÁÆ[…Sojw7*´X1QW¹Œ{lË-ÃQbÁ5ZT†s$Ab27£Î/©þè=ðG]½ùõ±S\Y¾²Í¢LG)²4…ˆ€Qxígvº.ÕìEf”#à‰O Þý·"7¯¯3jUÍdê9Å`Ž ©¨‘oíjÜ2elù\¯Ê5vÎì§Ó§ç©=š’K5µï)2M¶ˆÙù -ŠˆC©¾ÔACd©Æ¶•üB•±UÐÝY¼‘u±Rônùl 3VWV@\¾ª|ÂÚêÊ›ubi·‡KÒ‡ÞõCUîMÑÒúCE ˜"2àUŒÙAÓ”ó&Fl&ZÆ€ÏìïÐé¥yš_Z¢ýÝýÔëõ(Ž»<8*Ĩ¬)ÉQYøP4)‡XÉã=üQÜÅI.YÌÏ8 Ü¨ï¡Âˆ B¶±‰r8‚IbøÉ ìî3©œ\¥/¶ÑtÅK­w!E±+ÏI b JìÝÏ(ÂÕ†õfR•ê”øØ‡>ø)%‰U*‡.¼„Ò…’œH¹kì{Ï5îïvéôÒµ—–ÈÏõÉvÄíI£EWh18ƒàYÉ+!RB )¯¼q° /_ÛÏôö„$eÖê€Ü·ZzeqÓu3©±ŠrõÊBü7~âS*ˆY)RF4FÔ²²1 6#¦4£È¯±_›£3û÷ÓéùyÚßéÐ\ËÓ ²§lBjHó -qÆXT}Ê¨Žæúø=­ŸºØ uIþî"éÛ†`éU5´dU¸V„å;sLuW¯&Þ@ªùÎT¡KEåø©ì d°‡»`„»Dã•gx±Ÿ.|⾉Ÿ#†„¡Œ”#N9Ø,6†47U®qƒg›–ºgNm‡Sëw =ÜLƱéšts)éÒD4 †oS9o9ŒJ+ê¬uÁ:GGA5"æÈ¡ñ“¯¯g{úßý&lž™EÒªòZA€ rU†˜ÑßÚÂÊò„=³{pèðƒ˜Ý‹È{1d\wWÖ,TÑÞK8ô~Å£ŸT|üï ~î)îy(G·3êqÖ‘pný;88ûÄQ…Ä`˜á… OT8Ñ`s©ôÕgiV¨ñrk:K”t:ä§[d'"Š8eOçeß&…5Y£ÆYQ¦HDãäí{¿08½ÌÛ­‘ïr!Ÿ­£ê|팿³vkê¨JE^×FéÎ{ªÂzFw}_£%Ä0wµ@­©ö ¹O=òð¯|ó…ïàŽˆ- ôG‚¿Ô¶z@¨ó+JimØLÁ·[»’®]i¹ìnÛ¥¢`6ð““ÙÆB–íüžT¬àç¼…™öqEÕùäù¯~ý#O½ç=Õ- 9µb)V3‚k Gǣш._¾ÌkssÔÙߥd—lo™AJÆô™Ùs&0¦ËF-Ã8‚qÂ!Ò€XbÿŽÇ¹êi3® ¼ó‰KPLR4ËÝI·HXÉP¹yÚæÆß¹£üþQÿ®÷?\BcR©r­dµ¦T› ›¡°16bž˜";Ó£ÖÚu.uhír‹zÉ÷Öy˜9ö…ek4d¬u¬ðlŒ—€ˆ Gg6‹CÛ9@Ň™ RX  ôà¦2|g ”5é† (‡õM+PŽj˜Pu¹)†#øÉ ˜8 PŠAé RÐm§W®V®Ž7|ùbïc"ˆˆXÕÛ d,ò`Y¬ñ…åaæ8M õ[žÆ$œª”ëæ—ºåj‡QŸÆ3˜>7GMß¡l²x˦TSx‹`Q²#"'¤ž žU£NcþÐ]Üþõ4‚ÑŠCVd¥%~á3ïÇÃG£Ùœ†’©…‚ ò¢1 Zå&''qïý ¸ç¾Ìí¿‡|;ŽÿýŸÃÛï«ÚŒŠGÿ¦âžÇcùèîynA‹g¥((GBê‰È¡dg¬hiM©F¼åÄfT¡Æjµ¦éÜåË´òúx}©Ç}ÊØrÂE ˜m ¶ªÁ•Túªˆ@Qzvõ Ò#ške(9ì®|ŠªÂ˜ªkrû¡ ‘/,<€P×%9ï1=3S³(«Ƀ(ʼ ²a¼‘oÜNoí[JH$à"Z1S ^•!¶ÆÂ¯&÷jÒL_ËÙO&”Ì´©µ6MÓkÓÔth4QԳ܇˜Ü0«X«"V­±x"x@¢þØ{þþ~xðöÝ8Ÿ M§mð¡w6€°uÕ†mnB¤[·}¦5;BÉW¥d@åÔÔ¡ÑÚ¡`kMN€ È¶z|ñA*FøÌ'[îü¦Á(E™å4‚jD^9êp*Ô Ð7ÎvÎq'íÐL¯G—×æÈ¯Í‘í ÈÚ˜¹ñ0ÀM 6°Ä‰Öˆ‘5ÞóÌ‘âÕS wößÑ8#. øÁà-GŒÆ(¦B´?’Œ(O}÷AVŠT)ˆÏ4ø@Á‘'ÃJ†c6CÞXßäµ%ÏÉÌ ]ž¾L3í+ÔY‰(õ–¢Æ€3o8EirÏFI¬uAáBD„èƒó£¯ò…»¼é8¤Ý^µæóÕÊ Óã=\³‰¼×¯æ¥rE¶ç %«rìLȸF ã]Õ I#ígUýè]YÆ–ЧßÖ:BBÁø êÅ'Ay6)J“yÃQcÀ½Q—÷%–ž|òÉ:šzëpêM uÀ‰úß§ÛK´Žœš.í9Î|0`l#…±êXÔ«Â4zhþé½´ôå…qnåGc€µ¥Šñd m ñÏ~óCÐØ£LK\ÞÊðÆÅ-\¸ÐÅùˬl x‹ù=-Ü÷¶ ¸w÷ζ0ÑŽª6nlð/ÿ°~H{µÏUžæj"ËíË™µo-¼ëÀÏ|òÅKÿáXÈà eË"&Œ›»Ðð ÉûKœ¬Bо~2'‹M¢´`C–[ ÏÅHŒ1dUİÃoÝÿTï{oà¶KØn"2Ë(CÀ¾¹y¬­®"H€eÆGàC|ßûÁ%¼z>ÃXÆ}÷ݵõµïá¿ûâ'Ð]ïáþõ×  œë.!—»K… è-^Zh<0óXz~ý/ð†Ø Î¶Cµd Öscõ–»EM=;sëgAg@®tBŸ]_Y#g0ªÆJG QϤїŸÿúá›5¬~³p}÷„ßü»“°Y†qˆPކP‚”u¦v!ERùy ¿ l3WCõ4ØÖ”xDaœƒm6QÈû=ÄN} ò?ûÌüÉWG8w¥¼Þ o, |ã[ß>öBð`r r¬ÁŠ8KŒ1†S2zmާF²9Hé>ß è”hŠˆ³ˆ9°‚MiÕºB-D]{(¼ÞlÒjÚc?šå2/¹´¹a5&b…ÕAS¨ƒÂƒ•ŠÏ ‹·Óáfã˘Çpù;°ðý ÑYàÊ¿…k$Ð2 ÛÜ@41Q}h¼ÁkA¶±f‚mµ¡a꼘ú Šü.Šþ.É}PüÈg”*¡Ï)ó¯2©W¯bH, Xæ*œZÚN9 hYœ9E+½#„gÆ]_o<€Æq 8N=¿B8š8*zmŽlJ>/X½ã" –Ö@-g ¹ ìW{¯âÜ?²]XÑï AL@àÚA'Ш€pOÛãž#{ð¾G÷V–SãÆx((k¤@µ‚QZm`e¦(rÀ9ÝñäïZ·¾ÿ ÈGPo VA–šH™)7E†‡†Û¾¡+Í :€&\ÓPos;ÞCf8 ¹1FÀVI,±8 ì•àË­Á{†jø‘CI ÝöÙäy U©ú¨†€Ãçðã<´¿ý¿|Uâq8µn`8,ðá÷?€?ÿæk3,Ã!r ˆïîØÏ]c¬žJvvý Ã|_Ré +DÖŒU2Êx¾É9Ùäææ„ÀoÑÄh‚.É%,[+\@ ‘5Á²V†QAN þСƒ‡^yåµÛ[µ}²Bñž‡ ]Ýy=„m‚m4·É"Û Ò´êé6®=åJwšU!ÕìrõþúÛ8B9AE÷{ð“U£{É@EŽÇ{œ[.që#8®Õ¯âñ'Çw^|ñÛ<‰8…± 5 ` [nNæÄëŽ'çm6»H|J]óüx`ROjœÂädœ%q¤ÁàE)Êÿúk@]Ã|§{âXÏ!NGøß~ò'ðé߸ô½»®m¾‘ðLy‰¢z.ß•!ûæWá{ï‘ìå¿~AÀÁ°å‚,QnØZ SN'•íp¿ø­Ij¢‹É|e´”õ9‹[슘 Í ¨´ c9¨ÁÃÀ?9Û8òÕKƒ]©Ÿ;Ô®îìz±æ¸’<ˆÄŸA1Øiöæ>¬ý{ø E¶Ù‡ƒtœ+¬¯ËÕüD ìû/èm ) "ˆ:“ØHçàGÙês<y€÷î‰üõÚè#Æ©QG` –ÔW&fŽuÍPÙòtøô ´¸r†NœªNâ¹Ñ×ßbÇR,ÖaÔ#G¢é;”ØŒÄ[g˜†-ŒB,ˆ\qªÁïo>ÒM—îÈñ¾©騨[]ôMö@äŒ  Q ¤aÇ(î܈ IRÕŒIA(‹·f˜Ð--˜zèªêƒ DN!V2kY`Ä1‡Ìpä2ŠýÒt‰{çαmÄ4{²(x³˜2À°ÀJ«ªN•²ºøþéw”˃¼P€!®qÖê´‚<«ÂtÄŒ©é=˜ßÊæ¦#”%à¢eQ Ë24’fí­×]Œêý½2¶„´,PÜe®f·ŒOÛs{Û€Ô¨7ÊNUœ€¬1jŠ &EÉCʹOûaR¸9êÓº[gç[k87Ì”©!À@ÅBÙªˆ¨?zäÁ‡®\ºruÕÛ$²Œ*!±EeÔP²­M€ì=\#¹ú[UA¶Ýê5b„,ƒ‚š¶‚lˆØÀO´ªˆ!­ÂW †hNX„p§d'+!ËÒ…S%§#VU,AMa˜3kx00Ülg„n—ÓÕ˜ýhŠLšQÏ ™ÙrÃf%Sµ,jêìäýCäÎdl(¾úØÃøÞûnÄE‰˜ bzëþDĈò¿õ‹ŸÅfã.Ù“cÍ*ªU:üq"u uLìH`ÙÁ” “ÕáTÛsìÍ&»fŸÒ¸ŸxÚÌ{Üp†\‘rŠÜJC0$–­²: ðƒ~¢”»Óëµâ¹Ä·Ó·ƒš3ˆfönMõÓÀüßÚO!š{åh£Zû’šC”Ã.¢¹Çö{€¹ÿ ð󍨫?=“ìÁ*ï§ò­ØºD0 ø ðÊìTª#ÁBY‡S‡ÜrL½Q—G‰%<ù$v³So$76ŒZåŸEF½ì×hkmD‘m’d†Õ.†ÄUcj ärëà ‡ÓšéøV„û„ U­^Q :ÓÍëöG½=QÀL6ãíÿ¿eþ&Uu«ƒóê*‚Z2ÖUSŒÚŒ%qÈ ç#ÃqÜ"ßhPo%çÁFÁi¿`Cž°Œ3^­1 «ªŽ•]v¥w¸åØ>æG”„-‚⨠ÃAÕàzß¾9$Í ¼sa E9Uì3cyå â(@(¥*ˆn·üö°4H¸yÏÉÛ©DÅÆðþ@ð ulÈ"ËeiY`‚M!Ï%›Ä‘kÅ4h·¨™5)Ï*ã’Œ1\fµªj•ȱŠFOnõûõUooÔÕ9}„û÷3ÐßDÕ T+cvͧ`›€ŒêÜ"PŽF(úýš]l€b0IÏ©*R…T£FÈ+J<€xx_‰þ;e·#TÑE^}íõ…¹½³“JâjUÙRu3†Æf)[;ä,oҰݦ^;%ßN©o#æ¼AœfÌ\páÉ%C K KPGPGÆG¨~’w'U®»„â?þaø<« íåGÕ +°8Ú Øj;õü“zJ—@ûq`æp÷|੊}]lA© {ào3Ÿ&ž™¤rê*•nO5ŸƒÓÁåw+àôVvIŠ:CdÄ*‰-Ôk™mixT y"24»²‹z+=ÜòêÏV?ÚoôhßàMNΔT¥ÂÌ CªF!–ÁVnXöàÿŸ¶7Òì:îÃ~U÷¾åû¾þ¦g03˜ƒX¤(Š4%n©}¡H)‰$j‰eÇŽŸcÇ‘'´)çèXÎÉQ,'Rӊ䉢%‘ ."¶0ƒeÀlÝÓÝßò–{ë—?îûº{€`¦»Qs¾éí½wï«w_Õ­ª_U­F_6FÉãMti.19pøÈÞ+× —ZÔF\Ý<@=á²Y™¢M>°~? KJˆ—(¡ž­y%\æT‹àÔÏ’ïldœõ¥(z’•¥ør,®ÌÄKP'QƒÕN ®Eô&ââ fn˜¿‡œ!f76ßõ}îæ|€÷Š#GnÀÁC‡qô†£pYw½õ\ŸÒ ¤nðþï½ "9вÀt2E]×8pàC/ÏñÇÿnºéª:L–ž‡nZÏNç4¢wpþ}TÍHfñ&꣣+ÅkSWIÐéR«S º27’^Õ“zÐïÇê+§RM v8ï@ó=T}Û¶o¾hÀ+œ[ ï|Ã0Yy]ÿ¹ve%ýݹuϪûˆ>\õ­,®v2$"å…EÀ ±úœ%i<Í2D¬›„ìzßÝvH1?P¨]EDç 'ع}û;@ñ zB×Ωª÷NC(Åe#í×µ”ÕP¦K¹º¦ç*õÚPœ²u1¶^gÑ2!½2{ñÔQ^ć«§IYâŸÿýai0€bÖ@ÖsvÓŸ™ã^H,ÎÍáÛoo×%¶_% ŽGðyù6!¼)|Tz…8§Ò:mtªS/4ëO¥•ÒgÒdN|˜j–;uQÕyQFó€y€'‰Ù¨µÕwzS –Ss6 pËI)ÎxÝL‡Õ@~-äÀÏ‚;ß ìx;pðçòúçúg,Ýψ/à…z«%Þår½®€˜Î·d’]`Þ Ô9/¢Ó6ÔÚ÷óÒfNªÞiÁí·¥ó_Ù`¼¼bdwò#Ÿ;+/_VüPOÕ§æU£ F'ŽTOЫÒß´ûÛß%S6ú˜l{ÂPnKyZ;‡%n½awjB|%t)˲j0ܽ A» ï§XÙ zà Ã(“£èÆ]ßñ.etô¢T49UkT3WJ>ª%[™ŠÅ¹LT2'*™jîÕŒN§JG'àÛçG«ÉÇáí¬ásºcÅ߇0qáüìÞ5‡Ñ4àÖÃ;ñ ?~;Ðv)1¢øáw݈w¾õ 8ˆáÜ6<ûôqÔM‹#‡"Ï~óÿú,þÅ¿þhz— ÈÄ£Ô|Kª“¤bû„”ïVÀSà)âÕÑ©Áŧ’é\>/®ôâë\ŠiOzƒ©¸Ñ²¶m)µSmªªj²†èõ øùÁ÷ýÀ‰gžë»š‰¥ÜÅ»nw©& Å”à ¦ÔŒUꞘێÔ'3¹­Ãd h ¿ÿË‹ u#Ô€›5»hHWjhÇãÕÍßÜvâú½~M€]ÍM@°}~Û÷(˜”"àà4І ó\¼¯´i{24R jɸ^_&êµÖVEœŠ$ÞFK#Yù½?öýñ¹W9§—Ó}·Ü€g®Û ·ê…ØÚØ".º¦ ¿ýÞwÁÙU½¾èRkÑÔæØ7Ô^˜,EApŠÖ‰8­k§Ã¶Wö$›ö¥èeZŒÄµS ÞIîT'ŒN Ž¦Bÿþ£;Þ·‰½ÆÚ-wމ™'.¶5¤< s{*!¢€* )ÝB¬”‡€ÞÐXaµ¹ª&y‘ªÈp}„¶Á×&G1S伪2®Ó *¼ÿÆáû ô4z@P:^ç3§U˜j›©û0zæÉ.mãžY0ê’£¿*•H˜Ôwà¶ÛÆÉvȼ- }Oü0H3U¥Sõ5Æ„òýM»ß~ËÓ näN_6|DĶÝLúïã£ò ~òGïF¶º{®š«€ÄGvã÷ÇÞú–Cxóö˜4-=šªólb‘ '—ÆÍ{ßvËgîÿмŠ8œ9U†F½ªÄºÐ"+-ËKY) ôraîŵQQõ’itµógѼˆºá·í¿eùÁ箸„ã%ç×aŒ„qøM=üämwÃ÷¼óN\³gˆ§Ÿ]ÂM‡v¤®RLVc‹ýð­(zÏ¿°Ÿ¹ï1d˜àŽ£‡ðm7ß•ñƒùï|ÛM8qì$;zس‹8÷7 u›¶ ˆÉ“ç°í o½ðµç¾BFoIÃ8¯­Ö“ Ûû™4Ì%g!“Åe¯”Ò.HEic& ƒÒAÅàØ¹ ?û×÷o !$@ž‡w­!Âxœª)9Ÿ¬»Õ[ï¾ñE×…À%7êø²#„ß~'Bï>„zЬìu±B4lÚÔ˜ óËK°¶C€8bÀm3œx±sW—ÛJ_ÿÖÈT¯'3à àT[uMÐà ){­ôšŒ1†oZ™Zй<ŠªWaPÔâ âàà„âhæyöÌÑÍ8QgŒ,­`a<Æ^8hæ7Ny¥Q€YOÀ¦®0÷â ©ÙùF.6¦‘Ýz× á‰G= ©¸„¨ŠˆB‚Š˜NµRmDü|OÆ“½a&íÔ‰ïy­¢ª³Vœ¦>ö⢃C¤qnÅ] ˆË wï8ƒâ §oFUíÃÉŇ0­[X 0ܶ±2™àº]|཯üɧÁsgV€PaПƒóª¶‚‰¢p{çÃù›ñ®kWЗ _^܉Óò zŠ^vÊ8 8=áQ@¼9qÎà"¢£©zP[4ª¾¹‘ʤ¯ââx#¾ŠE¬ö»¼äè—TŒ ¾vü‹Ï\+ƒ½c‡Z gbM¦ Pº pP‹âDá@8§zÓ4¬lÂVLäTfxç®7Áb…·ÿøîýôƼû  XÝæ\í’íbso½ë šxÿÛ^‡×õwÁÍøÊâ·k~õ×ìhvÏU;‚ÂßDà!Q838uA¡ôNǵêö¼•Ì×2Ê*ÙžOà '\î‰f”^T MTqNPxªª7n /iÇlqýÿ`|´,¡ÚhØyËn IÌš› P" ñSï¸(3üÌÞŽ¥•7Ú‘Žgª$Àãwí‡U-\pþ¾ kѹ€g/M˜ò&|§„ƒ8 0õ^E¨Rus"E¿B³ÐH`!«5Z­jª1ÐDt ýùó „Î æzŠ]½¨ÒƦMÂp®¿îV»§>ñ"tU¨b/üÎ7V!;øƒ°g?ô€µ6 ŒÀբЄËsh–ÁÚ€Ø4ð½P7¸éú9„û5éÝ>seeﲤUT"4zQ ¢ÈUsWiÛŠ Í10ßkÄÅQdŠX‰D§Z!NÁèÌàʼn Óё͸þÑÝó{ž8ŽÇ¾ðþèw¢OEQÈò*:Û»¥#Ù)áµÿÒï.zyÖm¬»¢dD †¦m0O0Îsüî“Ìacu»Òª'ÉŠ#€8¹R…œ¦Rä*! QtXН*Éç'¨¦™”ÛŒœˆ Ö¾±Ú©:fNR΃›;²A†®›&Eðí;Îãï^“ ¤üÒo-àуa‚ж]H+âíßý@O=ñ8æwíÃŽó€ÿ˯ý2!âð–ï|;D~éopómwâáo>„Þ`n9¸¿óo_@XNž’§¦RL}p˜„xD@‡|uNEÅ¢3ɵ'ÞAZ·"ÍÒDï™ Þàø°–ŒørzÅ<ÆÛîyXö|àv|ëéç¤v­ nÄ)Å¢(3QGhj–gîÙ ß¼Úž —$Pº ˆ-(@¬j|ï[oÆžm} †Ž™ÛjDÑ/ðþ«·bû°ì*ãG”®XíαYzöÂ7ÅH§ªêT”*JPUF©§¡/¥?)ÄO ŒªLú™™PZ‰ê$/ðJ‹Î7}âÌæ3ú"› &%Ú-€õ®$.rEϪô“€L[ì)v—˜TÝîm­‘uÖ&!9ÁY2û†-‡µyLž8§B8ˆª@4°u*¢mmsÑiîÅ“’³j©@Ù–2ç5‡I0/UlÔRå.GÊEƒ¯~^s=HÚ̺,€úì¢ã~±°…ˆC;ZAvðý]lpÃ#ˆùA“$4Â’ï´€X Ìâ3$Ô{° k–“¶o'ÚH”Wón¬?´³-ŠƒŠjŒê¼Hn”ˆ\ 8Á6EžOeÜ´2°RTjQuÚJP@U8§¢$]|ú86§ÓÄïq×g¿=>Evxü¾Ý˜ì(0íghÔAUáU‰¤ÄÿYgyc†]÷ˆ™€{wÌ÷ð¦wá;~ë?£[Ì 8l ƒÖ{xúIæ âÕáoˆ[n»1Fÿe*S˜{ÂLpû]¯G¤áÌ©p÷›ß†§Œxý×ã¾ë(â4UÎÙã"jS”º–òu•l]ýrli @œ¨*,:£S˜¨PU½HðÙ6=ƒ€1÷äì#Ÿ{ÅÚ« Úc_}^p°|~*0Ài.N½85a¥EµŠèÁù;Þ}õwyêzÓ ¶-~égÞi“RܬKM‹Ÿû©oǾk¶AÙ-ü-RŠp`ûïVµ-*£¨/AL¼ËÄ»V²i#“¬–q^‰Ë3ѶÉœHLqy˜Š]ÜF´wÓÞwmv^ ±˜^€vq-C‹ —ŽÇ^‚dÝw«ß¯;w-¿19*­îø»áxÂÅÔ?ºçÝ$œN@Í4q"…WÑЈ¶^\SIVWR4µ``ÐGŒ™mÕ{/Ž*tN„¢¤é÷¾çä-Ñ/h§£uÍ0fõÇ×ñT< %`©ci£ pó7ì\¥!ƒCÓ*Å!c0~îå›Au)Ÿ´«[ †CCÜÄ2þÐOð½&¢"¦*¦tN̼ĘI£´e¼meÚ´âÛ ®"ÁDÌ$÷^DL%ŠBL æzïÿ…ï³åóØüƒ'zB|QØöìYlûÚIÜôÀúØSøwssø£×àßìߎ²s€Ÿø±A†›Ëñãƒïß–ã§¶•ø±A¾öføÅí=üÏ×ÎCþïÏ`ðïþ ƒßü$äß?“Eü|°ÿôy°Ã9lV­ÛÒïÿ…÷A¨Ñ¨EE£Š§4mP Q\Qˆ¯kÉ‹JêÊKQ9‰ZuOâEDÍÔL”ý…×íü¾ ÕȬΔ‰Lu—Aâû¾óF|èƒwc–ç¼÷Úë°{×^L&cÔu¾ð4uƒ_ÿ•Á¯ýÊ"†UÁÜpœzôs°qò¹ç@wßu?ðÖÀ&mž#f½h6O‹•á^·óûHQUQ5Q/ ±hm§a¬R//ÈøìúN—Gà\Òb¼Ôt¯¹8¿ÐH™GAæ/^Ì¢BDʼn B—›3ëÜf'PuÕ 0šµü—ÍÆ+-:Áe€f¨¬A©Å+4‹½rZ©ÎQ¯&¨ ´^Ú< „®‘}¶a´©D²y‘I#â(…(ZETRE¡qqºiÞ®Õ?%š @û‚Âí `!Õ9å+4Ô}õ« hM*©ã’Eº6îÚ1›¡vqU ¢¡55ñ"eÐDœk2߆ª<+ͤ‘‚XÅj/`:ŠFSv›ŽÓgξúÀ—¹g•µõbuÊérEÑýyö´˜”ØÕ•â´‚Îc³î™Üðš?_–Éj´t%ÄåëÄ>ÏD:dj²ŽTfa†Ñ3Ï<'J*¡Bƒz5qb  BÒ’!`ZÑ RåQò”Õ  ¯Q@'m4'ŸÚ¼u•3ÀÉè@²"GÈ7Î÷°·Ì€^g¡¯:Öz‰7‡¼bñ-·à?þÁá=ÐÛÑÇëo½í×[u[¯ÊƒM݃ žpŠÌaÒÞxôÚT3¹C»,D‡L¹Eóžµ553EáD`Aá)R›X¤n7p N¾úõ®È57<¹"°};POƒø&ŠÓ(QL¢PL(¦ʸ^Ú2¬˜Š" &¡ªñJ§{4ÃG)blá4å mEoÜ, á¢Á¢šPb0 Å5Qúæ0‡‰ÏeRU‚¼XG‰*â‚×ù„TÄ Ú.O7¿ïî°E”äôW ºíˆAÌ@Iæn„›¿"ÄòÃÍ^* 6Ga¥‚¤s,‰XL€H—²f§™“¹9`ÚT цBòd5sÕ™NH’BR–6>¡ÙË­k„Ÿ)ÆUÀ•PŽa´¿ÿ{VQ»3¤¥Îßæ;ÛÎ7ÞH¶n<8u F­+Œo3ñÆnåÅÓg„"BM|¡9¡9ÉÌ$Æ(!„îÊCÌu‹¶‡o‚H£€”h¦N(áÌé-2 ’»aÌ.ÎÊYÜpNg¿èÀŠ–º;˜­ûð%?§S´?ÿ7cqBU­÷Ùm’ÂÙÜŠ–,m‰&Už¯zä`ˆ”ûÓFò,S!¡AHêéI³5¢–€ Ñí‚MÀ7Ä®Ý×Àh¦5¾ómïă܇HÃ;Þr0m€ªÅûÞýFÌoß• Kðê`L˜„h†;o>„7Þ}BE¡Ñ„ º®xÅféô¨’JIív)d9²VècÛ6 Í.¬öÝX5/û»¬¦ùÕK4tœŽš$À; £ÁÄÃÃÁ#IpJ§›¼ÅD"ƒÇ_ž¹T·éBÔ—$IÝâÁ'Ï=× ®Í?­Æ&iy©K v¢'ùìïU.UÕ ‡À´®¥j™ñ6˜Š-Š™‰*`õUÖÁ¼Íø(À£GÈÜwÂïx¸ó-7KFßÃ0Í!Ã[áv¾“g8÷)·%ü\OVµé­ë>Á‰d$¶"Q¥`ÚÖ«ƒ&aÓGŒQ¼™œ™ÀJ ¨2™npÝ Q5;“€ÅQ…zw©ƒ!Œh²$óÝÐáa$[hövˆ-òýß k&H±­¤H)nv™Õë¹²vãB€é8B7±\Y^IQRàs³µÜ¨>¨CªmWWÅ( ´fgÌ¥r:€p´„­0;_Äêm;K¼D[×þh#4©ð¾wÜŠÑxŠ}è§qï½ßW¦„K^Ž®\#Å9@Ø%æ@§m`ˆaW†4ÔSA Xaq @àK-·¦¹HwŸu~¾2À»š0ð¿úø/Þÿv àä³Ç±°x»†9~î§¿ÿëÿðØùðå¼ß~×.XsGoyξð_¿?òCoÅoüËM ÂÁ¡Áƒ£møÔùíØ2­$^@AEZA:`­ÈÆèÅg^uàWß\ŽÚ:H&>“Cjg/NóÀfJÙ&’$óøèÎ4çðý{߉}±±~%—!ÏÕgpï¹°–¡âÒ ¸UeØ%µŠQLT4Cr+Î4cçÛö’óʵ?!Zš‘¹3ˆbVKc3´*~¨v«Í IDATõ© Ëßl°ë]Ih³jWû p-æñÂG-¡.·(–°žL¸ºÑK‹8Ã,/° i'=DâïÂKÏ¥‰Kóqéë†7ãšØù ,bROºuÇiÐR—s0þº·wÖâz>'A£;n‡û|2þbx@:Æêñ$4ó’b¦æX^68]ѼJZ+ÈíR{ u|‰1¿hALÛ SéÍ,Ù@¼GçTÐ6ž¼žˆ´‹Ï:c]U€¤¸ØdÚ;4 ¾¯þ'?ˆsgÏâ–[ß„×ÿì?Æ·Þ´µÍFÞ JèT…"ÒðΤ‡´j{0è6ÈU…Ú¦‚Ÿ^œµáÚ¨8#Ô9T+@æ=2ÙL¬ýÒc$ÌàumÏ0€ñ¥ÏÔ,g:·é„à—ÏlµäÐÃGžß‡½f­ÐI$¤Š(…è‰&úju›Ùš•ä®® ¼GAÓÒ¬57þÓ3{ð'£pLÅïɵÏfïá²ë«Æä¢ŸŸ¿¢ë]ÕJêÍ¥”ѧ½BjØU#U¼f¯}†…x™•³AZ#4–ºuo¥! $>Àªp¶{0F΄G^z–eÆe]õ0”Y΋uf€SG¨&·¿ßê+’ôŠåoœÄâK`9¼K>ó,–¿ö àÖòî¶’Ô;(…*$D qlÔÝßÍçìeW,¯ž5sŽ •´n“B"Yž½lœ+!0®3c¬¾àzѵº…¥½´áŠ D[ÕÿÒ8亳¬ü05&¦~XuÆwÇ©ƒz³É€ÇN r·q+¢ìå‰/ˆˆ^T]ß8lŒÂ{–YÆ^æÙó¾û[L•ˆJ ÀYJÞÑ¢à,ÍgS$éù¾9kP1Å®&Ó)z…ÃÓ ãÍ_ß _}øTN‰ ÚV)ФMH¢Ú(\âo/óì˦dQôè‹Þº›ºx×!ª,œã†;\†(©ø·–Jˆn¾ŧM#¾±ÒÃ|ÖnUÿƒ‹¨Ì”¢JÓŸm”5ËéÖñ±ÜuÍ-”ËJ¿¯«ðL÷õ€"ú$¼gï+#I¡ )Ç ¶¼òRòâðèâßnÁ•:÷ƒóxtñoW«Zl¶gàK©pÀ« ¬ÃwÄ´™È³Ü˜­ßk‹4ƒ  ËH5"ºNð“ ©½ y¾_™:ªJŒžŒÝÖب aI´6z-Öh?KÝ@I#}ôÌ‘ÎL°Z +¨}ÆÆ§u›„|‹¨J‰š”çë¤0ó&:Ç57¤{Ék%ŠÔR*00FH±;Õœ|ùÕf'Áõ®E/'FZ'_R€‚$dT4Á©…Ùu6öü¶mŸ‡PhÒapR»´rlVá FÝú-]C:e$+H…¡ŠçwnɶH "¸Ë×PªŠÐ¦:N[ ßx**A<üÔœ½ÐÁ™nM·Š‹h~!‰7‰OÊL•5€²³GXÁʺS\45”ÅHs ¤ª•ÜÙK1Ö-¥Îcö¥ Fqó:é\£Vñå åZ¬x+å­; ÅŒ/æ@qžB²®L'XÆ ²v;`îÚCÎKdã\‘Y°óÀ§_DÒŒ|î3G£&Д¤¤Í—×¼&¥š¼8üõ™û_"^6¾ âé•§qß™/"— k}Ì¶ŽæËkÀ˜”¢Ai•Ϋ Ñ3Äœýа_6`;Á^§s•àbÙ®¹W÷ji5Ó€@¬ó^Â%yE¬IåV¾áú²zÍ­¶ ß9!•„’Ô”ÕȘ‘!§µ{yÉ^Þ°¬ Î6 ªŽªŽ•"‘"‘£ªÚµû®ÝÐ\ W_ýFª”zYv¯•°ûø¤cJÐoGKÈ÷½'y Ô¥øc?¤zÀe ¶ãu Ì%el’ŸÓ]¬…†YeéNÐH1…˜ƒ£‘.²ð‘½,p„´E™y•Óמ®m)hΛš3sÎÔÔŒ´ÅÅ '62àxèÙulšmÚfK=’_=m:,Dèðbuöâý¨¾ùëhžþcÀåhŸüêGþ´çÛeèüM°¶IçÃ’;õ"ÞΪ²(ŽŸL;ÿF!/ çžUS¥iªÞD•.´t£÷ž3‹&džýÚ“’ªÌ̬B8ÔLÁÈ çŸÁ¦› ³û¿¢ÃµTUQEYðÛÿé³¢¼8\õ*<˜5"`‘ãÙ0˜â#ÿé÷AF[ëò…-.>IMëjDT2"´4ïŒ;×ÿ2°ŒG€‹¤“µ(ÎT™ÐÔÔëðÄÖá!V' ƒB¨xt\àØå3\éF«‹ÍΦEàŸ|aÛkb0ÍF\hÚ'Ømœ‰‘jFŒ'HA•ók'}þÕ¯yYº>OêP°èWÌÌQ\fÑ”)Aš:DD…?¾á;¼ QÖИ÷Ÿù>òÔÿ‘ì*‚¶³˜ ÑŠÃ<þøÛÅonõ4/"‚H‡˜ÌgÑ”ÑÕçbͶ­ˆ¥”?›’–>'‚ÑSîcÆh/[ÎÛ‹H‹_ªqæ3uÊ’W½Î¬Âœxê×VÐNg/ÑkÑ+¯›¦“ã*ˆ¢ˆ„¡f™ZFgl#­)Ù«Jb ¨óŠU–³ö s A)10j¤Zrz(Õyø±·lÇNR¬CÙ͈’@3d‡HUHÿ0$Âõ÷C¯û.”¯ÿgÈý[äGù­ÿ~ïwB²9¸ë¾ ±™ `m*­'ë]\ÔA`øúIC¿ìÙeÐçï»ÿ 2)Å™+Õ{³F×°®<‹é”Í4ëBÍ{2´¤ÓîT5D’6ùâ玹C7n_!`â?YŒp¦cÛÔØ6⟠¿wÏ’÷gU(¿Êóbê3üÄ/þÌõK =üöø]äYŽQHÙ*r‡"|ù³ÇºvFªÑ©5š6½Æ1Öžý¢bS—¬Ê@"ëhÌ43¯™IÓÒŒ¦¤™»÷Ôʱ›·å¯>øU‘­–~ìiÄ}a¬ºš’~†Ç™Ç~á:¬ÙôæèrtÓ|Ž{O­3£©ÑÌh–QiIW’>Ìq¹Þɳ{Rçú=·½ƒ¯d2¾¢b¼ý·óóø®=4ÇÍ€ÀÚ˜1XÃÈ–b4§ˆbfDâþí·n]ÖfGkhLÅóÕi<5>ÙÅ[f½ÚEÔ óâýxarn5ùa눫ÿ×ÏßfbˆjˆNÅhb4ñ™kbÆ6äl›’¡®Ë–ÖF8³Â™‡0SAAœ;º×^“|ÎÕù\¡8û© ËF¬®îW1%sXyÜF\×k+×ÀÅ º·~Ù:ÞR‰h©Ý²³q³À·lŠšå´džUôÞ³qŽÞ›yçÍY"ɤÛàü M#G¤XâK®3Sd]¼E·ßž\£6…Ä` ¢íxS®clÀàòí©Vjw¾ˆ¼\1!*˜4ï^ÕPz%$Òê÷Q!ÎG@¢9³”Î%k1ó«,c/Ÿ0L'´Ì“MÅ"ÏŒ-ój¤YªÈ¡QÁºa 0©éþAÀ©`_» @Ñ4 ¢EÜpäÜó±û1RK¶l¸Ä˜åøoÿùâÜr ¬Ë*_S¨­YÁIÄæ×ß"¨â¢£§YÆhÆÌÌ7´¼b¨ ÖeÍ¢é3n/¬ØVXcdËšÌ5ªÐlïmÉ,W)µÞIF¹ósš@4¹H_‰;]¨Ë ¸p ×%þl±Å˜ÒX7ÌPht`¤$¹h¦$ƒÏ-øÂ²1Ÿ7âi`ÇâôU'rIÅÈÕ¢@‰p'1˘QóÒ$äÖ:3"‘†±øåg>ú‰kænت{_¥5AKdpøãg>ŠÿóØïÎ_Ö`Åjüûc¿‹//<ß½[î†è\ˆ{‡Gñ¥gÿèK‚[a´Ö™‰7 æÙÆš½~Åv0eè׌uÃ;Œ­‘ÁhPSÍ¢uçSÏýÕ#Ÿ|-]”Ú5ÿÔžàÔÇ—qnt¢/A¨¾ä… S<ù™çðÜÿ;¾X^o!Lm² (îÄ…/ÿkQ ¢šD¦€¬Y˜0§3k :LjÖù”Õ´ ¯jº¦a´Ü¢Ñ賨JsHÂêÛïþ¶ ™¸³ Ûp@;åRI­N0p–x.)¡ŸˆéwÍBªs:Ëì„PºYéÜ Éò±vŒ¡ð¬»RîV:N¡Å 'k]ܯtÈê#½å¦£€H@rò™ªY¤7çiY4«ëšU–±Ìs6yÆb®oVyöʦmMš7D‚±³èƒ‚--Þ»U"‘ ¦F¼ÕWµ“é"@o0ÀòØðÝßÿ?¡ŠS¼\´Í¬ùô5@ñÑÏžZ@Ö¡½E¥Þ\ý·$o—@1¹ï“Ÿ!)Œ#©ÖÐŒæ mK³ÂzÖ·¶¬Ø¯û¤+, ‘u0f.7ßš¹@£hdÊÝ 0ÆÅ*Ü»©I^ЏöÍ’•XÀ§¾òë§ÿzÝ1—áM×hÏ}§¾þ›x¼ºËÖ·:$3±±PÛ½°o-R42w1¶–,ÆHŽ‚§O£wMàWtþÐ˾&—µgÇßöŽ=¼nºƒ;ê«¶d§l­¦øh™&mµH $8É7¯¹2J)ä^Ëíœ~þy {DšóøÊ©¯`¥!Õ¡y­¦–\ˆ™ä' €ÚšbËQBnÚš•1cVl³¹¦Ç¶î3Ô=ZÞ²è{‹Ð¤a¦Š(†(@ T_;Åh‚.‡Q •ùgÎ`qá|JVŸÑúÂ;¼øüIØ Í^»y fŽYÂåz‚`P¸ d0AÔ˜Gç$•ðÖz EÃbû«Š‹¼bìõ-fª-Í›ÍØ)Eˆ„¹mÃcÞ]ýÚHÖV¨|Ë ùš¥Á™›y5÷P`!"¼øyœyþ)ˆ+ÖÜK"°úüêqAˆ ÜkV°0«œÓ q!ÅC'RAÈúc¯à˜Æï•Åq níBbFD3³Æ5,ËÒ!ØtáJ]Ñbž<Í‹!0R$´?<&àíåÈÜP!´ˆmH›·He‰ºxì‘§Pµ xQ  nßCÞáÔ‰Çpìø ¬ÛÔXM¹,xE™rDÌ6›„ºÜ Ôˆ¤=|dÍò`æ+ÆjÊë°Ýê~ÍÞ å´,²Ò¢‹]f¦f„EtÊ‚vÎ뛚ä«Pe9Ž…y|CnÅÙç¿„¼¼´ÒzKRB‹S§O㼟šÜ…Úò­v"v–­@à°-×'àÑ‚¼Ó@X´`æYpÑ|4f­±Ø±‡0¼ù€ùáóRˆTàÕ*ßü*€Ûܬ²ž\ _Èéb²25hn^C L/’AÁöù•ÇŽ8²õ.µDiñ œdx~é9,,œÃÎÝ»±gϨK•@AŒgϞŅóç0’åÎ}*«p…—!¨6Mi§~jùØq/®µ ÐM]ÌLÌLóhÞÌš• {yÏàz;3ØBÐQã¨ô&0sŠhQ¢Á‚Ð/lݵÃõ KGÖÇ··ŠtÆlôB‰3þEœ;wûÀ`0·Ê²Ñx„“O‡:{þÚβ|íü¼ÒíàÅë_‰Hkd \€¥X£Öj™ëÅ•¦¢XËv2`—Ø«&x~\pŠ_ÐÄ ™Šˆ@Àpßý÷Üèq„‘1‰2f¬³¢³¨#†ÓÞçpû>À{^áò¯¨?üáóž{>(7¯ìã·ÎœÇ¶½=Ö½±KF+rk)QD¢µŒNbp”Öí‘mwÇã‹_dæ”ÝJtWúb]ï¿EŒp½›Ã…óçpaáò»[·—8¾R7Fi¸°àƒDz½šÕ5¬tÂå:{÷œEB¤~¯ÔuêÕäªà‘U΋7‹„‚®è[Ì$˜1 J¦Îµ„¶ˆÚžXøÖŸïŸ]*T½Å$Dt{¹§ó“–@ªŠªšbyy U5 ¨'ÀΗ»°¬Ûto½…sýü­xîÂà%´uε ˆ̪`¦M´¬7´¬4kvŒ¹kºí´bœ¶ ð–ùA Abt-†hd±êšÉ“gþ|pî™Ãíµ#'(Ï 1ÜÙ 8ç1L°¼¼„bRŠè©g5<_š5O­Ÿ»ð[m#”>ø€èĂަv¶×°´Ì¦ËÛ8^s´2âxÕ删 õ„æ†å0®kæP”YWyäåãLüšGˆ›a,^ Õ"¨Úé§I4"h@´1XP‰Á‚Ds¥‰¦E°:Œ9mæ8.±9¼ÎÛÜÎÂúÌÍP›±µ“àÏ’°jÍØh¬®ïµ×T+Q/ ¶sp^.‰(#i8â%E6·|.„¢80¡ÖÀ¡‰&­ˆ¶J—gÁÐZdm}d6DnÍÜ”;cn,±_ö9+CßB4#DQ 5ˆº–ÊVUšG=ö™5qÕ³tNðÐ dI[ˆkænç¥À›.ààþëÒ¯5 QY­Mš,Ng#1!ü-Π™H±Ê°ºz?íÐFÝÐÞdæ$|ðÁ¯|BéU¶"ļ‹Ã¶¡´É$g¹²Â¹^ãÅE6ƒE†•’Û†µÅXš©EFï$P”ÚŠhCh#ªµÛ{R3“«˜ŸÔ"Ó ¿÷ÞwãÅÛaê°Ò+±hï>„Ø[+Á—Ò5ܽL\“Ž™"“ê2¤ç’öʄ߿Aê<Ãÿ÷O¸J»jiA~ï~Lúâ_Ò¥¥!˜"XËh’GÆÜÌ‚…Ø·8Záp_´ñxÌX­-‡ÖÏ+²h”)1‚1ˆæ­š´ ß(]}ß©ÑÇ÷\÷,·ú=L2uâ{ðP[ààõ».+kNŒæñéå9¢v5¨·\×õ3Üwfòq‹hT¤Q­Ð¥Š”)!6yÏzÅœxÇn~#{ð/×Uv»]Ö•JvvÕKãŒÇ#ý¹1{;|´±¥ Ò2Уe°6F´¢RŸY9õGvÛ{ž^|èUoñ⟒ÛÂy‚Ž`Ä h/¨KŒN P „Q†“ªÅ÷ÿ£)Ž\³ £I…³ç.¬¹_ºjç–[|ñŽ¢È\fÈû Š]5ú{Æèïš"› pyrU‘€µk`ž$¬.ÿ‚­õ í|Nž{ôÏ)hh„l½w­D-\È„Q·#s–ŸÚpºÄñxžõŽe`ñâ´æB•q®WXæB4EŒÁ‚SmÁÐz•&MsnôB¾{5™ö h}4uÆãÕ]65¹àZCïu×`úÔ9\÷w¿òâg p8´ÿ„hxîÔiL ÆºÞ ™Ë°ë§ »î(Îÿé· ê0yâtBkÐÎÚ“™ëš‰gW:_"騹›÷brâôŸ o!ÿ?qo]Ùu~ûœsï}#f PÅšY,Š%J"eÍRɲ&+²ìn•ËV·å¸ÛVº;éŽĬN¡:I;N·5ØŽ%§'öJl§$[ÖdY¢Ä¢$Š–(5dÅš‰éðððÞ»Ãöîï5°8ÉN÷Y µPçž{îÞgûÛßfç™|€xñ*0S ‰x=Ë$ ¹Œ†a9Ó\” "Œµ¸}¥D®šrÒ Ì spððâ•'L–@ö½ï:¾üµo½äu½amXMN[¼cª ñ)Ø×ú˜2¨íïÕöAt û÷nÃJ£…v'í5’#Âf‰Œ»jðÐì ŸÇ–b?|Ú†Š5¸Ìø“<Œ1[$%ºái¿ð ÷¾öÕ8sæ©€ "Ž>Ñð âÀ,5p%ÜV%™°–‡«UM .¯J£I¹j™]±MC`D‘÷ÜC:˜ÈÄš»ï½?|ëK?ñBK»Z¹€ïÝ}ÿçßy)Xc¶$ÆH³¿á IDATi¨Ñà·¡s¹ƒ'WÀª§|ìÃ4Ýž—©ò¸\©ƒ ×Y,±7!„.”òâœ7š,–…,€âüÚ©o‚ä/åam:1\¡±ðà ØõY« .Ø)æ>ÉO cF ÁSO¯ãömÛQ«$(íÇÕµ ¤i#Ž4æŸÍ—Z÷à(›Å°—b´Î×!¬  CÇŒòPx0ÇØ=W•<¼½FÖ¹åú\{ÏQˆPý&3d¨ †UZ¬ˆ¸ía‹ «¥Ù ²çÌ–%Œ7eÛ’— w] cŒ»C-ö…°e)èˆ=‹õÂÆ° )åýãÈέ>ÏÌnµ¶×œÌ&“±ç¤|Áˆ”_3Œ¡÷D‚§À%†ÜöPóZûvO¢ÕNÑlvÄ –K(Ýyªh`ò¿¹aÃaõ @úø2TÀ\Ÿ_x§Æëx@•ÍýФ˜Jlààb‚cïC(Q()´¢ œp§Ö”AªƒS<²úºÐE©ôŒÄŽ9­ë ¶_O¦´WJ\€X­Å©â;?ü¥»§_ñ®ÓsO¾Äé46ª•^óê{a*îÏMk÷ÿ´N|ªTÁz èçÛK*80 ˆmãCªbqyÞû-¨_Al!ºÄèµ_è.Ö'e½’¯yi×+Ú.ÆÏœ¿„8Š^ÞZ0X¯|𬲯 G ¯<3‚‚õžâhðêä¤L.I¶Ú¡½ím\ f£ÊÁ¢X/ä¼RpÄÚ ¨`…¢ýðý_®ÞõªŸps§ž7‚Øü) °06ŠñÑax£Ókp»YJA½ÚYìTâÜl„'‹zbàƒõ ª•W×ÚÈ2 fAD‚ó[uŠ=gªµ~.*"ØÊÛQ„Çìdz£#˜XßÀó ¡Íž›½VN¥7¾Íç>\¢‚6èàŒVŽ9ò1Ùà<3£ÂR‰$$MÉFic«í Íj" ‚¨Èr‘ÔB‚˜µ'xO¤­H°JP°HñÍK_zõXí]'V_b_Ñ~®º{«1Þ4YÆÊùËWïP´«©Ë'~°‘À›éƒX\TY­ÝiåP£%lD¹£ÙêÀ¹^ùºéËàJ‚¬VÃÞîš –à—6®lܱ²ž•'wDÅàhütÇÉÄÞ=c5Rœo[Ô^bƒê—3‘߸¼ñ%¥¤Ñ…"¶Áä Æ':AR»&qe;o¬erÐfÚzÈÏÇH^Œ•Ú‡”¦ÏާœjE8^]Óì%pE¹à¡<ㄽéBK(È¿éÌ¥îãï,Ü‹wÅPF`×<ù¥ýPZúð\o¤:¹Î¼‹Â¦eO"ƒ?`o~å(ê­5¶õ¨$Xoxà±+ˆ¶î´oq P†ê7˜õ„ÎÕèjkOA‚žC<ßÔZ뺱 m P25œ]xô+¤¸P ÖÊ’ˆó^{£ƒ÷ !uçèJ‘A =)ÕÉQÁÜ0\8_•ÁÁ˜ƒÄ\qQ(t+Œ×A9m`½«¡ †/¢‘ÒgìRôqNíóLî¹’”U ËKù¾»ò°'ïÿÆ;á­F¨¼pWá“»@Å(tÁÃo„¾úM@÷âÖ+¬W ˆÁf~ômP­3S²E踄‰ ÃüÔ%œ_,ð÷ùOñ±»ß…;v`[iž=ÜVcÙ˜¯`+Ò,í¹Ðyòò—…¨«EÙH"«;Òä+P>Í"1s‚ƒ\Fƒë M™kŽ¢>¹Š¥¥1.Š– µœ5QA <³r*ÒNs°BªÐÄÅÎÛ¶ýþÅ‹—~¥Ýyñ}[X‡7ß·ÿèã?#*{üû.ßæîÜeÓV{]MlTÊ«»ÁD1 “-^æ&¹DX`´Æ®£Pª'<‚@ÀD ö hàu‚ÌìK7–N/׆ã]WÒ½ ¯ÛÝHßv÷Ê}¯ÿÐŽ¯}÷ ~ëß|  —Ö“ñÍoxýù'O~É(• QD¬r씓B‰$ø’çÂy)µ¥©«²wiIšÅ°  øÉep‘HðÄš f¥CBå¬Àdó°\ˆ¢Ümû}ÐÉ_y±y gz Ê™7÷"•v *|=ÎЉH€Ž>ÙHñëÛÊð h¥°ml°_e °.?ß‚VÂÈØøóŸ+îõÃ&˜B?2Þ F¤ïè¾·žßxâû_2 ±Ø ÅiQ޼Ò*T ®ž³/ûtTö ŽÊ°†Ñ©Úݲ¬Ž ³×]¶¹g#¨RöØ)GJ¬ (ä-tŠ¿"à=/åHÔõo¬«VéÜùÙ»r5|ÛC³C!»={ê °²Š}WW‡%ŽÝ6 ³}dh²Ô€Š6N,cðÇ÷BXP«–P¯– ”3£yÿEÀjt<° =7 ÍŸ‹j++ÕÛÓj¨³cï»ëNœz4^žšnn…¦=p`ê{-¬E/Œ'mê¼u²zöË ¢s­©ðŽlG–aœp8+O—K56öŠèmƒ2_¾WÆÇ0ƒ9¼ ó/B¾‘ÍÝr˜jôj@ÚY]2W]v\6¸@PÐ"NœvÄd=S!¬Š§–9½£:uª'évë‚Y!X}ró_<йW7p}˜sCÄÙ‡Z•ÞkVšðíÙµ^uÿ3A à;O6¡@¤ Tïëš4Ñaû&{ bÁÓ_ص§FÑë®Åؼç "ì¾ï9AçN`‰É*ŽldÄ)h¯Èø²¡ ËŽM}˜Mm’×:KÒl.ÈþíÛeÏÚ¤ƒ]ñ\¬¤IJ–Äk‰=)íBà~ĈB)•·N]žw=.}ãæÌ‚l}õcñ@>àÓO}>þ¯ñKý.þðì¸ÿÔSàœ´Ýz 0赂’íPÁCT~ÇOƒuÔï7(Á‚Q«¿°)8Wö®.A·~.4;qçÓüÓÇþyðÿÀG¾ó üñùï ð› ´ôs½|“¹Ù´Ñ W7VæLL¯`„¡ÍæÃ×=*(#X›ÅÒ' ã¾m90ï=œµÈÒY–"K3¤iëÍu4›M4›«¨×±Ör(Ø>ZB¥bÐÎ<8q?¶ŠnZàÙ+—Ñjµe)ò,G‘ç(ŠÞù^ÞL´6½{?ÆV†Ñ¾\‡)”ǻޔ¸qU+zøü¥… ¿M„‹¤€J‰( @®H `#£ùȺQÎ;¶uØÌËÁƒ;Äžî@- Õ0”"•PÙ(RZ1)/¢•¥¡U`D EA»ÎEï'·|E¥™ co\yåþ×?üÊIŒH¥±ºÞÅØH wOÝØˆ „ÚAP±1eD• ¹å„ÂøÛ!Ðò6èÎY ø Â\ý6ˆ (‰ðÿÙçá#1"eP‡/ÍâÝ?»»v ®ЖoP75ië1úf >o»é¿×ZuI‰tJFeB¾Ð0…âØ2“ƒÉC}¨"Wæ¼².ÍÎn9]?N½ï°°P¡µŽ¢ˆ¨bY@EÆ(­DCZ´Q¤É(k­Z­µ“~s·ê6B*ã£÷Møå¾p}Ö¢h $•••å+EÞnM “y¥šÞI!…0ƒ+Óxy,™¾2 §Ðö" bÑëˆBhχN‘¬ß¶kÿ¶Š©4ˆe"zëA\]Ïpeqí¹ŽzfltðüÕåÅ¿PW4Rb•*ƒ ¤Šà¼UâSÆÕa|Wa4)¸IM¹ýöÛ¥SÛë«P ;W(JcÒ¹£¬Ò  )b­H)4i¥µr ÍDš9<›˜è>ñÏ…b6§vlÃñ½{qrdĤԡæzÝM.ECe¸±’(†w „“¹Çö˜°+ÖPD˜+¿³Rà¯6,bE¨T«0Ñ­ûpölB/ ²En7Eõjci†ÛÖ×·Ê8èæ<¿P[©sãÒÙ5¡«…º É LÆŠ8VEÎpµ(vAò!Ø¢Íû±Ÿçi‡œîtP¿w;ü¤Âå+)ÕÍN„Н”I+‚U!(¥5)QQVϬçkåb¢Íz¨ÌqP3¥èÒå¹;Μ~ç_ëõyáÒöG~©Ùên¬-,w²æºÛÓDüÈeõ’øô|LÎ#v¸ó$5|5J°}8F}¨ k_üÞ^9·‚òþ=P‘AçÄ)Щ'ãøÑ“ÉèêZ}(Ñ•¢“ÚK®4ÖÇ·¯ÛŸþÀš~òLr×ü©ý­BÏZœÊ ·¬ö9 ×å77GOX³ûÔÙõü„"¤Ì’‰¢\)*”+`çŒx£c_ÖA‡‚¯,wdçî7ÉÄç€ã‡%¼ï{ñ[ ½L5Æ¥Y–vœHR/¸ðlæuâ\ˆ“ØŽâ`*: 1¢ádÏÓ«Å3{oõ†.?1†«§Æ "F/Œ9++pÞõr.Üט|ŽâBoj/\hþüþ+øò·®`d „µvïDŒK.lÙ\go„¹m"‚1Ld011R©„*b,?² .Ó˜xåê-MZèVÿ@$Ë8 ×Fç‚PP0–;¥µïª% ,’ò0‡Á„›­BîáÆ”` 怅{±²ã”Œt9¢û¢PÊ‚ Gš A !‰H(bBTÚ5øP÷ÌÕ7ÓM𦛛J—€óˆjŒ}­!TJ¥­ œ!¨”büóO~ o¿w/&Gj |T4êwCâA(Ÿ.ƒ«„*j ;ÊWÁµƒ b PIOGQ×a®~ ÒoÈ»¼‘a±ÑBl"lé$P‰J8p÷ƶ$à K_Ö}mºA°E (Öe­ß%M™€sR:AAB6‘Äæð^LHˆ_éZ\ ’MÁŽ9LÍNõ®6 4›³Ò¨V%.9VmÍÕˆB <˜Pu¬¬ÓŠ¬Òª0ZçZ«(NÌì[ÞúcçŽ}þKûoޏ¬uøÀ{߈Ÿ{÷46ÙŠÔCDc瞃ãÍÆ…‹º²± k†–e2øQ$/z={¹C’q?48´½Õ¬^2ÑJ¾}r×$¤èÕ节 `ÿø þù?~?ÞúÁO I̯ž·í˜ÄÛßòÚ/?üð#y¬|®ƒÉYIa=,sp&JœFð5¨PÔ=¶Çx¹ãe×®Xpü8¦ÆÇ¥àÐô<æfÇå@µÁAp5 …¤!6ʧÚ;mCHiÐ*…¨Cêôà[ß}Î}åÏöߊµNr¥ðßþ ò p™µHÓ I’ R­n`€XîõpSÔªX__Ç3áã—RLÆ eœ &BÂàÐH©ç¥))¥Pä9:ýÆžDÀ£{wâWÜŽøÀCøéSOö×;àFÛMÐÛvÁÝûcOÊCßÌBP9i_(FAŠ­ŠØE>òˆÉ³!vc ï?ºšš•ãXãÆ«sŒ,Pc|«Ý%v¶tI;ÒBÐÄФŒ;M¤H9ÿÄÎÑò©Óëá•7Cé‚;»«_ÒÅÆÊ=‘Ûù–§KkbÛÊ÷^}ÏC¥¥Vü“Cå÷[@—P4רTJ@ªqš:ˆÉ¹3øÆ#+øÖC‹xÕA„Sg[p‘ÆÏ¸%}½å ô¥žE§ÕD§ÛÅBcÝvíN Ï>ûìµ{‹7àzx5"ÏqñÂ\¾riÚéý_ÄXC°tl@ÀØ[¿÷\scu58dìTÎ"¹xU„@–YœÍ¨F¾m=ëÌr×6eÒ.Éb{^¦³Žá©)Ū<Zì$áRD!’Äk¯´wd…¸ÐZåPœ+„lãÊâŸÖîÚv~Sd‹¼€Ãlò§Æ<Ò¸Ö6òZŸ$ÊÆ±²±2…1”—"•cÎ?õø§ÇÇGÎoáºèÁ§ïxËø¹wß½UOÛÜ»Œ íªï.µÓðt¢•C´ lê¸áàBϳ!o´ER! •€t ª²AJW³´¹´÷à¦H²ë.Ú§‹€v†Oý¢[¼;“£•Ïž<ùÄl)R™1&WZ e£ÎÄâ´‰<@ÁUçÎq£Ú”ZmIæççev|\榧{›—løœœ­—Åû:³+ØS휃ä=´#^Sá‰ò‚(·Jeg~øíßQ{÷ÞtPèA}OnÇÇ>zEуŸÑc#¬µXo6Ñétçyï`{ÝÁE ”ÆÐð(ŒŽPÓ„v4¼ "€¡Z¯ö›;_CÔ6#Ð"Ï‘¥)š««è´Û[µ›Ø^=/ð;‡ÞŒ'·m±ÜSôî}¸ZŠ>»üƒOšroTî… ¯Œ ÐÎC»`È%CÁÁåì› Á°´ççåØ1ôe<8Žáý™4ºg%¾¼(¬Ê!ÀÎ\ÐÆ:¼ ç M*SÁeNÓ´øòíƒÉ huoÔOéÕ«ó¯\¹4ô¶oüÅ{ÚC# ß>pÏWWd‰Íó¶—ÕMäffó!0X¨±!3ÚkWaó ³çš˜=ׄ-ºè®]퉨ŒÂ-.¢ßãz v¾Æ:lxYMlž'Ež=xàž¯vFßö?Ï=+†ôêÕù×Wpº`¾.@80PFÌÅoô£ðT“d¤%‡ 0DVå(Xº.°*‡¼ã¹SËùÜþLÆí¿q/ádú¢Pjï:GéCÇñ¹écê‘.šõa’‘!Ä‘#GH‰!ÒEDC(Dš¼%ÅžÔÒÒÕ'ÆGÇï,¸= èÄãâý{œ‘`¥±ŒÆJ!xü(z ò,C{c­ t:m›/ÎËDï*‹ËAF†Øu"Ùý&%Çæš›–ÆÄÇÇÉÜ~jáõ(_¡´°dHÈ»˜B•‰½¦‘‚-Š Œ(¨¬Óz"Rå÷ÂlVï†ÞÀ½Æñè½ðŸ¾Ãúöê¾VñůŸÂÛßq7†ª½†ŒÊ6Av¢ªÐõýˆ£ZkèòD• V¿ÊŸù. 4L¥„g®¶ð³¿üÃùD½ip½2à¿ø_¾å$¡´›áÖöj¿Ë=!Fyßèùöò¿#R] ê’FƤA#…!X]*¹ØhoÑ ÔB¼¸³¾,oz=Ë4ÍÉQh4ä/_ÆþýûqYwiÂ{ò>&€U’Ä)C¢E™Ø(c ņTE*‰µº}ïžÎòÕõ×Ù>¤ºwç>qô0ŒwϮѿSB„ÛY{éñY3â%Aitz¦ªwAáºÎ /°Õ· )(»VÉ ©¸ºÑqß(º«+ Ɔ‡^ó¼"`ÇÄ ¶mÆC<ƒM¡„×Þs×¹’.¾@D) ]Q:5àŒÄç(7ÆXÏ…‡ÓÞ—ÈWÓ‘ Í‹reÛ6Ù©”L÷b£¿¶ævÒùaÚ¯›èÔ=•ü A3 QH‘ Zy­”WJ)?±ãJm£õ:8¿u·†¿ò³DE×9çÞ[¡—bÉ2p0Æ@ék¹HPªWQäzÎSk…¡m0‘Ù¢“«þa2ívÑétzÝ:Bز×?&¡^ž®ä¾}`/~þÑ'”îÛžMhU*÷/³®uE(´NUÜh)t0–4|Ù°÷. v¤v¯V·_–½Ýq™žž–ÏM40ÑøûèVÁܹaÚ90„«¦Mc6"£ËÄ%"Ý%ÒQ¯vVDC1“†ˆ†H(\cWE?½z[zoFJ&/ÿ]]8ûÞËsï7WW‡.|àg¾–6V[%WHÉ;IæækìÇ7×}kGK¿À‹¥r iÇÆ<} ¦âð¿-®g‘¦ B¹x)4ù"h]°Cl\%ľ“çaÐÇÛ”½¹Gªé1L4>‡ã‡Af^<—ñ’8²²©~´wŽYlÏËš]’xÔ²Î,;­‚Fä­8ÏAœsdEB€œ-eÞR&¬ºk+Ù_ŽW÷ôòŠO"[­€HÐl6ÑZ_‡¾ó£Íðù"Ì—3´RØX_ÇZ³ " [-¡ùôÂXmf»ü;ÁKX¥(#‹\l(œ'ËAœÄìt%òN« 3ËqÛòZ?ZÄ1`znzëžž“Æì”Ü»£-)ª<J\/‡"¢`¼öÞçà¬@å¢U.„Œ´¤I‹8ûL²c€@À~“ïkÐ ‡ÂÞ*¯#ˆL„µfŠÿö×þ¿õGßÅ?8G€®_A¤úúB¢ÚdÐõKÍ6¾ðÍ'ñ¿üï_Á?ò Ô’^¦˜®å{98‚õí´ûAÀ9`†¨&ôhDëó«ëW>ÍZRÖ’r„LŒÊ¡¤ UÆ;‡à°·™õêx¸>Z>°]‚V¦£tÜ?p;àð|ÞU€÷x× Á›î{͹mød)‰Ò(2i’$Y«ÜS(¥l,‰3Þ{ÇÐa°-îÚµ‹ëóó[NqsmOOË¡›¢F¯8xÅ!Ž•w0.…q.ë4N©<“šÒ+k §Îü>÷sáÖª/½•’R½ÖSëëëh­¯#KSE…‰ó¨T+H*e$IŒêÈ0v?³Ž¡K-¸Ü"Ï2lll ¹¶†<ϯ­›˜]7R IDAT<·EÒfô¤ÐÛ_«”ðÛ÷õi «^w~¾}ÑJƒ1)k1©'˜LOËÑ­¿xÓ‡K}±-çög2Tç¼<ÌEw™¹cC4¨wÚyo ÅœëÀy$”ªà»—×øšªþ¡×Wmr½ñ©åÍ{®œÙV]^ÚszúÕpùÜ•ù²·iÙÙ4±yÕk^Â-ìC?jÎòkßý.6VVðñCoGZõB:¿òÎCh]]Aó;£› ›(Ü_Göq­âç²’+²²ÍÓ+箜9=ýÚ?¨./í¹çÒ™mqðíñƧ÷lÂëF“¹ +­GŒ„RãC¦˜s0 &Xm´Sl=wl(ºË\/s§–óp?Zœž;,3/t³9^<ÇxÝ8rdFŽbSÇfѬKûb"Iˆ¹4ìC«C*‰Ë.Ϭ"f«UAs€Ö𽍵Åpb¬<ù™¡1ûñùÇj ÍX^^ÁF«µåÈþö»<ߘ{{Ù¿M„ÕFΘ˜ØŽåÇ&±wªߨö{V»PèÂQ*,™‡Éµ EDd9°S{ŸJ¬I¸Üæ}Y¶g»d¸™;<-8zÍÀ=z”ŽLLCvÿ~‰“ÖèP¹¤ƒ+ JIäÄäŠ44D” h&hR§,§'í6þ¬,âWATÄà ï݇خ®§p.×)…€ú+$Ò WW;øãcàÿÊ Õ+xÍômx×;îÇ?j6¤ÿ]ã_|êk8s¾‰GN_‡€j5Aœ˜ò6›yÃMÀ,Áj³‹ÝÛ‡Ðs.@TKÐ1O ìÄ_ââF—‰R02Eœ#¹ã`#$–ŒvÊÞ%\š²ÓãìW×ejtœ§¦Ìõ˜gŽÌ‘£3GizzZŽ?N»dk-•œã|¸¢(¢’‹•¡*Zë(‘Ö¦dT)e"£ölON ¦úë'NÏ¿û÷îmæ¥7¡ÎÈ¥=ˆNI Òºk4yªßaMÄ÷8®}‹ìRYl÷Bù¶÷“[½âA*ºn‡  ‰†,ÿy¤—.£rû¯J;:TDP:ŠÅhÞ°ÀÀóïÝͲ¦Âã-÷îÅ•†Ãî1þTnu B ™ç̾Ðq\xímìÉ9ûœ(õ‚Ñãq\áù½{e¼Ù¼æ‰pD GÎБéii£!åÙš˜jƒUˆÉ–9¤%ž5%hµNYªã†âràVFè*¢À>Ò BR€á LŠ•ÇìÂÊ¥…÷S¯Ø÷Šu/w»ÇÏ>¿ñâ™_Ü(þr)®Í–}ǶI°YGÑ`ÍËâ³ skBàÒráâÝ·!©–!.€ (Õªˆ×ÖaÏ]ÚÂ+oΦoÒ”Ä:èáAŸØ"' ™dT,ĕّvö—o¸|æã³;öÿ½ÑÕÕÇÞòšÛ0ëÙ¹¹ ¿GQa …‘`9Žrr°IÄ…¬ëX¯ñÝ ãåÅ7¬Ì—Û2ŽcÀV‰ÆKó/=¬Ú¼Ç£ÀÜáiYlÏK2Qp\³¼Öulµ>ë†`Ù)묲¡ÐE°”± ™·*…Gwöôé“sßë|v 2ï-6Zë?túÒÇßÜÑ*¥°ÑÚ@ƒ•qt/|æäììÉàÑ• );Μ—œY fS„\°ì ¬·Z‡µ®cÔ,¯uj²Øžï©.鿽ב#Gä(ŽâØ1 ½£-v´#jlÑá<¡ÔØß+ò'²ÖD*WkŸ18õ Ý«—.œä]É7âá*Ì8ƒUO³GÐsz—/¬@›ç®õµŠ˜~†z¤ë<~üþÙoþ {âäuŸ<öÄIüÑÃé§—Q.E¨V“ç_@ºV>b4a±±M€•Dc=šÂ…ÎHú{Ë/žàÄ)‘Ï”– ÌElL¡ŒwÚG®¨•¼-T(¸Å~㌸{‚ãA`îðµS7õ^Ι™€ññq™Ÿß!Ýn—ó<çqc‚Š¢$Á—‰\±-•’"*ë¼é<‰UVJtǦ»w[üg?óî7|}çž1\³¦r‹íµÉe:J›v¾:¿2u%®ómvÅ_’R-U,ý˜‘ ]½Ÿ¹s?\v?Bz?ÂÆý,î~Ÿì¼ŸíÕ#äZ§ÈD-Λ¿¡}ǹ<ý6)ÝÑuH‘}Ñ„‰@Œ¾ÿ¾so¼ïào'‰é–K¦[.ÅiÇ™)é¼R)çQͬÊ.”‚×Z2&L:“ž‡‡‡e|vV¦§§eæÈÙÔmràÐì¸LM7xïÞqvcƒ\7áÐL¬½Bä,g Y§tî•É¡ÌÆ*uÆt¿Ú¼òÉåéW}“Hp~d$Ò?Ìýƒzð(ðyµ«kh­¯c}}ëÍ&ŠNøžÂÐË·[9|aœ‡ ßwÇùs·M~¥0¦kµJ­R©(˵ÉsèBtbaJÖ%Ư¥^qð>ç“ÞŒOOoæ6ÇÌæ?Î53Yμ ¶Fxå`ê±OŒr±UNVlaÒy Ÿ% ©’Fž»W{ò×°Ôø'‰+º\¿ô>{îFÞû{Û-9—V¼Kck³Ä™1ƃ_`E®û¯Ø˜(ÞÊ›È þ:þÂs¯³u~A¤µœÍcë³’uiÉÛnÉÛîà»ßåÜÓçñ3ëÞW ®“/®ü“K'ŸüG%o»Úú4r>‹@yAÜwŠV9í3oê±F9 ¶F¸œy9×Ìd¼qè†hñÅH7›ã%;F‘œzäÈŒlÖ5lïêD—u=çº1AûÄSˆ|pì Êú A”«2ñ’:/){êt×ùÄÈnÿ©ÿŒýÿ)pÀÈîð™'gŸ=º°Ô¯Ò(å>„P6hv"ïÚ*Ô º•óH¶,oŸæ©Æ¸LÏMË‘#ý’¢ÍCkÿ¤zxzNM5$[hŠ_Íd``g(§*8GÁ"xk.˜|N" ¥¢|—µt–ºþ¼u[þÙú\¾$œ8u¥äÖ§ÁçÞðµ¼`’Äøù_øž|ê Úí.þøO?üÂÇP©TÐk|+qóåz®1I"\ivÁ[@$!'ÔöÀNÅ_m4®œ ÍQÒ †RÖ’Y–Æ.xg#ã’û’ínº¡Ä)ªŒÅ¶4f§8ºÑ\oZgff¤©ÎÊðð°LNN²÷ž'â8cB¹Ì^kr Ä–µ*ây©g•ؤåRÜcÕ½û@íóFúµ-PèEŒ·1Q[“îh­Ûˆ† ¤Û¤hCHm¨»ü8qûs`õ92tŒ”:F*:Fì?§òKŸ×*Z'¥[µAÚlHè¨(”RmmT[C½ ºƒlÎSÅX[Yÿ­íƒòD9‰»IbÒ’QY¹¤²jåq,6Ib«µve.{W«ùÁØZ˵¥%™Ÿß!@ßPß”w82#˜ž–ãÇ, ËNßaïs.op(ÊÆÛÄxŽÈzèå(·1e^'©×:Í#Ó-bÝy ž|oß¹ïïÛ‰¿Éav³nwÓyk¥B€ßÿ[ÙVPX¨âükìü±ÛF>}²»v"S¦ëLÔõF§Lqå‘•¶ˆ­/|î3\Î…å¹¥š`G]Ž8Š™-c@›FáÈ967'ãS ©/¶e×ÄîÔrÎËÃäA(¹Ï|l•«FQaXŠÈë J¥“ÕÅ4q>ÄÞrl-Œ·Dì5­nxJ^À%\/ŒÇФúô#Ž¢ç-¹¶rÅäêU¯êƒy¼Y‡HÈ:'å zí«OïiRɺ4”";ãÈ'‘s(ÁO¾Z-;çµÏò:ÒU7ˆ*…öÕ6WË=µÑ>ÙàeE‹ÀËtŒ""´‰AÁ±)`z|‡ 3+èVYé@™¢€8&›È+"rÄAù@ThRø 2wvö‰„§ßòæ×ýƒï<ôƒ}ÿ9šÿÈcK`WðÖ7Ýwþìâìo?yv¶«#Õe‡T)¤ :uQÈt@ž§ÎV’ÈÚ .¦Ø¥Pm)F`^«6å† æ€#G 3·¼U‘Ì¥F¿/E•êU"Sà åÄAÄQ @Ì ¦ A A¾÷哟O}QýÀϽꨆ}ݵ6Î]n>·ùöK›~¯R­ªµÊÖÉ\6Œ/ºž×¾sê "àºvâÜÿýw>]Ñq7Òqj§D>#“zp–(“œÛAe,ãÖº0QN|”©°½¼Î¸{‚/–‹‡ä(Žö…žè†—`kßÎÌÈôÌ fgg1==ÍÐjµX¡ÁÁº79H'UµPk*G ´QH"ƒR9âH G‘/=û§n|äÉmcµ_Ûj'~ŽÑÕšÚ`å•!W\=5£•ñ‚tÒýp[ |_&ÏÆD J Qd´ ž¬ŸÿLdˆÈ­#"mo6ÿ[‚íBp0óO>}î7­÷EE¹†ËIN*d!HåJò¢£ — rÞç¾\N`Âêªç¢(x~ǼÚqHfnº·ëk/ñÁÑi`vÙð9™Ú±Ÿn BVËÐö†tT'P B3‰ŠàŒ†52I¡µX­$œ{êÏîÛ±ëì…úЯžï®÷×ö沈¿áøRõ™¬÷9ü[wæô©Ó…OË:ê*pª¡Ò !#V¹ÒQ¡+R˜Ü:¦²ËTHsiαöüèÂ.¹·‰>áff+ûuÃèÙ ™9z”fæŽÈìПâqÕ«+X«#*bºR1e±ù†hJØ8Ç FÄ”É{å¬/[ëäè_ÞµwrOre-K|Ήw’ˆƒ‘@Úå UK/iýd°_8P_9X5Xà õÚÜj@iðòªOʵ,D”‘w@@9 ç†ö͜ۋek]бó*÷0Ÿ8ç}TõYÞ ¾4äï òràžSœàÆø7¦úÑâæd^×äe›Ékê™><ݫşfT»ÜÝ¥C•UÈš:Ha½…¸Ì+‹Â"*ó0©w:倮8éx' ªýÔ…ÙONŒÜÿêWM?—é÷ÿ×Á«_u7&&†îêÒÜ'h#x´Ùr—ºÞéÔrÈÂÿÛÞûÇÈ•e÷}ßsî½ïGýèf‘,’Ýjf8³ŒÝ½Š½¦³–dÉKi7ÈÂr8“ vâ ìA $@@vþHþq$$q(Ê“ØÜq‚Äú J–%[ZjW»[­—Ë™ÑÌv“,’ÅîúñÞ»?ÎÉUÕ]ä;;³œÝÀ¬®êb×½ïzï|î9÷Üsg¨Ñ؆Ô5´ñ±Js=LÏ›„öT°¡îînëիמ€;zÿêU½²½«X„T_Á æ@î>šHÆ1rËtá³Ü4ISYk!Ì<ë,"M=…I 'Èáÿþw~÷§¿þÆäW~ãóû§Óú9=gdɪ/ß¾ÃÆ¾sã×Þø™ÿõgé§ÉØC& q¢*S!©"F-1âëœCnbÌNvâHƒŽì>š(öÇzyk¸B]éèɾçáÀ«Wu{{[ƒîííiŒQÖÖòÔí–ɬ#¶ZyÈ]ÛwÚYcKmŠÌÔ­Žå3—gÓ"ã‰ËÜä`:ûüãÆý× ÙÎ ×=½ž‚ÉL¬ucVL˜ÍD&7f¢±!76ÌcÃ46Äc%š?•x¬Ä‹ÿÏÆªfâ¬+™ «™0™ &Lò.0’*`JÌbùÞ~çÞYdv\;)27akfYag¹£ªÈ‹Ú4™c_Š =ƒØni86åÔ©Sº¹¹©ýÁ¼$ó´Oº—öKŸ|{[/.ÈͽžöãDÖr¤²ì'tó8Ñ£ÓlÖT6kjçªD¨cfyê­™4l&Üýâ§ÌÚÿpiíì-gÀŠ£lèR„?Õí¿ñ¯žzù—îÑ7ö™×ÌÓ¹©7f–œ­<›:Ymj²>ºV -"I‹Ö¹4ö§äõ漌7¹¸†«+ËÞåÕ,.©y8ð:úCèQ¥Óö9õ`,õ¨`œj?Ž#f\ ÞÅCߦ¦±¾iŠê\¤*R¬Þù½Ý;e• Re!UYH•K©2’ªÖÇ/~ÿ·2!"¤þiÔ³ÉQɼz6Eì÷ÌÏùàÑI•Û¿ßHªLŠõÑq¨T6„êñàëï)V&øº±^K©nSÓ¸½KÁÃŒCÇHÈü8eªG•œzŠ˜CqgçH‡ïÇ[>èð‹;á*®êîŽ{£ž>üò=Ý{PKGI\­JÈöÒ¯µmbµ¤T¯³1M‰&0VÁa êçß|çëýÏýð'?Ð!½hù‘þ$î¼sû¯­^Æ’h"I&’h¼Î¤NU ¨UlCI“4X• ®ˆ§Ë*î=¨ÃWdoÔÓ­á`ž…Š•y™…èB–¿Ó"¸»Wt¼¹¯77~SkÛ‘µ5¤º‹”¹«*ÆJ(ØÜ4Qc㹩‰u’Ÿ4‰)M¢ÈØ‹ŒÿÏðÅŸÿúÉßû‰?ÿ™tر Ínœ{õÎOÿ_üon~qÿ È8¥0ŽH“yµ™é̳ÖIB#F|i ÏbÃ=ÔmLZ;}>½²5”-ô[CÅî••ê{œáÊ¿¹¹©ÿx#Ö¾*Ã!dÍ—)ËLÌ]-ç!wyÓ)]Y[™›µK3-œ™ÎL¬3“Éãýß>¸ÿ_Ôèþ÷°í•9G‚’±¦ “c'†ÍJS54U¡©*¦jìÄk˜6“åC•¦Ëg54MS(M±vvÂl'ÌfBÜñúDJ˜pÊ:&ÁTîc[–kñ”=xîéÛ»Wtû t0„n÷ïKsæ@ÎÝ},&=J6ŽÒx8Në3‰yjBTÊÃ:¬Sò¹N|‡´É½4™O KÕ8•ÚAj›´êdî¯Æ»÷—©KGkŸÔ%høÚl·Øi XcðµY á(}ÙÖò³„Å0 Òþ}äþ]›´rÚ©Ô,U“ù4?FÒ&׉_§ä×X|vЄ<5a}&ÑÏm%“¥swKsæ@†ýû2XâÑFÄôÍmÂóäý%߬*IçÕ-õê5ÝÙ¹Fƒ­¾nïÞÂÞÆEÎ!o,Æ5‹®©1 J¤¤š¼jr"!˜‘€(HAAþ·ÿÉÍÏ©¤ââOl%Ñ¿ö»¿÷Ä(/zh,÷6²ÆâÒ¥†ÍÏ|ñK_ìïßmˆQæ(ךPƒ´6dv©!a/F¼WòÆÇPq\Û”gyŠöœ4y#ûû›ú+½¶P\>O§À}‹Ò1Z¹WAÒŒ ÍK —lf£±âpÖ9C’,9fQŠþJ1ýL–·þJäöW‡3ÀF§ˆ>†”9!šÒx#ªIê&(ÔiQ¤ãc/r Õ>18ŸW:3Î9R´ÎÀRóð·bÞûƒÿQ¨&_Š˜Jê'ÂYŒUmæ‚sð¶Ák#(û8mRZe3âàXke4ÚÐÍMèîîî“Y¶oU·ó,2½²s ×ô··eˆ¦NWQ—'ÐXÆ8´E8¨ Ðh­DfIΦd8yBh¶á·ïßù½H´kØæŸî¿üöüìÓ0~°°«Åòß+õãÙ‹væ™Òó"ug‹.vO¿ñŇ߸›mBó;÷ߪɘšµÖž¥ÎUêJµ¡jÛ†*ò¶!‡ U5‹ÁƘµót¯¥! ·öö´÷™ó…üWrYžï‰ÓÑKàšÎýµÚ¾zUׇذ—Ÿ‘WÚ%=<[©ýêPÑ.¥ǦA† IDAT#]Ë;B ¤¥FÚ©Nµ–)©€%€$0gÿnùÉK©üá–Æ°ÐÃS e4×±T3üÆïEž¹»E‘ã×ÿËx½ª`ÃrŸûåþ9Šù>Ь 6²ü]³qæïÊî×j©pSkR M•$´“ ª8 HÊ&1¥Ÿ]LC;‘|:TójGF“3šùJ7Çc ‡/ Š@ßî‚z‘B±³³Cƒ­mïioã"åMÎ6Znß1±ê™zRÛÌf¶’ÊqÅ®—A$ƒj¦‰ó”b¡B9Tò T@%4‡Rþã—ôÏÔUý—þéçÓéìÛ:^à8A¡ÓjãåWÏß)òüwÿàvj@Ô€´!¢Æ6lLÍ, ӀȃÙÌ^Ê*”\e &3É–£”¯½”¢Òälîoê`k°XšqU—!Òoõ‹"šë `g‡°µE7vûty£K·›û\œ›ðíáÐt­5C°Óml7õÞ…¦Éf²Yãó‰y¨ë¼N’O›¦1æMŒ¹O)Oyÿܹ?µv¢÷ïüãßþ̦Çû>•"÷­éUPA±Öíà‡~è“wÎôOýÖoÿæoücL“ÓÖ6ι¦ÈM]æyÓ²¦)œkr×òe–ùno’ ëyÔ˜xž‰å IÓ…ôí]9Èsï_ÔáÖP¯ìî>B}?º]ïÎÎmmmQ¿¿KÃ!¸?}™»§=×bM{MÑb“«³¡°¶››49cK[$²T¨!†qÌ 09β@YT(AB‚£”Y‰Jõ,H‘!A¬Ì$j«´2NÑnÇÇ>« d C¨3'«i 839«À¬ )Dæ€åb`Ñ ªê“(ÛØÔ!%–˜‚FK>4Yt³+ qæ4•’þðàtîZy;Ïe_—!Ô«‹5‹ï˸,t»sí]p}k@ýÝm<Øo€ۙɸe<¬o97U㪌d.«a²Æ!W²y°6Ð<‚ Îs.Ðüõöé3í<ÿ‘FÓ¿xs´EÅ|±Œhÿ™î9üÊè-tm¾ÐŒâ_9õ:¾:}„ÛÍè‰ëvé×¼Ö9óe÷ Ÿûüý· I£‰#Ò˜$ ­mLMÑÆ&ÑMôìÛœ‚©RX«)6±Iíf’NŸî¤ö[ÑÞžö>3’+» (.ælßk0GOT8Žä\ÛÙ!à*[× ¸‚íþ Ú»Õ¥Í^IØý^[kÓéTóº–ýC£¡2g“7¥ŸYPrTM2N1'¡œS($i©ÐòÄ'ÿä%›ð¯Ï~÷ Lª¼Æyž"+Ûø÷9BCÄÑZ^È8ü¬:„j`Y ]êK›²„}ýå¯ÊÉSÿðó_ú1fõŒ™ˆdA$“ùÅ%%÷gø‡?{÷ÞðµzV¿zûëwp8ƒx0TŽæ@ œÛ8‹×^}wïîÿÚ]þ”ü_ÿ÷ÿó i ¢À–¼3Æ3³Ï­m¬1¾Ì¸)²¬ÉóÌ· ûNYú2s>·íÐr.äD±E¹ÝN¦9‘ºæ<¶VÎ乌÷÷u¸µõ—Ê}¿×­*°³3ϞñOÃá?ñ‰|õmSvz\ta²Æ60Malו†ccÉæ†YM^ZFH 0!à¬mÄûZ3›'(§Z‚Ò$d”0±‚ÔZNÐvzpp€uiÍÿ€ÃÝŽ&ò´Ê¹Ý\50%g ÎLÔäEbe¿ì€÷™²4bD%M>I¢4W)3y|ÜLSfÊØ”œš·dzð@w¬œy{©ÛÁ"IlEàƒ^·sÝ®Âñ×çS7Œ 0zàÇSØ’33s-;Í׸–ó†ÔdÁræUód8‹ÐœØe¢š SFŒL‰2RÊì~ðÔ÷ý±il>6 õ^ù£Ùê”ðƒkø¥Go k3,·:þ '_ÃW«‡x³>ÄɼÀ'Ö7±{xÿ×~èÔùoüâݯ}Q Oª^žEç¶Ô<ˆÅ;ŸÅ䉌Ïcܘcפà4¤^ͱŠUz9ƒ´ÛÑhO{½ÏÈ•ÝyýÞ£)•÷3H>òá83ï®^ÅàúuÚÞíÓÞÆ-ÚÜïÑÉ“w©û¨K§á¹ƒ}Ž{•i'oÔ[†Ú¬M̂Ĝ4æ,(£ˆIKb‘P$•bóGð/ÊðÑ+|x¸ÞÞG|øî?ûOðïý­ÿñxé×âx’~ö?üþ«Ÿ†9yîû7¡­Ö×i³ÿ‡’•»÷~õÆ—2¥Š5)U†QAíÉ6ŽmƒÜúZ(T®ˆ”uâÔTÉÚïO“3V “ñɱ>ztN÷6Fº¹Q[C]qngömAx`œÇSp h{{H{{)Ïs¾kïra –FŒF5š:&zo ‘ ¹ÀÞ™@.B3͘ɥSÒŒ‰œ9%q¬pÊj¡l5"0åß¼òÙ·¿ñ Ú¿{Ÿ¦³bŒpÖ¡UØØ8«/ßпó¿ü¿À@$•9I9(k`ÌwÃ0^AÞ*y±,Èäm¦Á[3Õ`³,’™$²”8çd:&uvµiÙܼ¥ƒAÿxÄýA¡¸¢ÜU8^ßÚ¢þî.u76è~Óð$F^O‰‡ùÔÐ47õЦIe…ØŽg•›ÕpµzW7Mæ}Èf!dâÅ5)e)¥,ª:Uu1ªS%Àj d„`þí¿üo|ök_û:=xøŒ¡’P%Ze‰×^{M76Îêÿü·î2T5$ˆD,Q ËÁcŒÏñÖZßrÎ;kC™ç¾ÈZe2n…NK£E;žYGd_&>q"u²LδÛRFú.(Îõ󾡸zÝ.½Æ«Wë×çp<3rö‰à »ö:«¡9}¶Í¦VC®mت©ƒ˜V;1ËEÉ2Ô4žòÑs„IÁ0žaÔ€ƒ#ך‚˜Ÿ8/æiöM]CUbd&VŠŒÒt$eÓ=R»@Š5R¬JiÆdv¦-U5Òñx_‡Ã-ÝÝÝÏ+‚–ªý6®ÛÕÇ€vw· ŸüäIŠ“È·qh" “o“ ¦°>’“ÒÙ 13&sѤLعĔ‰PFL™hÊ”ŒccœŠ:&80YˆXÃÆüÈ©óOfåÇꊾ<‚%i“þñ¢X£çÛÝñϽñû¿©óŠïQ@‘ A•)‚0<Ç„Ô1^X½õ,!¸(Þ&5$‹`¥‰.ÙÈÒ™G>µb•AІl<Šï5­ò^×íÒ&Áp[[×iw·O·¨·ß£é›»üÏõÖ¨iMyð[M¬MfêÄ“¥L¡)çM )ç ’GF”s%Í"‚Ûøônµa/ÞL~ëŸ~ž'³)4 gX[e ?üCŸÔ?M,“é­û¿ó…]§,Ä[%Ï$ ƒ'¨•¤É«•¤!‡Ï™“Úa›úçÖã; 2‰›6¶d´1Òýý‹ºµ5ÔÝCqñãÛ…"ð‚À<ŽÃí!]Ü»H£ÍMj¿ù&gYÆwc4,bHÄ@Õ¤à¬åÚIr6ErÌÁI"ÇDN˜œ¤èXæ¯Uł٪ª…ª`HÁf%â§J‰DUYHUÀH%‰DE"Ž"˜5°jHlƒQ l4ˆ¸`¬'c£q!‚()sætÎÚä½—é+¯HooOomÞÒþ‹„âŠrŸDzףûÓ]žxðýÇ3sXyS5¥ÑÙÌθ±µÖ‡hÇÞ»¢‹UruJNDœqâÅE•a“ªE‚‘Q&"£JÄÍ÷øZT*Q”TEI…ÁI @4†"@tÄ™C–ÍŸ c‚³68çÂz–…ÌÚXfYDQĵNŠí"K½ºL% iracC/õzrÀ‹‚âŠjŸ ÇËÝ[t{ý<¿nKÚÏ'lm‡íxhض˜MÁ]ãœñ¬ŠÜj3UuCeÙªPä:›Š¶J+/hg©’ Åz)¯¯H•⥾âMxÀ+€Î ) œLͣÆ{'ûnÓœÁžÁ‘A†&Ôfþ™") :$ÕÒŠŠMN$Vr¢Ãé^*$„‰·§º„â¥K=¹~xaP\êºæ^ùîî.mllÐWÎ7l'‘Ízâýanô„5ªÆDŽ6Qf…¢†\b8‰Î à Ã)§ǤN `Ë¤ŽØ$µf¾Å†!Rþ_þ~â¿{ë÷~ GÎÄO¾té'n¾ó[¿xÿ>I¡ ")"‘FQR @ˆÊÆ“R`!)+#>˜Da¢Ñ4“˜Ÿúè¦MŠ+§&}ÈÖb°à‰ŠL/Äx/첡#=¶W€þî. àOœ{HCk¹ýÀpK“i4>ÔÖ%g“©]ÝHrH³¨)Ð̃óÍ„Éh–˜mP² 0j"++‰Î#L¤$¢VUŒBQt¤ÑˆDV NÉç ¯J>'iTÉ;2 2ö”8j0¹†ÌÑ“M3ÎÓ´NÒ?å wOiòëósÓÝí}bÉÃÄ¥|àä›§eéê/çzvvv0 0ÂH·77i0¢ÛíjÞn+ÞyG³,U•1•R‡LŠ2—$QÙm²&Â1Ȫ3*–V–@€%"&RV01)Í—U ¨€•TT˜Å€€Ea^‹‡J$pL""8Eâ,8ç£6zp2dc™êDDÉW•ॗR£ŒF#Ýd0iÔÇêÜÌR//B¹Gp¼zœƒÝ]ÜÐÛ‡LD´a¢&O2Õ(uTiJ~’&Ÿ…(Ä­ˆ¸¨j!°²€" V Z3%°0”)±’&¥åÄ#‘( )HÂI„¡IUGÕ QÕ¨VbŒ1!9‰ 3‘XÅ…9ÆÜ'gSÂC›Ò÷›Ô[;c_•ö£GÚÿäΰ§—vwuÀ‹„âBµ ]½:oëÊ•\¿¾…¸ˆ.n Ê5˜b#Uz¯½®æqͧûžpXò¡mxÍZB¨¨\ïÓŠ&Ö mÙRᣢSÊhµ·–Ií¤h†Š8UijŠ×¡Ø[øìîÞ¡-ØÚðáÍŒ`»Òk„aœŠ„q`œ°ópëÄÐÄVP*:IÛ5ô  º ÁZ)Ãû‡ºŸ—²Ñdr;vôõË/’¯èîîα¡yƒ¹¥=P"\ÛÚÝÝÕÁÖèÍ­ AŒú=m¯{½›kÞ:!H¹L()'U—RTæ ¹±êàØ"ÇÊó¨‘e««Ö25ÌÌDàoÔ“¯ä±‘@ÌJD£¯Lîßf¨ˆ€À”,8Æ”C"Y 1 R ‘4 ŠN(x¤˜©F"YmTkR0Y:$…â‘ 9×±ÒœÉ%t0ÜR|HP\ÕñbÂz¼!®î×[èoïÊÁ^C}Ã@ñAåÖÔIe‹ª!¡hH#1…5Ä Ã‰Â*ÔÔ(+aîß°.“ƒÔѼ.…±”4¥$ŠDŒHÉD2^5 …‚s<ßh¡NN‚É]¬\A‡iÆGP.ýí}¶ôêö®îlï>qe½¾@(/ŒÀÊEÇp€Á`€áö¶ôööhàl»­{)™Â9-ÆÀ %“4¦¤0F V8Œ ,ÀF¡¤&† †˜˜3eM`¶4ß;v1MÌDª‰” ) %Jœ$RŽà”ˆS´Q”’*Åb"É¢‚Rœ‘&M!zΦSÎɽµi.ÒþW·ãy¡P\Qî*wwvpÐa¯Gýý}mlhÓ|Eã¹î£ÌSµc+M2"Ù4a‚˜R²ŒˆXU dµJÉPP‰ ™”Ô0+‹2³*«‚4‚Ô€€Å^u‘tY‡Y¬"ªÉ“¢j²I“XM@ÕSD¦ID"Њ"’’H2Þ´S1NRlRBÑÈéé)¹ûð¡æÏå" ÃápómBÙ#dB,vHh—oèA•ø´gÂÉPŒ©ƒe Ü„ (Öt]ÃÜ+ #íoõ·+…êëÕHq£T\*pEwvV¡øâFÞGób+mîìì`°5Àp¸¸±!Óá[ÔíœÔüÔ«ZŒk~ µUv…›i¢D¥‹¨‚5’Œ4E KÖ É"Â’!C !f†$f)Þc6š1æN‡Ìæ@RP"$%JJ’ŒR"PÔ¤ Œ¨pQÀQCHIm¤Rã¬æÔ²1yÛ$¯¥N9‘![9• -ÍÛ#Ý,÷u0ÜÒí(~(6a¥½% Š«zUç»õìêõÁØÞöö¤?lÛè!€ü Q˪’’ÆÂª¤ ’\‚E 1& ™5>ˆZ&c½ŠU&VÀC™Ô, ©B•ÔU‘%VN0%qt!D޹Ӡ>Euy`£±E´•YÓ¤Ù:Ë´~Kú“srÐ42¾µ¯ÃÑ@¯lãØ<‘l÷BÕy$/,”úD£+™T×®Íçƒ ‡Cºxñ"F#¶ÛÜŸö¨(ðsÌÄ8g3…†˜¹ë§†  Àp$ffNLÌ)r"f£Bª†`U!"VÄ"ÖD¬FEÄX1²€#(‰q /RAGaV§%CH"'9­‡ u}Z†í‘ö§Séõzº¬¹¹„âràÅß«Ê]†UCTóù›½=ÚßÜ$¼ù&ôzdÌ~ôȱÈ#3:`¦Ó©afS×d˜ã=™@d8“ŒaŽÁ$6l„YLbIÂF ©Õe&çQ”Œˆ4ŤlX8I,b$‰X—¬H—¥L5es(¦¢(€Ôn·SŒQz=¤»r2I§OË«1Ê£S§tcoO÷77uk‘àC1ÜÏRîñ6Ïú®nôéf÷]ºt @IÀ[”„wr‚y8w>-rJ} UŠØWÄJá':÷ ÇŠ.×\9ž/Á¢¨p}ÑfŸpóaµï7K‚÷}3:û­ö]]P\+°ìwWçë ?|Ý®†ýæ #Ààúm÷wi¯»AoßoølÙ¥‡ÏãNä²Zg–CSm6‰ •d8‘i„ g!É r0$0¤Á0[&…¡¤¬“!"i”WwQ"1šTÔ’4_s–T¢(¹¤Œ„ˆ¤Ü$eMê5 kÒF“°¤–‘$¶“šz"­™ý¾˜Š;St¬t&t»ÿ) ‡ Û‹°ô2Ì|ˆ6á)=¯†°¯¸>P¸MÝ‹{ti´Io¶ßäüaƇMÅb ã¡&%g©™eѪ+€i$ÙÎR#D,¹IÌb˜Òа"æñë$š#,*¹ª@)å Äð)g‰m4ð‰ 1¥Z9•ÂiíœM÷ïuõà|#ã[›:ìôÊbŸÊÃë~®?Dû}d,–s8ƒÁ€`¸½M÷öèí·s>{vLf|âDE«€¬íŒ 0¶1\A5†a†ª‰103³Š%æÀ"–Ä Y™Ï%¨"ž¯ ‹ÌÊ‘•9ªˆâ¨s0"9—IJó×YQ¥‹(>¶d &5Ý(ë!ÈãÇ¥ž:ååÞ½{zþüy¹µ¹©ýÁ`~<:]œï‡û¥­\üŽt{å °»»M{{{”ç9Çcʲ‡<Ü4 1³©ªŠ³,ãÙlf¼µl6ѶѲ÷Þ$kئÈâIJlEH#]èVT‰—`dV A#³²1bb’d­˜˜ÄZ+’I²1“à‚”ª)Ïs‘Ôjµ¤iY__—Ó§kÚúÊ+SÙÛëéæs€øº!Vá¸:ïxå €}Âeèvï¶¶Ûo^ðfù$_©·¼>QàÂÜ;¼tqJ ÎïøgœÓ|Ðó¡öã~?ÜÇQ´,¼{mŽÃþ.omÐ…^&»ôxùô…6Ç=.+ÏUØ$6Y–˜™à„)‘±6gª`¢6Ö±1Â-G#l’°¡D€ƒòü 1Ê*UÔ1,)±H ’bå<¹DyÃè´OhòÞʈuád½[ÈäqG:/O´WôÖx_çõ9w;xaË>¨ž—©9;×Þ Çr4¢V»Íf\–+D“9Ã~œL$1b©Rc s1‰™+f–8ZKQ%±ä²yŸÁ%G6jcÔÂ:1"óGRaPj”ækE85à”‘I>$)aSUG9uÊËl:•ª×ÓU(®fŸglÀ‡Æ£¾‰÷xùòe žLÎÑ€U*룼€e¹¦'ù¤n'TUõû}:88`ï=UUÉÝn ºÎ9¥H­V$ï3N)Q*IJT¤üвr#0?³Ö¦Q6FMet¾U‘—ÙÌjž7b­Õªj‰s‡Úív¥( ‡Úï÷¥×›{ˆ7žl<½ŸâG¥Û'C«ÇäQ¸óúu•㿾qc¬Ë—‡Çzw¨ô[ƒÒSyïêw1/ùÍú~—gúígž~P9²ºGƒ­­yDé)@Ve—ºÏMVRÑlNy8ØŒ²&r%.Œ¥d,YŸ8²¥œ ¥ÆÊåjçàó¤FrõÕ¤¤MŠšgVêµÈ­„Ɖ‹÷µ)­†Z»]+ÅžN>Ñ‘Ž_zˆµ¿p<ËKœŸÞGuÝbqt\,l¾h—®t¶· {{tûíœíÂ)q'*8®r˧۞ª©áÆ®b ` 71’É3ò1’?²³­•gÈŒÕÌZM×ÜZu1Iiæ1Ir•–¡#u¥»$,x¯«¯Ÿo››ŠÅàø£òt÷êëÉ ÇáUàIrooonÈÏ£³ã1M§=:(ðz]SÓíR·iÈû6…¶§à=µÂ<ŒË0á¨ëÜŒÕüyæ*uY¦nšé$›ªçšçc=( ]¯OK»=Ò{Ý®vîÞÕ^¯§·67õiñ;6ýVåYž9p¬[¸8¾H£ Çlš>u»sH†°F1êvÅ)Æ6¥ÅÅŸR$t”æ`4Ƴ™ÍÆXµvªÖZZ{¨ív[ò<× Íó¡–e©NG{wzz«{K|Oèö‰å2 YÎßM âé_vVþv%$aùŽ×=s#ÏAŽF#€cHN©îõNTÕu—š¦&,Šº‡¦¡“+}=àò\ˆå_&IDAT ÏKnÅX—¥b(Š…g¸CxzX."¥'"^ßM7ðîÁ ¸ví)݇4©®/ÐÖp Ɇ¼?M››Àüµ§§1†w;p8w¨e™æy®{{@–=Ð<Ï`xçNO›èv»Úï÷ŸÐíÓáhà»O·ÀŠw¾êɽ¿ŽVvÎñú¥ÅÇ¿;u <–]†ý¹G|±{‹F+^dئº66q¨~TPãrêŽ 'OÂ'„Ð[ék ‹!]}€ÈCW _ëãS==†áY]Îâ&pëâ|8âqµ•ï> ®ÊÓp\Mʹ` È;£u&çèc¯ïŒç|Ø›RVUtPw ònMã¦!àäsz{„nžëƒ@7/t½«/K=5jkÓ)T÷º:éÜÕ +@\z‰ÇI6ÀGEà#ãQÇß ‡CÂå˸¸·G0å6&çÒÙñ˜`:.Úy P×Ó£v‹¢½8¹wÐn·Nt Bx ï- >-ï$p ×מÒ-€ñxLÀ%\¸°„,@ Ì9ÿô\·Þ×GífYq¤Û|1ø(ËR Óé(|3âp Ýüì‹'ÌŽ~<ýGß^•“gõùMù¸r©~ÏêSÌø¬ÀÜ‹\…$¶É[:[Þ#àLóùuÝËŽ’ª‡££×å©Þ‘NF¾Rh7Sí¾tVoí6:/Ÿ›ÃÀ³¼Cà{ˆ«òô” ð$  ?Ü&\º{sHnco{H÷¶¶=ÒÒŒê)aãÝýôFÇv¶ßé›Îv»úòÝS:Àz=on*nÏ"€årŒù¡~DSTß ßéñ ±¼ß! ¼”—ì=ËUÙ^y=xâ–ÜÜÜÔ–aR`Å`ã{†Ï“gz‘Ø!\›ÿö4(cXÖFóÅæï!½^OoÞ–\¾ÿlÎ'ÒŸ8¢ïQÝþ3ùpdÕ+K<<’·n.À%ŒÊ;çÞºKÀëó?¶Òø×æO§^žè@ïÂnbs|Qo8†áñüìÓµ8ï½ëö 8®Ô\=šÀ»! ·ööè€;G¶öØÆÞ<œë»sjEs»{¡×Ó›‹w..`8ìÏ+ ›ð4‘øÑê÷»ŒKy– à HÇÆ|)s£~Ë/ò ¹1ÿ±4ÒKY!ðlß{ÿóäY^¤.Ò¹Wß{¶n¿¹¼§n¯-t»Ú÷ÿOôúÏäÕçz‘–ÉHƒë‹lÝ+Àö"jUöº·6—Yº+r¿Žþå­yÖ.0\&yºäØü0¾÷¯Û'#º|àX·Oƒr)»Ãíùï—ŸÓøùÓVK±TêB–žáRŽC¦Àw —òÿýØ‘ÂïvwIEND®B`‚variety-0.8.3/data/media/wallpaper-kde.jpg000066400000000000000000000140211362063646600204410ustar00rootroot00000000000000ÿØÿàJFIFÿáhExifII*12i‡BShotwell 0.12.3  ¿  nÿá Ýhttp://ns.adobe.com/xap/1.0/ ÿÛC     ÿÛC   ÿÀn¿"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷#íŽvðFzRÑEM>w&î{EPEPEPEPEPEPEPEPEPEPJ„\ôŸ”c­%);ó'` (¢´—ÄÀ(¢Š (¢€ (¢€ (¢€ ( ð2N¯­WœüOý ¼ ð‚EƒÄºÚ[ß: Êži™OC….G?1矷Nj™Ö9.ukU=dšÀí_®ÒOé^Ý “2ÄÓU¨Ð”¢ú¤Cœc»>¢¼ÛŸ´Ã?Ê"Ò¼g¥¼ÄábºÚÈßE”)ý+Ò‰#󇳩È5çWÂâ0®Õé¸ú¦¿1©)lÅ¢“#hlü‡ø»R×%ÖåQEÕì;QLAEPEUKâ`QEHQ@Q@Q@cxÏÅÖð¦­âRA†Ü9ÇP3…þ& (¤t­œ@䎣Ҿ&ÿ‚‡üb[iŸtéñ$ÁoõM­œs gëË‘þï\ñïd9cͱÐÃ}Ûò2©.Et|mãÏjü_«ø‡T•ž÷Q¸’y9È?Ùí\á8¦æŒýkú®…(ÆVHóÙ*Ë´©É8ìqÇç]—~4xÛá¬Ë'†üI}¦ªô…dýúpËúW‘Išš´©×\µR’óWüÆ›[mü-ÿ‚‹ÞÁ$v~?Ñé ÁÔôp"•ÞŽÓÿ)__|=ø·áŠvhðƽi©áw< û'ýèÛ ¿ˆ¯Æ€øÿVôÝb÷G½ŠòÆî{+¨›tsÛÈRD>Ì9ùþiÁ8 mç†ýÔü¶û¡ZQÜýº 9ížOõÏJZüèø3ûxŸÁíŸãhäñV’¸U¹B©{ ûÿ7ûu÷GËøµ£ÿhøcW‡Qf€³@}3ó®>µùmÃxì¡Þ´y¡üËc¶U=ξŠ1È’WxÇqê=GÒŠùcV¬QE +;_ñŸá}ëVÕn’ËNµO6iܱ§÷Ž3ÅY°Ômu[(/,®b¼´‘O‡I³üûVÒ§=gmµú_Ô^EŠ)2ÁãÓ=ék…Q@Q@PAç×¥l;ñÆúoÃêþ%Õ¤ c¦Ûïd=dláPz³1 ©ôɯÇïxÞÿâ'‹õoê²/õ†Èè¹à(öU ²Šúgöðøð¾0ñ"xH¹ß¥in¿’6Èšì ã¨NWýâ}|ˆq×Þ¿¢¸3#þÍÁ¼UhÚ¥OÁuZœÎËa”QE~‚`QEQE)<Ö߇<]ªøCX·ÕtMBçJÔ 9K‹y ¸õãØç=óXy¥Í)F3V’ºì4ÚØûßöý½àÕÞ=âHŠÒéÎ^‰qŸY”t?í/ýó_eÚ]Ái Õ¬ÑÜÛL‚H¦…ƒ$ˆz0#¨?Ëž•ø}¼W¿~Íÿµ¦·ðFê=.üM­øJGýåƒ6^ õhIø÷œ¥ÍÈã>ƒùÑð3öžñgÀ˱„ßÚz¹y´{¶>VOVþy¿¸à÷¿F?i¯ù7ÿØ*Zü†ã×‹ÊëP¯âå·ÉU›Œ´gëÁÚSÁí’&üXëJ¹—F¾`“gûÉ“‡î’Gq^¬9ÿöõ÷ü+ñÛSšÊî;«i¥·¸‰·$¶ÆSØ‚9öü1_Kü!ý¾ÊÃþÇË?ƒšõû[˜¯mÒ{yx_îÉCôaÇë_—â°¬¶"›ª:T”¶d´RáNIèz…$×,p1ê àþÁÖÝJÛ¡÷¯Ÿk¯Ú9> øQt½"`|YªÆÂÜ. ZDå¹ô?ÜsÏ¡­¿Úö›Ð~hïmÐê~*µÒÕ÷ùôÒR>êžÝÛ°5ùãjþ>ñ5þ½®ÞI©Þ¹’Yä<û;ؘéÜ%ÂóÅÕXÌ\mJ:¤÷“ïèrU«m‹sv÷R¼²³<®rÌÇ$ž¤’z’y¨{ÓOëGûú²µ¶GQE# (¢€ (¢€ (¢€ ç"Š(èOÙ/öŠºø7ã8l5+‰$𦩠ŽêbVÙÉ\ '‚ïU¡HýD\>`AèGCÜ~cšü= 2úçßã_±?¯/®þ xîþO>î]ÖF‘‰%ó*O¾Ò3ï_‹x—Q¥ì±ÔÕœ½×þgfM¾W±—ûMÉ¿øóþÁR×ä/ð×ë×í3ÏìÿãÏûK_Ä`b½Îÿq¬¿¿ú#*ßÚZ1F+ôÓV|ó…¾t>ø“âËæø{ÄŽŽÇ–[+—‰[ýàñ¹ž}é:U#ÊÕ× ÓqØ÷­ öàø·¡VñZ¤ ÒBÊ)ýô?þ=VøJ®ûŸŒ›M>µû7ÿ ›Áô&øÿVÿüE7þèJðïþ  ÿâ)ÿÄC¡ÿ@òûÐ}]÷?±íK´úÌWì·ü)ÿÿÐáÏüAÿÄQÿ wÀ?ô$xsÿ0ñ5?ñð¿ô/½ÕüÏÆ§û¦“Ò¿dÿáK|=ÿ¡Ãø'·ÿâ)?áIü<ÿ¡Âÿø%¶ÿâ*¿â!á?çľôW}ÏÆÌJ0}~ÉÂ’øuÿB…ÿðOoÿÄRÂŽøqÿDû¿ø&·ÿâ*¿â!á?çľôW}ÏÆìAGà+ö?þgÃú'þÿÁ5¿ÿIÿ 'á·ýÿ à¢ßÿˆ§ÿÿ>%÷¯ó«¾çã¢òãë_µ~‡ÊðvƒÀÛ§Û =¸‰sü«ÿ… ðÔÍ?ðÏþ -ÿøŠî¡…-ü˜bPŠŠUTtP¼ ~ñBack works OK to revert back to the pre-Variety wallpaper. desktop="$DESKTOP_SESSION" # Gnome 3, Unity: if [ "$desktop" == "ubuntu" ] || [ "$XDG_CURRENT_DESKTOP" == "Unity" ]; then gsettings get org.gnome.desktop.background picture-uri # XFCE elif [ "$desktop" == "xubuntu" ] || [ "$XDG_CURRENT_DESKTOP" == "XFCE" ]; then xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/workspace0/last-image # LXDE/PCManFM elif [ "$XDG_CURRENT_DESKTOP" == "LXDE" ]; then # The PCManFM config path varies by session name; Lubuntu is effectively a special case here if [ "$desktop" == "Lubuntu" ]; then desktop="lubuntu" # Curse this inconsistency in cases fi grep wallpaper=/ "$HOME/.config/pcmanfm/$desktop/desktop-items-0.conf" | sed -e 's/wallpaper=//g' # LXQt/PCmanFM-qt elif [ "$XDG_CURRENT_DESKTOP" == "LXQt" ]; then grep wallpaper=/ ~/.config/pcmanfm-qt/lxqt/settings.conf | sed -e 's/wallpaper=//g' # MATE elif [ "$XDG_CURRENT_DESKTOP" == "MATE" ]; then gsettings get org.mate.background picture-filename # Cinnamon after 2.0 elif [ "$desktop" == "Cinnamon" ] || [ "$XDG_CURRENT_DESKTOP" == "X-Cinnamon" ]; then gsettings get org.cinnamon.desktop.background picture-uri # KDE Plasma 5 elif [ "$XDG_CURRENT_DESKTOP" == "KDE" ] && [ "$KDE_SESSION_VERSION" == "5" ]; then grep 'Image=' ~/.config/plasma-org.kde.plasma.desktop-appletsrc | sed 's/Image=//' # Trinity elif [ "$XDG_CURRENT_DESKTOP" == "Trinity" ]; then # The "1" refers to the virtual desktop number dcop kdesktop KBackgroundIface currentWallpaper 1 2> /dev/null # All above fails => fallback to the Gnome 3 way else gsettings get org.gnome.desktop.background picture-uri fi # Feh # sed "s/\ /\n/g" ~/.fehbg | grep \' # Gnome 2 # gconftool-2 --get /desktop/gnome/background/picture_filename variety-0.8.3/data/scripts/set_wallpaper000077500000000000000000000250301362063646600204110ustar00rootroot00000000000000#!/bin/bash # # This script is run by Variety when a new wallpaper is set. You can use Bash, Python or whatever suits you best. # Here you can put custom commands for setting the wallpaper on your specific desktop environment, # or run commands like notify-send that notify you of the change. You can also add commands to theme your browser, # login screen or whatever you desire. # # Occasionally new versions of this script are released to bring support for new desktops. To apply them, you # should either delete this copy (in ~/.config/data/scripts/) and restart Variety, or merge in the changes yourself. # Bug fixes are automatically applied by Variety provided the local copy is never changed. # # PARAMETERS: # $1: The first passed parameter is the absolute path to the wallpaper image to be set as wallpaper # (after effects, clock, etc. are applied). # # $2: The second passed parameter is "auto" when the wallpaper is changed automatically (i.e. regular change), "manual" # when the user has triggered the change, or "refresh" when the change is triggered by a change in quotes, clock, etc. # # $3: The third passed parameter is the absolute path to the original wallpaper image (before effects, clock, etc.) # # EXAMPLE: # echo "$1" # /home/username/.config/variety/wallpaper/wallpaper-clock-fac0eef772f9b03bd9c0f82a79d72506.jpg # echo "$2" # auto # echo "$3" # /home/username/Pictures/Wallpapers/Nature/green-tunnel-1920x1080-wallpaper-861.jpg # Here you may apply some additional custom operations on the wallpaper before it is applied. # In the end put the path to the actual final wallpaper image file in the WP variable. # The default is to simply set WP=$1. WP=$1 # Enlightenment # Needs Modules/System/DBus Extension loaded to work if [[ "$DESKTOP" == *"Enlightenment"* ]] || [[ "$DESKTOP" == *"Moksha"* ]]; then OUTPUT_DIR="$HOME/.e/e/backgrounds" TEMPLATE=' images { image: "@IMAGE@" USER; } collections { group { name: "e/desktop/background"; data { item: "style" "4"; item: "noanimation" "1"; } max: @WIDTH@ @HEIGHT@; parts { part { name: "bg"; mouse_events: 0; description { state: "default" 0.0; aspect: @ASPECT@ @ASPECT@; aspect_preference: NONE; image { normal: "@IMAGE@"; scale_hint: STATIC; } } } } } } ' OFILE="$OUTPUT_DIR/variety_wallpaper_$RANDOM" DIMENSION="$(identify -format "%w/%h" "$WP")" if [ ! -z "$DIMENSION" ]; then WIDTH="$(echo "$DIMENSION" | cut -d/ -f1)" HEIGHT="$(echo "$DIMENSION" | cut -d/ -f2)" IMAGE="$(echo "$WP" | sed 's/[^[:alnum:]_-]/\\&/g')" if [ -z "$HEIGHT" ] || [ "$HEIGHT" = "0" ]; then ASPECT="0.0" else ASPECT="$(echo "scale=9; $DIMENSION" | bc)" fi fi printf "%s" "$TEMPLATE" | \ sed "s/@ASPECT@/$ASPECT/g; s/@WIDTH@/$WIDTH/g; s/@HEIGHT@/$HEIGHT/g; s|@IMAGE@|$IMAGE|g" > "$OFILE.edc" edje_cc "$OFILE.edc" "$OFILE.edj" 2>/dev/null rm "$OFILE.edc" ## Get the current number of virtual desktops desk_x_count=$(enlightenment_remote -desktops-get | awk '{print $1}') desk_y_count=$(enlightenment_remote -desktops-get | awk '{print $2}') ## Get the current number of screens screen_count=1 # If xrandr is available use it to get screen desk_x_count if command -v xrandr >/dev/null 2>&1; then screen_count=$(xrandr -q | grep -c ' connected') fi ## Set the wallpaper for each virtual desktop for ((x=0; x "$LAST_WALLPAPER_FILE" fi # KDE: Users on KDE 4 or Plasma < 5.7 will have to manually choose ~/Pictures/variety-wallpaper/ as a slideshow folder with a short interval. # Afterwards, with the command below, Variety will just overwrite the single file there when changing the wallpaper # and KDE will refresh it # On Plasma 5.7 and above, the wallpaper choosing is automatic. if [ "${KDE_FULL_SESSION}" == "true" ]; then # Plasma 5.7 introduced a new feature to set the wallpaper via a qdbus script: # https://github.com/KDE/plasma-workspace/commit/903cbfd7e267a4812a6ec222eb7e1b5dd775686f if [[ -n "${KDE_SESSION_VERSION}" && "${KDE_SESSION_VERSION}" == '5' ]]; then # Try to find the Qt 5 version of qdbus. For systems using qtchooser, the binary name is 'qdbus' # and the Qt version can be selected via the QT_SELECT environment variable. if command -v qdbus-qt5 &>/dev/null; then qdbus_command=qdbus-qt5 else qdbus_command=qdbus fi QT_SELECT=5 $qdbus_command org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript " var allDesktops = desktops(); for (i=0; i < allDesktops.length; i++) { d = allDesktops[i]; d.wallpaperPlugin = 'org.kde.image'; d.currentConfigGroup = Array('Wallpaper', 'org.kde.image', 'General'); d.writeConfig('Image', 'file://""$WP""') } " # Reuse the exit code from qdbus qdbus_exitcode="$?" if [[ "$qdbus_exitcode" -ne 0 ]]; then # If the script fails, show a notification. kdialog --title "Variety: cannot change Plasma wallpaper" --passivepopup "Could not change the Plasma 5 wallpaper; \ make sure that you're using Plasma 5.7+ and have widgets unlocked.\n----\n \ Due to Plasma limitations, external programs cannot automatically change the wallpaper when the widgets are locked.\n \ See https://git.io/vprpM for more information." --icon variety 10 # Final number is the length of the popup fi exit "$qdbus_exitcode" else WALLDIR="$(xdg-user-dir PICTURES)/variety-wallpaper" mkdir -p "$WALLDIR" # Remove all old wallpapers rm -fv "${WALLDIR}"/* NEWWP="${WALLDIR}/wallpaper-kde-$RANDOM.jpg" cp "$WP" "$NEWWP" touch "$NEWWP" fi fi # Gnome 3, Unity gsettings set org.gnome.desktop.background picture-uri "file://$WP" 2> /dev/null if [ "$(gsettings get org.gnome.desktop.background picture-options)" == "'none'" ]; then gsettings set org.gnome.desktop.background picture-options 'zoom' fi # Deepin if [ "$(gsettings list-schemas | grep -c com.deepin.wrap.gnome.desktop.background)" -ge 1 ]; then gsettings set com.deepin.wrap.gnome.desktop.background picture-uri "file://$WP" if [ "$(gsettings get com.deepin.wrap.gnome.desktop.background picture-options)" == "'none'" ]; then gsettings set com.deepin.wrap.gnome.desktop.background picture-options 'zoom' fi fi # XFCE command -v xfconf-query >/dev/null 2>&1 rc=$? if [[ $rc = 0 ]] ; then for i in $(xfconf-query -c xfce4-desktop -p /backdrop -l | grep -E -e "screen.*/monitor.*image-path$" -e "screen.*/monitor.*/last-image$"); do xfconf-query -c xfce4-desktop -p "$i" -n -t string -s "" 2> /dev/null xfconf-query -c xfce4-desktop -p "$i" -s "" 2> /dev/null xfconf-query -c xfce4-desktop -p "$i" -s "$WP" 2> /dev/null done fi # LXDE/PCmanFM if [ "$XDG_CURRENT_DESKTOP" == "LXDE" ]; then pcmanfm --set-wallpaper "$WP" 2> /dev/null fi # LXQt/PCmanFM-qt if [ "$XDG_CURRENT_DESKTOP" == "LXQt" ]; then pcmanfm-qt --set-wallpaper "$WP" 2> /dev/null fi # For simple WMs, use either feh or nitrogen # Implementation note: this uses spaces around list items to enforce matching whole words. # This also means that an empty variable won't cause false positives, since it expands to " " SIMPLE_WMS=("bspwm" "dwm" "herbstluftwm" "i3" "i3-with-shmlog" "jwm" "openbox" "qtile" "xmonad") if [[ " ${SIMPLE_WMS[*]} " = *" $XDG_CURRENT_DESKTOP "* || " ${SIMPLE_WMS[*]} " = *" $XDG_SESSION_DESKTOP "* || " ${SIMPLE_WMS[*]} " = *" $DESKTOP_SESSION "* ]]; then if command -v "feh" >/dev/null 2>&1; then feh --bg-fill "$WP" 2> /dev/null elif command -v "nitrogen" >/dev/null 2>&1; then nitrogen --set-zoom-fill --save "$WP" 2> /dev/null fi fi if [[ -n $SWAYSOCK ]]; then swaymsg output "*" bg "$WP" fill 2> /dev/null fi # trinity if [ "$XDG_CURRENT_DESKTOP" == "Trinity" ]; then # The 4 refers to display mode 4; valid ones are 1-8 dcop kdesktop KBackgroundIface setWallpaper "$WP" 4 2> /dev/null fi # MATE after 1.6 gsettings set org.mate.background picture-filename "$WP" 2> /dev/null # Cinnamon after 2.0 gsettings set org.cinnamon.desktop.background picture-uri "file://$WP" 2> /dev/null if [ "$(gsettings get org.cinnamon.desktop.background picture-options)" == "'none'" ]; then gsettings set org.cinnamon.desktop.background picture-options 'zoom' fi # GNOME Screensaver / Lock screen - thanks to George C. de Araujo for the patch gsettings set org.gnome.desktop.screensaver picture-uri "file://$WP" 2> /dev/null # Awesome Window Manager # Be sure to start variety when you start awesome, such as by adding it to ~/.xinitrc # NOTE: This config will change the wallpaper after your current awesome theme sets it. # As such, the theme's wallpaper will briefly appear before being replaced with Variety's wallpaper. if [[ "$DESKTOP_STARTUP_ID" == "awesome"* ]]; then echo "local gears = require(\"gears\") gears.wallpaper.maximized(\"$1\", s, true)" | awesome-client fi # ===================================================================================== # OPTIONAL: Show a notification on automatic wallpaper change. # Display the original filename in the notification, but actually apply the post-effects image. # name=$(echo "$3" | sed 's/\//\n/g'| tail -n 1) # if [ "$2" == "auto" ]; then notify-send --icon "$WP" "Wallpaper changed" "$name" ; fi exit 0 variety-0.8.3/data/ui/000077500000000000000000000000001362063646600145475ustar00rootroot00000000000000variety-0.8.3/data/ui/AboutVarietyDialog.ui000066400000000000000000000061371362063646600206530ustar00rootroot00000000000000 False 5 About Variety ../media/variety128.png normal Variety placeholder version Copyright (c) 2012-2019, Peter Levi, James Lu & Variety contributors An automatic wallpaper changer, downloader and manager. https://launchpad.net/variety http://peterlevi.com/variety # Copyright (c) 2012-2019, Peter Levi, James Lu & Variety contributors # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see <http://www.gnu.org/licenses/>. Copyright (c) 2012-2019, Peter Levi, James Lu & Variety contributors ../media/variety128.png gpl-3-0 True False 10 10 10 10 vertical 2 True False end False True end 0 variety-0.8.3/data/ui/AddConfigurableDialog.ui000066400000000000000000000220171362063646600212410ustar00rootroot00000000000000 960 False 5 Title ../media/variety.svg normal 600 True False vertical 2 True False end gtk-cancel False True True True True False False 0 gtk-ok False True True True True True 5 True False False 1 False True end 4 True False start 10 10 15 Title False True 0 True True start 10 10 15 Instruction True fill True 130 False True 1 True False True False 10 Short Instruction True False True 0 True True True True 10 True • True False True 1 False True 2 True False end start False Just a moment to check for images False True 0 False end 10 False True 1 True False end 5 20 False True 2 False True 3 btn_cancel btn_ok variety-0.8.3/data/ui/AddFlickrDialog.ui000066400000000000000000000454011362063646600200550ustar00rootroot00000000000000 650 False 5 Variety - add Flickr as an image source True True ../media/variety.svg normal True False vertical 2 True False 5 end gtk-cancel False True True True False True False False 0 gtk-ok False True True True True True False True False False 1 False True end 0 True False 10 True vertical True False start 15 10 10 Flickr False True 0 True False start 15 Please specify the <a href="http://flickr.com">Flickr</a> search criteria. Photos that match all of the chosen criteria will be downloaded. Leave unneeded criteria empty. True fill True 130 False True 1 True False 15 20 True False start Tags: 0 2 1 1 True True True • True True 1 2 1 1 True False start 20 A comma-separated list of tags. A photo has to contain all of them simultaneosly in order to match. Example: yellow,car True 1 3 1 1 True False start User: 0 4 1 1 True True True • True True 1 4 1 1 True True start 20 Please insert the URL to the user's photostream or to one of their photos. Example: <a href="http://www.flickr.com/photos/peter-levi/">http://www.flickr.com/photos/peter-levi/</a> True 1 5 1 1 True False start Group: 0 6 1 1 True True True • True True 1 6 1 1 True True start Please insert the group's URL. Example: <a href="http://www.flickr.com/groups/wallpapers/">http://www.flickr.com/groups/wallpapers/</a> True 1 7 1 1 True False start Text: 0 0 1 1 True True True • True True 1 0 1 1 True False start 20 Free text search in photos' titles, descriptions and tags. Exclude terms by prepending them with -. Example: apple -pie True 1 1 1 1 False True 5 True False end 15 False Just a moment to check this search False True 0 False end 10 False True 1 True False end 20 False True 2 False True 6 False True 1 btn_cancel btn_ok variety-0.8.3/data/ui/EditFavoriteOperationsDialog.ui000066400000000000000000000220111362063646600226530ustar00rootroot00000000000000 False 5 Copy to Favorites vs. Move to Favorites ../media/variety.svg normal True False vertical 2 True False end Reset to Default False True True True False False True 0 gtk-cancel False True True True False True False False 1 gtk-ok False True True True False True False False 2 False True end 0 True False vertical True False start 10 10 15 Copy to Favorites vs. Move to Favorites False True 0 True False start 10 10 Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the menu depending on the image location: False True 1 120 True True 10 10 5 10 True True in True True 5 5 5 5 word textbuffer False True 2 True False 10 10 Please enter one entry per line, each entry in the form <Folder>:<Copy, Move or Both>, where Folder can be Downloaded, Fetched, Others or a specific folder path. Order is important. When an image is shown, the first folder in this list which contains the image will determine which operations will be shown in Variety's menu. 'Others' matches any file and should be last in the list. Example: Downloaded:Copy Fetched:Move /pics/RandomImages:Move /pics/OrganizedAlbums:Copy Others:Both fill True 130 False True 3 False True 1 reset btn_cancel btn_ok variety-0.8.3/data/ui/PreferencesVarietyDialog.ui000066400000000000000000007236521362063646600220520ustar00rootroot00000000000000 image/* seconds 1 minutes 60 hours 3600 days 86400 minutes 60 hours 3600 days 86400 100 1 10 100 1 10 100 1 10 100 1 10 1 0.050000000000000003 0.20000000000000001 0.01 0.5 1000 0.5 1 0.050000000000000003 850 False Variety Preferences center 960 200 True ../media/variety.svg normal True False vertical 50 True False 5 5 end gtk-close False 35 True True True True False False 1 False True end 2 True True 10 10 10 True False True vertical True False start vertical True False start 15 10 General False True 0 Start Variety when the computer starts False True True False start 30 7 0 True False True 1 True False 30 10 True Change wallpaper every False True True False 0 True False True 0 True True True Minimum interval is 5 seconds Minimum interval is 5 seconds • 4 False True 1 True False True Minimum interval is 5 seconds Minimum interval is 5 seconds liststore_change_interval 0 0 False True 5 2 False True 2 Change wallpaper on start False True True False start 30 0 True False True 3 False True 0 True False True vertical True False start start 15 20 5 Images False True 0 True False True True False vertical 250 True True 30 10 True True in True True True sources_model True 2 multiple Enabled 0 Type 1 Location 2 False True 0 True True 0 True False end 20 vertical 2 start _Add... False 100 True True True Add images, folders or online image sources Add images, folders or online image sources True False True 0 _Open Folder False True True True Edit the selected source Edit the selected source 2 True False True 1 _Edit... False True True True Edit the selected source Edit the selected source 2 True False True 2 _Remove... False True True True True Remove selected image sources Remove selected image sources 2 True False True 3 _Use False True True True Enable the selected sources and disable all others Enable the selected sources and disable all others 2 True False True 4 False True 1 True True 1 False True 1 True False end vertical True False end vertical True False start 15 20 Favorites False True 0 True False start 30 20 15 True True False Copy favorite wallpapers to False True 0 Label False 30 True True True True 0 False True 1 True False False True 2 False True 1 False True 0 False True 2 True False General False True False 10 vertical True False start 15 10 Filters False True 0 True False 10 vertical True False start 20 20 7 Randomly apply these filters to the displayed wallpapers (thanks to the wonderful ImageMagick): fill True False True 0 True False 20 20 10 vertical 20 False True 1 False True 1 True False vertical True False start 15 15 Quotes False True 0 Show random wise quotes on the desktop False True True False start 30 7 0 True False True 1 True True 30 5 True False vertical True False 30 5 True False Text color: 0 False True 0 False True True True False True 1 True False start 10 Text font: 0 False True 2 False True True True 10 Sans 12 Neither success, nor failure, are final. False False True 3 False True 0 True False 30 True False start Backdrop color: 0 False True 0 False True True True False True 1 True False 10 Backdrop opacity: 0 False True 2 True False 10 Transparent 0 False True 3 100 True True 5 quotes_bg_opacity_adjustment 100 0 False False True 4 True False Opaque False True 10 5 False True 1 Draw a text shadow False True True False start 30 5 0 True False True 2 True False Appearance False True 2 True True 30 7 True False 30 vertical True False 5 True False Quotes area width: 0 False True 0 True False 10 Narrow 1 False True 1 100 True True 5 quotes_width_adjustment 100 0 False False True 2 True False Wide False True 10 3 False True 0 True False True False Horizontal position: 0 False True 0 True False 10 Left 1 False True 1 100 True True 5 quotes_hpos_adjustment 100 0 False False True 2 True False Right False True 10 3 False True 1 True False True False Vertical position: 0 False True 0 True False 10 Top 1 False True 1 100 True True 5 quotes_vpos_adjustment 100 0 False False True 2 True False Bottom False True 10 3 False True 2 True False Placement False True 3 True True 30 7 True False vertical True False True True False start 30 20 10 Show quotes from these sources: True fill True False True 0 False True 0 True False 30 20 5 vertical 20 False True 1 True True start 30 20 3 10 True <small><a href='http://peterlevi.com/variety/wiki/Plugins'>More plugins</a></small> True fill True False True 2 True False start 30 20 10 Show only these tags and authors. Leave empty to show random quotes. fill True False True 4 True False 30 30 10 5 True True True • 1 1 True True True • 1 0 True False start Tags: 0 0 0 True False start Example: funny, inspirational True 2 0 True False start Example: Albert Einstein, Voltaire True 2 1 True False start Authors: 0 0 1 False True 5 True False Sources and filtering False True 4 True True 30 7 True False 30 10 5 True Change quote every False True True False 0 True False True 0 True True True Minimum interval is 10 seconds Minimum interval is 10 seconds • 4 False True 1 True False True Minimum interval is 10 seconds Minimum interval is 10 seconds liststore_change_interval 0 0 False True 5 2 True False Regular change False True 5 False True 3 True False vertical True False start 15 15 Clock False True 0 Show a nice big digital clock on the desktop, displaying the current time and date False True True False To configure the clock's appearance edit the clock_filter property in Variety's settings file (~/.config/variety/variety.conf). Use the comments in ~/.config/variety/variety_latest_default.conf as a guide. start 30 7 0 True False True 1 True True 30 5 True False vertical True False 30 5 True False start Clock font: 0 False True 0 False True True True Sans 12 Neither success, nor failure, are final. False False True 1 False True 0 True False 30 True False start Date font: 0 False True 0 False True True True Sans 12 Neither success, nor failure, are final. False False True 1 False True 1 True False start 30 30 7 These don't work? <a href="https://answers.launchpad.net/variety/+faq/2138">Read here</a>. How to further configure the clock? <a href="http://peterlevi.com/variety/2012/11/configuring-the-clock/">Read here</a>. True fill True False True 2 True False Appearance False True 2 False True 3 1 True False Effects 1 False True False True vertical True False start vertical True False start start 15 10 3 Images for slideshow False True 0 True False start 30 20 True vertical Favorite images False True True False start 2 0 True False True 0 Images in all enabled image sources False True True False start 2 0 True False True 1 All images in the Downloads folder False True True False start 0 True False True 2 True False start 5 True Custom folder (includes images in subfolders) False True True False 1 0 True False True 0 Label False 30 True True True True 0 False True 1 True False False True 2 False True 3 True False True False Order of images in slideshow 0 False True 0 True False Random By name, A to Z By name, Z to A By date, oldest first By date, newest first False True 1 False True 4 False True 1 True False start start 15 15 Screen False True 2 True False 30 vertical True False True False Run on monitor 0 False True 0 True False False True 1 False True 0 True False True False Window mode for the slideshow 0 False True 0 True False Fullscreen Desktop (stays below other windows) Maximized window Normal window False True 1 False True 1 False True 3 False True 0 True False True vertical True False start start 15 15 Dynamics False True 0 True False 30 20 vertical True False 5 True False Interval between image changes 0 False True 0 True True • slideshow_seconds_adjustment 1 True False True 1 True False seconds False True 2 False True 0 True False vertical True False 5 True False Quick fade 0 False True 0 140 True True slideshow_fade_adjustment 1 1 False False True 10 2 True False Slow fade False True 3 False True 0 True False 5 True False Less zoom 0 False True 0 140 True True slideshow_zoom_adjustment 1 False False True 10 2 True False More zoom False True 3 False True 1 True False 5 True False Less pan 0 False True 0 140 True True slideshow_pan_adjustment 1 False False True 10 2 True False More pan False True 3 False True 2 False True 1 Reset to defaults False True True True start False False 2 False True 1 False True 1 True False end 20 Changes on this page take effect after the slideshow is restarted False True 2 Start slideshow now False 150 35 True True True end 30 20 10 False True 3 2 True False Slideshow 2 False True False True vertical True False start vertical True False start start 15 10 Fetch folder False True 0 True False start 30 10 True True False Save manually downloaded wallpapers to False True 0 Label False 30 True True True True 0 False True 1 True False False True 2 False True 1 True False start start 15 20 Drag and drop False True 2 True False start start 28 25 10 Variety's icon in the launcher serves as a drop target. Drop any image URL or file on it and it will be saved to your fetch folder. You can then press Next to see it on your desktop. To show the icon in the launcher choose About or Preferences. You may wish to lock it there for easy drag-and-drop access. fill True 130 False True 3 False True 0 True False 20 True vertical True False start start 15 20 Clipboard monitoring False True 0 Monitor clipboard for image URLs and fetch them False True True False start start 25 10 0 True False True 1 But fetch only when the URL host is one of these: False True True False start start 25 5 0 True False True 2 200 True True 28 20 True in True True 10 10 10 10 True clipboard_hosts_buffer False True 3 False True 1 3 True False Manual downloading 3 False True False vertical True False start 15 15 10 When possible use images that: False True 0 True False vertical True False start 15 10 Size False True 0 Have landscape orientation False True True False start 30 0 True False True 2 True False 30 10 Are big at least False True True False 0 True False True 0 True False 3 50 80 100 False True 1 True False 5 % of the screen resolution False True 2 False True 3 False True 1 True False vertical True False start 15 10 Color False True 0 True False 30 10 Are dark or light: False True True False 0 True False True 0 True False 0 Dark Light False True 1 False True 1 True False 30 10 Contain this color: False True True False 0 True False True 0 False True True True False True 1 True False False 5 (Takes effect after some initial searching) False True 2 False True 2 False True 2 True False vertical True False start 15 10 5 Rating False True 0 True False Have EXIF rating at least False True True False start 30 0 True False True 0 True False 1 2 3 4 5 False True 1 False True 1 False True 3 4 True False Color and size 4 False True False start True vertical True False vertical True False start start 15 10 Indicator Icon False True 0 True False 30 True False start 10 5 Indicator icon: fill True 0 False True 0 True False Light Dark Number 1 Number 2 Number 3 Number 4 Use current wallpaper Custom image... None False True 1 False 10 30 filter_images Select an icon False True 2 False True 1 True False start 30 30 7 When the icon is hidden, Variety can be controlled from the command line, or from the launcher quicklist. Run "variety --help" to see all available commands. fill True False True 5 False True 0 True False vertical True False start start 15 20 Favorites Operations False True 0 True False 30 True False start 10 5 Favorites operations to show in main menu: fill True 0 False True 0 True False Copy to Favorites Move to Favorites Both Copy and Move Depends on folder... False True 1 Edit... False 80 True True 10 30 False True 2 False True 1 False True 1 True False start vertical True False start start 15 18 Login Screen Support False True 0 True False start 30 30 True vertical Make sure the wallpapers set by Variety will be used on the login screen False True True False start 7 0 True False True 0 True False start 7 <b>Privacy warning:</b> To show your wallpaper LightDM needs read permissions over the image. With this option on, Variety will copy the wallpapers to a public folder and change their permissions to make them readable by all. By default, the folder is ~/Pictures if your home folder in not encrypted, and /usr/share/backgrounds if it is. Please use with care on multiuser systems. True fill True 130 False True 1 True False 5 True False start Copy wallpaper image files to this folder: 0 False True 0 Copy-to folder False 30 True True True True False True 1 Reset to default False True True True 5 False True 2 Still doesn't work? False True True True True end 20 5 none https://answers.launchpad.net/variety/+faq/2271 False True 3 False True 2 False start 5 It seems your home folder is encrypted, so using folders inside it will not work. False True 3 False 5 vertical True False start You don't have write permissions for this folder. 0 False True 0 True False start Permissions do not allow LightDM to read files from this folder. 0 False True 1 True False start Variety can adjust the permissions, but you will have to provide superuser privileges. True fill True False True 2 OK, adjust the permissions False True True True start False True 3 False True 4 False True 1 False True 3 5 True False Customize 5 False True False vertical True False start 15 10 Tips and tricks False False 0 80 True True 30 10 5 10 True in True True 3 3 3 False word tips_buffer False True 1 True False start 15 10 Recent changes False False 2 True True 30 10 True in True True 3 3 3 3 False word changes_buffer False True 3 True False vertical True True False start 15 10 Visit website 0 0 http://peterlevi.com/variety False True True True True start 15 none http://peterlevi.com/variety 0 1 True False start 15 10 Report a bug or request a feature 0 2 https://github.com/varietywalls/variety/issues False True True True True start 15 none https://github.com/varietywalls/variety/issues 0 3 True False start 10 Send feedback 1 0 peterlevi@peterlevi.com False True True True True start none mailto:peterlevi@peterlevi.com 1 1 True False start 10 Donate to Variety 1 2 Donate via PayPal False True True True True start none https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=DHQUELMQRQW46&lc=BG&item_name=Variety%20Wallpaper%20Changer&currency_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHosted 1 3 False True end 5 6 True False Tips and tricks 6 False 7 7 False False True 0 False end 10 15 2 Status message True True False True 3 save variety-0.8.3/data/ui/PrivacyNoticeDialog.ui000066400000000000000000000175701362063646600210170ustar00rootroot00000000000000 PrivacyNoticeDialog 960 200 True True True baseline Variety - Privacy Notice True center-always 960 200 variety dialog True True center center 2 2 2 2 vertical True True 15 15 10 end Reject and Quit True True True True True 1 Accept and Continue True True True True True True True True True 2 True True 5 end 4 300 200 True True 10 10 10 10 vertical True False <span font="15" weight="bold">Privacy Notice</span> True False True 0 True False 10 ../media/vrty-cloud.png False True 1 True False 15 Before we start, here are some things you need to be aware of and agree to: <b>Variety is an open-source application, provided as is, without any warranties</b>. By using it, you agree to the terms and conditions of the <a href="https://www.gnu.org/licenses/gpl-3.0.en.html">GNU GPLv3 license</a> under which it is distributed. <b>Variety is an internet-connected application.</b> With default settings, Variety downloads images from the internet. Web servers it downloads from may collect information about your device, like IP address. Variety does not send any personally identifiable information. By using Variety, you accept its use of internet connectivity. Note that all online image sources can be disabled. <b>Variety fetches and applies rate limiting settings defined by the development team.</b> This may affect the rate at which it downloads new images, but it helps ensure Variety can work regardless of how many people are running it. These settings will be downloaded from gist.github.com where we host them. <b>Some image sources require us to track additional information when enabled.</b> For example the terms of <a href="https://help.unsplash.com/en/articles/2511245-unsplash-api-guidelines">Unsplash</a> require us to track and report when users download and view images from Unsplash. True True False True 2 False True 2 1 variety-0.8.3/data/ui/WelcomeDialog.ui000066400000000000000000000201711362063646600176220ustar00rootroot00000000000000 960 200 True True True 5 Welcome to Variety! True center-always 960 200 ../media/variety.svg dialog 750 520 True False start vertical True False end 15 10 end Continue False True True True True True True True False True 0 False True end 0 True False 25 25 vertical True False start start 20 Welcome to Variety! False True 0 True False start start Variety is an automatic wallpaper changer. It rotates your desktop wallpaper on a regular basis using local images or images downloaded from various online sources. It runs quietly in the background - to control it, click this icon in your system tray: True fill True 130 False True 1 True False ../media/tray-screenshot.png False True 2 True True start start Variety is open-source software, created by Peter Levi, a software developer from Bulgaria. If you like it, please <a href="http://peterlevi.com/variety/donate/">donate</a>. True fill True 130 False True 3 True True start start 20 Now please take some time to set your preferences on the following screens. True fill True 130 0 False True 4 True True 1 continue_button variety-0.8.3/data/ui/about_variety_dialog.xml000066400000000000000000000006171362063646600214710ustar00rootroot00000000000000 variety-0.8.3/data/ui/add_configurable_dialog.xml000066400000000000000000000006201362063646600220560ustar00rootroot00000000000000 variety-0.8.3/data/ui/add_flickr_dialog.xml000066400000000000000000000005721362063646600206760ustar00rootroot00000000000000 variety-0.8.3/data/ui/changes.txt000066400000000000000000000141561362063646600167270ustar00rootroot000000000000000.8.0 - 0.8.3 Image sources are now plugins Add support for sequential albums Add support for multiple simultaneously running Variety profiles (--profile command option) Add a Privacy Notice dialog Add support for configurable Unsplash sources Add two new sources (ChromeOS Wallpapers and Google Earth View Wallpapers) Remove World Sunlight Map source Added Urban Dictionary and UNIX fortune program as quote sources Download linked to wallpaper changing, not configured as a separate interval Add a dedicated --set/--set-wallpaper option Make the thumbs display much faster Fix bugs related to GTK threading usage Mulitple bugfixes Dev process: Use auformatting on all Python files (black, isort) 0.7.2 Add support for Sway, bspwm Enable AwesomeWM support by default Fix crash on --help or --version if a Variety instance is already running (GH-148) Fix spurious "file not found" errors when checking for animated GIFs (GH-132) New translations: Chinese, Japanese 0.7.1 Fix remaining bugs from the Python 3 port: errors when saving favorite quotes and generating pencil_tile.png 0.7.0 New translation: Turkish Fix possible download issues when upgrading from older Variety versions and having safe mode enabled GoodreadsSource: fix stray HTML tags being displayed in quote authors 0.7.0-beta1 Port to Python 3 Fix broken trash deletion on some systems by directly using Gio libraries Fix potential log file corruption when trying to start multiple instances Support for setting GNOME Screensaver / GDM background Removed outdated functionality for publishing to Facebook Updated URL for QuotationsPage plugin Update default clipboard_hosts: add deviantart.net, imageshack.com; remove (dead) ns223506.ovh.net 0.6.9 Removed broken "SSL dependency" installation code Fix trash deletion (0.6.8 regression) and replace gvfs-trash (deprecated) with 'gio trash' Skip metadata checks on non-image files, leading to "GExiv2: unsupported format" warnings Use subprocess.Popen to run xdg-open so that it doesn't block on some distros (LXQt, Trinity DE) Removed more dead code related to VRTY.org, Panoramio, KDE 4 Add get_wallpaper support for KDE Plasma 5; fix support for LXDE Move bug tracker links to GitHub 0.6.8 Unsplash API update Remove everything related to VRTY.org which is not running anymore 0.6.7 Fix "unary operator expected" errors on KDE variables in set_wallpaper New WM support: i3 with logging (i3-with-shmlog), Moksha (e17 fork), dwm i3 and openbox code now uses either feh or nitrogen interchangeably Removed Debian-specific use of dpkg-query in checks for nitrogen Switch to Ayatana indicators by default Many fixes to set_wallpaper pointed out by shellcheck 0.6.6 [Security] Fixed multiple shell injection issues in the "Delete to Trash", filter, and clock code Add long-awaited wallpaper changing support on KDE Plasma 5 Fix crash when gi-appindicator isn't installed Removed verbose console output by default, as this tends to spam syslog and ~/.xsession-errors when launched via autostart - see https://bugs.launchpad.net/bugs/1685003 Fixed Variety showing the wrong version in the About dialog 0.6.5 Fix "Previous" wallpaper button on MATE 1.10 and later Fix quote applying with Pillow >= 4.2.0, patch from Elon Bing Remove Panoramio support, as that service no longer exists. Initial patch by Balló György in Arch Linux. Fix high CPU usage when mousing away from the thumbnail selector Add trinity-desktop support and AppStream metadata for GNOME Software Center 0.6.2 - 0.6.4 Safe mode added for filtering out NSFW images 0.6.1 Bugfixes 0.6.0 Variety Slideshow 0.5.4 - 0.5.5 Moving to a standard Debian-style installation Bing and Unsplash support Out-of-the-box support for i3 and LXQt 0.5.1 - 0.5.3 Bugfixes 0.5.0 VRTY.ORG integration, synchronization of favorites Wallhaven support Reddit support Google Image Search option Updated autostart desktop file Bugfixes 0.4.20 Unicode-related bugfixes 0.4.19 Fixed Flickr and Wallpapers.net support Added Panoramio support Added support for Enlightenment Added Wallpaper Selector option Streamlined menu Easier Facebook sharing process Unicode support fixes and other bugfixes 0.4.18 Fixes for XFCE 4.10 and up and KDE 4.10 and up Other bugfixes 0.4.16, 0.4.17 Fixed Wallbase and Wallpapers.net support Quote plugins, much richer quote sources 0.4.14, 0.4.15 Add support for MATE 1.6 and Cinnamon 1.8 Better support for LightDM Fix problems with the folder choosers Many bugfixes 0.4.13 Bugfixes and polishing First translations added: Spanish, Russian, Bulgarian Better Remove source functionality 0.4.12 Quotes Preferences take effect immediately, no Save button Customizable indicator icon Image rating support 0.4.11 Bugfixes Option to choose between Move and Copy to Favorites 0.4.10 Media RSS support Live Earth sunlight map support Simplified menu (separate Playback submenu) Display source option Option to show recent downloads Support for command-line arguments 0.4.9 Mark current wallpaper in thumbnails view Bugfixes and speed improvements KDE support 0.4.8 Sharing to Facebook Option to show a nice clock on the desktop 0.4.7 Support more desktop environments out of the box (Tested on Xubuntu, Lubuntu, Mint MATE and Mint Cinnamon) 0.4.6 Reordered menu for quicker access to most common actions Added Fast Forward function to skip forward history 0.4.5 History view Better thumbnails view: configurable size and position, file operations 0.4.4 Faster filters Store origin info inside image metadata, not txt files 0.4.1 - 0.4.3 Added thumbnail view, initial version. Bugfixes. 0.4 Manual image downloading via drag-and-drop or clipboard 0.3.14 Editing of sources Better trash/favorite operations 0.3.13 Wallbase.cc support NASA Astronomy Picture of the Day support variety-0.8.3/data/ui/edit_favorite_operations_dialog.xml000066400000000000000000000006611362063646600237020ustar00rootroot00000000000000 variety-0.8.3/data/ui/preferences_variety_dialog.xml000066400000000000000000000006331362063646600226560ustar00rootroot00000000000000 variety-0.8.3/data/ui/privacy_notice_dialog.xml000066400000000000000000000006101362063646600216230ustar00rootroot00000000000000 variety-0.8.3/data/ui/welcome_dialog.xml000066400000000000000000000005571362063646600202520ustar00rootroot00000000000000 variety-0.8.3/data/variety-autostart.desktop.template000066400000000000000000000006751362063646600230560ustar00rootroot00000000000000[Desktop Entry] Name=Variety Comment=Variety Wallpaper Changer Categories=GNOME;GTK;Utility; Exec={VARIETY_PATH} --profile {PROFILE_PATH} MimeType=text/uri-list;x-scheme-handler/variety;x-scheme-handler/vrty; Icon=variety Terminal=false Type=Application StartupNotify=false Actions=Next;Previous;PauseResume;History;Preferences; Keywords=Wallpaper;Changer;Change;Download;Downloader;Variety; X-GNOME-Autostart-Delay=20 StartupWMClass={WM_CLASS} variety-0.8.3/data/variety-profile.desktop.template000066400000000000000000000020521362063646600224570ustar00rootroot00000000000000[Desktop Entry] Name=Variety (Profile: {PROFILE_NAME}) Comment=Variety Wallpaper Changer, running with profile {PROFILE_NAME} Categories=GNOME;GTK;Utility; Exec={VARIETY_PATH} --profile {PROFILE_PATH} %U MimeType=text/uri-list;x-scheme-handler/variety;x-scheme-handler/vrty; Icon=variety Terminal=false Type=Application StartupNotify=false Actions=Next;Previous;PauseResume;History;Preferences; Keywords=Wallpaper;Changer;Change;Download;Downloader;Variety; StartupWMClass={WM_CLASS} [Desktop Action Next] Exec={VARIETY_PATH} --profile {PROFILE_PATH} --next Name=Next OnlyShowIn=Unity; [Desktop Action Previous] Exec={VARIETY_PATH} --profile {PROFILE_PATH} --previous Name=Previous OnlyShowIn=Unity; [Desktop Action PauseResume] Exec={VARIETY_PATH} --profile {PROFILE_PATH} --toggle-pause Name=Pause / Resume OnlyShowIn=Unity; [Desktop Action History] Exec={VARIETY_PATH} --profile {PROFILE_PATH} --history Name=History OnlyShowIn=Unity; [Desktop Action Preferences] Exec={VARIETY_PATH} --profile {PROFILE_PATH} --preferences Name=Preferences OnlyShowIn=Unity; variety-0.8.3/debian/000077500000000000000000000000001362063646600144435ustar00rootroot00000000000000variety-0.8.3/debian/changelog000066400000000000000000001115621362063646600163230ustar00rootroot00000000000000variety (0.8.3) bionic; urgency=medium * Remove World Sunlight Map source -- Peter Levi Wed, 12 Feb 2020 01:12:00 +0200 variety (0.8.2) bionic; urgency=medium * Bugfixes * Added Urban Dictionary and UNIX fortune program as quote sources -- Peter Levi Thu, 09 Jan 2020 8:41:00 +0200 variety (0.8.1) bionic; urgency=medium * Bugfixes -- Peter Levi Sat, 28 Dec 2019 23:06:00 +0200 variety (0.8.0) bionic; urgency=medium * Image sources are now plugins * Add support for sequential albums * Add support for multiple simultaneously running Variety profiles (--profile command option) * Add a Privacy Notice dialog * Add support for configurable Unsplash sources * Add two new sources (ChromeOS Wallpapers and Google Earth View Wallpapers) * Download linked to wallpaper changing, not configured as a separate interval * Add a dedicated --set/--set-wallpaper option * Make the thumbs display much faster * Fix bugs related to GTK threading usage * Mulitple bugfixes * Dev process: Use auformatting on all Python files (black, isort) -- Peter Levi Sun, 22 Dec 2019 10:38:00 +0200 variety (0.7.2) bionic; urgency=medium * Add support for Sway, bspwm * Enable AwesomeWM support by default * Fix crash on --help or --version if a Variety instance is already running (GH-148) * Fix spurious "file not found" errors when checking for animated GIFs (GH-132) * New translations: Chinese, Japanese -- James Lu Sun, 21 Apr 2019 19:36:59 -0700 variety (0.7.1) bionic; urgency=medium * Fix remaining bugs from the Python 3 port: errors when saving favorite quotes and generating pencil_tile.png -- James Lu Tue, 23 Oct 2018 08:49:01 -0700 variety (0.7.0) bionic; urgency=medium * New translation: Turkish * Fix possible download issues when upgrading from older Variety versions and having safe mode enabled * GoodreadsSource: fix stray HTML tags being displayed in quote authors -- James Lu Tue, 17 Jul 2018 15:41:18 -0700 variety (0.7.0~a1) UNRELEASED; urgency=medium * Port to Python 3 * Fix broken trash deletion on some systems by directly using Gio libraries * Fix potential log file corruption when trying to start multiple instances * Support for setting GNOME Screensaver / GDM background * Removed outdated functionality for publishing to Facebook * Updated URL for QuotationsPage plugin * Update default clipboard_hosts: add deviantart.net, imageshack.com; remove (dead) ns223506.ovh.net -- James Lu Tue, 17 Jul 2018 15:41:18 -0700 variety (0.6.9) bionic; urgency=medium * Removed broken "SSL dependency" installation code * Fix trash deletion (0.6.8 regression) and replace gvfs-trash (deprecated) with 'gio trash' * Skip metadata checks on non-image files, leading to "GExiv2: unsupported format" warnings * Use subprocess.Popen to run xdg-open so that it doesn't block on some distros (LXQt, Trinity DE) * Removed more dead code related to VRTY.org, Panoramio, KDE 4 * Add get_wallpaper support for KDE Plasma 5; fix support for LXDE * Move bug tracker links to GitHub -- James Lu Thu, 12 Jul 2018 11:01:25 -0700 variety (0.6.8) bionic; urgency=medium * Unsplash API update * Remove everything related to VRTY.org which is not running anymore -- Peter Levi Wed, 11 Apr 2018 00:20:03 +0200 variety (0.6.7) bionic; urgency=medium * Fix "unary operator expected" errors on KDE variables in set_wallpaper * New WM support: i3 with logging (i3-with-shmlog), Moksha (e17 fork), dwm * i3 and openbox code now uses either feh or nitrogen interchangeably * Removed Debian-specific use of dpkg-query in checks for nitrogen * Switch to Ayatana indicators by default, patch by Unit 193 * Many fixes to set_wallpaper pointed out by shellcheck -- James Lu Mon, 26 Mar 2018 18:12:12 -0700 variety (0.6.6) xenial; urgency=medium * [Security] Fixed multiple shell injection issues in the "Delete to Trash", filter, and clock code * Add long-awaited wallpaper changing support on KDE Plasma 5 * Fix crash when gi-appindicator isn't installed * Removed verbose console output by default, as this tends to spam syslog and ~/.xsession-errors when launched via autostart - see https://bugs.launchpad.net/bugs/1685003 * Fixed Variety showing the wrong version in the About dialog -- James Lu Tue, 19 Sep 2017 11:50:11 -0700 variety (0.6.5) xenial; urgency=medium * Variety 0.6.5: See https://bazaar.launchpad.net/~variety/variety/trunk/changes/599 for a list of changes. -- James Lu Tue, 22 Aug 2017 11:50:11 -0700 variety (0.6.4) trusty; urgency=low * Remove automatic killswitch for old versions -- Peter Levi Fri, 29 Apr 2017 00:20:03 +0200 variety (0.6.3) trusty; urgency=low * Add way to outdate old versions -- Peter Levi Fri, 22 Jul 2016 00:20:03 +0200 variety (0.6.2) trusty; urgency=low * Safe mode added for filtering out NSFW images * Initial version of anonymous stats reporting -- Peter Levi Fri, 22 Jul 2016 00:20:03 +0200 variety (0.6.1) trusty; urgency=low * Workaround for Wallhaven SSL issues * Removed code for no-longer supported Wallpapers.net source -- Peter Levi Fri, 22 Jul 2016 00:20:03 +0200 variety (0.6.0) trusty; urgency=low * Added Variety Slideshow * Using official Unsplash API now -- Peter Levi Wed, 30 Dec 2015 01:45:03 +0200 variety (0.5.5) precise; urgency=low * Bumped the version to 0.5.5 * Updated translation files * Added some more default image sources * Disable Latest source by default, put NSFW warning in description * set_wallpaper: Fix support for KDE Plasma 5 * Fixed minor typo in Add Reddit dialog -- Peter Levi Sun, 20 Sep 2015 00:33:42 +0300 variety (0.5.5) precise; urgency=low * Bumped the version to 0.5.5 * Updated translation files * Added some more default image sources * Disable Latest source by default, put NSFW warning in description * set_wallpaper: Fix support for KDE Plasma 5 * Fixed minor typo in Add Reddit dialog -- Peter Levi Sun, 20 Sep 2015 00:33:04 +0300 variety (0.5.4ubuntu1) precise; urgency=low * -- Peter Levi Sun, 20 Sep 2015 00:27:37 +0300 variety (0.5.4) precise; urgency=low * Updated setup.py to not change icon paths in desktop file * Remove requests dependency for UnsplashDownloader * Remove requests dependency for UnsplashDownloader * More localization-related fixes * Fix UI of all dialogs to prevent labels from maximizing them horizontally * Localization-related fixes. Updated translations. * Minor update to changes and tips info * Smart: updated report_file to heed needs_reupload response * Bumping version number to 0.5.4 * Updated dependencies in debian/control to include python-requests * Disable sorting of Images table by clicking in header * UI cosmetics on non-Unity: Add some spacing between buttons next to Images table * Fix UI of PreferencesVarietyDialog to prevent labels from maximizing it horizontally * Use explicit python2 hashbangs in all scripts, as Ubuntu will be moving to Python 3 as default * Removed some unnecessary junk files * Unsplash: sanitize filenames of downloaded images, just in case some unexpected char pops up there in the future * Added support for Unsplash.com * Added Bing Photo of the Day image source * Update tests to run on local modules, not global Variety modules * Simplify Donate tab in Preferences * Small change to bin/variety to facilitate local testing when Variety is installed in the classic Debian way * Preparing to move Variety to a classic Debian-style package: Icons * Fixed Facebook publishing: use publish_actions scope * Fixes to LXQt support (thanks to Erik Nelson) * Add out-of-the-box support for LXQt (Thanks to panfren) * Better detection of images coming from MediaRSS feeds when sourceType is missing * Out-of-the-box support for i3-wm -- Peter Levi Wed, 05 Aug 2015 23:01:43 +0300 variety (0.5.3ubuntu1) precise; urgency=low * -- Peter Levi Wed, 05 Aug 2015 21:14:58 +0300 variety (0.5.3) precise; urgency=low * Updated some translations, added Korean * Bumped version ot 0.5.3 * Fix fetching of Wallhaven image SFW rating -- Peter Levi Sun, 08 Feb 2015 20:03:36 +0200 variety (0.5.2ubuntu1) precise; urgency=low * -- Peter Levi Sun, 08 Feb 2015 19:58:14 +0200 variety (0.5.2) precise; urgency=low * Bumping version to 0.5.2 * More logging by default, no need for -v argument * Missing XDG directory definitions were causing Variety to fail. Fixed now. -- Peter Levi Tue, 20 Jan 2015 12:08:11 +0200 variety (0.5.2) precise; urgency=low * Bumping version to 0.5.2 * More logging by default, no need for -v argument * Missing XDG directory definitions were causing Variety to fail. Fixed now. -- Peter Levi Tue, 20 Jan 2015 12:07:04 +0200 variety (0.5.1ubuntu1) precise; urgency=low * -- Peter Levi Tue, 20 Jan 2015 12:02:48 +0200 variety (0.5.1) precise; urgency=low * Bumping version to 0.5.1 * SafeLogger wraps all logging in lambda calls to avoid UnicodeDecodeErrors in building log messages * Add a No, thanks button to the VRTY.ORG invitation screen * Minor fix to move_or_copy_file to handle outer metadata.json files * Use safe_print to avoid UnicodeEncodeError when printing messages on badly configured terminals * VRTY.ORG invitation screen: Closing with X button or Esc is interpreted as Don't participate * Do not fail to start when smart_user.json is broken -- Peter Levi Sun, 11 Jan 2015 22:17:01 +0200 variety (0.5.0ubuntu1) precise; urgency=low * -- Peter Levi Sun, 11 Jan 2015 14:03:59 +0200 variety (0.5.0) precise; urgency=low * Smart: updated again some texts * Removed some unnecessary delays in Timer calls * Trashing was slow due to smart-reporting: update queues and wallpaper first, report and delete in an outer thread afterwards * Added TestRedditDownloader * Initial registration screen: Register link instructs user to look for a new browser tab * Smart: updated some welcome screens texts * Smart: try to load user in init to avoid exception related to creating RecommendedDownloader * Updated variety.pot * Bumped version to 0.5.0 * Merged variety-smart branch, preparing for 0.5.0 release * MediaRSS: use variety:author info when present * Merged in Simotek's Enlightenment related fix * Minor refactor: added VarietyWindow.register_downloaded_file * Show Next and Previous in main menu only in non-Unity DEs (Unity supports indicator scroll, no need for them there) * Make sure to delete metadata json when purging downloaded folder * Unicode: Make _u and _str transparent for None * Util.get_xdg_pictures_folder uses GLib.get_user_special_dir(GLib.USER_DIRECTORY_PICTURES), not subprocess call to xdg-user-dir * Merge in multi-screen Enlightenment-related changes from Simotek * set_wallpaper: Do not call unity-greeter gsettings command, it is causing issues on some machines * Use another server options URL, specific for the current version. * Merge changes to indicator.py from variety-smart * Merged in some changes from variety-smart * Merged in updates to Downloaders from the variety-smart branch * Next and previous options in main menu * Bumping the version number to 0.4.21 * Added forgotten RedditDownloader.py * Added support for Reddit as an image source * Refactored out some duplicate code in AddXXXDialogs, added AbstractAddByQueryDialog * Option to search image with Google Image Search * More structured throttling of do_set_wp and scroll handling. Fix to ThumbsWindow when showing bad file * Autostart desktop file: use bash || command to run Variety wherever it is located. Create autostart entry on first run. Update it on every version upgrade * Minor fix to the desktop file * Ensure Variety starts and works OK when there is no wallpaper image * Fetch and save in EXIF SFW rating from Wallhaven * Update to Wallhaven search * Fixed some failing tests * Removed some outdated quotes-related tests * View at... option in right-click thumbnail menu as well * Updates related to Wallbase->Wallhaven change, not possible anymore to add Wallbase sources * Wallbase -> Wallhaven update to default sources * Adding Wallhaven.cc support * Merging changes to reading/writing metadata from variety-smart * Bugfix: do not remove delete wallpaper file in cleanup_old_wallpapers() * Faceboook sharing: do not include link to full image, let Facebook choose image itself * Bugfix: Make sure all dialogs require just one click on the X button to close * Bugfix: Add image source dialogs required two clicks on the X button to close * Use proper origin URL for Desktoppr images * Fix Unicode error related to non-ascii font names -- Peter Levi Wed, 07 Jan 2015 09:34:19 +0200 variety (0.4.20) precise; urgency=low * Bumping version to 0.4.20 * set_wallpaper: Do not call the XFCE-related code when xfconf-query is not present * Another Unicode-related fix (logging with -vvv was throwing Unicode- related errors) * Another Unicode-related fix * Another Unicode-related fix -- Peter Levi Mon, 05 Jan 2015 01:36:09 +0200 variety (0.4.19ubuntu1) precise; urgency=low * -- Peter Levi Thu, 17 Jul 2014 15:46:32 +0300 variety (0.4.19) precise; urgency=low * Fix to Facebook first run dialog. Added latest translations. * Separate Author entry in menu for images from Panoramio * Bumped version to 0.4.19 * Merged with trunk * Save author when dowloading from Panoramio * Panoramio support: added search box * Panoramio support, initial drop * Thumbs: show 100, not 200 images, reduces CPU spike period * Menu: merged Playback and Image submenus * Facebook sharing: Updated text of first time dialog * Facebook sharing updates, bugfix * Polishing updates to Facebook publishing. Easy way to include quote with image. * Facebook authentication uses variety:// redirects, not internal Webkit windows * More explicit Unicode handling. Tackle unicode encode/decode errors by working with unicode internally for filepaths, options, etc. * Minor update to indicator icon * Use 22px png for the indicator, not svg - works better in XFCE and Gnome * Minor fix related to clipboard monitoring hosts * Removed preferences for Facebook and Rating menuitems, not needed anymore * Added support for Enlightenment * Streamlining the menu, TODO: remove preferences for Facebook and Rating menuitems * Menuitem and command option to show thumbsbar for manual wallpaper selection * Fixing Wallpapers.net support * Update Flickr calls to use https (Flickr closed non-SSL API access) * Cinnamon: Fix for reverting scaling mode to Zoom on every WP change -- Peter Levi Tue, 15 Jul 2014 09:02:16 +0300 variety (0.4.18ubuntu1) precise; urgency=low * -- Peter Levi Tue, 15 Jul 2014 01:32:31 +0300 variety (0.4.18) precise; urgency=low * Adding latest translations * Bumping version to 0.4.18 * Note about KDE updated in tips and tricks * Changes to KDE support. Added more translations. * Fix support of XFCE (4.10 changed the way wallpapers are set) * Fix 'Desktop manager not active' bug caused by pcmanfm - run it only when LXDE active * Merge * Fixed an https-related problem with Flickr (Bug #1305370) * Fixes in the changelog for some build experiments * Streamlined the image-searching code * Local files quotes plugin was getting perplexed by Windows line endings * Add missing Texts.py * Some slight chnages to texts, Bulgarian transaltion updated * Bitcoin donate link * Translatable image source descriptions * Translatable filter names * Translatable tips and tricks * More fixes to saving quotes to Favorites * Configurable location of quotes favorites file * Saving favorite quotes: use % for delimiter, as in the fortune file format * Proper fix for bad unicode characters in quotes from TheQuotationsPage * Options to save quotes to favorites and view the saved favorites * Replace some more bad unicode characters in quotes from TheQuotationsPage * Replace some bad unicode characters in quotes from TheQuotationsPage * Ignore error when GSettings lookup fails * Creating ubuntu package * Bugfix: Wallpapers.net downloader was failing when there were subcategories on the page -- Peter Levi Fri, 09 May 2014 11:35:52 +0300 variety (0.4.17ubuntu1) precise; urgency=low * -- Peter Levi Fri, 09 May 2014 11:32:53 +0300 variety (0.4.17) precise; urgency=low * Upped version to 0.4.17 * Fix Wallbase collections URLs support -- Peter Levi Thu, 26 Sep 2013 18:39:46 +0300 variety (0.4.16) precise; urgency=low * Append http: to links starting with // * Updated translation files * Quick access to quotes preferences * QuotesEngine: different notif. warnings when sites are down and when search criteria are bad * Changes to filters - removed charcoal, added soft blur * Option to reveal the clean image when using any effects * Upped version to 0.4.16 * Added Recommended sources link under image sources list * Quotes: better search by tags for Goodreads; local files also support fortune file format * Mrgd in variety-plugins * Updated Wallbase dialog - simpler, allows entering keywords or URL * Updating WallpapersNetDownloader to work with current Wp.net site * Updating WallbaseDownloader to work with current Wallbase site * QuoteWriter now works on GTK thread (fixes potential SegmentationFault) * Proper handling of terminating signals * Fix bad quotes in Cinnamon section in set_wallpaper -- Peter Levi Wed, 25 Sep 2013 00:08:30 +0300 variety (0.4.15ubuntu1) precise; urgency=low * -- Peter Levi Tue, 24 Sep 2013 23:43:57 +0300 variety (0.4.15) precise; urgency=low * Merged from trunk -- Peter Levi Tue, 11 Jun 2013 23:27:18 +0300 variety (0.4.14) precise; urgency=low * Allow themeable indicator icon (looks for variety-indicator icon name). Updated translations. * Fixing UnicodeDecodeErrors when applying filters or clock * Enhanced LightDM support: more flexible in the case of encrypted home * Log exceptions in Util.makedirs. Minor test added. * Updates changes.txt, preparing to release 0.4.14 * Fix get_wallpaper to better differentiate between MATE 1.6 and older * Bug 1173347: Remove sources button was not always showing menu * FolderChooser: show only basename, not full path * Custom FileChooser replaces the very buggy Gtk.FileChooserButton * Updated perform_upgrade functionality to reflect the changes to scripts and to wallpaper setting functionality * Removed unused apport and GSettings code (auto-generated by quickly) * Bug 1136025: Use trash-put (from trash-cli) for Delete to Trash * Bug 1181628: Always use different filename on wallpaper update * Bug 1181736: use ~ for paths when possible when persisting config file * Add support for Cinnamon 1.8 * Option for better LightDM support * Fix for #1171552: Guard set_wallpaper with a timeout to prevent from hangs * Merged: Add support for MATE 1.6 * Add X-GNOME-Autostart-Delay=20 to autostart desktop file, should fix bug #1163172 * Do not crash if gsettings schema org.gnome.desktop.background is missing * Filters can now use %FILENAME% and %FILEPATH% variables for image annotation * #1173636: Pass original filename as third parameter to set_wallpaper * Some more logging in VarietyWindow * Logging: add time; log all method calls when run with -vvv * Fix exception when deleting to Trash * Updated changes.txt -- Peter Levi Tue, 11 Jun 2013 23:22:32 +0300 variety (0.4.13ubuntu1) precise; urgency=low * -- Peter Levi Tue, 11 Jun 2013 09:31:09 +0300 variety (0.4.13) precise; urgency=low * Try/finally around some remaining threads_enter/threads_leave calls * Changed server options URL; Use Cache-Control header to avoid stale data from server * Adding translations: es, ru, bg * Minimum download interval increased to 1 minute; Serverside options support for Wallpapers.net downloader as well * Bugfix: Also clear prepared_from_downloads when prepared queues need clearing * Use try/finally around all places using Gtk.threads_enter/threads_leave to prevent from freezes in case of error * FB image publishing might sometimes fails without a valid reason. Solved by retrying up to 3 times. * Updated variety.pot * Auto-update set_wallpaper script on upgrade when it has not been modified by the user * Fix freezing when exceptions happen in update_indicator * Translations: Fix to Light/Dark translation context * Updated pot file * Minor fix: delay fetching of server options at start * Quotes were giving an error on KDE, installing python-gi-cairo fixes it - adding it to deps * XFCE was not refreshing wallpaper when using quotes or clock * Bug #1096630: Fix exception on first run when there is no current wallpaper image * Log to a file (~/.config/variety/variety.log), not only to console * Prettier approach to fetching serverside options; Added supoprt for server-defined Wallbase min intervals * Minor fix to the Remove... menu labels * Pressing Enter now works in the Add dialogs (no need to click OK) * Removing sources and files: take actions to remove the files from various queues * Remove sources menu to delete or not the downloaded files; initial version * Changes to AUTHORS and copyright notice in FacebookHelper * Bugfix: Proper clearing of prepared buffer when settings change * Support for showing a serverside-obtained status message in Preferences * Dynamic restrictions on how often Flickr API calls are made * More minor localization-related fixes * Upgrade handling support. Handle download folder changes on upgrade to 0.4.13 * More options for the download folder - allow it to be an empty folder, or one used before for downloading * Translating to Bulgarian and fixing various localization issues on the way * Protect user files when changing download folder: Use a subfolder when DL dir is outside Variety's config dir * Bug 1084961: modifying the thumbs bar prefs was only hiding it, not showing it again with the new settings * Fixes for SVG: Util.get_size was failing; Run no filtering if the filter is empty (e.g. Keep original) -- Peter Levi Thu, 14 Feb 2013 16:43:14 +0200 variety (0.4.12ubuntu1) precise; urgency=low * -- Peter Levi Thu, 14 Feb 2013 16:32:46 +0200 variety (0.4.12) precise; urgency=low * Updated tips and changes txt * Bugfix: Save original wallpaper name when quotes are applied * Bugfix: a download was forcing the thumbs window to reshow when already hidden * Minor fix * Improvements related to image preparing; Minor bug-fixes * Trigger a download when too few images found; Livelier thumbs when showing folders, not only history and downloads (new downloads are auto-shown) * Merged in variety-instant-preferences * Fix: removed class Window was still referred at one place * Replaced some unnecessary timers with calls to GObject.timeout_add * Reordered prefs tabs. Command-line way to set options * Added UI preferences tab * Removed unneeded files * Stripping VarietyWindow from Quickly's boilerplate; Separate WelcomeDialog * Quotes: fix image scaling * Merged in lp:~peterlevi/variety/variety-quotes * Unity qucklist added, initial version; Show Preferences if run again with no parameters - better launcher button behaviour * Commandline options to hide/show/toggle visibility of indicator icon and to show preferences * Added Rating option to main menu - optional (off by default) * Added funtionality to set image ratings * Filtering by rating added; Preparations for adding simple functionality to rate images * Ensure wallpaper is changed even if the current background is a solid color in Gnome/Unity * Minor fixes * Commandline options for toggling History and Recent downloads * Updated icons 14x14 and 16x16 * Thumbs: back to showing 200 instead of 100 * When appindicator is not present fallback gracefully to a GTK StatusIcon * Minor fix * Made strings translatable * Updated chnages.txt; Fixed unnecessary heavy preparing of images during purge_download_folder * Better prioritizong of new downloads to give equal exposure to refreshers and normal downloading sources * Added a Donate page and link in preferences -- Peter Levi Tue, 27 Nov 2012 00:08:57 +0200 variety (0.4.11ubuntu1) precise; urgency=low * -- Peter Levi Mon, 26 Nov 2012 23:54:26 +0200 variety (0.4.11) precise; urgency=low * Fix for WB * Minor bugfixes * Fix separators - call SeparatorMenuItem.new() instead of SeparatorMenuItem() * Option to choose between Copy to Fav, Move to Fav. * Option to choose between Copy to Fav, Move to Fav. Fixes to thumbs popup menu. * Use gvfs-trash for proper moving to trash, not custom file move operation * Bugfix 1064592: Preferences dialog too high for netbooks (1024x600px) * Bugfix 1065284: Thumbs: Auto-scrolling continues even after user pops a right-click menu or sets a wallpaper * Bugfix for 1064667: Variety doesn't fetch images urls from InterfaceLift - use a normally looking User-Agent for all requests * Bugfix for 1051743: Variety sometimes uses 100% of the CPU -- Peter Levi Tue, 16 Oct 2012 22:25:20 +0300 variety (0.4.10) precise; urgency=low * Minor edit of Media RSS dialog text * Set proper Media RSS dialog title * Updated changes.txt for 0.4.10 * Updated MediaRSS dialog; Thumbs: show less thumbs (100, not 200), but faster so dialog is fully responsive sooner * Minor fix - append to history only when image is not same as previous one * More work for EarthDownloader; Bugfix: sources Enable checkboxes were not always reacting to clicks * Live Earth sunlight map support, initial version * Simplified menu - moved rarely used playback items to a submenu * Display Source option implemented, initial version * URL-unquote and make safe local filename when downloading. More Picasa-specific rss fixes * Picasa RSS feeds - add imgmax=d parameter to feed URL to get full image resolutions * Wrap url in quotations when calling xdg-open with it * Recent downloads view * #1048238 Fix fetching a file with same name as existing file * Media RSS feeds, initial support * Command-line options for next, previous, fav, trash, pause, etc. Can be used at start or passed via dbus to running instance -- Peter Levi Sun, 07 Oct 2012 15:50:37 +0300 variety (0.4.9ubuntu1) precise; urgency=low * -- Peter Levi Tue, 11 Sep 2012 00:04:04 +0300 variety (0.4.9) precise; urgency=low * Autostart: create .config/autostart if needed; Handle case when user sets local clock back in time * KDE support, initial version * Do not destroy preferences dialog, just hide it, cache it on start - shows much faster now * Thumbs menu: radio mark on the current size and position menu items * Initial wallpaper refresh in a Timer - faster start when filters are used * Minor fix: make prepare thread not wake every 30 seconds * Clipboard monitoring: option to bypass the whitelist * Separate filter and clock filter so that only clock filter is applied every minute (reduced CPU usage when both are used); Better icon (128 px, not blurry in gnome shell) * Persist last wallpaper change moment. Use it when change interval is >= 6 hours to ensure wallpaper changes regularly even between restarts; Fixed bug in history persisting - was persisting too much * Minor fix to comments in variety.conf * Marking of current file in thumbnails view * Proper listening for thumbs window closed event - updates the Close/Show history state -- Peter Levi Tue, 04 Sep 2012 23:02:17 +0300 variety (0.4.8ubuntu1) precise; urgency=low * -- Peter Levi Mon, 03 Sep 2012 17:20:48 +0300 variety (0.4.8) precise; urgency=low * Facebook - show image in publish dialog; Clock - apply on start, hide on quit; Bugfixes for Facebook and clock * Clock, initial version * Sharing on Facebook, initial version * Reread options from file just before Save, so as not to persist stale options * Better handling of dropping local images - do not fetch them, add them directly; Proper update of history view on fetch/add * Sharing on Facebook, initial support infrastructure * Beeter blur filter -- Peter Levi Sat, 18 Aug 2012 16:43:20 +0300 variety (0.4.7ubuntu1) precise; urgency=low * -- Peter Levi Sat, 18 Aug 2012 16:39:10 +0300 variety (0.4.7) precise; urgency=low * More fixes to support Xubuntu, Lubuntu, Mint properly * Bug #1036649, Make prefs dialog non-modal - thumbnails window was not receiving any clicks on XFCE, LXDE, MATE * Updated get/set wallpaper scripts, tested on XFCE, LXDE, MATE * Persist history between runs -- Peter Levi Fri, 17 Aug 2012 18:55:15 +0300 variety (0.4.6ubuntu1) precise; urgency=low * -- Peter Levi Wed, 15 Aug 2012 09:01:52 +0300 variety (0.4.6) precise; urgency=low * One more slight chnage to order in menu * Updated changes * ImageFetcher: use fetched image as notification icon * Remove NSFW warning for Desktoppr - it now seems to return only safe images; make a sanity check in DesktopprDownloader * Reordered menu for faster access to most common actions (Fav/Trash); Added Fast Forward * Write more comprehensive origin metadata to downloaded images * Make indicator icon stand out better with Radiance theme -- Peter Levi Wed, 15 Aug 2012 16:13:08 +0300 variety (0.4.5ubuntu1) precise; urgency=low * -- Peter Levi Mon, 13 Aug 2012 10:33:29 +0300 variety (0.4.5) precise; urgency=low * More fixes to history display; some minor UI updates (tooltips, etc.) * Updated tips. Minor bugfix. * Better clicking in history; Bugfixes * Trash/Fav in thumbs menu; Live updating of thumbs for trash/history operations * Bugfix: Make scripts executable on start (Installation clears their executable bits) * Fixes - autosroll threads used to live forever and eat cpu * GTK threading fixes again * Slicker autoscrolling stop effect; Show History in menu * Refactored ThumbsWindow; Added size and position options for thumbnails * ThumbsWindow: support for other positions (not only bottom); no GUI yet * Minor fix * Autoscroll for thumbnails view * Merged convert-metadata and set/get wallpaper scripts revisions * Support for custom commands on wallpaper set - use scripts for getting/setting the wallpaper -- Peter Levi Sat, 11 Aug 2012 14:47:44 +0300 variety (0.4.4ubuntu1) precise; urgency=low * -- Peter Levi Sat, 11 Aug 2012 14:39:48 +0300 variety (0.4.4) precise; urgency=low * Updated changes.txt * Faster filters - scale to screen resolution first * More random Util.list_files - used to be lousy for deep big folders, now better but still far from being fair-random * Metadata inside image (XMP), txt file only as fallback * Use button - a quick way to set the sources to use * Simplify click handing code in ThumbsWindow -- Peter Levi Mon, 06 Aug 2012 01:43:04 +0300 variety (0.4.3ubuntu1) precise; urgency=low * -- Peter Levi Sun, 05 Aug 2012 23:30:04 +0300 variety (0.4.3) precise; urgency=low * Updated changes.txt * Bugfixes: more thumbs/gtk/threading fixes -- Peter Levi Fri, 03 Aug 2012 11:01:13 +0300 variety (0.4.3) precise; urgency=low * Updated changes.txt * Bugfixes: more thumbs/gtk/threading fixes -- Peter Levi Fri, 03 Aug 2012 10:42:03 +0300 variety (0.4.2) precise; urgency=low * Updated changes.txt * Bugfixes (mainly thumbs/gtk threading stuff); Forced kill when quit takes too long -- Peter Levi Fri, 03 Aug 2012 02:15:30 +0300 variety (0.4.1ubuntu1) precise; urgency=low * -- Peter Levi Fri, 03 Aug 2012 02:05:34 +0300 variety (0.4.1) precise; urgency=low * Update changes.txt * Select files to show as thumbnails randomly * Thumbnails, initial version * Focus newly added sources; When auto-populating sources and filters, only check the type/name for equality * Single Add button with a drop-down menu for the different image sources * Image preview when adding images; Removed unnecessary default sources * Bugfix: underscores in filename and folder path in indicator -- Peter Levi Thu, 02 Aug 2012 23:54:26 +0300 variety (0.4.1) precise; urgency=low * Update changes.txt * Select files to show as thumbnails randomly * Thumbnails, initial version * Focus newly added sources; When auto-populating sources and filters, only check the type/name for equality * Single Add button with a drop-down menu for the different image sources * Image preview when adding images; Removed unnecessary default sources * Bugfix: underscores in filename and folder path in indicator -- Peter Levi Thu, 02 Aug 2012 23:53:50 +0300 variety (0.4) precise; urgency=low * Extracted makedirs calls to Util * Bugfix: create config dir on startup * Minor fixes to clipboard monitoring * Minor fixes to fetching; Tips and tricks in Preferences * Cosmetic GUI fix * Preferences for manual downloading; Clipboard monitoring * Drag and drop support - drop an image link on the launcher icon to download the image * Merged quickly changes for 0.3.15 -- Peter Levi Thu, 02 Aug 2012 17:49:53 +0300 variety (0.3.15) precise; urgency=low * Bug fixed: update_indicator was failing on the first run (at startup) -- Peter Levi Tue, 31 Jul 2012 22:46:45 +0300 variety (0.3.14) precise; urgency=low * Disable Move/Copy immediately after automatic chnages to avoid inadvertent clicking; Better notifications; Better filters error handling * Bug #1027708: Change Move to Favs to Copy to Favs. Remove confirmation dialogs. * Open folder/View image instead of Edit for folders and images * Editing of sources now possible * Purge downloaders cache if size options change; Log level INFO on - v, DEBUG on -vv -- Peter Levi Tue, 24 Jul 2012 01:34:03 +0300 variety (0.3.13) precise; urgency=low * Minor fixes; Add some wallbase to default sources * Notify user when after Next or MoveToTrash we cannot find another image to display * Full Wallbase.cc support * Wallbase downloader added (no GUI yet); Some duplicate code refactored * Fix bug 1025615: Variety may refuse to start because of incorrect lock/PID checking -- Peter Levi Sun, 22 Jul 2012 03:08:30 +0300 variety (0.3.12) precise; urgency=low * NASA APOD - Use archive instead of RSS, but still always put in queue the newest 3 images * NASA's Astro pic of the day, initial support (RSS-feed-based) -- Peter Levi Mon, 16 Jul 2012 23:36:07 +0300 variety (0.3.11) precise; urgency=low * Merged in some suggested packaging-related changes from lp:~andrewsomething/ubuntu-app-reviews/variety * Fix bug: Flickr downloader could download several different sizes of the same image during several consecutive fills of the queue -- Peter Levi Thu, 12 Jul 2012 22:16:55 +0300 variety (0.3.10ubuntu1) precise; urgency=low * -- Peter Levi Thu, 12 Jul 2012 17:01:35 +0300 variety (0.3.10) precise; urgency=low * Initial release. -- Peter Levi Mon, 09 Jul 2012 21:30:07 +0300 variety-0.8.3/debian/compat000066400000000000000000000000021362063646600156410ustar00rootroot000000000000009 variety-0.8.3/debian/control000066400000000000000000000035631362063646600160550ustar00rootroot00000000000000Source: variety Section: graphics Priority: optional Build-Depends: debhelper (>= 9), dh-python, python3, python3-distutils-extra (>= 2.18) Maintainer: Peter Levi Uploaders: James Lu Standards-Version: 4.1.0 Homepage: http://peterlevi.com/variety/ Vcs-Git: https://github.com/varietywalls/variety Vcs-Browser: https://github.com/varietywalls/variety Package: variety Architecture: all Depends: gir1.2-gdkpixbuf-2.0, gir1.2-gexiv2-0.10, gir1.2-glib-2.0, gir1.2-gtk-3.0, gir1.2-notify-0.7, gir1.2-pango-1.0, imagemagick, python3-bs4, python3-lxml, python3-cairo, python3-configobj, python3-dbus, python3-gi, python3-gi-cairo, python3-pil, python3-pkg-resources, python3-requests, ${misc:Depends}, ${python3:Depends} Recommends: gir1.2-ayatanaappindicator3-0.1 | gir1.2-appindicator3-0.1, python3-httplib2, fortune-mod Suggests: feh | nitrogen, gnome-shell-extension-appindicator | gnome-shell-extension-top-icons-plus Description: Wallpaper changer, downloader and manager Variety is an open-source wallpaper changer, downloader, and manager for Linux. It supports a variety of sources for wallpapers, including local files, online services such as Unsplash, Flickr, Wallhaven.cc, NASA Astronomy Picture of the Day, Desktoppr.co, and media RSS feeds (Picasa, deviantART, etc.). . You can also install the following (suggested) packages to enhance Variety's functionality on certain desktop setups: * feh | nitrogen: used for wallpaper changing on i3-wm, Openbox, and dwm * gnome-shell-extension-top-icons-plus: adds indicators support to GNOME Shell, so that Variety's tray icon can be displayed variety-0.8.3/debian/copyright000066400000000000000000000051711362063646600164020ustar00rootroot00000000000000Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: variety Upstream-Contact: Peter Levi Source: https://launchpad.net/variety Files: * Copyright: (C) 2012-2017, Peter Levi (C) 2012, Rosetta Contributors and Canonical Ltd License: GPL-3 Files: debian/* Copyright: (C) 2012-2017, Peter Levi (C) 2012, Rosetta Contributors and Canonical Ltd (C) 2015-2017, James Lu License: GPL-3 License: GPL-3 This program is free software: 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 3. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . . On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-3’. License: BSD-3-Clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. variety-0.8.3/debian/rules000077500000000000000000000006761362063646600155340ustar00rootroot00000000000000#!/usr/bin/make -f export PYBUILD_NAME=variety %: ifneq ($(shell dh -l | grep -xF translations),) dh $@ --with python3,translations --buildsystem=pybuild else dh $@ --with python3 --buildsystem=pybuild endif override_dh_auto_clean: # Remove the auto-generated .pot file so successive builds work. rm -f po/variety.pot dh_auto_clean override_dh_auto_test: # Not used in Debian build since they predominantly require network access true variety-0.8.3/debian/source/000077500000000000000000000000001362063646600157435ustar00rootroot00000000000000variety-0.8.3/debian/source/format000066400000000000000000000000151362063646600171520ustar00rootroot000000000000003.0 (native) variety-0.8.3/debian/variety.1000066400000000000000000000060111362063646600162060ustar00rootroot00000000000000.TH VARIETY "1" "March 2018" "variety 0.6.x" "User Commands" .SH NAME variety \- open\-source wallpaper changer for Linux .SH SYNOPSIS .B variety [\fI\,options\/\fR] [\fI\,files or urls\/\fR] .SH DESCRIPTION Variety is an open\-source wallpaper changer, downloader, and manager for Linux. It supports a variety of sources for wallpapers, including local files, online services such as Flickr, Wallbase.cc, Wallpapers.net, NASA Astronomy Picture of the Day, Desktoppr.co, and media RSS feeds (Picasa, deviantART, etc.). .SH NOTES Passing local files will add them to Variety's queue. Passing remote URLs will make Variety fetch them to Fetched folder and place them in the queue. .PP To set a specific wallpaper: variety \fI\,/some/local/image.jpg\/\fP \fB\-\-next\fR .SH OPTIONS .TP \fB\-\-version\fR show program's version number and exit .TP \fB\-h\fR, \fB\-\-help\fR show this help message and exit .TP \fB\-v\fR, \fB\-\-verbose\fR Show logging messages (\fB\-vv\fR shows even finer debugging messages, \fB\-vvv\fR debugs variety_lib too) .TP \fB\-q\fR, \fB\-\-quit\fR Make the running instance quit .TP \fB\-\-get\fR, \fB\-\-current\fR, \fB\-\-show\-current\fR Print the current wallpaper location. Used only when the application is already running. .TP \fB\-n\fR, \fB\-\-next\fR Show Next wallpaper .TP \fB\-p\fR, \fB\-\-previous\fR Show Previous wallpaper .TP \fB\-\-fast\-forward\fR Show Next wallpaper, skipping the forward history .TP \fB\-t\fR, \fB\-\-trash\fR Move current wallpaper to Trash. Used only when the application is already running. .TP \fB\-f\fR, \fB\-\-favorite\fR Copy current wallpaper to Favorites. Used only when the application is already running. .TP \fB\-\-move\-to\-favorites\fR Move current wallpaper to Favorites. Used only when the application is already running. .TP \fB\-\-pause\fR Pause on current image .TP \fB\-\-resume\fR Resume regular image changes .TP \fB\-\-toggle\-pause\fR Toggle Pause/Resume state .TP \fB\-\-quotes\-next\fR Show Next quote .TP \fB\-\-quotes\-previous\fR Show Previous quote .TP \fB\-\-quotes\-fast\-forward\fR Show Next quote, skipping the forward history .TP \fB\-\-quotes\-toggle\-pause\fR Toggle Quotes Pause/Resume state .TP \fB\-\-quotes\-save\-favorite\fR Save the current quote to Favorites .TP \fB\-\-history\fR Toggle History display .TP \fB\-\-downloads\fR Toggle Recent Downloads display .TP \fB\-\-preferences\fR, \fB\-\-show\-preferences\fR Show Preferences dialog .TP \fB\-\-selector\fR, \fB\-\-show\-selector\fR Show manual wallpaper selector \- the thumbnail bar filled with images from the active image sources .TP \fB\-\-set\-option\fR=\fI\,SET_OPTIONS\/\fR Sets and applies an option. The option names are the same that are used in Variety's config file ~/.config/variety/variety.conf. Multiple options can be set in a single command. Example: 'variety \fB\-\-setoption\fR icon Dark \fB\-\-set\-option\fR clock_enabled True'. USE WITH CAUTION: You are changing the settings file directly in an unguarded way. .TP \fB\-\-debug\-smart\fR Debug VRTY.ORG and sync functionality by using local server variety-0.8.3/debian/variety.manpages000066400000000000000000000000211362063646600176340ustar00rootroot00000000000000debian/variety.1 variety-0.8.3/jumble/000077500000000000000000000000001362063646600144775ustar00rootroot00000000000000variety-0.8.3/jumble/IPlugin.py000066400000000000000000000054501362063646600164240ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import abc class IPlugin(object, metaclass=abc.ABCMeta): """ The most simple interface to be inherited when creating a plugin. """ @classmethod @abc.abstractmethod def get_info(cls): """ Returns the basic info about the plugin. Please make sure the name is unique among all Variety plugins Format: return { "name": "Sample name", "description": "Sample description", "version": "1.0", "author": "Author name", # optional "url": "Plugin homepage URL" # optional } """ pass def __init__(self): """ All plugins must have a default constructor with no parameters. Remember to call super. """ self.active = False # These will be filled in by Jumble.load() and available before the first activate() call self.jumble = None self.path = None # Path to the plugin python file self.folder = ( None ) # Folder where plugin is located (can be used for loading UI resources, etc.). # This folder may be read-only. A separate config folder convention should be used to store config files. def activate(self): """ Called at plugin activation. Please do not allocate large portions of memory or resources before this is called. Remember to call super first. This method can be called multiple times within a session. It may be called when the plugin is already active - in this case it should simply return. """ if self.active: return self.active = True def deactivate(self): """ Called when the plugin is disabled. Please free used memory and resources here. Remember to call super first. This method can be called multiple times within a session. It may be called when the plugin is already inactive - in this case it should simply return. """ self.active = False def is_active(self): return self.active variety-0.8.3/jumble/Jumble.py000066400000000000000000000103411362063646600162660ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import imp import inspect import logging import os from .IPlugin import IPlugin logger = logging.getLogger("variety") class Jumble: def __init__(self, folders): self.folders = folders def _walk_python_files(self): for folder in self.folders: for location, directories, filenames in os.walk(folder): for f in filenames: if f.endswith(".py"): yield location, f def _walk_modules(self): for location, f in self._walk_python_files(): path = os.path.join(location, f) name = os.path.splitext(f)[0] info = imp.find_module(name, [location]) try: logger.info(lambda: "Jumble loading module in %s from %s" % (name, path)) yield imp.load_module(name, *info), path except Exception: logger.exception("Could not load plugin module %s" % path) continue def _walk_plugin_classes(self): for module, path in self._walk_modules(): def is_plugin(cls): return ( inspect.isclass(cls) and issubclass(cls, IPlugin) and cls.__module__ == module.__name__ ) for name, cls in inspect.getmembers(module, is_plugin): yield cls, path def load(self): """ Loads all plugins from the plugin folders, without activating them """ logger.info(lambda: "Jumble loading") self.plugins = [] for cls, path in self._walk_plugin_classes(): try: info = cls.get_info() except Exception: logger.exception("Jumble: not a plugin class: %s" % str(cls)) continue if not info: logger.warning("Jumble: %s: get_info() returned None" % str(cls)) continue try: plugin = cls() logger.info(lambda: "Jumble found plugin class: %s: %s" % (str(cls), str(info))) plugin.jumble = self plugin.path = os.path.realpath(path) plugin.folder = os.path.dirname(plugin.path) self.plugins.append({"plugin": plugin, "class": cls, "info": info}) except Exception: logger.exception("Jumble: could not instantiate plugin class: %s" % str(cls)) continue def get_plugins(self, clazz=None, typename=None, name=None, active=None): """ Searches for plugins that match the given criteria. If no criteria are given, all loaded plugins are returned. :param clazz: parent plugin class; optional :param typename: plugin type name; optional :param name: plugin name, should match exactly; optional :param active: specifies whether the plugin should be currently active, or inactive; optional, by default both are returned :return: all matching plugins, as hashes {"plugin": plugin, "class": plugin_class, "info": info} """ return sorted( [ p for p in self.plugins if (not clazz or issubclass(p["class"], clazz)) and (not typename or p["class"].__name__ == typename) and (not name or p["info"]["name"] == name) and (active is None or p["plugin"].is_active() == active) ], key=lambda p: p["info"]["name"], ) variety-0.8.3/jumble/__init__.py000066400000000000000000000000001362063646600165760ustar00rootroot00000000000000variety-0.8.3/po/000077500000000000000000000000001362063646600136375ustar00rootroot00000000000000variety-0.8.3/po/bg.po000066400000000000000000003167161362063646600146050ustar00rootroot00000000000000# Bulgarian translation for variety # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the variety package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2015-08-02 13:45+0000\n" "Last-Translator: Peter Levi \n" "Language-Team: Bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "Тегли цитати от Goodreads.com" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "Запазване на оригинала" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "Степени на Ñивото" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "Силно размазване" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "Леко размазване" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "Картина Ñ Ð¼Ð°Ñлени бои" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "Скица Ñ Ð¼Ð¾Ð»Ð¸Ð²" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "Пойнтилизъм" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "ПикÑелизациÑ" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "Папка Ñ Ð›ÑŽÐ±Ð¸Ð¼Ð¸" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "Папка Ñ Ñ€ÑŠÑ‡Ð½Ð¾ изтеглени" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "" "Препоръчано от Variety. Ðдаптира Ñе към вкуÑа Ви докато маркирате картинки " "като любими или триете към коша." #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "Случайно избрани тапети от Desktoppr.co" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "ÐÐСÐ: ÐÑтрономичеÑка Ñмимка на денÑ" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "" "World Sunlight Map - Карта на оÑветеноÑтта на ЗемÑта от Слънцето, променÑща " "Ñе през денÑ" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "Bing Фото на денÑ" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "Фотографии Ñ Ð²Ð¸Ñока Ñ€ÐµÐ·Ð¾Ð»ÑŽÑ†Ð¸Ñ Ð¾Ñ‚ Unsplash.com" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "" "Можете да ÑменÑте тапета като въртите колелцето на мишката нагоре или надолу " "върху индикаторната икона." #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" "Ðко иÑкате да изпълните Ñпецифични команди при вÑÑка ÑмÑна на тапета или пък " "използвате работна Ñреда, коÑто не Ñе поддържа по подразбиране, можете да " "редактирате Ñкриптовете в ~/.config/variety/scripts." #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" "Можете да контролирате Variety от ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´, като това може да Ñе " "използва и за да зададете глобални клавишни комбинации за фунцкиите, които " "ползвате най-чеÑто. ПуÑнете \"variety --help\", за да видите ÑпиÑък Ñ " "доÑтъпните команди." #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" "СвалÑйте ръчно тапети като завлачите линк към картинката върху иконата на " "Variety в launcher-a. За по-бързо ÑвалÑне от конкретни Ñайтове може да " "включите и опциÑта за наблюдение на клипборда (вижте таба \"Ръчно " "изтеглÑне\")." #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "" "Използването за филтъра за Ñилно размазване е леÑен начин да получите " "абÑтрактно-изглеждащи и ненатрапчиви тапети, подобни на ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ñ‚Ð°Ð¿ÐµÑ‚ на " "Убунту." #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" "Можете леÑно да добавÑте Ñвои ÑобÑтвени филтри: отворете " "~/.config/variety/variety.conf в текÑтов редактор и използвайте " "ÑъщеÑтвуващите филтри като пример. Ð’Ñеки филтър е набор от опции, които да " "Ñе подадат към командата convert на ImageMagick." #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" "Когато Ñелектирате нÑкой източник, картинките в него Ñе изобразÑват в " "долната чаÑÑ‚ на екрана. ÐатиÑнете върху картинка, за да Ñ Ð·Ð°Ð´Ð°Ð´ÐµÑ‚Ðµ като " "тапет. ÐатиÑнете Ñ Ð´ÐµÑен бутон за да затворите лентата и за други опции. Ðко " "изберете нÑколко източника едновременно, ще видите картиките им заедно. " "Имайте предвид, че лентата Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ° е ограничена до нÑколкоÑтотин Ñлучайно " "подбрани картинки от източниците." #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" "За да получавате нотификации когато тапета Ñе ÑменÑ, разкоментирайте двете " "линии на ÐºÑ€Ð°Ñ Ð½Ð° ~/.config/variety/scripts/set_wallpaper." #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" "Индикаторната икона на Variety може да Ñе наÑтройва в GTK темата - ако " "изберете опциÑта \"Светла индикаторна икона\", Variety ще провери дали в " "текущата GTK тема има икона Ñ Ð¸Ð¼Ðµ \"variety-indicator\" преди да използва " "Ñтандартната Ñи икона." #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" "Когато запиÑвате цитат в Любими, той Ñе запиÑва във файла " "~/.config/variety/favorite_quotes.txt. Форматът на този файл е ÑъвмеÑтим Ñ " "плъгина на Variety за цитати от локални файлове. Ðко иÑкате да го ползвате - " "копирайте го в ~/.config/variety/pluginconfig/quotes/ и активирайте плъгина " "за цитати от локални файлове. ОÑвен това този файл е ÑъвмеÑтим Ñ Unix " "приложението fortune." #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "Влизане във VRTY.ORG" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "ПотребителÑко име: " #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "Парола: " #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "ÐÑмате акаунт? РегиÑтрирайте Ñе" #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "Забравена парола?" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" "Можете Ñъщо да Ñе логнете във VRTY.ORG в " "браузъра Ñи и да натиÑнете линка \"Trigger Variety " "login\" от Ð²Ð°ÑˆÐ¸Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»." #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "Вход" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "Картинки" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "Папки" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "Flickr" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Wallhaven.cc" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "Reddit" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "Media RSS" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "Изтрий от ÑпиÑъка, запази файловете" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "Изтрий от ÑпиÑъка, запази файловете" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "Изтрий от ÑпиÑъка и изтрий изтеглените файловете" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "Изтрий от ÑпиÑъка и изтрий изтеглените файловете" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "Включихте World Sunlight Map" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "За да използвате World Sunlight Map е необходимо опциите за реглÑрно ÑвалÑне " "и ÑмÑна на тапети да Ñа включени Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð» не по-голÑм от 30 минути. " "ÐаÑтройките Ви бÑха автоматично променени." #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "ДобавÑне на картинки" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "Отказ" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "Добави" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "" "ДобавÑне на папки - добавÑйте Ñамо най-горната папкa, подпапките Ñе включват " "автоматично в търÑенето" #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "Редактирай..." #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "Виж картинката" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "Отвори папката" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "Източника за Препоръчани картинки беше изключен" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "ÐÑмате права за пиÑане" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "Квотата беше деактивирана" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "" "ПромÑната на папката за теглене автоматично изключва опциÑта за ограничване " "на размера, за да Ñе избегне неволна загуба на данни" #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "Реална папка за теглене: %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "Ðа уÑпÑÑ… да Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ñ Ð¿Ñ€Ð°Ð²Ð°Ñ‚Ð°" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "Може да пробвате ръчно да изпълните Ñледната команда:\n" "sudo chmod %s \"%s\"" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "Влезли Ñте Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»: " #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "Ðнонимен потребител" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "Вход или региÑтрациÑ" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "Превключи потребителÑ" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "Добре дошли във Variety!" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "Ðапред" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" "Variety е програма за автоматична ÑмÑна на тапети. Ð¢Ñ ÑÐ¼ÐµÐ½Ñ Ñ‚Ð°Ð¿ÐµÑ‚Ð° на " "Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚ през определен интервал от време, като използва картинки от " "компютъра Ви или такива, които е Ñвалила автоматично от разнообразни " "източници в Интернет. Variety върви незабележимо на заден план - за да Ñ " "контролирате, натиÑнете тази иконка в ÑиÑтеманата лента:" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" "Variety е Ñофтуер Ñ Ð¾Ñ‚Ð²Ð¾Ñ€ÐµÐ½ код, Ñъздаден от Петър Леви, програмиÑÑ‚ от " "БългариÑ. Ðко програмата Ви хареÑва, Ð¼Ð¾Ð»Ñ Ð½Ð°Ð¿Ñ€Ð°Ð²ÐµÑ‚Ðµ дарение." #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "" "МолÑ, отделете малко време да наÑтроите програмата в Ñледващите нÑколко " "екрана." #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "KDE потребители - Важно, Ð¼Ð¾Ð»Ñ Ð¿Ñ€Ð¾Ñ‡ÐµÑ‚ÐµÑ‚Ðµ:" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" "Изглежда Ñте Ñ KDE. Ð’ KDE 4 нÑма как тапетът да бъде Ñменен от програма - " "нÑма API за това. За да работи Variety, Ð¼Ð¾Ð»Ñ " "прочетете и изпълнете тези инÑтрукции." #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "УпÑ, Ñървърът върна грешка (%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "ÐÑма връзка ÑÑŠÑ Ñървъра" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "_Следваща" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "_Предишна" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "Текущ тапет" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "Отвори източника" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "Копирай в _Любими" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "ПремеÑти в Любими" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "Изтрий към Коша" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "Следваща, пропуÑкайки иÑториÑта" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "Съвет: Скролирайте Ñ ÐºÐ¾Ð»ÐµÐ»Ñ†ÐµÑ‚Ð¾\n" "върху иконата за да ÑменÑте тапета." #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "Пауза върху тази картинка" #: ../variety/indicator.py:129 msgid "_Image" msgstr "_Картинка" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "Откъде идва?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "Покажи без ефектите" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "ТърÑене на картинката Ñ Google Image Search" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "Сподели във ФейÑбук" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "EXIF оценка" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "Запиши в Любими" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "Виж Любимите..." #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "Копирай в клипборда" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "ПотърÑи цитата в Google" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "ПотърÑи автора в Google" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "ÐаÑтройки..." #: ../variety/indicator.py:252 msgid "Turn off" msgstr "Изключи" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "_Цитат" #: ../variety/indicator.py:265 msgid "_History" msgstr "_ИÑториÑ" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "Избиране на тапет" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "_Скорошно изтеглени" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "" #: ../variety/indicator.py:302 msgid "About" msgstr "За приложението" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "Ðаправи дарение" #: ../variety/indicator.py:310 msgid "Quit" msgstr "Изход" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "Това не е URL на валиден Media RSS фийд или в него нÑма Ñъдържание." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "Variety - VRTY.ORG" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "Ðе, благодарÑ" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" "Запознайте Ñе Ñ VRTY.ORG! ИÑкате ли да Ñе включите?" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" "VRTY.ORG Ñвързва потребители на Variety Ñ " "подобен Ð²ÐºÑƒÑ ÐºÑŠÐ¼ картинки и предоÑÑ‚Ð°Ð²Ñ Ñупер-удобни начини за ÑмÑна на " "тапета, за намиране и добавÑне на нови източници на картинки и за абониране " "за любимите картинки на други потребители." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" "УчаÑтието не изиÑква уÑÐ¸Ð»Ð¸Ñ - профилът Ви ще бъде обновÑван автоматично " "когато хареÑвате или триете картинки, които Variety е Ñвалила. Профилът Ви " "нÑма да бъде ÑподелÑн Ñ Ð½Ð¸ÐºÐ¾Ð³Ð¾, оÑвен ако не решите Ñами да го направите " "публичен. Прочетете още за " "уÑлугата и политиката за поверителноÑÑ‚." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" "УчаÑтието е нужно за нÑкои функции на Variety, като Ñинхронизиране на любимите Ви картинки между компютрите " "Ви." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "УчаÑтвайте във VRTY.ORG" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "Variety - добавÑне на Panoramio като източник" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "ÐœÐ¾Ð»Ñ Ñ„Ð¾ÐºÑƒÑирайте зоната, коÑто Ви е интереÑна." #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Variety - Публикувай във ФейÑбук" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "" "Публикувай връзка към Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñ‚Ð°Ð¿ÐµÑ‚ във ФейÑбук. Добави този текÑÑ‚ към " "връзката (можете да го оÑтавите празен):" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "Използвай Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "Ðе питай повече, винаги използвай Ð³Ð¾Ñ€Ð½Ð¸Ñ Ñ‚ÐµÐºÑÑ‚" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "Ðе намерих картинки" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "Вече е в Любими" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "ПремеÑти в _Любими" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "Довлечено: Покажи източника" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "Виж във %s" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "ÐеизвеÑтно" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "Ðвтор: %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "Поднови регулÑрната ÑмÑна" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "Твърде Ñтроги филтри?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "" "Variety намира много малко картинки, които ÑъответÑтват на филтрите ви." #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "" "ÐœÐ¾Ð»Ñ Ð´Ð¾Ð±Ð°Ð²ÐµÑ‚Ðµ още източници на картинки или изчакайте да Ñе изтеглÑÑ‚ нови" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "ÐœÐ¾Ð»Ñ Ð´Ð¾Ð±Ð°Ð²ÐµÑ‚Ðµ още източници на картинки" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "ÐÑма повече тапети" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "ТекущиÑÑ‚ тапет не е в никой от източниците" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "" "Ðе уÑпÑÑ… да премеÑÑ‚Ñ Ð² %s. ВероÑтно нÑмате права да меÑтите този файл." #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "" "Ðе можах да копирам в %s. ВероÑтно нÑмате права да копирате този файл." #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "ÐеуÑпешно изтриване" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "ÐÑмате права да премеÑтите %s в Коша." #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "Ðнонимна ÑтатиÑтика за използване" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" "Variety Ñъбира анонимни ÑтатиÑтичеÑки данни за използването на програмата. \n" "Те ни помагат да Ñ Ð¿Ð¾Ð´Ð¾Ð±Ñ€Ñваме и не Ñе ÑподелÑÑ‚ Ñ Ð½Ð¸ÐºÐ¾Ð³Ð¾. \n" "За да видите по-подробна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¸Ð»Ð¸ да ги изключите, отворете " "наÑтройките за Синхронизиране." #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "" "Ще Ð¾Ñ‚Ð²Ð¾Ñ€Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» в редактор и ще Ð¿Ñ€ÐµÐ·Ð°Ñ€ÐµÐ´Ñ Ð¿Ñ€Ð¾Ð¼ÐµÐ½Ð¸Ñ‚Ðµ Ñлед " "като запишете и затворите редактора." #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [опции] [файлове или УРЛи]\n" "\n" "Ðко подадете локални файлове, те ще бъдат добавени в опашката на Variety.\n" "Ðко подадете URLи към картинки в интернет, Variety ще ги изтегли в папката " "за ръчно теглене и ще ги добави в опашката.\n" "\n" "За да изберете текущ тапет: %prog /локална/картинка.jpg --next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "" "Показвай logging Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ (-vv логва Ñ Ð¿Ð¾Ð²ÐµÑ‡Ðµ детайли, -vvv логва и дебъг " "Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ variety_lib)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "Подай Ñигнал за излизане към вървÑÑ‰Ð¸Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑ" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "" "Покажи Ð¿ÑŠÑ‚Ñ ÐºÑŠÐ¼ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñ‚Ð°Ð¿ÐµÑ‚. Използва Ñе Ñамо при вървÑщо приложение." #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "Покажи ÑÐ»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ Ñ‚Ð°Ð¿ÐµÑ‚" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "Покажи Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð¸Ñ Ñ‚Ð°Ð¿ÐµÑ‚" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "Покажи нов тапет, като пропуÑнеш forward иÑториÑта" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "" "ПремеÑти Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñ‚Ð°Ð¿ÐµÑ‚ в Коша. Използва Ñе Ñамо при вървÑщо приложение." #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Копирай Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñ‚Ð°Ð¿ÐµÑ‚ в Любими. Използва Ñе Ñамо при вървÑщо приложение." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "ПремеÑти Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñ‚Ð°Ð¿ÐµÑ‚ в Любими. Използва Ñе Ñамо при вървÑщо приложение." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "Пауза върху текущата картинка" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "Поднови регулÑрната ÑмÑна" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "Паузирай или възобнови" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "Покажи ÑÐ»ÐµÐ´Ð²Ð°Ñ‰Ð¸Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "Покажи Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð¸Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "Покажи нов цитат като пропуÑнеш forward иÑториÑта" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "Паузирай или възобнови ÑмÑната на цитати" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "Запиши Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚ в Любими" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "Покажи или Ñкрий иÑториÑта" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "Покажи или Ñкрий Ñкорошно изтеглените" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "Покажи диалога за наÑтройки" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "" "Ръчен избор на тапет - показва лентата Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ¸ от текущо активните " "източници" #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "Задава и включва в дейÑтвие дадена опциÑ. Имената на опциите Ñа Ñъщите като " "тези в ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» ~/.config/variety/variety.conf. Могат да Ñе " "задават нÑколко опции Ñ ÐµÐ´Ð½Ð° команда. Пример: 'variety --set-option icon " "Dark --set-option clock_enabled True'. ИЗПОЛЗВÐЙТЕ Ð’ÐИМÐТЕЛÐО: СменÑте опции " "директно в ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» без да Ñе извършва проверка за коректноÑÑ‚." #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "опциите --next/--fast-forward и --previous Ñа взаимно изключващи Ñе" #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "опциите --trash и --favorite Ñа взаимно изключващи Ñе" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "опциите --pause и --resume Ñа взаимно изключващи Ñе" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "опциите --quotes-next/--quotes-fast-forward и --quotes-previous Ñа взаимно " "изключващи Ñе" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "Ðе е картинка" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "Добавено в опашката" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "ÐатиÑнете \"Ðапред\" за да го видите" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "Изтеглено" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "Този тип източник не Ñе поддържа" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "Сигурни ли Ñте, че използвате поÑледната верÑÐ¸Ñ Ð½Ð° Variety?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "Добавих нов източник на картинки" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "" "Този източник на картинки вече е в ÑпиÑъка, включихме го за използване." #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "Картинката беше изтеглена и зададена като тапет" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "Работи!" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "Ура, Variety линковете работÑÑ‚. ЧудеÑно!" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "ÐеизвеÑтна команда" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "Ðе уÑпÑхме да обработим Ð·Ð°Ð´Ð°Ð´ÐµÐ½Ð¸Ñ variety:// линк." #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "" "Стартирайте Variety Ñ Ð½Ð°Ñтройка за подробен лог, за да видите повече " "информациÑ." #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "Ðе питай повече, винаги използвай Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "Публикувано" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "Можете да отворите ÑÐ²Ð¾Ñ Facebook фийд, за да видите публикациÑта" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "Публикуването беше неуÑпешно" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "Ðа уÑпÑхме да Ñъздадем Autostart файла" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "Случи Ñе грешка при Ñъздаване на Autostart desktop файла.\n" "ÐœÐ¾Ð»Ñ Ð¿ÑƒÑнете Vairety в терминал Ñ Ñ„Ð»Ð°Ð³ -v и опитайте отново." #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "" #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "" #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "" #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "Variety - Публикуване във Faceobok" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "Публикуване във Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" "За пръв път ÑподелÑте във ФейÑбук. С Variety можете да ÑподелÑте картинки, " "които Ñа Ñвалени от интернет, както и цитати. СподелÑнето работи така:\n" "\n" "1. Логин във ФейÑбук\n" "ФейÑбук ще Ñе отвори в браузъра по подразбиране. Ще трÑбва да Ñе логнете, " "ако вече не Ñте логнат. \n" "\n" "2. Разрешаване на Variety да публикува от Ваше " "име\n" "След като Ñе логнете, ще бъдете попитан дали разрешавате на Variety да " "публикува във Ð’Ð°ÑˆÐ¸Ñ Ñ„Ð¸Ð¹Ð´. Variety ще използва това разрешение, за да " "публикува единÑтвено тези Ñнимки или цитати, които Вие ръчно Ñте поиÑкали да " "Ñподелите, за нищо друго. \n" "\n" "3. ÐаÑтройване на браузъра да Ð¾Ñ‚Ð²Ð°Ñ€Ñ variety:// " "линкове Ñ Variety или xdg-open\n" "След това ще бъдете препратен към Ñтраница Ñ Ð¸Ð½Ñтрукции как да аÑоциирате " "\"variety://\" линкове Ñ Variety. ÐœÐ¾Ð»Ñ Ð¸Ð·Ð¿ÑŠÐ»Ð½ÐµÑ‚Ðµ тези инÑтрукции, Ñ Ñ‚Ð¾Ð²Ð° " "първоначалните наÑтройки ще приключат. Това Ñе прави еднократно.\n" "\n" "Ðа Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸Ñ Ð´Ð¸Ñк не Ñе пазÑÑ‚ никакви пароли или логин информациÑ, оÑвен " "OAuth Facebook ключа, който ще бъде валиден нÑколко Ñедмици. След като " "валидноÑтта му изтече, ще бъдете помолен да Ñе логнете отново." #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "Тегли цитати от TheQuotationsPage.com" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "Variety - добавÑне на Reddit като източник" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "URL или име на Ñъбредит: " #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "Момент да проверим както има там" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "Variety - РегиÑтриране във VRTY.ORG" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "ИÑкате ли да Ñе региÑтрирате?" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" "Можете да учаÑтвате във VRTY.ORG анонимно, " "но региÑтрациÑта Ви позволÑва да използвате нÑкои много интереÑни функции " "като Ñинхронизиране на любимите Ви картинки " "между компютрите и перÑонализирани препоръки. " "Ð¢Ñ Ñъщо означава, че нÑма да загубите профила Ñи и любимите Ñи тапети при " "преинÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° ÑиÑтемата." #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "РегиÑтрациÑта е много леÑна и не изиÑква никакви лични данни." #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" "Ðко предпочетете да учаÑтвате анонимно, можете да Ñе региÑтрирате по-къÑно " "от Ñтраницата за Синхронизиране в наÑтройките." #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" "УпÑ, не можахме да Ñе Ñвържем Ñ VRTY.ORG. Сървърът може би не работи в " "момента. ÐœÐ¾Ð»Ñ Ð¸Ð·Ñ‡Ð°ÐºÐ°Ð¹Ñ‚Ðµ нÑколко минути и пробвайте отново или изберете \"Ðнонимно учаÑтие\" и Ñе региÑтрирайте по-къÑно " "от \"Синхронизиране\" в наÑтройките." #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "ÐœÐ¾Ð»Ñ Ð¿Ñ€Ð¾Ð´ÑŠÐ»Ð¶ÐµÑ‚Ðµ процеÑа по региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð² браузъра Ñи." #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "Ще учаÑтвам анонимно" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "РегиÑтриран Ñъм, Вход" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "РегиÑтрирайте Ñе тук" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "Изберете папка" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "ОК" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "Получихме Ñигнал за излизане, излизаме..." #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "Variety е вече пуÑната. Изпращаме командата към вървÑщата инÑтанциÑ." #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "Долу" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "Горе" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "ВлÑво" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "ВдÑÑно" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "Разположение" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "Размер" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "Отвори папката" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "Затвори" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "Ðе уÑпÑÑ… да запиша EXIF оценката" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "Без оценка" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "Отхвърлено" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "Variety: ИÑториÑ" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Variety: Скорошно изтеглени" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Variety: Картинки" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "Запазени права (c) 2012, Петър Леви " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "ОтноÑно Variety" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "" "Програма за автоматично изтеглÑне, управление и ÑмÑна на тапети за Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ " "плот" #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "Variety" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Variety Wallpaper Changer" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "Ðапред" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "Ðазад" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "Пауза / ПодновÑване" #: ../variety.desktop.in.h:6 msgid "History" msgstr "ИÑториÑ" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "ÐаÑтройки" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "Variety - добавÑне на Wallhaven.cc като източник" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" "Wallhaven.cc предоÑÑ‚Ð°Ð²Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ð¸ опции " "за търÑене. Отдолу можете да зададете ключови думи или да поÑетите Wallhaven.cc, да наглаÑите критериите за " "търÑене там, и Ñлед като Ñте Ñигурни, че резултатите Ви удовлетворÑват, да " "копирате Ñ†ÐµÐ»Ð¸Ñ Wallhaven URL в полето долу.\n" "\n" "Ðко зададете ключови думи, Variety ще използва най-хареÑваните картинки, " "които отговарÑÑ‚ на вÑички ключови думи и Ñа подходÑщи за работна Ñреда. \n" "\n" "Ðко зададете Wallhaven URL, Ð¼Ð¾Ð»Ñ Ð¿Ð¾Ð´Ð±ÐµÑ€ÐµÑ‚Ðµ внимателно ÐºÑ€Ð¸Ñ‚ÐµÑ€Ð¸Ñ Ð·Ð° Ñортиране -" " Variety регулÑрно дърпа нови картинки, но използва Ñамо първите Ñтотина " "картинки от търÑенето. Сортиране \"Random\" или по \"Date\" означава, че " "този източник ще има по-дълъг \"живот\" преди да Ñе изчерпи. Сортиране по " "\"Favorites\" оÑигурÑва по-качеÑтвени картинки, а \"Relevance\" ще връща по-" "точни резултати при търÑене на фраза или по цвÑÑ‚." #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "Въведете ключови думи или URL: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "Секунда да проверим това търÑене" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "Показва цитати, дефинирани в локални текÑтови файлове.\n" "Слагайте вашите txt файлове в: ~/.config/variety/pluginconfig/quotes/.\n" "Форматът на файловете е:\n" "\n" "цитат -- автор\n" ".\n" "друг цитат -- друг автор\n" ".\n" "и Ñ‚.н.\n" "\n" "Пример: http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "Variety - добавÑне на Media RSS фийд" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ URL-a към Media RSS фийда отдолу. Имайте предвид, че Ñе " "поддържат Ñамо Media RSS фийдове, а не произволни RSS фийдове. Media RSS " "фийдовете Ñъдържат тагове media:content, които препращат директно към " "реалните файлове Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ¸. Ето нÑкои Ñайтове, които предоÑтавÑÑ‚ Media RSS " "фийдове: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "Копирайте адреÑа на Media RSS фийда тук: " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "Секунда да проверим какво има на този адреÑ" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "УÑпешна оторизациÑ" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "Публикуване..." #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "ÐеуÑпешна оторизациÑ" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "Копирай в Любими или ПремеÑти в Любими" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "Върни оригиналната ÑтойноÑÑ‚" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "" "Изберете дали в менюто предпочитате \"Копирай в Любими\" или \"ПремеÑти в " "Любими\" в завиÑимоÑÑ‚ от папката, в коÑто е картинката:" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ по един Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° линиÑ, вÑеки от Ñ‚ÑÑ… във формат <Папка>:, където Папка може да е Downloaded, Fetched, Others или път " "към локална папка.\n" "Редът е важен. Когато Ñе покзва картинка, първата папка в този лиÑÑ‚, коÑто " "Ñъдържа картинката, ще определи кои операции да Ñе покажат в менюто на " "Variety. 'Others' трÑбва да бъде поÑледен Ð·Ð°Ð¿Ð¸Ñ Ð² ÑпиÑъка, понеже вÑеки файл " "попада в тази категориÑ.\n" "\n" "Пример:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "Тази Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¸Ð·Ð¸Ñква Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "Включи интеграциÑта Ñ VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" "За тази Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Variety Има нужда от разрешение да Ñъбира данни за " "картинките, които хареÑвате или триете и за онлайн източниците, които Ñте " "активирали.\n" "\n" "Събраните данни Ñа анонимни и покриват Ñамо картинки, Ñвалени от Variety, не " "такива, които вече Ñа били на компютъра Ви и може да Ñа лични.\n" "\n" "Тези данни ни позволÑват да предлагаме по-добри картинки на вÑички и " "захранват VRTY.ORG - ценен реÑÑƒÑ€Ñ Ð·Ð° вÑички " "потребители на Variety." #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "Това не прилича на валиден Reddit URL" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "Ðе уÑпÑхме да намерим никакви публикации Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ¸ там." #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "Тегли цитати от RSS фийда на QuotesDaddy.\n" "Ðе поддържа търÑене по тагове или автор." #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Variety - добавÑне на Flickr като източник" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "ÐœÐ¾Ð»Ñ Ð·Ð°Ð´Ð°Ð¹Ñ‚Ðµ критерии за търÑене във Flickr. Ще бъдат ÑвалÑни Ñнимки, които " "отговарÑÑ‚ на вÑички зададени критерии. ОÑтавете ненужните критерии празни." #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "Етикети: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "СпиÑък от етикети, разделени ÑÑŠÑ Ð·Ð°Ð¿ÐµÑ‚Ð°Ð¸. Една Ñнимка трÑбва да Ñъдържа " "вÑичките етикети, за да Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° критериите.\n" "Пример: yellow,car" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "Потребител: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ URL към фотоÑтрийма на Flickr потребител, или към нÑÐºÐ¾Ñ Ð½ÐµÐ³Ð¾Ð²Ð° " "Ñнимка.\n" "Пример: http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "Група: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ URL на групата.\n" "Пример: http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "ТекÑÑ‚:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "Свободен текÑÑ‚, който да бъде търÑен в заглавиÑта, опиÑаниÑта и етикетите на " "Ñнимките. Cложете '-' в началото, за да изключите текÑÑ‚.\n" "Пример: apple -pie" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "Ñекунди" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "минути" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "чаÑа" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "дни" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "Variety: ÐаÑтройки" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "Общи" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "Стартирай Variety при Ñтартиране на компютъра" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "СменÑй тапета на вÑеки " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "МинималниÑÑ‚ интервал е 5 Ñекунди" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "СменÑй тапета при Ñтартиране" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "Използвай" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "Тип" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "ÐдреÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "_Добави..." #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "ДобавÑне на картинки, папки или онлайн източници" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "_Редактирай..." #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "Редактиране на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¸Ð·Ñ‚Ð¾Ñ‡Ð½Ð¸Ðº" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "_Изтрий…" #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "Премахване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¸Ð·Ñ‚Ð¾Ñ‡Ð½Ð¸Ðº" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "_Използвай" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "Ðктивирай Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¸Ð·Ñ‚Ð¾Ñ‡Ð½Ð¸Ðº и деактивирай вÑички други" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "ИзтеглÑй нов тапет на вÑеки " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "МинималниÑÑ‚ интервал е една минута" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "във " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "Реална папка за теглене " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "Внимание: ÐЕ изпозлвайте тази Ð¾Ð¿Ñ†Ð¸Ñ Ð°ÐºÐ¾ Ñте избрали папка за теглене, в " "коÑто държите ценни файлове. Variety ще поддържа зададената квота като трие " "Ñтари файлове, незавиÑимо какво има в папката за теглене." #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "Ограничи папката за теглене до " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "МинималниÑÑ‚ размер е 50 мб" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "мб като триеш най-Ñтарите файлове когато е необходимо" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "Любими" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "Копирай любимите тапети във " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "Филтри" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "" "Върху тапетите прилагай нÑкой Ñлучайно избран филтър от Ñледните (Ñ " "благодарноÑти към ImageMagick):" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "Цитати" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "Показвай разнообразни умни цитати върху Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "ЦвÑÑ‚ на текÑта: " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "Шрифт на текÑта: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "ЦвÑÑ‚ на фона: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "ПрозрачноÑÑ‚ на фона: " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " Прозрачен" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "Ðепрозрачен" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "Добави ÑÑнка под текÑта" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "Външен вид" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "Ширина на полето за цитати: " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "ТÑÑно " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "Широко" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "Хоризонтална позициÑ: " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "ВлÑво " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "Вертикална позициÑ: " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "Горе " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "Разположение" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "Показвай цитати от Ñледните източници: " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "Още " "плъгини" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "" "Показвай Ñамо тези тагове и автори. ОÑтавете празно, за да Ñе показват " "Ñлучайни цитати." #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "Пример: funny, inspirational" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "Пример: Albert Einstein, Voltaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "Ðвтори: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "Източници и филтриране" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "СменÑй цитата на вÑеки " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð» е 10 Ñекунди" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "РегулÑрна ÑмÑна" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "ЧаÑовник" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "Показвай краÑив дигитален чаÑовник Ñ Ð´Ð°Ñ‚Ð° и чаÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "За да наÑтроите Ð²ÑŠÐ½ÑˆÐ½Ð¸Ñ Ð²Ð¸Ð´ на чаÑовника, редактирайте clock_filter полето в " "ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð» на Variety (~/.config/variety/variety.conf). " "Използвайте коментарите в ~/.config/variety/variety_latest_default.conf като " "гайд." #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "Шрифт за чаÑа: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "Шрифт за датата: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "Тези не работÑÑ‚? Чети тук. Как " "да донаÑтроим чаÑовника? Чети " "тук." #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "Ефекти" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "VRTY.ORG" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "VRTY.ORG е още в Beta и ще мине време докато \"узрее\"" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" "VRTY.ORG Ñвързва потребители на Variety Ñ " "подобен Ð²ÐºÑƒÑ ÐºÑŠÐ¼ картинки и предоÑÑ‚Ð°Ð²Ñ Ñупер-удобни начини за ÑмÑна на " "тапета, за намиране и добавÑне на нови източници и за абониране за любимите " "картинки на други потребители. Сайтът Ñе подхранва от любимите картинки на " "вÑички учаÑтващи потребители." #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "" "Ðе уÑпÑхме да Ñъздаден потребител - нÑма връзка Ñ VRTY.ORG. Ще опитаме пак " "по-къÑно." #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" "РегиÑтрациÑта е нужна за нÑкои интереÑни функции като Ñинхронизиране на " "картинки и източници между компютрите Ви и перÑонализирани препоръки." #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "Синхронизиранe" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "Синхронизиране на любимите картинки между компютрите" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "ИзиÑква да Ñте включили интеграциÑта Ñ VRTY.ORG и да Ñте логнати" #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" "Любимите Ви картинки от други компютри ще бъдат автоматично ÑвалÑни на този. " "ТрÑбва да Ñте логнати Ñ ÐµÐ´Ð½Ð°ÐºÑŠÐ² VRTY.ORG потребител навÑÑкъде. " "Синхронизирането никога не трие картинки." #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "ПоверителноÑÑ‚ на данните" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" "Variety изпраща Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ñамо за картинки, които Ñ‚Ñ Ðµ Ñвалила, никога за " "такива, които пазите локално на компютъра Ñи и може да предÑтавлÑват лични " "данни. Синхронизирането Ñъщо не работи за такива картинки. Събраните данни " "не Ñе ÑподелÑÑ‚ Ñ Ð½Ð¸ÐºÐ¾Ð³Ð¾, оÑвен ако не направите Ñами профила Ñи публичен. Прочетете повече за уÑлугата и " "политиката за поверителноÑÑ‚." #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "СтатиÑтика за използването" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "" "Помогнете ни да подобрÑваме Variety като ни изпращате анонимни данни за " "използването Ñ" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" "Тези данни ни помагат да разберем как потребителите на Variety работÑÑ‚ Ñ " "програмата. Те Ñъщо така включват обща Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° верÑиÑта на " "операционната ÑиÑтема и конфигурациÑта на мониторите. Събраните данни не Ñе " "ÑподелÑÑ‚ Ñ Ð½Ð¸ÐºÐ¾Ð³Ð¾." #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "Синхронизиране" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "Папка за ръчно изтеглÑне" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "ЗапиÑвай ръчно изтеглените тапети във " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "Влачене и пуÑкане" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "Иконата на Variety в Launcher-a Ñлужи като поле за пуÑкане. Завлачете URL " "към картинка или локална картинка върху Ð½ÐµÑ Ð¸ Ñ‚Ñ Ñ‰Ðµ бъде изтеглена и " "добавена в опашката. След това можете да натиÑнете \"Ðапред\" за да Ñ " "използвате като тапет. Можете да покажете иконата в Launcher-a като отворите " "ÐаÑтройки. След това можете да Ñ Ð·Ð°ÐºÐ»ÑŽÑ‡Ð¸Ñ‚Ðµ там за леÑен доÑтъп по вÑÑко " "време." #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "Следене на клипборда" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "Следи клипборда за адреÑи към картинки и ги изтеглÑй" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "Ðо ги изтеглÑй Ñамо когато домейнът в адреÑа е един от тези:" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "Ръчно теглене" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "Когато е възможно, използвай картинки, които:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "Са Ñ Ñ…Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»Ð½Ð° ориентациÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "Са големи поне " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "% от размера на екрана" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "ЦвÑÑ‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "Са тъмни или Ñветли:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "Тъмни" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "Светли" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "Съдържат този цвÑÑ‚: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(Влиза в дейÑтвие Ñлед извеÑтно време за търÑене)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "Оценка" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "Имат EXIF оценка поне " #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "ЦвÑÑ‚ и размер" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "Индикаторна икона" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "Индикаторна икона:" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "Светла" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "Тъмна" #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "Използвай Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ñ‚Ð°Ð¿ÐµÑ‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "Задай картинка..." #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "Без икона" #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "Изберете икона" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "Когато иконата е Ñкрита, може да контролирате Variety през терминал, или " "през Launcher иконата. ПуÑнете \"variety --help\" за да видите ÑпиÑък Ñ " "поддържаните команди." #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° добавÑне в Любими" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° Любими в менюто:" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "Копирай в Любими" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "И двете (Копирай и ПремеÑти)" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "ЗавиÑи от папката..." #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "" "Показвай диалог за редактиране на Facebook поÑта преди да бъде публикуван" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Ð»Ð¾Ð³Ð¸Ð½ екрана" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "" "ИÑкам вÑички тапети, зададени от Variety, да Ñе показват и на логин екрана" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "Предупреждение: За да може да покаже тапета, LightDM трÑбва да има " "права за четене върху него. Ðко активирате тази опциÑ, при ÑмÑна на тапета, " "Variety ще копира файла в публична папка и ще Ñмени правата му, така ще " "вÑички потребители да имат право на четене. По подразбиране папката е " "~/Pictures ако home директориÑта Ви не е крипирана и /usr/share/backgrounds " "- ако е криптирана. ÐœÐ¾Ð»Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð¹Ñ‚Ðµ тази Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ð½Ð¸Ð¼Ð°Ñ‚ÐµÐ»Ð½Ð¾." #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "Копирай тапетите в тази папка: " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "По подразбиране" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "Пак не работи?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "" "Изглажда home директориÑта Ви е криптирана. ОпциÑта нÑма да Ñработи Ñ Ð¿Ð°Ð¿ÐºÐ¸, " "които Ñа вътре." #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "ÐÑмате права за пиÑане в тази папка" #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "Правата на тази папка не допуÑкат LightDM да чете оттам." #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "" "Variety може да промени правата, но ще трÑбва да предоÑтавите root " "привилегии." #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "ПерÑонализиране" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "Полезни Ñъвети" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "ПоÑледни промени" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "ПоÑети уебÑайта" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "Докладвай за бъг или поиÑкай нова функциÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "Изпрати отзив" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "Ðаправи дарение за Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "Ðаправи дарение чрез PayPal" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "Ð Ð°Ð±Ð¾Ñ‚Ñ Ð½Ð°Ð´ Variety в Ñвободното Ñи време, което обикновено означава къÑните " "чаÑове Ñлед като децата ми Ñи легнат. Благодарен Ñъм за вÑички дарени Ñуми. " "Те ми показват, че Вие - потребителите - цените Variety, и ме мотивират да " "продължавам да Ñ€Ð°Ð±Ð¾Ñ‚Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾ над програмата.\n" "\n" "БлагодарÑ,\n" "Петър Леви" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" "За плащане Ñ Bitcoin или други методи, Ð¼Ð¾Ð»Ñ Ð¿Ð¾Ñетете Ñайта на Variety." #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "ИзтеглÑне" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "Картинката е твърде малка, игнорираме Ñ" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "СъжалÑвам, получихме грешка %s..." #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "Това означава, че линкът вече е невалиден" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "ИзтеглÑнето беше неуÑпешно" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "" "За повече информациÑ, Ð¼Ð¾Ð»Ñ Ñтартирайте Variety в терминал Ñ Ð¾Ð¿Ñ†Ð¸Ñ -v и " "повторете дейÑтвието." #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "" "КонфигурационниÑÑ‚ файл smart_user.json Ñвно е повреден. ÐœÐ¾Ð»Ñ Ð»Ð¾Ð³Ð½ÐµÑ‚Ðµ Ñе " "наново във VRTY.ORG." #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "" "Данните Ви за вход във VRTY.ORG вероÑтно Ñа Ñтари. ÐœÐ¾Ð»Ñ Ð²Ð»ÐµÐ·Ñ‚Ðµ отново." #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "ИзтеглÑме %d картинки" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "ИзтеглÑме 1 картинка" #: ../variety/Smart.py:684 msgid "Finished" msgstr "Готово" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "Влезли Ñте Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ» %s" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "" "ИÑкате ли да Ñе логнете във VRTY.ORG като %s?" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "Потвърждение за логин във VRTY.ORG" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "ÐÑма плъгини за цитати" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "ÐÑмате инÑталирани плъгини за цитати" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "ÐÑма подходÑщи плъгини за цитати" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "Ðикой от плъгините за цитати не поддържа търÑене по думи и автори" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "Ðе уÑпÑÑ… да Ð¸Ð·Ñ‚ÐµÐ³Ð»Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚Ð¸" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "" "Може би нÑма връзка ÑÑŠÑ Ñървърите за цитати, ще продължим да опитваме." #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "Ðе намерихме цитати" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "Може би търÑите нещо твърде затънтено?" variety-0.8.3/po/ca.po000066400000000000000000002670631362063646600146000ustar00rootroot00000000000000# Catalan translation for variety # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the variety package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2016-09-15 17:37+0000\n" "Last-Translator: Davidmp \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "Obté cites de Goodreads.com" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "Conserva l'original" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "Escala de grisos" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "Molt desenfocat" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "Una mica desenfocat" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "Pintura a l'oli" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "Esbós a llapis" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "Puntillisme" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "Pixela" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "La carpeta de favorits" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "La carpeta de recuperats" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "" "Recomanat pel Variety. S'adapta al vostres gustos a mesura que marqueu " "imatges com a favorites o les elimineu." #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "" "Les últimes favorites d'altres usuaris del Variety. [Pot contenir imatges " "NSFW]" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "Fons de pantalla aleatoris des de Desktoppr.co" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "Imatge astronòmica de la NASA del dia" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "Mapa amb llum de dia del món - fons animat de Die.net" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "Foto del dia de Bing" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "Fotos d'alta resolució des d'Unsplash.com" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "" "Podeu canviar el fons de pantalla endavant i enrere movent la roda del " "ratolí sobre la icona indicadora." #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" "Si voleu executar ordres personalitzades cada vegada que canvia el fons de " "pantalla o si utilitzeu un entorn d'escriptori alternatiu; si us plau, " "editeu els scripts a ~/.config/variety/scripts. Hi ha exemples per a " "diversos entorns d'escriptori." #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" "El Variety es pot controlar des de la línia d'ordres i es pot usar per " "definir dreceres de teclat per a les operacions d'ús més freqüent. Executeu " "«variety --help» per veure totes les ordres disponibles." #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" "Podeu deixar anar enllaços o fitxers a la icona de llançament per baixar-los " "i usar-los com a fons de pantalla. Per a una baixada més ràpidar des d'un " "lloc específic, també podeu usar el monitoratge del porta-retalls (vegeu la " "pestanya \"Baixada manual\")." #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "" "L'aplicació d'un bon filtre de desenfocament és una bona manera d'aconseguir " "fons de pantalla d'aspecte abstracte i discrets però coloristes, semblant en " "esperit al que ve per defecte a l'Ubuntu." #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" "Afegir uns filtres personalitzats és bastant fàcil: obriu " "~/.config/variety/variety.conf en un editor i useu els filtres existents com " "a exemple. Cada filtre és simplement una línia d'opcions que ha de passar a " "l'odre de conversió de l'ImageMagick." #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" "Quan seleccioneu una font d'imatge, les seves imatges es mostren a una " "finestra a la part inferior de la pantalla. Cliqueu aquí a una imatge per " "establir-la com a fons de pantalla. Feu un clic amb el botó dret del ratolí " "per tancar la finestra, per modificar la seva aparença o per realitzar " "operacions amb fitxers. Podeu seleccionar fonts múltiples d'imatges per " "crear una vista de miniatures «fusionada» de totes. Si us plau tingueu en " "compte que aquesta vista de miniatures està limitada a uns quants centenars " "d'imatges seleccionades aleatòriament." #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" "Per habilitar les notificacions d'escriptori quan el fons canviï, " "descomenteu les dues línies del final de " "~/.config/variety/scripts/set_wallpaper." #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" "La icona de l'indicador del Variety també es pot tematitzar. Si trieu " "l'opció \"Clara\" per a la icona, el Variety primer comprovarà si el tema " "actual GTK té una icona anomenada \"variety-indicator\" i l'usarà en comptes " "de la icona clara inclosa." #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" "Quan trieu escollir desar cites als favorits, es desen per defecte a " "~/.config/variety/favorite_quotes.txt. Aquest fitxer és compatible amb la " "font de cites del fitxer local del Variety. Si el voleu usar, copieu-lo a " "~/.config/variety/pluginconfig/quotes/ i habiliteu la font de cites dels " "fitxers locals. Aquest fitxer també és compatible amb la utilitat de fortuna " "d'Unix." #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "Entreu a VRTY.ORG" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "Nom d'usuari: " #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "Contrasenya: " #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "No en teniu compte? Registreu-vos-hi aquí" #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "Heu oblidat la contrasenya?" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" "Consell: també podeu entrar a VRTY.ORG amb " "un navegador i clicar a l'enllaç \"Trigger Variety " "login\" del vostre perfil." #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "Inicia la sessió" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "Tot" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "Imatges" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "Carpetes" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "Flickr" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Wallhaven.cc" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "Reddit" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "Mitjans RSS" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "Elimina la font, mantén els fitxers" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "Elimina les fonts, mantén els fitxers" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "Elimina la font i esblrra els fitxers descarregats" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "Elimina les fonts i esborra els fitxers descarregats" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "Mapa del món amb llum de dia habilitat" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "Usar el World Sunlight Map requereix tenir activats la baixada i el canvi a " "intervals de 30 minuts o menys. Els paràmetres s'han ajustat automàticament." #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "Afegeix les imatges" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "Cancel·la" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "Afegeix" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "" "Afegeix carpetes - Solament afegeix les carpetes arrel, les subcarpetes són " "cercades recursivament" #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "Edita..." #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "Visualitza la imatge" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "Obre la carpeta" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "Font recomanada d'imatges inhabilitada" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "No teniu permisos d'escriptura" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "S'ha deshabilitat el límit" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "" "Si canvieu la carpeta de descàrrega, automàticament es desactivarà el límit " "en la mida per prevenir la pèrdua accidental de dades" #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "Carpeta de baixades actual: %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "No s'han pogut ajustar els permisos" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "Podeu intentar d'executar manualment aquesta ordre:\n" "sudo chmod %s \"%s\"" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "Heu entrat com a " #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "Anònim" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "Entreu o registreu-vos-hi" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "Canvia l'usuari" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "Benvigut al Variety!" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "Continua" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" "El Variety és un canviador de fons de pantalla automàtic. Canvia el fons de " "l'escriptori de forma regular usant imatges locals o imatges baixades de " "diverses fonts en línia. S'executa tranquil·lament en un segon pla. Per " "controlar-lo, cliqueu en aquesta icona a la safata del sistema:" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" "El Variety és programari de codi obert, creat per Peter Levi, un " "desenvolupador de programari búlgar. Si us agrada, si us plau, feu una " "donació a ." #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "" "Ara, si us plau, dediqueu una estona a configurar les preferències a les " "pantalles següents." #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "Usuaris del KDE: és important; si us plau, llegiu el següent:" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" "Sembla que feu servir el KDE. Al KDE 4 és impossible establir el fons de " "pantalla des de dins d'un programa. No hi ha API per fer-ho. Perquè el " "Variety funcioni, si us plau, llegiu i seguiu les instruccions d'aquí." #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "El servidor ha retornat un error (%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "No s'ha pogut conectar amb el servidor" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "Següe_nt" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "_Anterior" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "Fons de pantalla actual" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "Mostra'n l'origen" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "Copia-ho als _favorits" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "Desplaça-ho als favorits" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "Elimina a la _paperera" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "_Següent, omet l'historial que segueix" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "Consell: moveu la rodeta sobre la icona\n" "per a Següent i Anterior" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "Atura't a l'actual" #: ../variety/indicator.py:129 msgid "_Image" msgstr "_Imatge" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "D'on és?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "Mostra-ho sense efectes" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "Cerca d'imatges de Google" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "Comparteix al Facebook" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "Establiu la puntuació d'EXIF" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "Informa d'una imatge incompleta i no adequada per a la feina" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "Desa-ho als favortis" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "Mostra els favorits..." #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "Copia al porta-retalls" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "Cita de Google" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "Autor de Google" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "Preferències..." #: ../variety/indicator.py:252 msgid "Turn off" msgstr "Desactiva" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "_Cita" #: ../variety/indicator.py:265 msgid "_History" msgstr "_Historial" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "Se_lector de fons" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "Baixa_des recents" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "Inicia la presentació" #: ../variety/indicator.py:302 msgid "About" msgstr "Quant a" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "Feu una donació" #: ../variety/indicator.py:310 msgid "Quit" msgstr "Surt" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "Mode _segur" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "" "Això no sembla que sigui un URL de canal RSS de mitjans de comunicació vàlid " "o no té contingut." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "Variety - VRTY.ORG" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "No, gràcies" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" "Us presentem VRTY.ORG! Hi voleu participar?" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" "VRTY.ORG connecta els usuaris del Variety " "amb gustos similars i proporciona maneres molt convenients per canviar el " "fons de pantalla, per trobar i afegir fonts d'imatges noves al Variety i per " "seguir els favorits d'altres usuaris." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" "La participació no demana cap esforç, el vostre perfil es farà " "automàticament, a mesura que us agradin o no les imatges baixades pel " "Variety. El vostre perfil no es compartirà amb terceres persones si no és " "que opteu per fer-lo públic. Llegiu més detalls sobre el servei i la política de privacitat " "aquí." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" "La participació és necessària per a algunes característiques del Variety com " "ara la sincronització de favorits entre " "ordinadors." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "Participeu a VRTY.ORG" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "Variety - afegeix la font d'imatges Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "Si us plau, magnifiqueu sobre la vostra àrea d'interès." #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Variety - publica al Facebook" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "" "Publica un enllaç del fons de pantalla actual al Facebook. Inclou aquest " "text a l'enllaç (o simplement deixeu-ho en blanc):" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "Usa la cita actual" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "No ho tornis a preguntar, usa sempre el text de dalt" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "No s'ha trobat cap imatge" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "Ja és als favorits" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "Desplaça-ho als _favorits" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "Obtingut: mostra l'origen" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "Mostra-ho a %s" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "Desconegut" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "Mode segur: activat" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "Activa el mode segur" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "Autor: %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "Continua els canvis regulars" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "El filtre és massa estricte?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "" "El Variety troba massa poques imatges que coincideixin amb els vostres " "criteris de cerca" #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "Si us plau, afegiu més fonts d'imatges o espereu algunes baixades" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "Si us plau, afegiu més fonts d'imatges" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "Ja no hi ha més fons de pantalla" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "El fons actual no és a les fonts d'imatges" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "" "No s'ha pogut desplaçar a %s. Probablement no teniu permisos per desplaçar " "aquest fitxer." #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "" "No s'ha pogut copiar a %s. Probablement no teniu permisos per copiar aquest " "fitxer." #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "No es pot esborrar" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "No temiu permisos per enviar %s a la paperera." #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "Estadístiques d'ús anònimes" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" "El Variety recopila estadístiques d'ús anònimes.\n" "Això ens ajuda a fer-lo millor i no es comparteixen amb ningú.\n" "Per llegir-ne més o desactivar-les, aneu a \"Sincronització i social\"." #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "" "Obriré un editor amb el fitxer de configuració i aplicaré els canvis després " "que els deseu i tanqueu l'editor." #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [opcions] [fitxers o urls]\n" "\n" "Passar els fitxers locals els afegirà a la cua del Variety.\n" "Passar URL remots farà que el Variety els porti a la carpeta d'obtinguts i " "els posi a la cua.\n" "\n" "Per establir un fons específic: %prog /some/local/image.jpg --next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "" "Mostra els missatges de registre (-vv mostra fins i tot missatges de " "depuració més precisos, -vvv també depura variety_lib)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "Fes que surti la instància en execució" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "" "Imprimeix la ubicació del fons actual. S'usa només quan l'aplicació ja " "s'executa." #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "Mostra el fons de pantalla següent" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "Mostra el fons de pantalla anterior" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "Mostra el fons de pantalla següent i omet l'historial que segueix" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "" "Desplaça el fons de pantalla actual a la paperera. S'usa només quan " "l'aplicació ja s'executa." #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Copia el fons de pantalla actual als favorits. S'usa només quan l'aplicació " "ja s'executa." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Desplaça el fons de pantalla actual als favorits. S'usa només quan " "l'aplicació ja s'executa." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "Pausa a la imatge actual" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "Continua els canvis regulars d'imatges" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "Commuta l'estat de pausa / continua" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "Mostra la cita següent" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "Mostra la cita anterior" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "Mostra la cita següent i omet l'historial que segueix" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "Commuta l'estat de pausa / continua de cites" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "Desa la cita actual als favorits" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "Commuta la vista de l'historial" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "Commuta la vista de les baixades recents" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "Mostra el diàleg de preferències" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "" "Mostra el selector manual de fons de pantalla, amb la barra de miniatures " "plena d'imatges de les fonts actives." #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "Estableix i aplica una opció. Els noms de les opcions són els mateixos que " "s'usen al fitxer de configuració del Variety ~/.config/variety/variety.conf. " "Es poden establir opcions múltiples amb una sola ordre. Exemple: \"variety -" "-set-option icon Dark --set-option clock_enabled True\". USEU-HO AMB " "PRUDÈNCIA: esteu canviant el fitxer de configuració directament sense " "protecció." #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "" "Les opcions --next/--fast-forward i --previous són mútuament excloents." #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "Les opcions --trash i --favorite són mútuament excloents" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "les opcions--pause i --resume són mútuament excloents." #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "Les opcions --quotes-next/--quotes-fast-forward i --quotes-previous són " "mútuament excloents." #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "No és una imatge" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "S'ha afegit a la cua" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "Premeu següent per veure-ho" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "Obtingut" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "Tipus de font no admesa" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "Executeu l'última versió del Variety?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "S'ha afegit una font d'imatges nova" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "La font d'imatges ja existeix, s'habilitarà" #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "Obtingut i aplicat" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "Funciona!" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "Bé, els enllaços del Variety funcionen. Genial!" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "Ordre no admesa" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "No s'ha pogut precessar la variety:// URL donada" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "Executeu-ho amb la depuració habilitada per veure'n els detalls" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "No ho tornis a preguntar, usa sempre la cita actual" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "Publicat" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "Podeu obrir el vostre canal de Facebook per veure'n l'apunt" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "No s'ha pogut publicar" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "No s'ha pogut crear una entrada d'inici automàtic" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "S'ha produït un error mentre es creava l'entrada d'autoarrencada a " "l'escriptori\n" "Si us plau executeu-lo des d'una terminal amb l'etiqueta -v i torneu a " "provar." #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "Sense imatges" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "No hi ha imatges a les carpetes de presentació" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "Fonts d'imatges de Wallhaven desactiades" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" "Si us plau, cerqueu al Google \"Python SNI SSL error\" si voleu solucionar " "el problema vós mateix." #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" "Hi ha incompatibilitats d'SSL entre la vostra versió de Python i alguns " "llocs https com ara Wallhaven. En podeu trobar més informació aquí.\n" "\n" "Voleu instal·lar les dependències de Python necessàries per solucionar el " "problema? \n" "Aquesta operació demanarà privilegis de superusuari. " #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "Variety: error SSL. En voleu instal·lar les dependències?" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "S'està instal·lant..." #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" "La instal·lació durarà un minut o dos. Si us plau, tingueu paciència. El " "fitxer de registre és a %s" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "" "S'han instal·lat les dependències. Si us plau, reinicieu el Variety ara." #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" "Si l'error SSL persisteix, haureu de cercar a Google \"Python SNI SSL " "error\" i buscar-ne una altra solució." #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "Fallada. Les fonts de Wallhaven estan inhabilitades." #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" "Les dependències relacionades amb SSL no s'han instal·lat correctament. Si " "us plau, vegeu %s o cerqueu al Google \"Python SNI SSL error\" i busqueu una " "altra solució." #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "Variety: compartició de Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "Compartició de Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" "Esteu fent una compartició per Facebook per primer cop. Compartir des del " "Variety està disponible per a imatges que provenen de fonts en línia i per a " "cites. Funciona de la manera següent: \n" "\n" "1. Login to Facebook\n" "El Facebook s'obrirà al navegador predeterminat. Se us demanarà d'iniciar-hi " "sessió si encara no ho heu fet. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "Se us preguntarà si voleu permetre que Variety publiqui al vostre canal en " "nom vostre. El Variety només usarà aquest permís per publicar les imatges i " "les cites que digueu, res més.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Se us redirigirà a una pàgina amb instruccions per associar els enllaços " "\"variety://\" amb el Variety al navegador. Si us plau, seguiu aquestes " "instruccions per completar-ne la configuració. Només cal fer-ho una vegada.\n" "\n" "No es desa localment cap contrasenya ni cap informació d'entrada, només un " "testimoni de OAuth Facebook que serà vàlid durant un parell de setmanes. " "Quan en caduqui la validesa, se us demanarà d'iniciar la sessió una altra " "vegada." #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "Obté cites de TheQuotationsPage.com" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "Variety - afegeix un canal de Reddit" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" "Escriviu el nom d'un subreddit o enganxeu-hi l'URL complet d'un subreddit o " "d'un usuari Reddit user. Podeu especificar-" "hi l'ordre de classificació i el període de temps que desitgeu. El Variety " "usarà apunts per dirigir les imatges o pàgines d'Imgur d'entre les primeres " "100 entrades retornades per Reddit.\n" "\n" "Exemple: podeu especificar senzillament \"còmics\" or http://www.reddit.com/r/comics\n" "Exemple: els millors apunts del mes: http://www." "reddit.com/r/comics/top/?sort=top&t=month" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "URL o nom d'un subreddit: " #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "Només un moment per mirar què hi ha aquí" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "Variety - registre a VRTY.ORG" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "Us hi voleu registrar?" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" "Podeu participar a VRTY.ORG anònimament, " "però registrar-s'hi habilita algunes caraterístiques interessants, com ara " "la sincronització de favorits entre ordinadors " "i les recomanacions personalitzades. També " "assegura que no es perdin el perfil ni els fons preferits si reinstal·leu el " "sistema." #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "Registrar-s'hi és molt fàcil i no cal cap dada personal." #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" "Si trieu participar-hi anònimament, us hi podeu registrar més tard des de la " "pàgina \"Sincronització i social\" de les " "preferències." #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" "Ui, no s'ha pogut connectar a VRTY.ORG. El servidor pot haver caigut. Si us " "plau, espereu uns minuts i torneu-ho a intentar o bé trieu \"Participeu-hi anònimament\" i registreu-vos-hi " "més tard des de la pàgina \"Sincronització i " "social\" de les preferències." #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "" "Si us plau, continueu el registre i seguiu les instruccions de la pestanya " "del navegador que s'ha obert." #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "Hi participaré anònimament" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "Ja hi estic registrat, permet-me entrar-hi" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "Registreu-vos aquí" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "Trieu una carpeta" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "D’acord" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "S'ha rebut el senyal de terminació, se sortirà..." #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "" "El Variety ja s'està executant. S'envia l'ordre a la instància que s'executa." #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "A baix" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "A dalt" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "A l'esquerra" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "Dreta" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "Posició" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "Mida" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "Mostra la carpeta que la conté" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "Tanca" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "No s'ha pogut establir la puntuació d'EXIF" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "Sense puntuació" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "Rebutjada" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "Historial del Variety" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Baixades recents del Variety" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Imatges del Variety" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "Copyright (c) 2012, Peter Levi " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "Quant al Variety" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "Un canviador, descarregador i gestor de fons de pantalla automàtic." #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" "# Copyright (c) 2012, Peter Levi \n" "# Aquest programa és programari lliure: el podeu redistribuir o modificar \n" "# d'acord amb els termes de la GNU General Public License, versió 3, tal com " "\n" "# l'ha publicat la Free Software Foundation.\n" "# \n" "# Aquest programa es distribueix amb l'esperança que sigui útil, però \n" "# SENSE CAP GARANTIA; sense ni tan sols les garanties implícites de \n" "# COMERCIALITAT, QUALITAT SATISFACTÃ’RIA, o ADEQUACIÓ A UN PROPÃ’SIT \n" "# CONCRET. Vegeu la GNU General Public License per a més detalls.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "Variety" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Canviador de fons de pantalla Variety" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "Següent" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "Anterior" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "Pausa / Continua" #: ../variety.desktop.in.h:6 msgid "History" msgstr "Historial" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "Preferències" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "Variety - afegeix la font d'imatges Wallhaven.cc" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" "Wallhaven.cc propociona una varietat " "d'opcions de cerca d'imatges. A continuació podeu especificar paraules clau " "per buscar o consulteu Wallhaven.cc, " "configureu aquí els criteris de cerca, assegureu-vos que us satisfan els " "resultats i enganxeu l'adreça URL Wallhaven completa a la casella.\n" "\n" "Si especifiqueu paraules clau, s'utilitzaran les imatges adequades per a la " "feina que més agraden i que coincideixen amb totes les paraules clau. \n" "\n" "Si especifiqueu un URL Wallhaven; si us plau, trieu amb cura els criteris de " "classificació. El Variety demana regularment imatges, però utilitza només " "algunes dels diversos centenars que en resulten. Aleatori o Data significarà " "que la font de la imatge tindrà un temps de vida més llarg, fins que " "s'esgoti. Favorites proporcionarà imatges millors i la rellevància " "proporcionarà coinciències més precises quan es busquin frases o colors." #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "Escriviu les paraules clau o enganxeu l'URL aquí: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "Només un moment per fer aquesta cerca" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "Mostra cites, definides en fitxers de text locals.\n" "Poseu els vostres fitxers de text a ~/.config/variety/pluginconfig/quotes/.\n" "El format del fitxer és el següent:\n" "\n" "cita -- autor\n" ".\n" "segona cita -- un altre autor\n" ".\n" "etc.\n" "\n" "Exemple: http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "Variety - afegeix un canal RSS de mitjans de comunicació" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "Si us plau, enganxeu l'URL del RSS de mitjans de comunicació a continuació. " "Tingueu en compte que només s'admeten canals RSS de mitjans de comunicació, " "no canals RSS arbitraris. Els canals RSS de mitjans de comunicació tenen " "contingut multimèdia: etiquetes de contingut que s'enllaçen directament amb " "el contingut de la imatge. Alguns exemples de llocs que proporcionen canals " "RSS d'aquest tipus: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "Enganxeu aquí l'URL del canal RSS de mitjans de comunicació: " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "Només un moment per mirar què hi ha a aquesta URL" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "Autorització correcta" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "S'està publicant..." #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "L'autorització ha fallat" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "Copia als favorits contra Desplaça als favorits" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "Restableix al valor predeterminat" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "" "Seleccioneu si preferiu «Copia als favorits» o «Desplaça als favorits» al " "menú segons la ubicació de la imatge:" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "Si us plau, introduïu una entrada per línia, cada entrada amb la forma " ":, on la carpeta es pot baixar, obtenir, " "altres o un camí de carpeta específic.\n" "L'ordre és important. Quan es mostra una imatge, la primera carpeta de la " "llista que contingui la imatge determinarà quines operacions es mostraran al " "menú del Variety. \"Altres\" fa coincidir qualsevol fitxer i hauria de ser " "l'últim de la llista.\n" "\n" "Exemple:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "Integració de VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "Aquesta característica requereix integració de VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "Habilita la integració de VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" "Per a aquesta característica el Variety necessita permís per recopilar dades " "de les imatges que us agraden o no i de les fonts en línia que teniu " "habilitades.\n" "\n" "Les dades recopilades són anònimes per defecte i abasten només imatges que " "ha baixat el Variety, mai imatges que ja tingueu a les carpetes locals, que " "podrien ser privades.\n" "\n" "Aquestes dades ens ajuden a proporcionar imatges millors a tothom i alimenta " " VRTY.ORG - una font valuosa per a tots els " "usuaris del Variety." #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "No sembla que sigui una URL de Reddit vàlida" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "No hi hem pogut trobar cap entrada d'imatge." #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "Obté cites del canal RSS QuotesDaddy's daily quotes.\n" "No admet cercar per etiquetes ni autors." #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Variety - afegeix Flickr com a font d'imatges" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "Si us plau, especifiqueu el criteri de cerca de Flickr. Es baixaran les fotos que " "coincideixin amb tots els criteris escollits. Deixeu en blanc els criteris " "que no siguin necessaris." #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "Etiquetes: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "Una llista separada per comes de les etiquetes. Una fotografia les ha de " "contenir totes al mateix temps per coincidir-hi.\n" "Exemple: groc, cotxe." #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "Usuari: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "Si us plau, introduïu l'URL a la galeria de fotos de l'usuari o a una de les " "fotos.\n" "Exemple: http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "Grup: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "Si us plau, introduïu l' URL del grup.\n" "Exemple: http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "Text:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "Cerca de text lliure als títols, descripcions i etiquetes de les " "fotografies. Per excloure'n termes avantposeu-hi -.\n" "Exemple: pastís -de poma." #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "segons" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "minuts" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "hores" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "dies" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "Preferències del Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "General" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "Inicia el Variety quan s'iniciï l'ordinador" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "Canvia el fons cada " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "L'interval mínim és de 5 segons" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "Canvia el fons en iniciar" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "Mode segur. Evita imatges incompletes i no adequades per a la feina" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" "Característica experimental. Depèn de les puntuacions de la comunitat. Llegiu-" "ne més aquí." #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "Habilitat" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "Tipus" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "Ubicació" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "_Afegeix..." #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "Afegeix imatges, carpetes o fonts d'imatges en línia" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "_Edita..." #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "Edita la font seleccionada" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "Sup_rimeix..." #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "Elimina les fonts d'imatges seleccionades" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "_Usa" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "Habilita les fonts seleccionades i inhabilita totes les altres" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "Baixa un fons cada " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "L'interval mínim és d'un minut" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "a " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "Carpeta de baixades actual " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "Atenció: no useu aquesta opció si feu servir una carpeta de baixades " "personalitzada amb fitxers importants a dins. El Variety en mantindrà el " "límit sense tenir en compte el que hi ha a la carpeta." #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "Limita la carpeta de baixades a " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "La mida mínima és de 50 MB" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "MB per eliminar els fitxers més antics quan calgui" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "Favorits" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "Copia els fons favorits a " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "Filtres" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "" "Aplica aquests filtres aleatòriament als fons que es mostren (gràcies al " "magnífic ImageMagick):" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "Cites" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "Mostra cites sàvies aleatòriament a l'escriptori" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "Color del text: " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "Tipus de lletra del text: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "Color del fons: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "Opacitat del fons: " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " Transparent" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "Opac" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "Dibuixa una ombra de text" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "Aparença" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "Amplada de l'àrea de cites: " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "Estreta " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "Ampla" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "Posició horitzontal: " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "Esquerra " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "Posició vertical: " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "A dalt " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "Ubicació" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "Mostra cites d'aquestes fonts: " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "Més " "connectors" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "" "Mostra només aquestes etiquetes i autors. Deixeu-ho en blanc perquè es " "mostrin les cites aleatòriament." #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "Exemple: divertit, inspirat" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "Exemple: Albert Einstein, Voltaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "Autors: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "Fonts i filtratge" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "Canvia la cita cada " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "L'interval mínim és de 10 segons" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "Canvi regular" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "Rellotge" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "" "Mostra un rellotge digital bonic i gros a l'escriptori que indiqui l'hora i " "la data actuals" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "Per configurar l'aparença del rellotge editeu la propietat clock_filter del " "fitxer de configuració del Variety (~/.config/variety/variety.conf). Useu " "els comentaris de ~/.config/variety/variety_latest_default.conf com a guia." #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "Tipus de lletra del rellotge: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "Tipus de lletra de la data: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "No funciona? Llegiu aquí. " "Com configurar més el rellotge? Llegiu " "aquí." #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "Efectes" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "Imatges per a la presentació" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "Imatges favorites" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "Imatges de totes les fonts d'imatges habilitades" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "Totes les imatges de la carpeta de baixades" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "Carpeta personalitzada (inclou les imatges de les subcarpetes) " #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "Ordre de les imatges de la presentació " #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "Aleatori" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "Per nom, de la A a la Z" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "Per nom, de la Z a la A" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "Per data, primer la més antiga" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "Per data, primer la més nova" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "Pantalla" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "Executa al monitor" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "Mode de la finestra per a la presentació " #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "Pantalla completa" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "Escriptori (es manté sota d'altres finestres)" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "Finestra maximitzada" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "Finestra normal" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "Dinàmica" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "Interval entre canvis d'imatge " #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr " segons" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "Atenuació ràpida " #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "Atenuació lenta" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "Menys zoom" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "Més zoom" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "Menys abast" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "Més abast" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "Torna als valors predeterminats" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" "Els canvis en aquesta pàgina tenen efecte després que es reinicia la " "presentació" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "Inicia la presentació ara" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "Presentació" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "VRTY.ORG" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "VRTY.ORG és beta i trigarà una mica a madurar" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" "VRTY.ORG connecta usuaris del Variety amb " "gustos similars i proporciona maneres molt convenients per canviar el fons " "de pantalls, per afegir fonts d'imatges noves al Variety i per seguir els " "favorits d'altres usuaris. S'alimenta de les imatges favorites de tots els " "usuaris que hi participen." #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "" "No es pot crear l'usuari. No hi ha connexió a VRTY.ORG. Es tornarà a " "intentar més tard." #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" "Registrar-s'hi habilita característiques interessants com ara la " "sincronització d'imatges favorites i de fonts entre ordinadors i " "recomanacions personalitzades." #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "Sincronitza" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "Sincronitza les imatges favorites entre ordinadors" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "Cal tenir VRTY.ORG habilitat i haver-hi entrat." #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" "Les imatges favorites d'altres ordinadors es baixaran automàticament a " "aquest ordinador. Heu d'entrar a VRTY.ORG amb el mateix usuari a tot arreu. " "La sincronització no eliminarà cap imatge." #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "Política de privacitat" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" "El Variety envia dades només de les imatges que ha baixat, mai d'imatges que " "ja tingueu a les carpetes locals, que podrien ser privades, i la " "sincronització no funciona per a aquest tipus d'imatges. Les dades " "recopilades no es comparteixen amb terceres persones si no és que vulgueu " "fer públic el vostre perfil. Llegiu més detalls sobre el servei i la política de privacitat " "aquí." #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "Estadístiques d'ús" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "Ajudeu a fer millor el Variety enviant estadístiques d'ús anònimes." #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" "Aquestes estadístiques ens ajuden a millorar el Variety a través d'entendre " "com els usuaris hi interaccionen. També inclouen informació general sobre la " "versió del sistema operatiu i la configuració del monitor. Les dades " "recopilades no es comparteixen amb ningú." #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "Sincronització i social" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "Carpeta d'obtenció" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "Desa els fons baixats manualment a " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "Arossegueu-ho i deixeu-ho anar" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "La icona del Variety del llançador serveix com a destinació per deixar-hi " "anar elements. Si hi deixeu anar qualsevol URL o fitxer, es desarà a la " "carpeta d'obtenció. Podeu prémer \"Següent\" per veure-ho a l'escriptori.\n" "Per mostrar la icona al llançador, trieu \"Quant a\" o \"Preferències\". " "Potser voldríeu bloquejar-la-hi per tenir més fàcil deixar-hi anar elements." #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "Monitoratge del porta-retalls" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "Monitora el porta-retalls per a URLs d'imatges i obtén-les" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "Però obtén-les només quan l'URL amfitrió sigui un dels següents:" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "Baixada manual" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "Quan sigui possible usa imatges que:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "Tinguin una orientació apaïsada" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "Tinguin una mida mínima del " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "% de la resolució de la pantalla" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "Color" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "Siguin fosques o clares:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "Fosques" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "Clares" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "Continguin aquest color: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(Té efecte després d'una cerca inicial)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "Puntuació" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "Tinguin una puntuació d'EXIF d'un mínim de " #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "Color i mida" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "Icona indicadora" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "Icona indicadora:" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "Clara" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "Fosca" #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "Usa el fons actual" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "Imatge personalitzada..." #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "Cap" #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "Seleccioneu una icona" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "Quan la icona està amagada, el Variety es pot controlar des de la línia " "d'ordres o bé des de la llista ràpida del llançador. Executeu \"variety --" "help\" per veure totes les ordres disponibles." #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "Operacions favorites" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "Operacions favorites per mostrar al menú principal:" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "Copia als favorits" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "Copia i també desplaça" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "Depèn de la carpeta..." #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "" "Mostra el diàleg per personalitzar l'apunt del Facebook abans de publicar-lo" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "Suport de la pantalla d'entrada" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "" "Assegura que els fons establerts pel Variety s'usin a la pantalla d'entrada" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "Avís de privacitat: per mostrar el vostre fons, el LightDM necessita " "permisos de lectura per a la imatge. Amb aquesta opció activada, el Variety " "copiarà els fons a una carpeta pública i en canviarà els permisos perquè " "siguin llegibles per a tothom. Per defecte, la carpeta és ~/Imatges, si no " "teniu encriptada la carpeta personal, i /usr/share/backgrounds si ho està. " "Si us plau, useu-ho amb compte en sistemes amb més d'un usuari." #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "Copia els fitxers de fons a aquesta carpeta: " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "Restableix als valors predeterminats" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "Encara no funciona?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "" "Sembla que la vostra carpeta personal està encriptada; per tant, no " "funcionarà usar-hi carpetes dins." #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "No teniu permisos d'escriptura per a aquesta carpeta." #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "" "Els permisos no permeten que el LightDM llegeixi fitxers d'aquesta carpeta." #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "" "El Variety en pot ajustar els permisos, però haureu de proporcionar " "privilegis de superusuari." #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "Personalitza" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "Consells i trucs" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "Canvis recents" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "Visiteu-ne el lloc web" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "Informeu d'un error o demaneu una característica" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "Envia comentaris" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "Feu una donació al Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "Feu una donació per PayPal" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "Estic desenvolupant el Variety durant el meu temps lliure, que en general " "significa les últimes hores després que els meus fills se'n vagin a dormir. " "Qualsevol quantitat que doneu serà apreciada. Em mostrarà que el Variety és " "valorat per vosaltres, els usuaris, i em motivarà a continuar treballant-hi " "activament.\n" "\n" "Gràcies,\n" "Peter Levi" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" "Per a Bitcoin i altres mètodes de pagament, si us plau, aneu al lloc web del Variety." #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "S'està obtenint" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "La imatge és massa petita, s'ignorarà" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "Discupleu, s'ha obtingut l'error %s..." #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "Això vol dir que l'enllaç ja no és vàlid." #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "L'obtenció ha fallat per algun motiu" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "" "Per obtenir-ne més informació, si us plau executeu el Variety des del " "terminal amb l'opció -v i torneu a provar l'acció" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "" "El vostre fitxer de configuració smart_user.json sembla malmès. Pot ser que " "hàgiu d'entrar un altre cop a VRTY.ORG." #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "" "Les vostres credencials de VRTY.ORG probablement estan caducades. Si us " "plau, torneu a entrar-hi." #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "S'obtenen %d imatges" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "S'està obtenint 1 imatge" #: ../variety/Smart.py:684 msgid "Finished" msgstr "Finalitzat" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "S'ha entrat com a %s" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "Voleu entrar a VRTY.ORG com a %s?" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "Confirmació d'entrada a VRTY.ORG" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "Sense connectors de citació" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "No hi ha cap connector de citació instal·lat" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "No hi ha cap connector de citació adient" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "" "No teniu connectors de citació que admetin la cerca per paraules clau i per " "autors" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "No s'han pogut obtenir citacions" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "El servei de citacions pot haver caigut. Es continuarà intentant" #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "No s'han pogut trobar citacions" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "Potser busqueu alguna cosa molt amagada?" variety-0.8.3/po/de.po000066400000000000000000002407621362063646600146020ustar00rootroot00000000000000# German translation for variety # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the variety package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2018-07-11 12:37+0000\n" "Last-Translator: Hans Schmidt \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "Zitatabruf von Goodreads.com" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "Original beibehalten" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "Graustufen" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "Sehr verschwommen" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "Leicht verschwommen" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "Ölgemälde" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "Bleistiftskizze" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "Pointillismus" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "Verpixeln" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "Ordner für Favoriten" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "Ordner für heruntergeladene Bilder" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "" #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "Zufällige Hintergrundbilder von Desktoppr.co" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "NASAs Astronomiebild des Tages" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "Bing-Foto des Tages" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "" "Das Hintergrundbild kann, durch rollen über dem Anzeigensymbol, vor und " "zurück gewechselt werden." #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" "Falls Sie möchten, dass ein benutzerdefinierter Befehl ausgeführt wird, wenn " "das Hintergrundbild wechselt oder Sie eine alternative Arbeitsumgebung " "benutzen, dann bearbeiten Sie bitte die Skripts in " "~/.config/variety/scripts. Dort befinden sich Beispiele für unterschiedliche " "Arbeitsumgebungen." #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" "Variety kann von der Befehlszeile aus gesteuert werden. Damit ist es " "möglich, für Aktionen, die man am meisten benutzt, Tastenkürzel festzulegen. " "Mit »variety --help« wird eine Liste aller verfügbaren Befehle angezeigt." #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" "Bildadressen oder Dateien können auf dem Startersymbol abgelegt werden, um " "sie herunterzuladen und als Hintergrundbild zu verwenden. Für ein " "schnelleres Herunterladen von einer bestimmten Seite kann auch die " "Überwachung der Zwischenablage aktiviert werden (siehe Reiter »Manuelles " "Herunterladen«)." #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "" "Das Anwenden eines starken Unschärfefilters ist ein großartiger Weg, um " "abstrakt und unaufdringlich auszusehen und doch farbenfrohe " "Hintergrundbilder zu haben. Ähnlich dem Standardhintergrund von Ubuntu." #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" "Eigene Filter hinzuzufügen ist einfach: ~/.config/variety/variety.conf in " "einer Textbearbeitung öffnen und die vorhandenen Filter als Vorlage " "benutzen. Jeder Filter ist bloß eine Zeile von Optionen, die an ImageMagicks " "Konvertierungsbefehl übergeben werden." #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" "Wenn eine Bildquelle ausgewählt wird, werden die Bilder in einem Fenster am " "unteren Rand des Bildschirms angezeigt. Man kann ein Bild anklicken, um es " "zum Bildschirmhintergrund zu machen. Mit dem Rechtsklick wird das Fenster " "geschlossen, das Aussehen angepasst und Dateiaktionen ausgeführt. Es können " "mehrere Bildquellen ausgewählt werden, um eine Vorschau von allen zusammen " "zu erhalten. Dabei ist zu beachten, dass diese Vorschauansicht immer auf " "einige Hundert zufällig gewählte Bilder beschränkt wird." #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" "Um Benachrichtungen beim Hintergrundbildwechsel zu aktivieren müssen die " "zwei Zeilen am Ende von ~/.config/variety/scripts/set_wallpaper " "auskommentiert werden." #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" "Varietys Anzeigensymbol ist thematisch anpassbar. Falls die »Hell«-Option " "für das Symbol gewählt wurde, wird Variety zuerst prüfen, ob es im aktuellen " "GTK-Thema ein Symbol mit dem Namen »variety-indicator« gibt und dieses " "nutzen, anstatt des mitgelieferten hellen Symbols." #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" "Falls Zitate zu den Favoriten hinzugefügt werden, werden diese standardmäßig " "unter ~/.config/variety/favorite_quotes.txt gespeichert. Diese Datei ist " "kompatibel zu Varietys Quelle für Zitate aus lokalen Dateien. Die Datei ist " "ebenfalls kompatibel mit den Unix-Glückskeks-Hilfsmitteln." #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "Anmelden bei VRTY.ORG" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "Benutzername: " #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "Passwort: " #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "Kein Konto? Hier registrieren!" #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "Passwort vergessen?" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "Anmelden" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "Bilder" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "Ordner" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "Flickr" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Wallhaven.cc" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "Reddit" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "Medien-RSS" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "Quelle entfernen, Dateien behalten" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "Quellen entfernen, Dateien behalten" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "Quelle entfernen und heruntergeladene Dateien löschen" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "Quellen entfernen und heruntergeladene Dateien löschen" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "Sonnenlichtweltkarte aktiviert" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "Die Nutzung der Sonnenlichtweltkarte erfordert sowohl das Herunterladen, als " "auch das Aktivieren von 30-minütigen oder kürzeren Intervallen. Die " "Einstellungen werden automatisch angepasst." #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "Bilder hinzufügen" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "Abbrechen" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "Hinzufügen" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "" "Ordner hinzufügen - Nur die Hauptordner, Unterordner werden rekursiv " "durchsucht" #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "Bearbeiten …" #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "Bild anzeigen" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "Ordner öffnen" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "Keine Schreibberechtigung" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "Begrenzung aufgehoben" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "" "Beim Ändern des Ordners, für das Herunterladen, wird das Speicherlimit " "automatisch aufgehoben, um unbeabsichtigten Datenverlust zu vermeiden." #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "Aktueller Ordner für das Herunterladen: %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "Berechtigungen konnten nicht angepasst werden" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "Folgender Befehl kann manuell ausgeführt werden:\n" "sudo chmod %s »%s«" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "Angemeldet als: " #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "Anonym" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "Anmeleden oder Registrieren" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "Benutzer wechseln" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "Willkommen zu Variety" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "Fortsetzen" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" "Variety ist ein automatischer Hintergrundwechsler. Variety ändert den " "Schreibtischhintergrund regelmäßig. Es verwendet dafür lokale Bilder oder " "welche, die von verschiedenen Fotoseiten heruntergeladen wurden. Variety " "läuft leise im Hintergrund, um es zu steuern bitte auf das folgende Symbol " "in der Systemleiste klicken:" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" "Variety ist ein quelloffenes Programm, von Peter Levi, einem Programmierer " "aus Bulgarien, geschrieben. Wenn es Ihnen gefällt, dann spenden Sie bitte!" #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "" "Jetzt bitte etwas Zeit nehmen, um die Einstellungen auf den folgenden " "Fenstern anzupassen." #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "KDE-Benutzer - Wichtig, bitte lesen:" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "Huch, der Server hat einen Fehler zurückgegeben (%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "Zum Server konnte nicht verbunden werden" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "_Nächstes" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "_Vorheriges" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "Aktuelles Hintergrundbild" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "Ursprung anzeigen" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "Zu _Favoriten kopieren" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "Zu Favoriten verschieben" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "In _Papierkorb verschieben" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "Tipp: Über dem Symbol rollen\n" "für Vorheriges und Nächstes" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "Beim Aktuellen anhalten" #: ../variety/indicator.py:129 msgid "_Image" msgstr "_Bild" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "Woher stammt das Bild?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "Ohne Effekte anzeigen" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "Google-Bildersuche" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "Auf Facebook teilen" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "Exif-Bewertung eingeben" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "Unter Favoriten speichern" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "Favoriten anzeigen …" #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "In die Zwischenablage kopieren" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "Google-Zitate" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "Google-Autor" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "Einstellungen …" #: ../variety/indicator.py:252 msgid "Turn off" msgstr "Ausschalten" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "" #: ../variety/indicator.py:265 msgid "_History" msgstr "_Verlauf" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "_Hintergrundbildauswahl" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "_Kürzlich heruntergeladen" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "" #: ../variety/indicator.py:302 msgid "About" msgstr "Über" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "Spenden" #: ../variety/indicator.py:310 msgid "Quit" msgstr "Beenden" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "" "Dieses scheint keine gültige Media-RSS-Feed-Adresse zu sein oder es gibt " "dort keinen Inhalt." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "Variety - VRTY.ORG" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "Nein Danke" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "In VRTY.ORG teilnehmen" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "Variety - Panoramio als Bildquelle hinzufügen" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "Bitte gewünschten Bereich vergrößern." #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Variety - auf Facebook veröffentlichen" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "" "Veröffentlicht einen Link zum aktuellen Hintergrundbild auf Facebook. Hängt " "diesen Text an den Link an (oder einfach leer lassen):" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "Aktuelles Zitat nutzen" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "Nicht mehr nachfragen, immer den oben stehenden Text benutzen" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "Keine Bilder gefunden" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "Bereits in den Favoriten enthalten" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "Zu _Favoriten verschieben" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "Abgerufen: Herkunft anzeigen" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "Auf %s anzeigen" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "Unbekannt" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "Autor: %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "Filterung zu streng?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "" "Variety hat zu wenig Bilder gefunden, welche der Filterauswahl entsprechen." #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "" "Bitte fügen Sie zusätzliche Bildquellen hinzu oder warten Sie, bis weitere " "Bilder heruntergeladen wurden" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "Bitte zusätzliche Bildquellen hinzufügen" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "Keine weiteren Hintergrundbilder" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "Aktuelles Hintergrundbild ist nicht in den Bildquellen enthalten" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "" "Konnte nicht nach %s verschoben werden. Möglicherweise haben Sie nicht die " "erforderlichen Rechte, um diese Datei zu verschieben." #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "" "Konnte nicht nach %s kopiert werden. Möglicherweise haben Sie nicht die " "erforderlichen Rechte, um diese Datei zu kopieren." #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "Konnte nicht gelöscht werden" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "" "Sie haben nicht die erforderlichen Rechte, um %s in den Papierkorb zu " "verschieben." #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "Anonyme Nutzungsstatistiken" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "" "Wird eine Textbearbeitung mit der Konfigurationsdatei öffnen und die " "Änderungen anwenden, nachdem Sie die Textbearbeitung geschlossen haben." #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [Optionen] [Dateien oder Adressen]\n" "\n" "Lokale Dateien werden zur Variety-Warteschlange hinzugefügt.\n" "Internetadressen werden in den Abrufordner heruntergeladen und zur Variety-" "Warteschlange hinzugefügt.\n" "\n" "Um ein bestimmtes Hintergrundbild festzulegen: %prog /some/local/image.jpg --" "next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "" "Protokoll anzeigen (-vv zeigt mehr Details, -vvv berücksichtigt auch " "variety_lib)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "Laufende Programminstanz beenden" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "" "Aktuelles Hintergrundverzeichnis ausgeben. Wird nur genutzt, wenn die " "Anwendung bereits läuft." #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "Nächstes Hintergrundbild anzeigen" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "Vorheriges Hintergrundbild anzeigen" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "Nächstes Hintergrundbild anzeigen, Verlauf vorwärts überspringen" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "" "Aktuelles Hintergrundbild in den Papierkorb verschieben. Wird nur genutzt, " "wenn die Anwendung bereits läuft." #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Aktuelles Hintergrundbild zu den Favoriten kopieren. Wird nur genutzt, wenn " "die Anwendung bereits läuft." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Aktuelles Hintergrundbild zu den Favoriten verschieben. Wird nur genutzt, " "wenn die Anwendung bereits läuft." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "Beim aktuellen Bild anhalten" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "Zwischen Pause/Weiter umschalten" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "Nächstes Zitat anzeigen" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "Vorheriges Zitat anzeigen" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "Nächstes Zitat anzeigen, Verlauf vorwärts überspringen" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "Zitatedurchlauf pausieren/fortsetzen" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "Aktuelles Zitat unter Favoriten speichern" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "Verlaufsanzeige ein-/ausschalten" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "Letztes Heruntergeladenes anzeigen/ausblenden" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "Einstellungen anzeigen" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "" "Manuelle Hintergrundbildauswahl anzeigen - die Vorschauleiste, mit Bildern " "gefüllt von den aktiven Bildquellen." #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "Stellt eine Option ein und wendet sie an. Die Optionsnamen sind die gleichen " "wie die in der Variety-Konfigurationsdatei ~/.config/variety/variety.conf " "genutzten. Mit einem Befehl können mehrere Optionen eingestellt werden. " "Beispiel: »variety --set-option icon Dark --set-option clock_enabled True«. " "MIT VORSICHT NUTZEN: Die Konfigurationsdateien werden ungeprüft geändert." #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "" "Die Optionen --next, --fast-forward und --previous schließen sich " "gegenseitig aus." #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "Die Optionen --trash und --favorite schließen sich gegenseitig aus" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "Die Optionen --pause und --resume schließen sich gegenseitig aus" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "Die Optionen --quotes-next, --quotes-fast-forward und --quotes-previous " "schließen sich gegenseitig aus" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "Kein Bild" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "Zur Warteschlange hinzugefügt" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "Weiter klicken zum Anschauen" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "Abgerufen" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "Nicht unterstützter Quelltyp" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "Wird die aktuellste Version von Variety genutzt?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "Neue Bildquelle hinzugefügt" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "Diese Bildquelle ist bereits vorhanden und wird aktiviert." #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "Abgerufen und angewendet" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "Es funktioniert!" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "Nicht unterstützter Befehl" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "Die Adresse »variety://« konnte nicht verarbeitet werden" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "Nicht mehr nachfragen und immer das aktuelle Zitat verwenden" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "Veröffentlicht" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "Sie können Facebook öffnen, um die Nachricht zu sehen" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "Konnte nicht veröffentlicht werden" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "Autostarteintrag konnte nicht erstellt werden" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "Während der Eintragung als Startprogramm ist ein Fehler aufgetreten.\n" "Bitte im Terminal mit dem Zusatz -v ausführen und erneut probieren." #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "" #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "" #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "" #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "Variety - Facebook-Freigabe" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "Facebook-Freigabe" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "Zitatabruf von TheQuotationsPage.com" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "Variety - Reddit-Feed hinzufügen" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "Adresse oder Name eines Subreddit: " #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "Variety - VRTY.ORG-Registrierung" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "Möchten Sie sich registrieren?" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "Ich will anonym teilnehmen" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "Ich bin registriert, bitte anmelden" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "Hier registrieren" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "Ordner wählen" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "OK" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "Abbruchsignal empfangen, wird beendet …" #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "Variety läuft bereits. Befehl wird an die laufende Instanz gesendet." #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "Unten" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "Oben" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "Links" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "Rechts" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "Position" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "Größe" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "Zielordner anzeigen" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "Schließen" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "Exif-Bewertung konnte nicht eingegeben werden" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "Nicht bewertet" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "Abgewiesen" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "Variety-Verlauf" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Variety: Kürzlich heruntergeladen" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Variety-Bilder" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "Urheberrecht (c) 2012, Peter Levi " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "Über Variety" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "" "Anwendung zum automatischen Wechseln, Herunterladen und Verwalten von " "Hintergrundbildern." #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "Variety" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Variety-Hintergrundbildwechsler" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "Weiter" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "Zurück" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "Pause / Weiter" #: ../variety.desktop.in.h:6 msgid "History" msgstr "Verlauf" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "Einstellungen" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "Variety - Wallhaven.cc-Bildquelle hinzufügen" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "Stichwort eingeben oder Adresse einfügen: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "Suche benötigt einen Moment" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "Zeigt Zitate aus lokalen Textdateien.\n" "Legen Sie ihre eigenen txt-Dateien in ~/.config/variety/pluginconfig/quotes/ " "ab.\n" "Das Format ist:\n" "\n" "Zitat -- Autor\n" ".\n" "Zweites Zitat -- Zweiter Autor\n" ".\n" "usw.\n" "\n" "Beispiel: http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "Variety - Media-RSS-Feed hinzufügen" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "Bitte die Adresse des Medien-RRS-Feeds unten einfügen. Bitte beachten Sie, " "dass nur Medien-RRS-Feeds unterstützt werden, nicht beliebige RRS-Feeds. " "Medien-RRS-Feeds enthalten media:Inhaltschlagworte, die direkt zu dem " "Bildinhalt führen. Einige Beispielseiten, die Medien-RRS-Feeds anbieten, " "sind Picasa, DeviantArt, SmugMug, Flickr und interfacelift." #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "Adresse des Media-RSS-Feeds hier einfügen: " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "Bitte einen Moment Geduld. Adresse wird geprüft." #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "Legitimierung erfolgreich" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "Veröffentlichung läuft …" #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "Legitimierung fehlgeschlagen" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "Zu Favoriten kopieren oder zu Favoriten verschieben" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "Vorgaben wiederherstellen" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "" "Bitte auswählen, ob Ihnen »Zu Favoriten kopieren« oder »Zu Favoriten " "verschieben« im Menü mehr zusagt, abhängig vom Speicherort des Bildes:" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "Bitte einen Eintrag pro Zeile eingeben und jeden Eintrag in folgender Form " "eingeben: »Ordner:Kopieren,Verschieben oder Beides«\n" "Der Ordner kann »Downloaded«, »Fetched«, »Others« oder ein bestimmter " "Ordnerpfad sein.\n" "Der Befehl kann »Copy« (Kopieren), »Move« (Verschieben) oder »Both« (Beides) " "sein.\n" "Die Reihenfolge ist wichtig. Wenn ein Bild angezeigt wird, dann wird der " "erste Ordner, welcher das Bild enthält, darüber entscheiden welche Aktionen " "im Variety-Menü angezeigt werden. »Others« trifft auf jede Datei zu und " "sollte deshalb an letzter Stelle stehen.\n" "\n" "Beispiel:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/Bilder/Zufallsbilder:Move\n" "\t/Bilder/OrganisierteAlben:Copy\n" "\tOthers:Both" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "VRTY.ORG-Einbindung" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "Diese Funktion benötigt die Einbindung von VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "VRTY.ORG-Einbindung aktivieren" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "Das scheint keine gültige Reddit-Adresse zu sein" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "" #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "Zitate von QuotesDaddys täglichem Zitate-RSS feed werden abgerufen.\n" "Suche nach Schlagworten oder Autoren wird nicht unterstützt." #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Variety - Flickr als Bildquelle hinzufügen" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "Bitte legen Sie das Flickr-Suchkriterium " "fest. Bilder, die alle angegebenen Kriterien erfüllen werden " "heruntergeladen. Nicht benötigte Kriterien können leer gelassen werden." #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "Schlagworte: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "Eine Liste von Schlagwörtern, durch Kommata getrennt. Ein Bild muss alle " "davon enthalten, um als passend zu gelten.\n" "Beispiel: yellow,car" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "Benutzer: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "Bitte die Adresse des Benutzers zum Fotostrom oder eines Fotos eingeben.\n" "z. B.: http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "Gruppe: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "Bitte die Gruppenadresse eingeben. \n" "z. B.: http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "Text:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "Freie Textsuche in Bildtiteln, -beschreibungen und -schlagwörtern. Begriffe " "können durch Voranstellen von »-« ausgeschlossen werden.\n" "Beispiel: apfel -kuchen" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "Sekunden" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "Minuten" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "Stunden" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "Tage" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "Variety-Einstellungen" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "Allgemein" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "Variety mit dem Rechner starten" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "Wechsel des Hintergrundbildes alle " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "Kürzeste Zeitspanne beträgt fünf Sekunden" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "Hintergrundbild beim Start wechseln" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "Aktiviert" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "Typ" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "Standort" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "_Hinzufügen …" #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "Bilder, Ordner oder Internetbildquellen hinzufügen" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "_Bearbeiten …" #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "Gewählte Quelle bearbeiten" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "_Entfernen …" #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "Gewählte Quelle entfernen" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "_Benutzen" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "Gewählte Quellen aktivieren und alle anderen deaktivieren" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "Ein Hintergrundbild herunterladen alle " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "Kürzeste Zeitspanne beträgt eine Minute" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "nach " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "Aktueller Ordner für das Herunterladen " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "Achtung: Nutzen Sie diese Option NICHT, wenn ein eigenes " "Herunterladverzeichnis mit wichtigen Dateien darin verwendet wird. Variety " "wird das eigene Speicherlimit ohne Rücksicht auf die enthaltenen Dateien " "durchsetzen." #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "Ordner für das Herunterladen begrenzen auf " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "Mindestgröße sind 50 MB" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "MB, wobei ältere Dateien bei Bedarf gelöscht werden" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "Favoriten" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "Die Lieblingshintergrundbilder kopieren nach " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "Filter" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "" "Zufällig diese Filter auf die angezeigten Hintergrundbilder anwenden (dank " "des wundervollen ImageMagick)" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "Zitate" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "Zitate auf dem Schreibtisch nach dem Zufallsprinzip anzeigen" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "Textfarbe: " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "Schriftart: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "Hintergrundfarbe: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "Hintergrunddeckkraft: " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " Transparent" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "Deckend" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "Textschatten anzeigen" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "Erscheinungsbild" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "Breite des Zitatbereichs: " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "Schmal " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "Breit" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "Horizontale Position: " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "Links " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "Senkrechte Position: " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "Oben " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "Platzierung" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "Zitate von diesen Quellen anzeigen: " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "Mehr " "Erweiterungen" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "" "Nur diese Schlagworte und Autoren anzeigen. Leer lassen, um zufällige Zitate " "anzuzeigen." #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "Beispiel: lustig, inspirierend" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "Beispiel: Albert Einstein, Voltaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "Autoren: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "Quellen und Filter" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "Zitatwechsel alle " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "Kürzeste Zeitspanne beträgt zehn Sekunden" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "Regelmäßiger Wechsel" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "Uhr" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "" "Eine nette, große, digitale Uhr mit aktueller Zeit und Datum auf dem " "Schreibtisch anzeigen" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "Um das Aussehens der Uhr anzupassen, muss der clock_filter-Wert in der " "Einstellungsdatei von Variety angepasst werden " "(~/.config/variety/variety.conf). Die Kommentare in " "~/.config/variety/variety_latest_default.conf dienen als Anleitung." #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "Uhrschriftart: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "Datumsschriftart: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "Funktioniert nicht? Hier lesen. " "Weitere Einstellmöglichkeiten für die Uhr? Hier " "lesen." #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "Effekte" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "VRTY.ORG" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "" "Benutzer konnte nicht erstellt werden – keine Verbindung zu VRTY.ORG. Wir " "werden es später erneut versuchen." #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "Synchronisierung" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "Lieblingsbilder zwischen mehreren Rechnern synchronisieren" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "VRTY.ORG wird benötigt, aktiviert und angemeldet." #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "Datenschutzerklärung" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "Nutzungsstatistiken" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "Synchronisierung und Sozial" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "Abrufordner" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "Manuell heruntergeladene Hintergrundbilder speichern unter " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "Ziehen und Ablegen" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "Varietys Symbol im Starter dient als Fläche zum Ablegen. Dateien oder " "Adressen, die darauf gezogen werden, werden im Abrufordner gespeichert. Wenn " "Sie dann auf »Weiter« klicken, sehen Sie es als Hintergrund.\n" "Um das Symbol im Starter anzuzeigen, wählen Sie Info oder Einstellungen. Für " "vereinfachtes Ziehen-und-Ablegen kann es dort auch angeheftet werden." #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "Überwachung der Zwischenablage" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "Zwischenablage auf Bildadressen überwachen und diese abrufen" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "Aber abrufen, wenn die Adresse eine der Folgenden ist:" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "Manuelles Herunterladen" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "Möglichst Bilder benutzten, auf die Folgendes zutrifft:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "Sind im Querformat" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "Mindestgröße ist " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "% der Bildschirmauflösung" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "Farbe" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "Sind dunkel oder hell:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "Dunkel" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "Hell" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "Enhalten diese Farbe: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(Wirkt sich nach einigen anfänglichen Suchen aus)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "Bewertung" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "Haben mindestens die Exif-Bewertung " #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "Farbe und Größe" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "Anzeigensymbol" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "Anzeigensymbol:" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "Hell" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "Dunkel" #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "Aktuelles Hintergrundbild verwenden" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "Benutzerdefiniertes Bild …" #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "Keins" #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "Symbol auswählen" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "Wenn das Symbol nicht angezeigt wird, kann Variety von der Befehlszeile oder " "von der Schnellwahl des Starters aus gesteuert werden. Um alle möglichen " "Befehle zu sehen bitte »variety --help« ausführen." #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "Favoritenoperationen" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "Favoritenoperationen, welche im Hauptmenü angezeigt werden sollen:" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "Zu Favoriten kopieren" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "Sowohl Kopieren, als auch Verschieben" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "Abhängig vom Ordner …" #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "" "Dialog zum Anpassen des Facebook-Beitrages, vor dem Veröffentlichen anzeigen" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "Unterstützung für das Anmeldefenster" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "" "Sicherstellen, dass die Hintergrundbilder von Variety auch im Anmeldefenster " "genutzt werden" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "Privatsphärenwarnung: Um das Hintergrundbild anzuzeigen benötigt " "LightDM Leserechte für das Bild. Mit dieser Option wird Variety die Bilder " "in einen öffentlichen Ordner kopieren und es für alle lesbar machen. Die " "Vorgabe ist ~/Bilder, falls Ihr Persönlicher Ordner nicht verschlüsselt ist, " "ansonsten /usr/share/backgrounds. Bitte mit Sorgfalt auf " "Mehrbenutzersystemen verwenden." #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "Hintergrundbilder in diesen Ordner kopieren: " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "Auf Vorgabe zurücksetzen" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "Funktioniert immer noch nicht?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "" "Vermutlich ist Ihr persönlicher Ordner verschlüsselt. Ordner innerhalb " "können deshalb nicht benutzt werden." #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "Keine Zugriffsrechte für diesen Ordner." #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "" "LightDM kann aufgrund fehlender Zugriffsrechte, Dateien in diesem Ordner " "nicht lesen." #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "" "Variety kann die Rechte anpassen, aber dazu sind Systemverwalterrechte " "erforderlich." #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "Anpassen" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "Tipps und Tricks" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "Letzte Änderungen" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "Internetseite besuchen" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "Fehler melden oder neue Funktionen vorschlagen" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "Rückmeldung senden" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "Für Variety spenden" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "Über PayPal spenden" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "Ich entwickle Variety in meiner Freizeit, was normalerweise heißt, wenn " "meine Kinder im Bett sind. Jede Spende ist willkommen. Diese zeigen mir, " "dass Sie - der Nutzer - Variety wertschätzen und das motiviert mich, das " "Programm aktiv weiterzuentwickeln.\n" "\n" "Vielen Dank,\n" "Peter Levi" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "Wird abgerufen" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "Bild zu klein, wird ignoriert." #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "" #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "Das bedeutet, dass die Verknüpfung nicht mehr gültig ist" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "Der Abruf versagte aus irgendeinem Grund" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "" "Um mehr Information zu erhalten, starten Sie Variety im Terminal mit »-v« " "als Option und wiederholen Sie den Vorgang" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "" "Ihre smart_user.json-Konfigurationsdatei scheint fehlerhaft zu sein. Sie " "müssen sich möglicherweise erneut bei VRTY.ORG anmelden." #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "" "Ihre VRTY.ORG-Zugangsdaten sind möglicherweise veraltet. Bitte nochmal " "anmelden." #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "%d Bilder werden abgerufen" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "1 Bild wird abgerufen" #: ../variety/Smart.py:684 msgid "Finished" msgstr "Fertiggestellt" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "Angemeldet als %s" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "" "Möchten Sie sich bei VRTY.ORG als %s " "anmelden?" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "VRTY.ORG-Anmeldebestätigung" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "Keine Zitaterweiterungen" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "Es sind keine Zitaterweiterungen installiert" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "Keine brauchbaren Zitaterweiterungen" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "" "Es existieren keine Zitaterweiterungen, die das Suchen nach Stichwörtern " "oder Autoren ermöglichen" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "Zitate konnten nicht abgerufen werden" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "" "Möglicherweise sind Zitatdienste gerade nicht verfügbar, es wird weiter " "versucht" #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "Konnte keine Zitate finden" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "Möglicherweise suchen Sie nach etwas unklarem?" variety-0.8.3/po/es.po000066400000000000000000002415661362063646600146240ustar00rootroot00000000000000# Spanish translation for variety # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the variety package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2019-08-24 10:01+0000\n" "Last-Translator: Adolfo Jayme \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "Obtiene citas de Goodreads.com" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "Mantener el original" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "Escala de grises" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "Desenfoque duro" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "Desenfoque suave" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "Pintura al óleo" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "Dibujo a lápiz" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "Puntillismo" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "Pixelar" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "Carpeta de Favoritos" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "La carpeta Obtenidos" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "" #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "Fondos aleatorios de Desktoppr.co" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "Imagen astronómica del día de la NASA" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "Foto del día de Bing" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "Fotografías de alta resolución de Unsplash.com" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "" "Puede cambiar de fondo ubicando el puntero del ratón sobre el icono " "indicador y usando la rueda de desplazamiento." #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" "Para ejecutar órdenes al cambiar de fondo o si utiliza un entorno de " "escritorio diferente, edite las secuencias de órdenes ubicadas en " "~/.config/variety/scripts, donde encontrará ejemplos para varios entornos." #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" "Es posible controlar Variety desde la consola; puede usar esta funcionalidad " "para establecer las combinaciones de teclas que más utiliza. Ejecute " "«variety --help» para ver todas las órdenes." #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" "Puede arrastrar y soltar enlaces o imágenes en el icono del lanzador para " "establecerlos como fondo. Para descargar rápidamente desde un sitio web, " "puede utilizar el monitoreo de portapapeles (vea la pestaña «Descarga " "manual»)." #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "" #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "Acceder a VRTY.ORG" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "Nombre de usuario: " #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "Contraseña: " #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "¿No tiene una cuenta? Cree una" #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "¿Olvidó su contraseña?" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" "Consejo: también puede acceder a VRTY.ORG " "en el navegador y pulsar en el enlace «Trigger Variety " "login» en su perfil." #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "Acceder" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "Todo" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "Imágenes" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "Carpetas" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "Flickr" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Wallhaven.cc" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "Reddit" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "RSS del medio" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "Quitar el origen, mantener los archivos" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "Quitar los orígenes, mantener los archivos" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "Quitar el origen y eliminar los archivos descargados" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "Quitar los orígenes y eliminar los archivos descargados" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "Mapamundi de luz solar activado" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "Para usar el mapamundi de luz solar se necesita activar la descarga y el " "cambio a intervalos de 30 minutos o menos. Se ha ajustado la configuración " "automáticamente." #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "Añadir imágenes" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "Cancelar" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "Añadir" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "" "Añadir carpetas – Solo añada las carpetas raíz, las subcarpetas se buscarán " "recursivamente" #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "Editar…" #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "Ver imagen" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "Abrir carpeta" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "Sin permisos de escritura" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "Límite desactivado" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "" "Al cambiar la carpeta de descarga, el límite de tamaño se desactiva " "automáticamente para prevenir la pérdida de datos accidental." #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "Carpeta de descargas real: %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "No se pudieron ajustar los permisos" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "Puede probar a ejecutar esta orden:\n" "sudo chmod %s \"%s\"" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "Se accedió como: " #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "Anónimo" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "Acceder o registrarse" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "Cambiar de usuario" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "Le damos la bienvenida a Variety." #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "Continuar" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" "Variety es un programa de código abierto creado por Peter Levi, un " "programador de Bulgaria. Si le gusta, haga un donativo." #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "" "Dedique ahora unos minutos para configurar la aplicación en las ventanas " "siguientes." #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "Usuarios de KDE – Importante, lea:" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "Ocurrió un error en el servidor (%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "No se pudo conectar con el servidor" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "_Siguiente" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "_Anterior" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "Fondo de pantalla actual" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "Mostrar origen" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "Copiar en _Favoritos" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "Mover a Favoritos" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "Mover a la _papelera" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "Consejo: use la rueda del ratón sobre el\n" "icono para ir al fondo anterior/siguiente" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "Pausar en el actual" #: ../variety/indicator.py:129 msgid "_Image" msgstr "_Imagen" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "¿De dónde es?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "Mostrar sin efectos" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "Búsqueda de imágenes de Google" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "Compartir en Facebook" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "Establecer valoración de EXIF" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "Denunciar imagen explícita" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "Guardar en Favoritos" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "Ver favoritos…" #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "Copiar al portapapeles" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "Cita de Google" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "Autor de Google" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "Preferencias…" #: ../variety/indicator.py:252 msgid "Turn off" msgstr "Apagar" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "_Cita" #: ../variety/indicator.py:265 msgid "_History" msgstr "_Histórico" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "Selector de _fondos" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "_Descargas recientes" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "Iniciar pase de diapositivas" #: ../variety/indicator.py:302 msgid "About" msgstr "Acerca de" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "Donar" #: ../variety/indicator.py:310 msgid "Quit" msgstr "Salir" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "Modo _seguro" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "" "Este no parece ser el URL de un canal RSS de medios válido, o no hay " "contenido en él." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "Variety – VRTY.ORG" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "No, gracias" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" "Presentamos VRTY.ORG. ¿Quiere ser parte?" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" "Se necesita participación para algunas funciones de Variety, como la sincronización de favoritos entre equipos." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "Participar en VRTY.ORG" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "Variety – Añadir Panoramio como origen de imágenes" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "Haga un acercamiento en el área de su interés." #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Variety – Publicar en Facebook" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "" "Publicar un enlace a la imagen de fondo actual en Facebook. Incluir este " "texto junto con el enlace (o simplemente déjelo en blanco):" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "Usar la cita actual" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "No preguntar de nuevo, siempre usar el texto anterior" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "No se encontraron imágenes" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "Ya está en Favoritos" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "Mover a _Favoritos" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "Obtenidos: Mostrar origen" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "Ver en %s" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "Desconocido" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "Modo seguro: activado" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "Activar el modo seguro" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "Autor: %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "Reanudar cambios periódicos" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "¿El filtrado es demasiado estricto?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "" "Variety encontró muy pocas imágenes en la búsqueda que coincidan con sus " "criterios de filtrado de imágenes." #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "" "Añada más orígenes de imágenes o espere a que se completen algunas descargas" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "Añada más orígenes de imágenes" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "No hay más fondos" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "El fondo actual no está en los orígenes de imágenes" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "" "No se pudo mover a %s. Probablemente no tenga permisos para mover este " "archivo." #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "" "No se pudo copiar a %s. Probablemente no tenga permisos para copiar este " "archivo." #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "No se puede eliminar" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "No tiene permisos para mover %s a la papelera." #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "Estadísticas de uso anónimas" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" "Variety recopila estadísticas anónimas de uso.\n" "Estas nos ayudan a mejorar el programa y no las compartimos con nadie.\n" "Para obtener más información o para desactivarlas, vaya a «Sincronización y " "funciones sociales»." #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "" "Se abrirá un editor con el archivo de configuración; aplique los cambios " "después de guardar y cerrar el editor." #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [opciones] [archivos o url]\n" "\n" "Al pasar archivos locales, estos se añadirán a la cola de Variety.\n" "Al pasar URL, se descargarán los archivos en la carpeta Obtenidos y luego se " "colocarán en la cola.\n" "\n" "Para establecer un fondo específico: %prog /una/imagen/local.jpg --next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "" "Mostrar mensajes de registro (-vv muestra mejores mensajes de depuración, -" "vvv depura variety_lib también)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "Salir de la instancia en ejecución" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "" "Mostrar la ubicación del fondo actual. Solo se utiliza cuando la aplicación " "ya está en ejecución." #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "Mostrar el siguiente fondo" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "Mostrar el fondo anterior" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "Mostrar el siguiente fondo, omitiendo el histórico" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "" "Mover el fondo actual a la papelera. Solo se utiliza cuando la aplicación ya " "está en ejecución." #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Copiar el fondo actual a favoritos. Solo se utiliza cuando la aplicación ya " "está en ejecución." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Mover el fondo actual a favoritos. Solo se utiliza cuando la aplicación ya " "está en ejecución." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "Pausar en la imagen actual" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "Reanudar cambios periódicos de imagen" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "Pausar/reanudar" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "Ver la cita siguiente" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "Ver la cita anterior" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "Mostrar la siguiente cita, omitiendo el histórico" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "Pausar/reanudar citas" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "Guardar la cita actual en Favoritos" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "Mostrar/ocultar historial" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "Mostrar/ocultar descargas recientes" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "Mostrar el diálogo Preferencias" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "" #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "Establece y aplica una opción. Los nombres de las opciones son los mismos " "usados en el archivo de configuración de Variety " "~/.config/variety/variety.conf. Puede establecer varias opciones en una sola " "orden. Por ejemplo: «variety --set-option icon Dark --set-option " "clock_enabled True». ÚSELO CON PRECAUCIÓN: está modificando el archivo de " "configuración directamente, sin ningún tipo de protección." #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "" "las opciones --next/--fast-forward y --previous son mutualmente excluyentes" #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "las opciones --trash y --favorite son mutualmente excluyentes" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "las opciones --pause y --resume son mutualmente excluyentes" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "las opciones --quotes-next/--quotes-fast-forward y --quotes-previous son " "mutualmente excluyentes" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "No es una imagen" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "Añadido a la cola" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "Pulse Siguiente para verlo" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "Obtenidos" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "El origen no es compatible" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "¿Está utilizando la versión más reciente de Variety?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "Se añadió un origen de imágenes nuevo" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "El origen de imágenes ya existe. Activándolo" #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "¡Funciona!" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "No se admite la orden" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "No se pudo procesar el URL variety:// dado" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "No preguntar de nuevo y usar siempre la cita actual" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "Publicado" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "Puede abrir «Novedades» en Facebook para ver la publicación" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "No se pudo publicar" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "No se pudo crear la entrada de inicio automático" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "Ocurrió un error al crear la entrada de inicio automático de escritorio\n" "Ejecute el programa desde la terminal con el parámetro -v e inténtelo de " "nuevo." #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "No hay ninguna imagen en las carpetas de pase de diapositivas" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "Instalando…" #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "Se han instalado las dependencias. Reinicie Variety ahora." #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "" #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "Variety – Compartir en Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "Compartir en Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "Obtiene citas de TheQuotationsPage.com" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "Variety – Añadir un canal de Reddit" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "URL o nombre de un subreddit: " #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "Espere un momento mientras revisamos lo que hay" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "Variety – Registro en VRTY.ORG" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "¿Quiere registrarse?" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "Es sencillo registrarse y no se le solicitará ningún dato personal." #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" "Si elige participar anónimamente, puede registrarse más tarde en la página " "«Sincronización y funciones sociales» en " "Preferencias." #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "" "Prosiga con el registro y siga las instrucciones en la pestaña del navegador " "que se abrió." #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "Participaré anónimamente" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "Me he registrado; quiero acceder" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "Regístrese aquí" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "Seleccione una carpeta" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "Aceptar" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "Señal de finalización recibida, saliendo…" #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "" "Variety ya se está ejecutando. Enviando la orden a la instancia en ejecución." #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "Abajo" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "Arriba" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "Izquierda" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "Derecha" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "Posición" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "Tamaño" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "Mostrar la carpeta contenedora" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "Cerrar" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "No se pudo establecer la valoración de EXIF" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "Sin valorar" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "Rechazado" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "Histórico de Variety" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Descargas recientes de Variety" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Imágenes de Variety" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "Copyright (c) 2012, Peter Levi " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "Acerca de Variety" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "Un cambiador, descargador y gestor de fondos automático." #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" "# Copyright (c) 2012, Peter Levi \n" "# Este programa es software libre: usted puede redistribuirlo y/o " "modificarlo \n" "# bajo los términos de la Licencia Pública General GNU publicada \n" "# por la Fundación para el Software Libre, ya sea la versión 3 \n" "# de la Licencia, o (a su elección) cualquier versión posterior.\n" "\n" "# Este programa se distribuye con la esperanza de que sea útil, pero \n" "# SIN GARANTÃA ALGUNA; ni siquiera la garantía implícita \n" "# MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO. \n" "# Consulte los detalles de la Licencia Pública General GNU para obtener \n" "# una información más detallada. \n" "\n" "# Debería haber recibido una copia de la Licencia Pública General GNU \n" "# junto a este programa. \n" "# En caso contrario, consulte .\n" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "Variety" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Cambiador de fondos de pantalla Variety" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "Siguiente" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "Anterior" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "Pausar/reanudar" #: ../variety.desktop.in.h:6 msgid "History" msgstr "Historial" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "Preferencias" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "Variety – Añadir Wallhaven.cc como origen de imágenes" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "Escriba palabras clave o pegue el URL: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "Un momento para revisar esta búsqueda" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "Muestra citas, definidas en archivos de texto locales.\n" "Ponga sus propios archivos txt en: ~/.config/variety/pluginconfig/quotes/.\n" "El formato del archivo es:\n" "\n" "cita -- autor\n" ".\n" "segunda cita -- otro autor\n" ".\n" "etc.\n" "\n" "Ejemplo: http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "Variety – Añadir canal RSS de medios" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "Pegue la URL del canal RSS multimedia a continuación. Note que solo son " "compatibles los canales RSS multimedia, y no los comunes. Los canales RSS " "multimedia contienen etiquetas media:content que enlazan directamente a la " "imagen en sí. Ejemplos de sitios que proporcionan canales RSS multimedia " "incluyen: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "Pegue aquí la URL del canal RSS de medios: " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "Espere un momento, se está comprobando la URL" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "Autorización exitosa" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "Publicando…" #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "Falló la autorización" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "Copiar a favoritos o mover a favoritos" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "Restablecer valores predeterminados" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "" "Seleccione si prefiere «Copiar a favoritos» o «Mover a favoritos» en el " "menú, dependiendo de la ubicación de la imagen:" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "Introduzca una entrada por línea, cada una con con forma : , donde «Carpeta» puede ser Descargados, Obtenidos, Otros o " "una ruta de carpeta específica.\n" "El orden es importante. Cuando se muestra una imagen, la primera carpeta de " "esta lista que contiene la imagen determinará las operaciones que se " "mostrarán en el menú de Variety. «Otros» coincide con cualquier archivo y " "debería ser el último de la lista.\n" "\n" "Ejemplo:\n" "\tDescargados:Copiar\n" "\tObtenidos:Mover\n" "\t/fotos/ImágenesAlAzar:Mover\n" "\t/fotos/ÃlbumesOrganizados:Copiar\n" "\tOtros:Ambos" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "Integración con VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "Esta funcionalidad necesita integración con VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "Activar la integración con VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "Este no parece ser un URL de Reddit válido" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "" #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "Recupera citas desde el proveedor RSS «QuotesDaddy's daily quotes».\n" "No permite la búsqueda por etiquetas o autores." #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Variety – Añadir Flickr como origen de imágenes" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "Especifique los criterios de búsqueda en Flickr. Se descargarán las fotos que cumplan " "con todos los criterios. Deje vacíos los criterios que no sean necesarios." #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "Etiquetas: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "Una lista de etiquetas separadas por comas. Para coincidir, una foto debe " "contener todos simultáneamente.\n" "Ejemplo: amarillo,auto" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "Usuario: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "Inserte la dirección URL de la galería del usuario o una de sus fotos.\n" "Ejemplo: http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "Grupo: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "Escriba la dirección URL del grupo.\n" "Ejemplo: http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "Texto:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "Búsqueda de texto en los títulos, descripciones y etiquetas de las fotos. " "Excluya términos anteponiéndoles -.\n" "Ejemplo: pastel -manzana" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "segundos" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "minutos" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "horas" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "días" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "Preferencias de Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "General" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "Iniciar Variety cuando arranque el equipo" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "Cambiar el fondo cada " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "El intervalo mínimo es de 5 segundos" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "Cambiar el fondo al iniciar" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "Modo seguro. Se evitarán las imágenes explícitas o turbadoras" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" "Función experimental. Depende de las evaluaciones comunitarias. Más " "información" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "Activado" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "Tipo" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "Ubicación" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "_Añadir…" #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "Añadir imágenes, carpetas u orígenes de imágenes en línea" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "_Editar…" #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "Editar el origen seleccionado" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "_Quitar…" #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "Quitar los orígenes de imágenes seleccionados" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "_Usar" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "Activar los orígenes seleccionados y desactivar los demás" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "Descargar un fondo cada " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "El intervalo mínimo es de un minuto" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "a " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "Carpeta de descargas real " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "Precaución: NO utilice esta opción si usa una carpeta de descargas " "personalizada que contiene archivos valiosos. Variety mantendrá el límite, " "sin importar lo que contenga la carpeta de descargas." #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "Limitar la carpeta de descargas a " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "El tamaño mínimo es de 50 MB" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "MB eliminando archivos antiguos cuando sea necesario" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "Favoritos" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "Copiar los fondos favoritos a " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "Filtros" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "" "Aplicar aleatoriamente estos filtros a los fondos de pantalla que aparecen " "(gracias al genial ImageMagick):" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "Citas" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "Mostrar citas sabias al azar en el escritorio" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "Color del texto: " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "Tipo de letra del texto: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "Color de fondo: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "Opacidad del fondo: " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " Transparente" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "Opaco" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "Dibujar una sombra de texto" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "Apariencia" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "Anchura de la zona de citas: " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "Estrecha " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "Ancha" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "Posición horizontal: " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "Izquierda " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "Posición vertical: " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "Arriba " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "Posición" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "Mostrar citas de estos orígenes: " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "Más " "complementos" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "" "Mostrar solo estas etiquetas y autores. Dejar en blanco para mostrar citas " "aleatorias." #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "Ejemplo: divertido, inspirador" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "Ejemplo: Albert Einstein, Voltaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "Autores: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "Orígenes y filtrado" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "Cambiar la cita cada " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "El intervalo mínimo es de 10 segundos" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "Cambio periódico" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "Reloj" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "Mostrar un reloj digital con fecha en el escritorio" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "Para configurar la apariencia del reloj, edite la propiedad clock_filter en " "el archivo de configuración de Variety (~/.config/variety/variety.conf). Use " "los comentarios en ~/.config/variety/variety_latest_default.conf como guía." #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "Tipo de letra del reloj: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "Tipo de letra de la fecha: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "¿No funcionan " "estas opciones? ¿Cómo " "personalizar aún más el reloj?." #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "Efectos" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "Imágenes para pase de diapositivas" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "Imágenes favoritas" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "Imágenes en todos los orígenes activados" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "Todas las imágenes en la carpeta Descargas" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "Carpeta personalizada (incluye las subcarpetas) " #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "Orden de las imágenes en el pase " #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "Al azar" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "Por nombre, de la A a la Z" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "Por nombre, de la Z a la A" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "Por fecha, las más antiguas primero" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "Por fecha, las más recientes primero" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "Pantalla" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "Ejecutar en el monitor" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "Modo de ventana del pase de diapositivas " #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "Pantalla completa" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "Escritorio (permanece bajo las otras ventanas)" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "Ventana maximizada" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "Ventana normal" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "Intervalo entre cambios de imagen " #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr " segundos" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "Desvanecimiento rápido " #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "Desvanecimiento lento" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" "Los cambios en esta página surtirán efecto al reiniciar el pase de " "diapositivas" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "Iniciar pase de diapositivas ahora" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "Pase de diapositivas" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "VRTY.ORG" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "VRTY.ORG está en fase beta y le tomará algo de tiempo madurar" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "Sincronizar" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "Sincronizar imágenes favoritas en varios equipos" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "Normativa de privacidad" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "Estadísticas de uso" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "Ayude a mejorar Variety al enviar estadísticas anónimas de uso" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" "Estas estadísticas nos ayudan a mejorar Variety al permitirnos entender cómo " "interactúan los usuarios con esta aplicación. Se incluye información general " "sobre la versión del sistema operativo y la configuración de monitores. Los " "datos recopilados no se comparten con nadie." #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "Sincronización y funciones sociales" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "Carpeta Obtenidos" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "Guardar los fondos descargados manualmente en " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "Arrastrar y soltar" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "Puede soltar imágenes o URL sobre el icono de Variety en el lanzador, para " "que el programa las guarde en la carpeta Obtenidos. Después, puede pulsar " "Siguiente para verla en su escritorio.\n" "Para mostrar el icono en el lanzador, elija Acerca de o Preferencias. Para " "facilitar el acceso a esta función, ancle el icono en el lanzador." #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "Monitoreo del portapapeles" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "Detectar URL de imágenes en el portapapeles y obtenerlas" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "Pero solo obtenerlas cuando el sitio de la URL sea uno de estos:" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "Descarga manual" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "Siempre que sea posible usar imágenes que:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "Tienen orientación horizontal" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "Tienen por lo menos " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "% de la resolución de la pantalla" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "Color" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "Son oscuras o claras:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "Oscuras" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "Claras" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "Contienen este color: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(Será efectivo después de realizar algunas búsquedas)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "Valoración" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "Color y tamaño" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "Icono del indicador" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "Icono del indicador:" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "Claro" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "Oscuro" #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "Usar el fondo actual" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "Imagen personalizada…" #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "Ninguna" #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "Seleccione un icono" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "Cuando el icono está oculto, puede controlar Variety desde la línea de " "órdenes o desde la lista rápida del lanzador. Ejecute «variety --help» para " "ver todas las órdenes disponibles." #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "Operaciones de favoritos" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "Operaciones de favoritos a mostrar en el menú principal:" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "Copiar a favoritos" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "Copiar y mover" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "Depende de la carpeta…" #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "" "Mostrar diálogo para personalizar la entrada de Facebook antes de publicarla" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "Compatibilidad con pantalla de acceso" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "" "Asegúrese de que los fondos establecidos por Variety se usarán en la " "pantalla de inicio de sesión" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "Aviso de privacidad: Para mostrar su fondo de escritorio LightDM " "necesita permisos de lectura sobre la imagen. Cuando se active esta opción " "Variety copiará los fondos a una carpeta pública y cambiará sus permisos " "para hacerlos legibles por todos. De forma predeterminada, esta carpeta es " "~/Imágenes si su carpeta personal no está cifrada, y /usr/share/backgrounds " "si lo está. Úselo con cuidado en sistemas multiusuario." #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "Copiar las imágenes de fondo en esta carpeta: " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "Restaurar al valor predeterminado" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "¿Sigue sin funcionar?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "" "Parece que su carpeta personal está cifrada. No funcionarán las subcarpetas." #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "No tiene permisos de escritura para esta carpeta." #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "LigthDM no tiene permisos para leer los archivos de esta carpeta." #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "" "Variety puede ajustar los permisos, pero deberá proporcionarle privilegios " "de superusuario." #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "Personalizar" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "Consejos y trucos" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "Cambios recientes" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "Visitar el sitio web" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "Informar de un error o pedir una característica" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "Enviar comentarios" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "Done a Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "Donar con PayPal" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "Desarrollo Variety en mi tiempo libre, que normalmente son las últimas horas " "del día, después de que mis hijos se van a la cama. Apreciaré cualquier " "cantidad que done. Eso me mostrará que Variety es significativo para usted " "—el usuario— y me motivará para continuar trabajando en él activamente.\n" "\n" "Gracias,\n" "Peter Levi" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" "Para pagar en bitcoines o por otros medios, visite el sitio web de Variety." #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "Obteniendo" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "La imagen es demasiado pequeña, se ignorará" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "Se obtuvo el error %s…" #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "Eso significa que el enlace no es válido" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "Falló la descarga por algún motivo" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "" "Para obtener más información, ejecute Variety desde la terminal con la " "opción -v y reintente la acción" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "" "Parece que hay un problema en el archivo de configuración smart_user.json. " "Es posible que necesite acceder de nuevo a VRTY.ORG." #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "" "Sus datos de acceso de VRTY.ORG están probablemente desactualizados. Acceda " "de nuevo." #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "Obteniendo %d imágenes" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "Obteniendo 1 imagen" #: ../variety/Smart.py:684 msgid "Finished" msgstr "Finalizado" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "Sesión iniciada como %s" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "" "¿Quiere acceder a VRTY.ORG como %s?" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "Confirmación de acceso a VRTY.ORG" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "Sin complemento de citas" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "No está instalado un complemento de citas" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "No hay complemento de citas disponible" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "" "No tiene actualmente ningún complemento de citas que soporte la búsqueda por " "palabras clave y autores" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "No se pudieron recuperar citas" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "" "El servicio de citas puede estar detenido. Continuaremos intentándolo." #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "No se pudieron encontrar citas" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "¿Quizá está buscando algo muy oculto?" variety-0.8.3/po/fr.po000066400000000000000000002747601362063646600146260ustar00rootroot00000000000000# French translation for variety # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the variety package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2016-11-14 23:50+0000\n" "Last-Translator: Bruno Veilleux \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "Récupère les citations depuis Goodreads.com" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "Conserver l'original" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "Niveaux de gris" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "Flou intense" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "Flou léger" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "Peinture à l’huile" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "Dessin au crayon" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "Pointillisme" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "Pixéliser" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "Le dossier Favoris" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "Le dossier récupéré" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "" "Recommandé par Variety. S'adapte à vos goûts lorsque vous marquez des images " "comme favorites ou les envoyez à la corbeille." #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "" "Derniers favoris par les autres utilisateurs de Variety. [Peut contenir des " "images NSFW]" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "Fonds d'écran aléatoires provenant de Desktoppr.co" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "Image astronomique du jour de la NASA" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "Carte d'ensoleillement du monde - fond d'écran dynamique de Die.net" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "Photo du jour de Bing" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "Photos haute résolution de Unsplash.com" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "" "Vous pouvez passer au fond d'écran précédent/suivant en utilisant la molette " "de la souris sur l'icône de l'indicateur." #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" "Si vous souhaitez lancer des commandes personnalisées à chaque changement de " "fond d'écran, ou si vous utilisez un environnement de bureau alternatif, " "veuillez modifier les scripts dans ~/.config/variety/scripts. Vous y " "trouverez des exemples pour différents environnements de bureau." #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" "La ligne de commande vous permet de contrôler Variety et de définir des " "raccourcis clavier pour les opérations les plus courantes. Lancez « variety -" "-help » pour voir les commandes disponibles." #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" "Vous pouvez glisser des liens vers des images ou des fichiers sur l'icône du " "lanceur afin de les télécharger et de vous en servir comme fonds d'écran. " "Pour un téléchargement plus rapide depuis un site spécifique, vous pouvez " "aussi utiliser le gestionnaire de presse-papiers (voir l'onglet " "« Téléchargement manuel »)." #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "" "Appliquer un filtre de flou intense est un excellent moyen d'obtenir des " "fonds d'écran d'apparence abstraits, discrets, mais colorés, dans la même " "veine que le fond d'écran par défaut d'Ubuntu." #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" "Ajouter vos propres filtres personnalisés est très simple : ouvrez " "~/.config/variety/variety.conf dans un éditeur de texte et utilisez les " "filtres existants comme exemples. Chaque filtre n'est qu'une ligne d'options " "à envoyer à la commande de conversion d'ImageMagick." #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" "Quand vous choisissez une source d'images, ses images sont affichées dans " "une fenêtre en bas de l'écran. Cliquez sur une image pour la choisir comme " "fond d'écran. Effectuez un clic droit pour fermer la fenêtre, modifier son " "apparence ou réaliser des opérations sur le fichier. Vous pouvez " "sélectionner plusieurs sources d'images pour toutes les visualiser sous la " "forme d'une vue en vignettes « fusionnées ». Gardez à l'esprit que la vue en " "vignettes est limitée à quelques centaines d'images choisies de façon " "aléatoire." #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" "Pour activer les notifications sur le bureau lorsque le fond d'écran change, " "décommentez les deux lignes à la fin de " "~/.config/variety/scripts/set_wallpaper." #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" "Des thèmes peuvent être appliqués à l'icône d'indicateur de Variety : si " "vous choisissez le thème « Light » pour l'icône, Variety va tout d'abord " "vérifier si le thème GTK actuel possède une icône nommée « variety-" "indicator » et l'utilisera en lieu et place de l'icône « light » fournie." #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" "Si vous choisissez de sauvegarder des citations dans vos Favoris, celles-ci " "sont sauvegardées par défaut dans ~/.config/variety/favorite_quotes.txt. Ce " "fichier est compatible avec les fichiers locaux de sources de citations. Si " "vous souhaitez l'utiliser, copiez-le vers " "~/.config/variety/pluginconfig/quotes/ et activez la source de citations " "« Fichiers locaux ». Le fichier est également compatible avec l'utilitaire " "« fortune » de Unix." #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "Connexion à VRTY.ORG" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "Nom d'utilisateur : " #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "Mot de passe : " #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "Pas de compte ? Inscrivez-vous ici." #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "Mot de passe oublié ?" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" "Astuce : Vous pouvez également vous connecter à VRTY.ORG dans un navigateur et cliquer sur le " "lien « Trigger Variety login » (activer la " "connexion dans Variety) dans votre profil." #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "Connexion" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "Toutes" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "Images" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "Dossiers" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "Flickr" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Wallhaven.cc" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "Reddit" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "Média RSS" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "Supprimer la source, garder les fichiers" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "Supprimer les sources, garder les fichiers" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "Supprimer la source et supprimer les fichiers téléchargés" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "Supprimer les sources et supprimer les fichiers téléchargés" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "Carte d'ensoleillement du monde activée" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "L'utilisation de la carte d'ensoleillement du monde nécessite l'activation " "du téléchargement et du changement à un intervalle de 30 minutes ou moins. " "Les réglages ont été ajustés automatiquement." #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "Ajouter des images" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "Annuler" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "Ajouter" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "" "Ajouter des dossiers - Ajouter seulement les dossiers racines, les sous-" "dossiers seront automatiquement pris en compte." #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "Modifier..." #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "Afficher l'image" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "Ouvrir le dossier" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "Source d'images recommandée désactivée" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "Pas de droits d'écriture" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "Limite désactivée" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "" "Changer le dossier de téléchargement désactive automatiquement la limite de " "taille afin de prévenir une perte accidentelle de données." #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "Dossier de téléchargement actuel : %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "Impossible de régler les permissions" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "Vous pouvez essayer d'exécuter manuellement cette commande :\n" "sudo chmod %s \"%s\"" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "Connecté(e) en tant que : " #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "Anonyme" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "Connexion ou inscription" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "Changer d'utilisateur" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "Bienvenue sur Variety !" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "Continuer" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" "Variety est un changeur de fond d'écran automatique. Il modifie votre fond " "d'écran régulièrement en utilisant des images locales ou des images " "téléchargées à partir de diverses sources en ligne. Il s'exécute " "discrètement à l'arrière-plan; pour le contrôler, cliquez sur cette icône " "dans la barre d'état :" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" "Variety est un logiciel libre créé par Peter Levi, un développeur de " "logiciels bulgare. Si vous aimez ce logiciel, merci de faire un don." #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "" "Maintenant, veuillez prendre un moment pour définir vos préférences dans les " "fenêtres qui suivent." #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "Utilisateurs KDE - Important, veuillez lire :" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" "Il semble que vous utilisez KDE. Avec KDE 4, il est impossible de définir le " "fond d'écran à partir d'un programme - aucune API ne le permet. Pour faire " "fonctionner Variety, veuillez lire et suivre les instructions ici (en anglais)." #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "Oups ! Le serveur a renvoyé une erreur (%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "Impossible de se connecter au serveur" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "_Suivant" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "_Précédent" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "Fond d'écran actuel du bureau" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "Afficher l'origine" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "Copier vers _Favoris" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "Déplacer vers Favoris" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "Supprimer vers la _Corbeille" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "_Suivant, en ignorant la file d'attente" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "Astuce : défiler avec la molette sur l'icône\n" "pour Suivant et Précédent" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "Pause sur l'image actuelle" #: ../variety/indicator.py:129 msgid "_Image" msgstr "_Image" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "D'où est-il ?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "Afficher sans effets" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "Recherche d'images Google" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "Partager sur Facebook" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "Donner une note EXIF" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "Signaler une image avec du contenu adulte" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "Sauvegarder dans les Favoris" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "Voir les Favoris..." #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "Copier dans le presse-papier" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "Chercher la citation sur Google" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "Chercher l'auteur sur Google" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "Préférences…" #: ../variety/indicator.py:252 msgid "Turn off" msgstr "Désactiver" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "_Citation" #: ../variety/indicator.py:265 msgid "_History" msgstr "_Historique" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "_Sélecteur de fond d'écran" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "_Téléchargements récents" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "Démarrer le diaporama" #: ../variety/indicator.py:302 msgid "About" msgstr "À propos" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "Faire un don" #: ../variety/indicator.py:310 msgid "Quit" msgstr "Quitter" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "Mode _sûr" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "" "Ceci ne semble pas être une URL de flux Média RSS valide, ou alors il ne " "contient rien." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "Variety - VRTY.ORG" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "Non merci" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" "Découvrez VRTY.ORG ! Vous voulez participer ?" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" "VRTY.ORG connecte les utilisateurs de " "Variety ayant des goûts semblables et leur offre des façons pratiques de " "modifier leur fond d'écran, de trouver et d'ajouter de nouvelles sources " "d'images à Variety et de suivre les images favorites d'autres utilisateurs." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" "La participation se fait sans effort : votre profil est ajusté " "automatiquement lorsque vous aimez et n'aimez pas des images téléchargées " "par Variety. Votre profil n'est pas partagé avec des tiers à moins que vous " "ne choisissiez de le rendre public. Vous pouvez en apprendre " "davantage sur le service et consulter sa politique de confidentialité ici " "(en anglais)." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" "La participation est requise pour certaines fonctionnalités de Variety " "telles que la synchronisation des favoris entre " "ordinateurs." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "Participer à VRTY.ORG" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "Variety - ajouter Panoramio comme source d'images" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "Veuillez zoomer sur la zone qui vous intéresse." #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Variety - Publier sur Facebook" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "" "Publier un lien vers le fond d'écran actuel sur Facebook. Inclure ce texte " "avec le lien (ou laisser vide) :" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "Utiliser la citation actuelle" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "Ne plus demander, toujours utiliser le texte ci-dessus" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "Aucune image trouvée" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "Déjà dans Favoris" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "Déplacer vers _Favoris" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "Récupéré : montrer l'origine" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "Vue à %s" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "Inconnu" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "Mode sûr : Activé" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "Activer le mode sûr" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "Auteur : %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "Reprendre les changements réguliers" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "Filtrage trop strict ?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "" "Variety ne trouve pas assez d'images correspondant à vos critères de filtrage" #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "" "Veuillez ajouter plus de sources d'images ou attendre des téléchargements" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "Veuillez ajouter plus de sources d'images" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "Plus d'autre fond d'écran" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "Le fond d'écran actuel ne se trouve pas dans les sources d'images" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "" "Déplacement vers %s impossible. Vous n'avez probablement pas les droits " "nécessaires pour déplacer ce fichier." #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "" "Copie vers %s impossible. Vous n'avez probablement pas les droits " "nécessaires pour copier ce fichier." #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "Suppression impossible" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "" "Vous n'avez pas les droits nécessaires pour supprimer %s vers la Corbeille." #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "Statistiques anonymes d'utilisation" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" "Variety récupère des statistiques d'usage anonymes. \n" "Elles nous aident à améliorer le logiciel et ne sont partagées avec aucun " "tiers. \n" "Pour en savoir plus ou les désactiver, voir « Synchronisation et social »." #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "" "Je vais ouvrir le fichier de configuration avec un éditeur de texte et " "appliquer les changements une fois que vous aurez enregistré et fermé cet " "éditeur." #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [options] [fichiers ou URL]\n" "\n" "Passer des noms de fichiers locaux les ajoutera à la file d'attente de " "Variety.\n" "Passer des URL distantes fera télécharger les images dans le dossier " "Récupéré et les placera dans la file d'attente de Variety.\n" "\n" "Pour choisir un fond d'écran spécifique : %prog /une/image/locale.jpg --next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "" "Afficher les messages de connexion (-vv affiche même les messages de " "débogage les plus fins, -vvv débogue également variety_lib)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "Quitter l'instance en cours" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "" "Afficher l'emplacement du fond d'écran actuel. Utilisé uniquement lorsque " "l'application est déjà en fonctionnement." #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "Montrer le fond d'écran suivant" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "Montrer le fond d'écran précédent" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "Montrer le fond d'écran suivant, en ignorant la file d'attente" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "" "Déplacer le fond d'écran actuel vers la Corbeille. Utilisé uniquement " "lorsque l'application est déjà en fonctionnement." #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Copier le fond d'écran actuel vers Favoris. Utilisé uniquement lorsque " "l'application est déjà en fonctionnement." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Déplacer le fond d'écran actuel vers Favoris. Utilisé uniquement lorsque " "l'application est déjà en fonctionnement." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "Pause sur l'image actuelle" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "Reprendre les changements d'image réguliers" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "Basculer entre les modes Pause/Reprendre" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "Montrer la citation suivante" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "Montrer la citation précédente" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "Montrer la citation suivante, en ignorant la file d'attente" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "Basculer entre les modes Pause/Reprendre pour les citations" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "Enregistrer la citation actuelle dans les Favoris" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "Afficher/masquer l'historique" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "Afficher/masquer les téléchargements récents" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "Afficher la fenêtre Préférences" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "" "Afficher le sélécteur de fond d'écran manuel (une barre de miniatures " "utilisant les sources d'images actives)" #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "Choisit et applique une option. Le nom des options est le même que celui " "utilisé dans le fichier de configuration de Variety " "~/.config/variety/variety.conf. Plusieurs options peuvent être définies en " "une seule commande. Exemple : « variety --set-option icon Dark --set-option " "clock_enabled True ». À UTILISER AVEC PRÉCAUTION : vous êtes en train de " "changer directement le fichier des paramètres dans un mode non protégé." #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "" "les options --next, --fast-forward et --previous s'excluent mutuellement" #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "les options --trash et --favorite s'excluent mutuellement" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "les options --pause et --resume s'excluent mutuellement" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "les options --quotes-next, --quotes-fast-forward et --quotes-previous " "s'excluent mutuellement" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "Ceci n'est pas une image" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "Ajouté à la file d'attente" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "Cliquez sur Suivant pour le voir" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "Récupéré" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "Type de source non pris en charge" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "Utilisez-vous la version la plus récente de Variety ?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "Nouvelle source d'images ajoutée" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "La source d'image existe déjà, maintenant activée" #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "Récupérée et appliquée" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "Ça fonctionne !" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "Les liens Variety fonctionnent. Super !" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "Commande non prise en charge" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "Impossible de traiter l'URL variety:// demandée" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "Exécuter en activant les rapports pour voir les détails" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "Ne plus demander, toujours utiliser la citation actuelle" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "Publié" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "" "Vous pouvez ouvrir votre fil d’actualité Facebook pour voir la publication" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "Publication impossible" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "Impossible de créer l'entrée de démarrage automatique" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "Une erreur s'est produite lors de la création de l'option de démarrage " "automatique.\n" "Veuillez lancer le programme depuis un terminal avec l'option -v et essayer " "de nouveau." #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "Aucune image" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "Il n'y a aucune image dans les dossiers de diaporama" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "Sources d'images Wallhaven désactivées" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" "Veuillez rechercher « erreur Python SNI SSL » sur Internet si vous désirez " "corriger vous-même le problème." #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" "Il existe des incompatibilités SSL entre votre version de Python et certains " "sites utilisant HTTPS, comme Wallhaven. Vous pouvez en lire davantage à ce sujet ici (en " "anglais).\n" "\n" "Désirez-vous installer les dépendances Python requises pour corriger ce " "problème ? \n" "Cette opération nécessitera des privilèges de super-utilisateur. " #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "Variety - erreur SSL. Installer les dépendances ?" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "Installation en cours…" #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" "L'installation prendra une minute ou deux. Veuillez patienter. Le fichier de " "journal se trouve dans %s" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "Les dépendances ont été installées. Veuillez relancer Variety." #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" "Si l'erreur est toujours présente, vous devrez rechercher « erreur Python " "SNI SSL » sur Internet pour trouver une autre solution." #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "Échec. Sources Wallhaven désactivées." #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" "Les dépendances relatives à SSL n'ont pas pu être installées. Veuillez " "consulter %s ou rechercher « erreur Python SNI SSL » sur Internet pour " "trouver une autre solution." #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "Variety - Partage sur Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "Partage sur Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" "Vous partagez sur Facebook pour la première fois. Le partage à partir de " "Variety est disponible pour les images obtenues depuis des sources en ligne " "et les citations. Voici comment faire : \n" "\n" "1. Connectez-vous à Facebook\n" "Facebook s'ouvrira dans votre navigateur par défaut. Vous devrez vous " "connecter si ce n'est déjà fait. \n" "\n" "2. Autorisez Variety à publier sur votre fil " "d'activité.\n" "Facebook vous demandera d'autoriser Variety à publier sur votre fil en votre " "nom. Variety utilisera uniquement cette autorisation pour publier les images " "et citations que vous choisissez, et rien d'autre.\n" "\n" "3. Configurez votre navigateur pour ouvrir les " "liens variety:// avec Variety ou xdg-open\n" "Vous serez alors redirigé(e) vers une page contenant des instructions pour " "associer les liens « variety:// » à Variety dans votre navigateur. Veuillez " "suivre ces instructions pour terminer la configuration. Vous n'aurez à faire " "ceci qu'une seule fois.\n" "\n" "Aucun mot de passe et aucune information de connexion ne sont conservés " "localement, seul un jeton Facebook OAuth est conservé et valide pour " "quelques semaines. Une fois expiré, Facebook vous demandera de vous " "connecter à nouveau." #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "Récupère des citations depuis TheQuotationsPage.com" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "Variety - ajouter un flux Reddit" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" "Entrez le nom d'un subreddit ou collez l'URL complète d'un subreddit ou d'un " "utilisateur Reddit. Vous pouvez définir " "l'ordre de tri et une période limite. Variety utilisera les articles " "pointant directement vers des images ou des pages Imgur parmi les " "100 premiers articles retournés par Reddit.\n" "\n" "Exemple : Vous pouvez indiquer simplement « comics » ou http://www.reddit.com/r/comics\n" "Exemple : Articles les plus populaires du mois : http://www." "reddit.com/r/comics/top/?sort=top&t=month" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "URL ou nom d'un subreddit : " #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "Juste un moment pour vérifier ce qui s'y trouve" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "Variety - Inscription à VRTY.ORG" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "Souhaitez-vous vous inscrire ?" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" "Vous pouvez participer à VRTY.ORG de façon " "anonyme, mais l'inscription permet d'utiliser des fonctionnalités très " "intéressantes, dont la synchronisation des " "favoris entre ordinateurs et les recommandations " "personnalisées. Elle vous assure également de ne pas perdre votre " "profil et vos fonds d'écran préférés si vous réinstallez votre système " "d'exploitation." #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "" "L'inscription est très simple et ne nécessite aucune information personnelle." #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" "Si vous choisissez de participer de façon anonyme, vous pourrez vous " "inscrire plus tard à partir de l'onglet « Synchronisation et social » des Préférences." #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" "Nous n'avons pas réussi à nous connecter à VRTY.ORG. Le serveur est peut-" "être en panne. Veuillez attendre quelques minutes avant d'essayer à nouveau, " "ou choisissez « Participer de façon " "anonyme » et inscrivez-vous plus tard à partir de l'onglet « Synchronisation et social » des Préférences." #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "" "Veuillez poursuivre l'inscription et suivre les instructions dans l'onglet " "que nous avons ouvert dans votre navigateur Internet." #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "Je participerai de façon anonyme" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "Je suis déjà inscrit(e), je veux me connecter" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "Inscrivez-vous ici" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "Choisir un dossier" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "OK" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "Signal d'arrêt reçu. Arrêt en cours…" #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "Variety est déjà démarré. Envoi de la commande à l'instance ouverte." #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "Bas" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "Haut" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "Gauche" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "Droite" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "Position" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "Taille" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "Montrer le dossier parent" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "Fermer" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "Impossible de donner une note EXIF" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "Non évalué" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "Refusé" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "Historique de Variety" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Téléchargements récents de Variety" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Images de Variety" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "Copyright (c) 2012, Peter Levi " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "À propos de Variety" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "" "Une application automatique pour changer, gérer et télécharger des fonds " "d'écran." #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" "# Copyright (c) 2012, Peter Levi \n" "# Ce programme est un logiciel libre ; vous pouvez le redistribuer ou le \n" "# modifier suivant les termes de la « GNU General Public License » version 3 " "telle que \n" "# publiée par la Free Software Foundation.\n" "# \n" "# Ce programme est distribué dans l’espoir qu’il vous sera utile, mais SANS\n" "# AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ\n" "# ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Générale\n" "# Publique GNU pour plus de détails.\n" "# \n" "# Vous devriez avoir reçu une copie de la Licence Générale Publique GNU " "avec\n" "# ce programme ; si ce n’est pas le cas, consultez :\n" "# .\n" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "Variety" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Changeur de fonds d'écran Variety" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "Suivant" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "Précédent" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "Pause / Reprendre" #: ../variety.desktop.in.h:6 msgid "History" msgstr "Historique" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "Préférences" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "Variety - ajouter Wallhaven.cc comme source d'images" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" "Wallhaven.cc fournit de nombreuses " "options de recherche d'images. Vous pouvez définir les mots-clés à " "rechercher ci-dessous ou visiter Wallhaven.cc, y configurer vos critères de " "recherche, vous assurer que les résultats vous conviennent et copier l'URL " "Wallhaven complète dans la zone de saisie.\n" "\n" "Si vous spécifiez des mots-clés, les images politiquement correctes les plus " "appréciées qui répondent à tous les mots-clés seront utilisées. \n" "\n" "Si vous spécifiez une URL Wallhaven, choisissez attentivement les critères " "de recherche. Variety recherche régulièrement des images, mais utilise " "uniquement des résultats parmi les premières centaines. Aléatoire ou Date " "signifiera que cette source d'images aura une « durée de vie » plus longue " "avant d'être épuisée. Favoris fournira de meilleures images et Pertinence " "fournira des résultats plus précis lors des recherches à base de phrases ou " "de couleurs." #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "Saisissez des mots-clés ou copiez l'URL ici : " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "Juste un moment pour vérifier cette recherche" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "Affiche les citations, définies dans les fichiers texte locaux.\n" "Placez vos propres fichiers txt dans : " "~/.config/variety/pluginconfig/quotes/.\n" "Le format du fichier est :\n" "\n" "citation -- auteur\n" ".\n" "seconde citation -- un autre auteur\n" ".\n" "etc…\n" "\n" "Exemple : http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "Variety - ajouter un flux Média RSS" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "Vous pouvez coller l'URL du flux Média RSS ci-dessous. Notez que seuls les " "flux Média RSS sont pris en charge, pas les flux RSS arbitraires. Les flux " "Média RSS contiennent des balises media:content pointant directement sur le " "contenu réel de l'image. Voici des exemples de sites qui fournissent des " "flux Média RSS : Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "Coller l'URL du flux Média RSS ici : " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "Juste un moment pour vérifier le contenu de cette URL" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "Autorisation réussie" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "Publication en cours..." #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "Autorisation échouée" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "Copier vers Favoris vs Déplacer vers Favoris" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "Restaurer les valeurs par défaut" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "" "Choisissez si vous préférez « Copier vers Favoris » ou « Déplacer vers " "Favoris » dans le menu en fonction de l'emplacement de l'image :" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "Veuillez inscrire un élément par ligne, chaque élément sous la forme " ":, où Dossier peut être Downloaded " "(Téléchargés), Fetched (Récupérés), Others (Autres) ou un chemin vers un " "dossier spécifique.\n" "L'ordre est important. Lorsqu'une image est affichée, le premier dossier " "dans cette liste qui contient l'image déterminera quelles opérations seront " "montrées dans le menu de Variety. « Others » correspond à n'importe quel " "fichier et devrait être en dernier dans la liste.\n" "\n" "Exemple :\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "Intégration à VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "Cette fonctionnalité nécessite l'intégration à VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "Activer l'intégration à VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" "Pour activer cette fonctionnalité, Variety doit obtenir l'autorisation de " "recueillir des données sur les images que vous aimez et n'aimez pas, ainsi " "que sur les sources en ligne que vous avez activées.\n" "\n" "Les données recueillies sont anonymes par défaut et ne concernent que les " "images téléchargées par Variety, jamais les images se trouvant déjà dans vos " "dossiers locaux qui pourraient être de nature personnelle.\n" "\n" "Ces données nous aident à fournir de meilleures images à tous les " "utilisateurs et alimentent VRTY.ORG, une " "ressource précieuse pour tous les utilisateurs de Variety." #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "Ceci ne semble pas être une URL Reddit valide" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "Nous n'avons trouvé aucune image à cet endroit." #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "Récupère les citations depuis le flux RSS des citations quotidiennes de " "QuotesDaddy.\n" "Ne prend pas en charge la recherche par tags ou auteurs." #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Variety - ajouter Flickr comme source d'images" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "Veuillez spécifier les critères de recherche Flickr. Les photos qui coïncident avec tous " "les critères choisis seront téléchargées. Laissez vides les critères dont " "vous n'avez pas besoin." #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "Tags : " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "Une lise de tags séparés par des virgules. Une photo doit tous les contenir " "afin de coïncider.\n" "Exemple : jaune,voiture" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "Utilisateur : " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "Veuillez écrire l'URL du diaporama de l'utilisateur ou de l'une de ses " "photos.\n" "Exemple : http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "Groupe : " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "Veuillez écrire l'URL du groupe.\n" "Exemple : http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "Texte :" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "Recherche par texte libre dans les titres, descriptions ou balises de " "photos. Exclure des termes en les faisant précéder d'un tiret (« - »).\n" "Exemple : pomme -tarte" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "secondes" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "minutes" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "heures" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "jours" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "Préférences de Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "Général" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "Lancer Variety au démarrage" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "Changer le fond d'écran toutes les " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "L'intervalle minimal est de 5 secondes" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "Changer le fond d'écran au démarrage" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "Mode sûr. Éviter les images comportant du contenu adulte ou douteux" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" "Fonctionnalité expérimentale basée sur les votes de la communauté. Détails " "ici (en anglais)" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "Activé" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "Type" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "Emplacement" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "_Ajouter…" #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "Ajouter des images, des dossiers ou des sources d'images en ligne" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "_Modifier…" #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "Modifier la source sélectionnée" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "_Supprimer…" #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "Supprimer les sources d'images sélectionnées" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "_Utiliser" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "Activer les sources sélectionnées et désactiver toutes les autres" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "Télécharger un fond d'écran toutes les " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "L'intervalle minimum est une minute" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "vers " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "Dossier de téléchargement actuel " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "Attention : N'utilisez PAS cette option si vous utilisez un dossier de " "téléchargement personnalisé contenant des fichiers importants. Variety " "respectera la limite quel que soit le contenu du dossier." #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "Limiter le dossier de téléchargement à " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "La taille minimale est de 50 Mo" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "Mo en supprimant les fichiers les plus vieux si nécessaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "Favoris" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "Copier les fonds d'écran favoris vers " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "Filtres" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "" "Appliquer aléatoirement ces filtres aux fonds d'écran affichés (grâce au " "super logiciel ImageMagick) :" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "Citations" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "Afficher aléatoirement de sages citations sur le bureau" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "Couleur du texte : " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "Police du texte : " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "Couleur du fond : " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "Opacité du fond : " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " Transparent" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "Opaque" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "Dessiner une ombre pour le texte" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "Apparence" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "Largeur de la surface des citations : " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "Étroite " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "Large" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "Position horizontale : " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "Gauche " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "Position verticale : " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "Haut " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "Positionnement" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "Afficher des citations de ces sources : " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "Plus de " "greffons" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "" "Afficher seulement ces tags et auteurs. Laisser vide pour afficher des " "citations aléatoires." #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "Exemple : drôle, inspirant" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "Exemple : Albert Einstein, Voltaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "Auteurs : " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "Sources et filtrage" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "Changer la citation toutes les " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "L'intervalle minimal est de 10 secondes" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "Changement régulier" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "Horloge" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "" "Afficher une belle grosse horloge numérique sur le bureau affichant la date " "et l'heure actuelles" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "Pour configurer l'apparence de l'horloge, modifier la propriété clock_filter " "dans le fichier de configuration de Variety " "(~/.config/variety/variety.conf). Utilisez les commentaires de " "~/.config/variety/variety_latest_default.conf comme guides." #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "Police de l'horloge : " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "Police de la date : " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "Cela ne fonctionne pas ? Lire ici (en " "anglais). Comment configurer encore plus l'horloge ? Lire " "ici (en anglais)." #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "Effets" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "Images de diaporama" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "Images favorites" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "Images dans toutes les sources activées" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "Toutes les images du dossier Téléchargements" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "Dossier personnalisé (comprend les images des sous-dossiers) " #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "Ordre des images du diaporama " #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "Aléatoire" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "Par nom, de A à Z" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "Par nom, de Z à A" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "Par date, en commençant par la plus vieille" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "Par date, en commençant par la plus récente" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "Écran" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "Exécuter sur le moniteur" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "Mode de fenêtre du diaporama " #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "Plein écran" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "Bureau (demeure sous les autres fenêtres)" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "Fenêtre maximisée" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "Fenêtre normale" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "Dynamique" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "Intervalle entre les changements d'image " #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr " secondes" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "Fondu rapide " #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "Fondu lent" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "Moins de zoom" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "Plus de zoom" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "Moins de défilement" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "Plus de défilement" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "Rétablir les valeurs par défaut" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" "Les changements apportés ici seront appliqués au prochain lancement du " "diaporama" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "Démarrer le diaporama maintenant" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "Diaporama" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "VRTY.ORG" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "" "VRTY.ORG est en bêta et aura besoin d'un certain temps pour arriver à terme" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" "VRTY.ORG connecte les utilisateurs de " "Variety ayant des goûts semblables et leur offre des façons pratiques de " "modifier leur fond d'écran, de trouver et d'ajouter de nouvelles sources " "d'images à Variety et de suivre les images favorites d'autres utilisateurs. " "Le service est alimenté par les images favorites de tous les utilisateurs y " "participant." #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "" "Impossible de créer l'utilisateur, aucune connexion à VRTY.ORG. Nous " "réessaierons plus tard." #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" "L'inscription permet des fonctionnalités intéressantes comme la " "synchronisation de vos images favorites et de vos sources entre vos " "ordinateurs et les recommandations personnalisées." #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "Synchroniser" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "Synchroniser les images favorites entre les ordinateurs" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "Nécessite l'activation et la connexion à VRTY.ORG." #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" "Vos images favorites sur d'autres ordinateurs seront automatiquement " "téléchargées sur cet ordinateur. Vous devez être connecté(e) au même compte " "VRTY.ORG sur chaque ordinateur. La synchronisation ne supprime aucune image." #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "Politique de confidentialité" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" "Variety n'envoie des données que pour les images qu'il télécharge, et non " "pour les images se trouvant déjà dans vos dossiers locaux qui pourraient " "être de nature personnelle. La synchronisation ne s'applique pas non plus " "aux images existantes. Les données recueillies ne sont pas transmises à des " "tiers, à moins que vous ne choisissiez de rendre votre profil public. Vous pouvez obtenir plus de " "détails concernant ce service et sa politique de confidentialité ici (en " "anglais)." #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "Statistiques d'utilisation" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "" "Aidez à améliorer Variety en envoyant des statistiques anonymes d'utilisation" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" "Ces statistiques nous aident à améliorer Variety en comprenant mieux comment " "les utilisateurs interagissent avec le programme. Elles incluent également " "des informations générales concernant la version de votre système " "d'exploitation et la configuration de votre écran. Les données recueillies " "ne sont transmises à aucun tiers." #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "Synchronisation et social" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "Dossier de téléchargement" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "Sauvegarder les fonds d'écran téléchargés manuellement vers " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "Glisser-déposer" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "L'icône de Variety dans le lanceur sert de cible du dépôt. Déposez dessus " "n'importe quel fichier ou URL d'image et elle sera sauvegardée dans votre " "dossier de téléchargement. Vous pouvez ensuite appuyer sur Suivant pour la " "voir sur votre bureau.\n" "Pour afficher l'icône dans le lanceur, choisissez À propos ou Préférences. " "Vous pouvez choisir de la verrouiller pour faciliter l'accès au glisser-" "déposer." #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "Gestionnaire de presse-papiers" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "Surveiller le presse-papiers pour récupérer les URL d'image" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "" "Mais récupérer uniquement quand l'hôte de l'URL fait partie de cette liste :" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "Téléchargement manuel" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "Quand cela est possible, utiliser des images qui :" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "Ont une orientation paysage" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "Ont une taille d'au moins " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "% de la résolution de l'écran" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "Couleur" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "Sont sombres ou claires :" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "Sombres" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "Claires" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "Contiennent cette couleur : " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(activé après quelques recherches préliminaires)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "Évaluation" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "Ont une note EXIF d'au moins " #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "Couleur et taille" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "Icône de l'indicateur" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "Icône de l'indicateur :" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "Claire" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "Sombre" #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "Utiliser le fond d'écran actuel" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "Image personnalisée…" #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "Aucune" #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "Sélectionner une icône" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "Quand l'icône est masquée, Variety peut être contrôlé en ligne de commande " "ou depuis la liste d'accès rapide du lanceur. Exécuter « variety --help » " "afin de voir toutes les commandes accessibles." #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "Opérations sur Favoris" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "Opérations sur Favoris à proposer dans le menu principal :" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "Copier vers Favoris" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "Copier et Déplacer" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "Selon le dossier…" #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "" "Afficher une fenêtre de dialogue afin de personnaliser la publication " "Facebook avant de publier" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "Prise en charge de l'écran de connexion" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "" "S'assurer que les fonds d'écran définis par Variety seront utilisés par " "l'écran de connexion" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "Avertissement sur la vie privée : Pour afficher votre fond d'écran, " "LightDM a besoin des droits de lecture sur l'image. Avec cette option " "activée, Variety copiera les fonds d'écran dans un dossier public et " "changera leurs permissions pour être lisibles par tous. Par défaut, le " "dossier est ~/Images si votre dossier personnel n'est pas chiffré, et " "/usr/share/backgrounds s'il l'est. À utiliser avec précaution sur les " "systèmes multi-utilisateurs." #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "Copier les fichiers d'images de fond d'écran vers ce dossier : " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "Rétablir les valeurs par défaut" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "Cela ne fonctionne toujours pas ?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "" "Il semble que votre dossier personnel soit chiffré, utiliser des dossiers à " "l'intérieur ne fonctionnera pas." #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "Vous n'avez pas les permissions d'écriture sur ce dossier." #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "" "Les permissions ne permettent pas à LightDM de lire les fichiers de ce " "dossier." #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "" "Variety peut ajuster les permissions, mais vous devrez fournir les " "privilèges de super-utilisateur." #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "Personnaliser" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "Trucs et astuces" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "Modifications récentes" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "Visiter le site Web" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "Signaler un bogue ou demander une fonctionnalité" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "Envoyer des commentaires" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "Faire un don à Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "Faire un don via PayPal" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "Je développe Variety durant mon temps libre, ce qui signifie habituellement " "des heures tardives après que mes enfants soient allés au lit. Toute somme " "que vous donnerez sera appréciée. Cela me montrera que Variety a de la " "valeur pour vous, les utilisateurs, et me motivera à continuer de travailler " "activement dessus.\n" "\n" "Merci,\n" "Peter Levi" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" "Pour utiliser Bitcoin et d'autres modes de paiement, veuillez visiter le " "site Web de Variety." #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "Récupération" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "Image trop petite, ignorée" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "Désolé, nous avons rencontré l'erreur %s..." #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "Cela signifie que le lien n'est plus valide" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "Échec de la récupération pour une raison inconnue" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "" "Pour obtenir plus d'information, veuillez exécuter Variety depuis le " "terminal avec l'option -v et retenter cette action" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "" "Votre fichier de configuration smart_user.json semble défectueux. Vous " "devrez peut-être vous reconnecter à VRTY.ORG." #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "" "Vos authentifiants VRTY.ORG ont probablement expirés. Veuillez vous " "reconnecter." #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "Récupération de %d images" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "Récupération de 1 image" #: ../variety/Smart.py:684 msgid "Finished" msgstr "Terminé" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "Connecté(e) en tant que %s" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "" "Désirez-vous vous connecter à VRTY.ORG en tant que %s ?" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "Confirmation de connexion à VRTY.ORG" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "Aucun greffon de citations" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "Il n'y a pas de greffon de citations installé" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "Pas de greffon de citations approprié" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "" "Vous n'avez pas de greffon de citations capable de chercher par mots-clés et " "auteurs" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "Impossible de récupérer des citations" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "" "Les services de citations rencontrent peut-être des problèmes, nous allons " "continuer d'essayer" #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "Impossible de trouver des citations" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "Vous cherchez peut-être quelque chose de trop précis ?" variety-0.8.3/po/ja.po000066400000000000000000002573611362063646600146070ustar00rootroot00000000000000# Japanese translation for variety # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the variety package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2018-11-11 15:49+0000\n" "Last-Translator: Shinichirou Yamada " "\n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "Goodreads.com ã‹ã‚‰å言をå–り込ã¿ã¾ã™" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "å…ƒã®ç”»åƒã‚’ç¶­æŒ" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "モノクロ" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "å¼·ã„ブラー" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "å¼±ã„ブラー" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "油絵" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "鉛筆画" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "点æç”»" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "モザイク" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "ãŠæ°—ã«å…¥ã‚Šãƒ•ォルダー" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "å–得済ã¿ãƒ•ォルダー" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "Variety ã®ãŠå‹§ã‚ã€‚ãŠæ°—ã«å…¥ã‚Šã¨ã—ã¦ãƒžãƒ¼ã‚¯ã—ãŸç”»åƒãªã©ã«åˆã‚ã›ã¦å¤‰åŒ–ã—ã¾ã™ã€‚" #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "ä»–ã® Variety ユーザーã«ã‚ˆã‚‹æœ€æ–°ã®ãŠæ°—ã«å…¥ã‚Š (NSFW ç”»åƒã‚’å«ã‚€å¯èƒ½æ€§ãŒã‚りã¾ã™)" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "Desktoppr.co ã®å£ç´™ã‚’ランダムã«" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "NASA ã®ä»Šæ—¥ã®å¤©æ–‡å†™çœŸ" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "World Sunlight Map (Die.net ã®ãƒ©ã‚¤ãƒ–å£ç´™)" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "Bing ã®ä»Šæ—¥ã®å†™çœŸ" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "Unsplash.com ã®é«˜è§£åƒåº¦å†™çœŸ" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "インジケーターアイコンã®ä¸Šã§ãƒžã‚¦ã‚¹ãƒ›ã‚¤ãƒ¼ãƒ«ã‚’スクロールã™ã‚‹ã¨å£ç´™ã‚’変更ã§ãã¾ã™ã€‚" #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" "å£ç´™ãŒåˆ‡ã‚Šæ›¿ã‚ã‚‹ãŸã³ã«ã‚«ã‚¹ã‚¿ãƒ ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ãŸã„å ´åˆã‚„ã€åˆ¥ã®ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—環境を使用ã™ã‚‹å ´åˆã¯ã€~/.config/variety/scripts " "内ã®ã‚¹ã‚¯ãƒªãƒ—トを編集ã—ã¦ãã ã•ã„。ãã“ã«ã¯æ§˜ã€…ãªãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—環境ã®å‚考例ãŒã‚りã¾ã™ã€‚" #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" "Variety ã¯ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã§åˆ¶å¾¡ã§ãã¾ã™ã€‚ãã—ã¦ã‚ˆã使用ã™ã‚‹å‘½ä»¤ã¯ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã«ç™»éŒ²ã§ãã¾ã™ã€‚\"variety --help\" " "ã§ã™ã¹ã¦ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’確èªã§ãã¾ã™ã€‚" #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" "ç”»åƒã®ãƒªãƒ³ã‚¯ã‚„ç”»åƒãƒ•ァイルをランãƒãƒ£ãƒ¼ã®ã‚¢ã‚¤ã‚³ãƒ³ã«ãƒ‰ãƒ­ãƒƒãƒ—ã™ã‚‹ã¨å£ç´™ã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚特定ã®ã‚µã‚¤ãƒˆã‹ã‚‰ç´ æ—©ãダウンロードã™ã‚‹ã«ã¯ã‚¯ãƒªãƒƒãƒ—ボードモニターを" "使用ã—ã¾ã™ (手動ダウンロードタブをå‚ç…§)。" #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "フィルターã®ã€Œå¼·ã„ブラーã€ã‚’é©ç”¨ã™ã‚‹ã¨ã€ã‚«ãƒ©ãƒ•ルãªå£ç´™ãŒæŠ½è±¡çš„ã§æŽ§ãˆã‚ãªã€Ubuntu ã®ãƒ‡ãƒ•ォルトã®å£ç´™ã®ã‚ˆã†ãªæ„Ÿã˜ã«ãªã‚Šã¾ã™ã€‚" #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" "カスタムフィルターã®è¿½åŠ ã¯ç°¡å˜ã§ã™: ~/.config/variety/variety.conf " "ã‚’é–‹ãã€æ—¢å­˜ã®ãƒ•ィルターをå‚考ã«ã—ã¦ç·¨é›†ã—ã¾ã™ã€‚å„フィルター㯠ImageMagick ã® convert ã‚³ãƒžãƒ³ãƒ‰ã«æ¸¡ã™ã‚ªãƒ—ションã§ã™ã€‚" #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" "ç”»åƒã®å ´æ‰€ã‚’é¸æŠžã™ã‚‹ã¨ã€ç”»é¢ã®ä¸‹ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ç”»åƒãŒè¡¨ç¤ºã•れã¾ã™ã€‚クリックã™ã‚‹ã¨ãã®ç”»åƒãŒå£ç´™ã¨ã—ã¦è¨­å®šã•れã¾ã™ã€‚å³ã‚¯ãƒªãƒƒã‚¯ã§ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ãŸã‚Šã€ã‚¦ã‚£ãƒ³" "ドウã®å¤–観を変更ã—ãŸã‚Šã€ãƒ•ã‚¡ã‚¤ãƒ«ã®æ“作もã§ãã¾ã™ã€‚ç”»åƒã®å ´æ‰€ã‚’è¤‡æ•°é¸æŠžã™ã‚‹ã¨ã€ãれらをã™ã¹ã¦çµåˆã—ãŸã‚µãƒ ãƒã‚¤ãƒ«ãŒè¡¨ç¤ºã•れã¾ã™ãŒã€ãƒ©ãƒ³ãƒ€ãƒ ã«é¸ã°ã‚ŒãŸæ•°ç™¾ç¨‹åº¦" "ã®ç”»åƒã—ã‹è¡¨ç¤ºã•れã¾ã›ã‚“。" #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" "å£ç´™å¤‰æ›´æ™‚ã®ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—通知を有効ã«ã™ã‚‹ã«ã¯ ~/.config/variety/scripts/set_wallpaper " "ã®æœ€å¾Œã®2行ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’外ã—ã¾ã™ã€‚" #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" "Variety ã®ã‚¤ãƒ³ã‚¸ã‚±ãƒ¼ã‚¿ãƒ¼ã‚¢ã‚¤ã‚³ãƒ³ã¯ãƒ†ãƒ¼ãƒžã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚アイコンã®ã‚ªãƒ—ションã§ã€Œæ˜Žã‚‹ã„アイコンã€ã‚’é¸æŠžã—ãŸå ´åˆã€Variety ã¯ã¾ãšç¾åœ¨ã® " "GTK テーマ㫠\"variety-indicator\" ã¨ã„ã†åå‰ã®ã‚¢ã‚¤ã‚³ãƒ³ãŒã‚ã‚‹ã‹ç¢ºèªã—ã€ã‚れã°åŒæ¢±ã®æ˜Žã‚‹ã„アイコンã®ä»£ã‚りã«ä½¿ç”¨ã—ã¾ã™ã€‚" #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" "åè¨€ã‚’ãŠæ°—ã«å…¥ã‚Šã«ä¿å­˜ã™ã‚‹å ´åˆã€ãƒ‡ãƒ•ォルトã§ã¯ ~/.config/variety/favorite_quotes.txt " "ã«ä¿å­˜ã•れã¾ã™ã€‚ã“ã®ãƒ•ァイル㯠Variety " "ã®å言ローカルファイルã¨äº’æ›æ€§ãŒã‚りã¾ã™ã€‚~/.config/variety/pluginconfig/quotes/ " "ã«ã‚³ãƒ”ーã—ã¦å言ã®ã‚½ãƒ¼ã‚¹ã®ãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ァイルを有効ã«ã™ã‚Œã°è¡¨ç¤ºã•れã¾ã™ã€‚ã¾ãŸã€ã“ã®ãƒ•ァイル㯠Unix ã® fortune ã¨ã‚‚äº’æ›æ€§ãŒã‚りã¾ã™ã€‚" #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "VRTY.ORG ã«ãƒ­ã‚°ã‚¤ãƒ³" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "ユーザーå: " #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "パスワード: " #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "アカウントをæŒã£ã¦ã„ã¾ã›ã‚“ã‹? ã“ã“ã§ç™»éŒ²ã§ãã¾ã™" #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "パスワードを忘れã¾ã—ãŸã‹?" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" "Tip: ブラウザã§ã‚‚ VRTY.ORG ã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãã¾ã™ã€‚ã‚ãªãŸã®ãƒ—ロファイル㮠" "\"Trigger Variety login\" をクリックã—ã¦ãã ã•ã„。" #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "ログイン" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "ã™ã¹ã¦" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "ç”»åƒ" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "フォルダー" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "Flickr" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Wallhaven.cc" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "Reddit" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "Media RSS" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "ファイルを残ã—ã¦å ´æ‰€ã‚’削除" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "ファイルを残ã—ã¦å ´æ‰€ã‚’削除" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "場所ã¨ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ãŸç”»åƒã‚‚削除" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "場所ã¨ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ãŸç”»åƒã‚‚削除" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "World Sunlight Map 有効" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "World Sunlight Map " "を使用ã™ã‚‹ã«ã¯ã€ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã¨å£ç´™å¤‰æ›´ãŒæœ‰åйã‹ã¤æ›´æ–°é–“éš”ãŒ30分以内ã«ãªã£ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚設定ã¯è‡ªå‹•çš„ã«èª¿æ•´ã•れã¾ã™ã€‚" #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "ç”»åƒã‚’追加" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "キャンセル" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "追加" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "フォルダーを追加 - サブフォルダーも調ã¹ã¾ã™" #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "編集..." #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "ç”»åƒã‚’表示" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "フォルダーを開ã" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "ãŠã™ã™ã‚ã®ç”»åƒã‚½ãƒ¼ã‚¹ã¯ç„¡åйã§ã™" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "書ãè¾¼ã¿æ¨©é™ãŒã‚りã¾ã›ã‚“" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "制é™ã‚’無効ã«ã—ã¾ã—ãŸ" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "予期ã›ã¬ãƒ‡ãƒ¼ã‚¿æå¤±ã‚’防ããŸã‚ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ãƒ•ォルダーã®ã‚µã‚¤ã‚ºåˆ¶é™ã‚’自動的ã«è§£é™¤ã—ã¾ã™" #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "ç¾åœ¨ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ãƒ•ォルダー: %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "パーミッションを変更ã§ãã¾ã›ã‚“" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "次ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’試ã—ã¦ãã ã•ã„:\n" "sudo chmod %s \"%s\"" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "ç¾åœ¨ã®ãƒ­ã‚°ã‚¤ãƒ³: " #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "アノニマス" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "ログインã¾ãŸã¯ç™»éŒ²" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "ユーザーを切り替ãˆ" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "Variety ã«ã‚ˆã†ã“ã!" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "次ã¸" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" "Variety " "ã¯è‡ªå‹•å£ç´™ãƒã‚§ãƒ³ã‚¸ãƒ£ãƒ¼ã§ã™ã€‚様々ãªã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚½ãƒ¼ã‚¹ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ãŸç”»åƒã‚„ã€ãƒ­ãƒ¼ã‚«ãƒ«ã«ã‚ã‚‹ç”»åƒã‚’使用ã—ã¦ã€ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã®å£ç´™ã‚’定期的ã«å¤‰æ›´ã—ã¾ã™ã€‚ãƒãƒƒã‚¯" "グラウンドã§å‹•作ã—ã€ã‚·ã‚¹ãƒ†ãƒ ãƒˆãƒ¬ã‚¤ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’クリックã—ã¦æ“作ã—ã¾ã™:" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" "Variety ã¯ãƒ–ルガリアã®ã‚½ãƒ•トウェア開発者 Peter Levi ãŒä½œæˆã—ãŸã‚ªãƒ¼ãƒ—ンソースソフトウェアã§ã™ã€‚æ°—ã«å…¥ã‚Šã¾ã—ãŸã‚‰å¯„付をãŠé¡˜ã„ã—ã¾ã™ã€‚" #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "次ã®ç”»é¢ã§è¨­å®šã‚’行ã£ã¦ãã ã•ã„。" #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "KDE ユーザーã¸ã®é‡è¦ãªãŠçŸ¥ã‚‰ã›:" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" "ç¾åœ¨ KDE を実行中ã®ã‚ˆã†ã§ã™ãŒã€KDE 4 ã§ã¯ãƒ—ログラムå´ã‹ã‚‰å£ç´™ã‚’設定ã™ã‚‹ã“ã¨ã¯ä¸å¯èƒ½ã§ã™ (API ãŒå­˜åœ¨ã—ãªã„ãŸã‚)。Variety " "を動作ã•ã›ã‚‹ã«ã¯ã“ã¡ã‚‰ã®æ‰‹é †ã‚’ã”覧ãã ã•ã„。" #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "ãŠã£ã¨ã€ã‚µãƒ¼ãƒãƒ¼ãŒã‚¨ãƒ©ãƒ¼ã‚’è¿”ã—ã¾ã—㟠(%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "サーãƒãƒ¼ã«æŽ¥ç¶šã§ãã¾ã›ã‚“ã§ã—ãŸ" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "次ã¸(_N)" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "å‰ã¸(_P)" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "ç¾åœ¨ã®ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã®å£ç´™" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "å–得元を表示" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "ãŠæ°—ã«å…¥ã‚Šã«ã‚³ãƒ”ー(_F)" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "ãŠæ°—ã«å…¥ã‚Šã«ç§»å‹•" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "ゴミ箱ã«ç§»å‹•(_T)" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "å±¥æ­´ã‚’å‰æ–¹ã«ã‚¹ã‚­ãƒƒãƒ—(_N)" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "ヒント: アイコン上ã§ãƒžã‚¦ã‚¹ãƒ›ã‚¤ãƒ¼ãƒ«ã‚’\n" "スクロールã™ã‚‹ã¨å£ç´™ã‚’変更ã—ã¾ã™" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "ç¾åœ¨ã®çŠ¶æ…‹ã§ä¸€æ™‚åœæ­¢" #: ../variety/indicator.py:129 msgid "_Image" msgstr "ç”»åƒ(_I)" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "ç”»åƒãŒã‚る場所ã¯?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "エフェクトãªã—ã§è¡¨ç¤º" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "Google ç”»åƒæ¤œç´¢" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "Facebook ã§ã‚·ã‚§ã‚¢" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "EXIF ã®è©•価をセット" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "NSFW ç”»åƒã‚’報告" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "ãŠæ°—ã«å…¥ã‚Šã«ä¿å­˜" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’表示..." #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "クリップボードã¸ã‚³ãƒ”ー" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "Google ã§å言を検索" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "Google ã§ä½œè€…を検索" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "設定..." #: ../variety/indicator.py:252 msgid "Turn off" msgstr "éžè¡¨ç¤º" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "å言(_Q)" #: ../variety/indicator.py:265 msgid "_History" msgstr "履歴(_H)" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "å£ç´™é¸æŠž(_W)" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "最近ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰(_D)" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "スライドショーを開始" #: ../variety/indicator.py:302 msgid "About" msgstr "情報" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "寄付" #: ../variety/indicator.py:310 msgid "Quit" msgstr "終了" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "セーフモード(_S)" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "ã“ã‚Œã¯æœ‰åŠ¹ãª Media RSS フィード URL ã§ã¯ãªã„ã€ã¾ãŸã¯ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒã‚りã¾ã›ã‚“。" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "Variety - VRTY.ORG" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "(゚⊿゚)イラネ" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" "紹介 VRTY.ORG! å‚加ã—ã¾ã™ã‹?" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" "Variety ã® ãŠæ°—ã«å…¥ã‚Šã‚’ä»–ã®ã‚³ãƒ³ãƒ”ュータã¨åŒæœŸã™ã‚‹ " "ãªã©ã®æ©Ÿèƒ½ã‚’使ã†ã«ã¯å‚加ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "VRTY.ORG ã«å‚加" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "Variety - Panoramio を追加" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "興味ã®ã‚るエリアをズームã—ã¦ãã ã•ã„。" #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Variety - Facebook ã§å…¬é–‹" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "ã“ã®å£ç´™ã¸ã®ãƒªãƒ³ã‚¯ã‚’ Facebook ã§å…¬é–‹ã—ã¾ã™ã€‚ã“ã®ãƒ†ã‚­ã‚¹ãƒˆã‚’リンクã«å«ã¿ã¾ã™ (空ã§ã‚‚ã‹ã¾ã„ã¾ã›ã‚“):" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "ç¾åœ¨ã®å言を使用" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "次回ã‹ã‚‰ç¢ºèªã›ãšã“ã®ãƒ†ã‚­ã‚¹ãƒˆã‚’常ã«ä½¿ç”¨" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "ç”»åƒãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "ãŠæ°—ã«å…¥ã‚Šã«å…¥ã£ã¦ã„ã¾ã™" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "ãŠæ°—ã«å…¥ã‚Šã«ç§»å‹•(_F)" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "å–得済ã¿: 元画åƒã‚’表示" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "å£ç´™ã®å ´æ‰€: %s" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "䏿˜Ž" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "セーフモード: オン" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "作者: %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "自動更新å†é–‹" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "フィルターãŒå޳ã—ã„よã†ã§ã™" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "基準ã«åˆã†ç”»åƒãŒå°‘ãªã™ãŽã¾ã™" #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "ç”»åƒã®å ´æ‰€ã‚’ã•らã«è¿½åŠ ã™ã‚‹ã‹ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã•れるã¾ã§ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "ã•らã«ç”»åƒã®å ´æ‰€ã‚’追加ã—ã¦ä¸‹ã•ã„" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "å£ç´™ãŒå°‘ãªã™ãŽã¾ã™" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "ç¾åœ¨ã®å£ç´™ã¯ç”»åƒã®å ´æ‰€ã«ã‚りã¾ã›ã‚“" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "%s ã«ç§»å‹•ã™ã‚‹æ¨©é™ãŒã‚りã¾ã›ã‚“。" #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "%s ã«ã‚³ãƒ”ーã™ã‚‹æ¨©é™ãŒã‚りã¾ã›ã‚“。" #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "削除ã§ãã¾ã›ã‚“" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "%s をゴミ箱ã«ç§»å‹•ã™ã‚‹æ¨©é™ãŒã‚りã¾ã›ã‚“。" #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "ゴミ箱ã¸ã®å‰Šé™¤ã«å¤±æ•—ã—ãŸãŸã‚ã€variety.log ã§è©³ç´°ã‚’確èªã—ã¦ãã ã•ã„。" #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" "é©åˆ‡ãªãƒ—ログラムãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ãªã„ãŸã‚ã€ã‚´ãƒŸç®±ã¸ã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚gvfs (gvfs-bin)ã€trash-cliã€ã¾ãŸã¯ " "Konqueror をインストールã—ã¦ãã ã•ã„。" #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "匿åã§ã®ä½¿ç”¨çµ±è¨ˆ" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" "Variety ã¯åŒ¿åã§ä½¿ç”¨çµ±è¨ˆã‚’集ã‚ã¾ã™ã€‚ \n" "ã“ã‚Œã¯æ”¹è‰¯ã®åŠ©ã‘ã«ãªã‚Šã€èª°ã¨ã‚‚共有ã—ã¾ã›ã‚“。 \n" "詳ã—ã㯠\"åŒæœŸã¨ã‚½ãƒ¼ã‚·ãƒ£ãƒ«\" ã«ã‚りã¾ã™ã€‚" #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "エディターã§è¨­å®šãƒ•ァイルを開ãã¾ã™ã€‚ä¿å­˜å¾Œã«å¤‰æ›´ãŒé©ç”¨ã•れã¾ã™ã€‚" #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [オプション] [ファイルã¾ãŸã¯ URL]\n" "\n" "ファイルを渡ã™ã¨ Variety ã¯ã‚­ãƒ¥ãƒ¼ã«è¿½åŠ ã—ã¾ã™ã€‚\n" "URL を渡ã™ã¨ Variety ã¯å–得フォルダーã«å–り込ã¿ã€ã‚­ãƒ¥ãƒ¼ã«è¿½åŠ ã—ã¾ã™ã€‚\n" "\n" "指定ã—ãŸå£ç´™ã‚’セットã—ã¾ã™: %prog /some/local/image.jpg --next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "メッセージを表示 (-vv ã¾ãŸã¯ -vvv debugs variety_lib ã§ã•らã«è©³ã—ã表示)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "実行中ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’終了" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "ç¾åœ¨ã®å£ç´™ã®å ´æ‰€ã‚’表示。起動中ã®ã¿ä½¿ç”¨å¯èƒ½ã€‚" #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "次ã®å£ç´™ã‚’表示" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "å‰ã®å£ç´™ã‚’表示" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "å±¥æ­´ã‚’å‰æ–¹ã«ã‚¹ã‚­ãƒƒãƒ—ã—ã¦å£ç´™ã‚’表示" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "ç¾åœ¨ã®å£ç´™ã‚’ゴミ箱ã«ç§»å‹•。起動中ã®ã¿ä½¿ç”¨å¯èƒ½ã€‚" #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "ç¾åœ¨ã®å£ç´™ã‚’ãŠæ°—ã«å…¥ã‚Šã«ã‚³ãƒ”ー。起動中ã®ã¿ä½¿ç”¨å¯èƒ½ã€‚" #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "ç¾åœ¨ã®å£ç´™ã‚’ãŠæ°—ã«å…¥ã‚Šã«ç§»å‹•。起動中ã®ã¿ä½¿ç”¨å¯èƒ½ã€‚" #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "ç¾åœ¨ã®å£ç´™ã§åœæ­¢" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "å£ç´™ã®è‡ªå‹•変更をå†é–‹" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "ä¸€æ™‚åœæ­¢/å†é–‹ã‚’切り替ãˆ" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "次ã®å言を表示" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "å‰ã®å言を表示" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "å±¥æ­´ã‚’å‰æ–¹ã«ã‚¹ã‚­ãƒƒãƒ—ã—ã¦å言を表示" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "å言ã®ä¸€æ™‚åœæ­¢/å†é–‹ã‚’切り替ãˆ" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "ç¾åœ¨è¡¨ç¤ºã•れã¦ã„ã‚‹åè¨€ã‚’ãŠæ°—ã«å…¥ã‚Šã«ä¿å­˜" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "履歴表示を切り替ãˆ" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "最近ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã®è¡¨ç¤ºã‚’切り替ãˆ" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "設定ダイアログを表示" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "有効ãªç”»åƒã‚’手動ã§å£ç´™ã«é¸æŠžã§ãるサムãƒã‚¤ãƒ«ãƒãƒ¼ã‚’表示" #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "オプションを指定ã—ã¦é©ç”¨ã€‚使用å¯èƒ½ãªã‚ªãƒ—ション㯠Variety ã®è¨­å®šãƒ•ァイル ~/.config/variety/variety.conf " "ã«ã‚りã¾ã™ã€‚一度ã«è¤‡æ•°ã®ã‚ªãƒ—ションを指定ã§ãã¾ã™ã€‚例: 'variety --set-option icon Dark --set-option " "clock_enabled True'ã€‚ä½¿ç”¨ä¸Šã®æ³¨æ„: 設定ファイルを直接編集ã™ã‚‹ã“ã¨ã¯ãŠå‹§ã‚ã§ãã¾ã›ã‚“。" #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "オプション --next/--fast-forward 㨠--previous ã¯åŒæ™‚使用ã§ãã¾ã›ã‚“" #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "オプション --trash 㨠--favorite ã¯åŒæ™‚使用ã§ãã¾ã›ã‚“" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "オプション --pause 㨠--resume ã¯åŒæ™‚使用ã§ãã¾ã›ã‚“" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "オプション --quotes-next/--quotes-fast-forward 㨠--quotes-previous ã¯åŒæ™‚使用ã§ãã¾ã›ã‚“" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "ç”»åƒã§ã¯ã‚りã¾ã›ã‚“" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "キューã«è¿½åŠ ã—ã¾ã—ãŸ" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "次ã¸ã‚’押ã—ã¦ãã ã•ã„" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "å–り込ã¿ã¾ã—ãŸ" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„種類ã®ã‚½ãƒ¼ã‚¹ã§ã™" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "Variety ã®æœ€æ–°ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã—ã¦ã„ã¾ã™ã‹?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "æ–°ã—ã„ç”»åƒã‚½ãƒ¼ã‚¹ã‚’追加ã—ã¾ã—ãŸ" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "ç”»åƒã‚½ãƒ¼ã‚¹ã¯ã™ã§ã«å­˜åœ¨ã™ã‚‹ãŸã‚有効ã«ã—ã¾ã™" #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "å–å¾—ã•れé©ç”¨ã•れã¾ã—ãŸ" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "動作ã—ã¦ã„ã¾ã™!" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "(`・ω・´)ã€Variety リンクãŒå‹•作ã—ã¾ã—ãŸã€‚グゥレイトォ!!" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„コマンドã§ã™" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "与ãˆã‚‰ã‚ŒãŸ variety:// URL を処ç†ã§ãã¾ã›ã‚“ã§ã—ãŸ" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "ログを有効ã«ã—ã¦å®Ÿè¡Œã™ã‚‹ã¨è©³ç´°ã‚’確èªã§ãã¾ã™" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "次回ã‹ã‚‰ç¢ºèªã›ãšã“ã®å言を常ã«ä½¿ç”¨" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "公開ã—ã¾ã—ãŸ" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "Facebook ã‚’é–‹ã„ã¦æŠ•ç¨¿ã‚’è¦‹ã‚‹" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "公開ã§ãã¾ã›ã‚“" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "自動起動エントリーを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "自動起動設定中ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ\n" "端末㧠-v オプションをã¤ã‘ã¦èµ·å‹•ã—ã¦å†è©¦è¡Œã—ã¦ãã ã•ã„" #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "ç”»åƒãŒã‚りã¾ã›ã‚“" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "スライドショーフォルダーã«ç”»åƒãŒã‚りã¾ã›ã‚“" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "Wallhaven ç”»åƒã‚½ãƒ¼ã‚¹ã¯ç„¡åйã§ã™" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "自分ã§å•題を解決ã—ãŸã„å ´åˆã¯ \"Python SNI SSL error\" ã§ã‚°ã‚°ã£ã¦ãã ã•ã„。" #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "Variety - SSL エラーã§ã™ã€‚ä¾å­˜é–¢ä¿‚をインストールã—ã¾ã™ã‹?" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "インストール中..." #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "インストールã¯1〜2分ã‹ã‹ã‚Šã¾ã™ã€‚ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„。ログファイル: %s" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "ä¾å­˜é–¢ä¿‚ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¾ã—ãŸã€‚Variety を今ã™ãå†èµ·å‹•ã—ã¦ãã ã•ã„。" #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "SSL エラーãŒç¶šãå ´åˆã¯ã€\"Python SNI SSL error\" ã§ã‚°ã‚°ã£ã¦è§£æ±ºç­–を探ã—ã¦ãã ã•ã„。" #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "失敗ã—ã¾ã—ãŸã€‚Wallhaven ソースã¯ç„¡åйã§ã™ã€‚" #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" "SSL 関連ã®ä¾å­˜é–¢ä¿‚ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«æˆåŠŸã—ã¦ã„ã¾ã›ã‚“ã§ã—ãŸã€‚%s を確èªã™ã‚‹ã‹ã€\"Python SNI SSL error\" " "ã§ã‚°ã‚°ã£ã¦è§£æ±ºç­–を探ã—ã¦ãã ã•ã„。" #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "Variety - Facebook ã§å…±æœ‰" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "Facebook ã§å…±æœ‰" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "TheQuotationsPage.com ã‹ã‚‰å言をå–り込ã¿ã¾ã™" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "Variety - Reddit フィードを追加" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" "subreddit ã®åå‰ã‚’入力ã™ã‚‹ã‹ã€subreddit ã®å®Œå…¨ãª URL ã¾ãŸã¯ Reddit ユーザーを貼り付ã‘ã¦ãã ã•ã„。並ã³é †ã¨æœŸé–“を指定ã§ãã¾ã™ã€‚Variety 㯠" "Reddit ãŒè¿”ã—ãŸæœ€åˆã®100ä»¶ã®å†…ã€ç›´æŽ¥æŠ•稿ã•れãŸç”»åƒã‹ Imgur ã®ãƒšãƒ¼ã‚¸ã‚’使用ã—ã¾ã™ã€‚\n" "\n" "例: シンプル㫠'comics' ã¨æŒ‡å®šã€ã¾ãŸã¯ http://www.reddit.com/r/comics\n" "例: 月間トップãƒã‚¹ãƒˆ: http://www." "reddit.com/r/comics/top/?sort=top&t=month" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "URL ã¾ãŸã¯ subreddit å: " #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "ãƒã‚§ãƒƒã‚¯ã—ã¦ã„ã¾ã™" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "Variety - VRTY.ORG ã®ç™»éŒ²" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "登録ã—ã¾ã™ã‹?" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "登録ã¯ç°¡å˜ã§å€‹äººæƒ…å ±ã¯å¿…è¦ã‚りã¾ã›ã‚“。" #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "匿åã§å‚加ã—ã¦ã‚‚後ã‹ã‚‰è¨­å®šã® \"åŒæœŸã¨ã‚½ãƒ¼ã‚·ãƒ£ãƒ«\" ã‹ã‚‰ç™»éŒ²ã§ãã¾ã™ã€‚" #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "匿åã§å‚加" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "ã“ã“ã§ç™»éŒ²" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠž" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "OK" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "終了シグナルをå—ã‘å–りã¾ã—ãŸã€‚終了ã—ã¾ã™..." #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "Variety ã¯ã™ã§ã«å®Ÿè¡Œã—ã¦ã„ã¾ã™ã€‚実行中ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«ã‚³ãƒžãƒ³ãƒ‰ã‚’é€ã‚Šã¾ã™ã€‚" #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "下" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "上" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "å·¦" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "å³" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "サムãƒã‚¤ãƒ«ã®ä½ç½®" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "ç”»åƒã®ã‚µã‚¤ã‚º" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "ç”»åƒã®ã‚るフォルダーを表示" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "é–‰ã˜ã‚‹" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "EXIF ã®è©•価をセットã§ãã¾ã›ã‚“ã§ã—ãŸ" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "評価ãªã—" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "æ‹’å¦" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "Variety 履歴" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Variety 最近ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Variety ç”»åƒ" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "Copyright (c) 2012, Peter Levi " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "Variety ã«ã¤ã„ã¦" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "å£ç´™ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã¨ç®¡ç†ãŒã§ãã‚‹å£ç´™è‡ªå‹•ãƒã‚§ãƒ³ã‚¸ãƒ£ãƒ¼" #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" "# Copyright (c) 2012, Peter Levi \n" "# ã“ã®ãƒ—ログラムã¯ãƒ•リーソフトウェアã§ã™: Free Software Foundation ã®\n" "# GNU General Public License version 3 ã«ã‚ˆã‚Šå†é…布や変更ãŒã§ãã¾ã™ã€‚\n" "# \n" "# ã“ã®ãƒ—ログラムãŒå½¹ã«ç«‹ã¤ã“ã¨ã‚’願ã£ã¦é…布ã—ã¾ã™ãŒã€\n" "# ã„ã‹ãªã‚‹ä¿è¨¼ã‚‚ã‚りã¾ã›ã‚“。\n" "# 詳ã—ã㯠GNU General Public License を確èªã—ã¦ãã ã•ã„。\n" "# \n" "# GNU General Public License ã¯ãƒ—ログラムã«åŒæ¢±ã•れã¦ã„ã‚‹ã¯ãšã§ã™ãŒã€\n" "# ç„¡ã„å ´åˆã¯ ã‚’ã”覧ãã ã•ã„。\n" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "Variety" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Variety å£ç´™ãƒã‚§ãƒ³ã‚¸ãƒ£ãƒ¼" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "次ã¸" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "å‰ã¸" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "ä¸€æ™‚åœæ­¢/å†é–‹" #: ../variety.desktop.in.h:6 msgid "History" msgstr "履歴" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "設定" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "Variety - Wallhaven.cc ã‚’ç”»åƒã‚½ãƒ¼ã‚¹ã«è¿½åŠ " #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" "Wallhaven.cc " "ã¯å¤šæ§˜ãªç”»åƒæ¤œç´¢ã‚ªãƒ—ションをæä¾›ã—ã¦ã„ã¾ã™ã€‚ç‰¹å®šã®æ¤œç´¢ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‹ã€Wallhaven.cc ã§è‰¯å¥½ãªæ¤œç´¢çµæžœã‚’得られãŸå®Œå…¨ãª Wallhaven ã® " "URL を以下ã«å…¥åŠ›ã—ã¦ãã ã•ã„。\n" "\n" "キーワードを指定ã—ãŸå ´åˆã¯ã€ã™ã¹ã¦ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã«ä¸€è‡´ã—㟠NSFW ã§ã¯ãªã„最も好ã¾ã—ã„ç”»åƒãŒä½¿ç”¨ã•れã¾ã™ã€‚\n" "\n" "Wallhaven ã® URL を指定ã—ãŸå ´åˆã¯ã€ä¸¦ã³é †ã®æŒ‡å®šã«æ³¨æ„ã—ã¦ãã ã•ã„。Variety ã¯å®šæœŸçš„ã«ç”»åƒã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’行ã„ã¾ã™ãŒã€ä½¿ç”¨ã™ã‚‹ã®ã¯ " "Wallhaven ã‹ã‚‰è¿”ã•ã‚ŒãŸæœ€åˆã®æ•°ç™¾ã®ç”»åƒã®ã¿ã§ã™ã€‚Random ã‚„ Date " "ã§ã¯ã€ã“ã®ç”»åƒã‚½ãƒ¼ã‚¹ã‚’ä½¿ã„æžœãŸã™ã®ã«é•·ã„時間ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚Favorites ã¯ã‚ˆã‚Šè‰¯ã„ç”»åƒã‚’æä¾›ã—ã€Relevance " "ã¯è‰²ã‚„フレーズã§ã®æ¤œç´¢æ™‚ã«è¿‘ä¼¼ã®ç”»åƒã‚’æä¾›ã—ã¾ã™ã€‚" #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "キーワードを入力ã¾ãŸã¯ URL を貼り付ã‘ã¦ãã ã•ã„: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "ã—ã°ã‚‰ããŠå¾…ã¡ä¸‹ã•ã„" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "ローカルã®ãƒ†ã‚­ã‚¹ãƒˆãƒ•ァイルã«ã‚ã‚‹å言を表示ã—ã¾ã™ã€‚\n" "次ã®ãƒ•ォルダーã«ãƒ†ã‚­ã‚¹ãƒˆãƒ•ァイルをé…ç½®ã—ã¾ã™: ~/.config/variety/pluginconfig/quotes/\n" "ファイルã®ãƒ•ォーマット:\n" "\n" "å言 -- 作者\n" ".\n" "次ã®å言 -- 別ã®ä½œè€…\n" ".\n" "etc...\n" "\n" "例: http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "Variety - Media RSS フィードを追加" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "Media RSS フィードをã“ã“ã«è²¼ã‚Šä»˜ã‘ã¦ãã ã•ã„。サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã®ã¯ Media RSS フィードã®ã¿ã§ã€RSS " "フィードã¯ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。Media RSS フィードã¯å®Ÿéš›ã®ç”»åƒã«ç›´æŽ¥ãƒªãƒ³ã‚¯ã—ã¦ã„ã‚‹ media:content " "ã‚¿ã‚°ã‚’å«ã¿ã¾ã™ã€‚次ã®ã‚ˆã†ãªã‚µã‚¤ãƒˆãŒ Media RSS フィードをæä¾›ã—ã¦ã„ã¾ã™: Picasaã€deviantARTã€SmugMugã€Flickrã€InterfaceLIFT。" #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "Media RSS ã® URL を貼り付ã‘ã¦ãã ã•ã„: " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "URL ã‚’ãƒã‚§ãƒƒã‚¯ä¸­" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "èªè¨¼ã«æˆåŠŸã—ã¾ã—ãŸ" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "公開中..." #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "èªè¨¼ã«å¤±æ•—ã—ã¾ã—ãŸ" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "ãŠæ°—ã«å…¥ã‚Šå‹•作メニューã®è¨­å®š" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "ç”»åƒã®å ´æ‰€ã‚ˆã£ã¦ã€ŒãŠæ°—ã«å…¥ã‚Šã«ã‚³ãƒ”ーã€ã€ŒãŠæ°—ã«å…¥ã‚Šã«ç§»å‹•ã€ã®ã©ã¡ã‚‰ã‚’メニューã«è¡¨ç¤ºã™ã‚‹ã‹é¸æŠžã—ã¦ãã ã•ã„:" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "一行ã«ä¸€ã¤ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’ : ã®å½¢å¼ã§è¨˜è¿°ã—ã¦ãã ã•ã„。\n" "Folder ã«ã¯ Downloadedã€Fetchedã€Othersã€ã¾ãŸã¯ãƒ•ォルダーパスを指定ã§ãã¾ã™ã€‚\n" "é †åºã¯é‡è¦ã§ã™ã€‚\n" "Variety ã¯ç”»åƒã‚’表示ã™ã‚‹ã¨ãƒªã‚¹ãƒˆã‚’上ã‹ã‚‰è©•価ã—ã€ã©ã®é …目をメニューã«è¡¨ç¤ºã™ã‚‹ã‹æ±ºå®šã—ã¾ã™ã€‚\n" "Others ã¯ã“ã®ãƒªã‚¹ãƒˆã®æœ€å¾Œã«è¨˜è¿°ã—ã¦ãã ã•ã„。\n" "\n" "例:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "VRTY.ORG çµ±åˆ" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "ã“ã®æ©Ÿèƒ½ã¯ VRTY.ORG çµ±åˆãŒå¿…è¦ã§ã™" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "VRTY.ORG çµ±åˆæœ‰åй" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "有効㪠Reddit ã® URL ã§ã¯ãªã„よã†ã§ã™" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "ãã“ã«ç”»åƒã‚’見ã¤ã‘られã¾ã›ã‚“ã§ã—ãŸã€‚" #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "QuotesDaddy ã®ä»Šæ—¥ã®ä¸€è¨€ã® RSS フィードをå–り込ã¿ã¾ã™ã€‚\n" "ã‚¿ã‚°ã‚„ä½œè€…ã®æŒ‡å®šã¯ã§ãã¾ã›ã‚“。" #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Variety - Flickr ã‚’ç”»åƒã®å ´æ‰€ã«è¿½åŠ " #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "指定ã—ãŸæ¡ä»¶ã«åˆè‡´ã—ãŸã™ã¹ã¦ã®å†™çœŸã‚’ Flickr " "ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—ã¾ã™ã€‚指定ã—ãªã„å ´åˆã¯ç©ºã«ã—ã¦ãã ã•ã„。" #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "ã‚¿ã‚°: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "ã‚¿ã‚°ã‚’ã™ã¹ã¦å«ã‚€å†™çœŸã€‚ã‚¿ã‚°ã¯ã‚³ãƒ³ãƒžã§åŒºåˆ‡ã£ã¦ãã ã•ã„。\n" "例: yellow,car" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "ユーザー: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "ユーザーã®å†™çœŸãŒã‚ã‚‹ URL を入れã¦ãã ã•ã„。\n" "例: http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "グループ: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "グループ URL を入れã¦ãã ã•ã„。\n" "例: http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "文字:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "写真ã®ã‚¿ã‚¤ãƒˆãƒ«ã€èª¬æ˜Žã€ã‚¿ã‚°ã‚’検索ã—ã¾ã™ã€‚検索ã‹ã‚‰é™¤å¤–ã™ã‚‹å ´åˆã¯ - を使用ã—ã¦ãã ã•ã„。\n" "例: apple -pie" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "ç§’" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "分" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "時間" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "æ—¥" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "Variety ã®è¨­å®š" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "一般" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "Variety を自動的ã«èµ·å‹•" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "å£ç´™ã‚’次ã®é–“éš”ã§æ›´æ–° " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "最短ã®é–“éš”ã¯5ç§’ã§ã™" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "起動時ã«å£ç´™ã‚’変更" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "有効" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "種類" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "場所" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "追加(_A)..." #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "ç”»åƒã‚’追加ã—ã¾ã™ (フォルダーã¾ãŸã¯ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã®ç”»åƒã‚½ãƒ¼ã‚¹)" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "編集(_E)..." #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "é¸æŠžã—ãŸã‚½ãƒ¼ã‚¹ã‚’編集ã—ã¾ã™" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "削除(_R)..." #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "é¸æŠžã—ãŸç”»åƒã‚½ãƒ¼ã‚¹ã‚’削除ã—ã¾ã™" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "使用(_U)" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "é¸æŠžã—ãŸã‚½ãƒ¼ã‚¹ã‚’有効ã«ã—ã¦ä»–を無効ã«ã—ã¾ã™" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "å£ç´™ã‚’次ã®é–“éš”ã§ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "最短ã®é–“éš”ã¯1分ã§ã™" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "ä¿å­˜å…ˆ " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "実際ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ãƒ•ォルダー " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "注æ„: 大事ãªãƒ•ァイルãŒå­˜åœ¨ã™ã‚‹å ´æ‰€ã‚’ダウンロードフォルダーã¨ã—ã¦ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã€ã“ã®ã‚ªãƒ—ションを使用ã—ãªã„ã§ãã ã•ã„。Variety " "ã¯ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ãƒ•ォルダー内ã«ã©ã®ã‚ˆã†ãªãƒ•ァイルãŒã‚ã‚‹ã‹ã‚’考慮ã›ãšã«ã€ä¸Šé™ã‚’ç¶­æŒã—ã¾ã™ã€‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "ダウンロードフォルダーã®ä¸Šé™ã‚’設定 " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "最å°ã‚µã‚¤ã‚ºã¯ 50MB ã§ã™" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "MB (最もå¤ã„ファイルã‹ã‚‰å‰Šé™¤ã—ã¾ã™)" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "ãŠæ°—ã«å…¥ã‚Šã®å£ç´™" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "ãŠæ°—ã«å…¥ã‚Šã®ã‚³ãƒ”ー先 " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "フィルター" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "表示ã•れãŸå£ç´™ã«å¯¾ã—ã¦ã“れらã®ãƒ•ィルターをランダムã«é©ç”¨ã—ã¾ã™ (素晴らã—ã„ ImageMagic ã«æ„Ÿè¬):" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "å言" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "å言をランダムã«è¡¨ç¤º" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "文字ã®è‰²: " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "文字ã®ãƒ•ォント: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "背景色: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "背景色ã®é€éŽåº¦: " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " 逿˜Ž" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "ä¸é€æ˜Ž" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "文字ã«å½±ã‚’ã¤ã‘ã‚‹" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "外観" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "表示エリアã®å¹…: " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "ç‹­ã„ " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "広ã„" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "æ°´å¹³ä½ç½®: " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "å·¦ " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "垂直ä½ç½®: " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "上 " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "表示場所" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "å言ã®ã‚½ãƒ¼ã‚¹: " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "ä»–ã®ãƒ—ラグイン" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "ã“れらã®ã‚¿ã‚°ã¨ä½œè€…を表示ã—ã¾ã™ã€‚空ã®å ´åˆã¯ãƒ©ãƒ³ãƒ€ãƒ ã«é¸ã³ã¾ã™ã€‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "例: funny, inspirational" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "例: Albert Einstein, Voltaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "作者: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "å言ã®ã‚½ãƒ¼ã‚¹ã¨ãƒ•ィルター" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "åè¨€ã®æ›´æ–°é–“éš” " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "最短ã®é–“éš”ã¯10ç§’ã§ã™" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "å®šæœŸçš„ã«æ›´æ–°" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "時計" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "素敵ãªå¤§ãã„デジタル時計ã§ç¾åœ¨ã®æ™‚åˆ»ã¨æ—¥ä»˜ã‚’デスクトップã«è¡¨ç¤º" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "時計ã®å¤–観を設定ã™ã‚‹ã«ã¯ã€Variety ã®è¨­å®šãƒ•ァイル (~/.config/variety/variety.conf) ã® clock_filter " "プロパティを編集ã—ã¾ã™ã€‚~/.config/variety/variety_latest_default.conf 内ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’å‚考ã«ã—ã¦ãã ã•ã„。" #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "時計ã®ãƒ•ォント: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "日付ã®ãƒ•ォント: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "動作ã—ãªã„å ´åˆã¯ã“ã¡ã‚‰ã‚’ã€æ™‚計ã®è¨­å®šã«é–¢ã—ã¦ã¯<" "a href=\"http://peterlevi.com/variety/2012/11/configuring-the-" "clock/\">ã“ã¡ã‚‰ã‚’ã”覧ãã ã•ã„。" #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "エフェクト" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "スライドショー用ã®ç”»åƒ" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "ãŠæ°—ã«å…¥ã‚Šã®ç”»åƒ" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "有効ãªå…¨ç”»åƒã‚½ãƒ¼ã‚¹ã®ç”»åƒ" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "ダウンロードフォルダー内ã®ã™ã¹ã¦ã®ç”»åƒ" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "カスタムフォルダー (サブフォルダー内ã®ç”»åƒã‚‚å«ã‚€) " #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "スライドショーã§ã®ç”»åƒã®é †åº " #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "ランダム" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "åå‰é † (A ã‹ã‚‰ Z)" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "åå‰é † (Z ã‹ã‚‰ A)" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "日付順 (å¤ã„æ–¹ã‹ã‚‰)" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "日付順 (æ–°ã—ã„æ–¹ã‹ã‚‰)" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "スクリーン" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "実行ã™ã‚‹ãƒ¢ãƒ‹ã‚¿ãƒ¼" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "スライドショーã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãƒ¢ãƒ¼ãƒ‰ " #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "フルスクリーン" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "デスクトップ (ä»–ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®èƒŒå¾Œ)" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "最大化ã•れãŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "通常ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "ダイナミクス" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "ç”»åƒã®å¤‰æ›´é–“éš” " #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr " ç§’" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã®å¤‰æ›´ã¯ã‚¹ãƒ©ã‚¤ãƒ‰ã‚·ãƒ§ãƒ¼ã®å†ã‚¹ã‚¿ãƒ¼ãƒˆæ™‚ã«æœ‰åйã«ãªã‚Šã¾ã™" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "スライドショーを今ã™ãé–‹å§‹" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "スライドショー" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "VRTY.ORG" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "VRTY.ORG ã¯ãƒ™ãƒ¼ã‚¿ç‰ˆã§ã‚りæˆç†Ÿã™ã‚‹ã«ã¯å°‘ã—æ™‚é–“ãŒã‹ã‹ã‚Šã¾ã™" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "VRTY.ORG ã«ç¹‹ãŒã‚‰ãªã„ãŸã‚ユーザーを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚後ã§å†åº¦ãƒˆãƒ©ã‚¤ã—ã¦ãã ã•ã„。" #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "登録ã™ã‚‹ã¨ã‚³ãƒ³ãƒ”ュータ間ã§ã®ãŠæ°—ã«å…¥ã‚Šã®åŒæœŸã‚„ソースã®åŒæœŸã€å€‹äººçš„ãªãŠã™ã™ã‚ãªã©ã‚¯ãƒ¼ãƒ«ãªæ©Ÿèƒ½ãŒä½¿ãˆã¾ã™ã€‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "åŒæœŸ" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "コンピューター間ã§ãŠæ°—ã«å…¥ã‚Šã‚’åŒæœŸ" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "VRTY.ORG を有効ã«ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ãŒå¿…è¦ã§ã™ã€‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" "別ã®ã‚³ãƒ³ãƒ”ュータã«ã‚ã‚‹ãŠæ°—ã«å…¥ã‚Šã®å£ç´™ã¯ã“ã®ã‚³ãƒ³ãƒ”ュータã«è‡ªå‹•çš„ã«ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã•れã¾ã™ã€‚åŒã˜ãƒ¦ãƒ¼ã‚¶ãƒ¼åã§ VRTY.ORG " "ã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚åŒæœŸã§ã¯ã©ã®ç”»åƒã‚‚消ã—ã¾ã›ã‚“。" #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "プライãƒã‚·ãƒ¼ãƒãƒªã‚·ãƒ¼" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "使用統計" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "匿åã§ä½¿ç”¨çµ±è¨ˆã‚’é€ä¿¡ã—ã¦Varietyã®æ”¹è‰¯ã«è²¢çŒ®ã™ã‚‹" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" "ã“れらã®çµ±è¨ˆã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®èˆˆå‘³ã‚’ç†è§£ã—Varietyを改良ã™ã‚‹åŠ©ã‘ã«ãªã‚Šã¾ã™ã€‚ã“れã«ã¯OSã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚„モニターã®è¨­å®šãªã©ã®ä¸€èˆ¬çš„ãªæƒ…報もå«ã¿ã¾ã™ã€‚集ã‚ãŸãƒ‡" "ータã¯èª°ã¨ã‚‚共有ã—ã¾ã›ã‚“。" #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "åŒæœŸã¨ã‚½ãƒ¼ã‚·ãƒ£ãƒ«" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "å–り込むフォルダー" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "下記æ“作ã§ã®å£ç´™ã®ä¿å­˜å…ˆ " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "ドラッグ&ドロップ" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "ランãƒãƒ£ãƒ¼ã«è¡¨ç¤ºã•れ㟠Variety ã®ã‚¢ã‚¤ã‚³ãƒ³ãŒãƒ‰ãƒ­ãƒƒãƒ—対象ã§ã™ã€‚ä»»æ„ã®ç”»åƒ URL " "ã¾ãŸã¯ãƒ•ァイルをドロップã™ã‚‹ã¨ã€ä¸Šã§è¨­å®šã—ãŸãƒ•ォルダーã«ä¿å­˜ã•れã¾ã™ã€‚「次ã¸ã€ã‚’押ã™ã“ã¨ã§ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã«è¡¨ç¤ºã§ãã¾ã™ã€‚ランãƒãƒ£ãƒ¼ã«ã‚¢ã‚¤ã‚³ãƒ³ã‚’表示ã™ã‚‹ã«ã¯ã€Œ" "情報ã€ã¾ãŸã¯ã€Œè¨­å®šã€ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‹ãå¿…è¦ãŒã‚りã¾ã™ã€‚アイコンを常ã«è¡¨ç¤ºã—ãŸã„å ´åˆã¯ãƒ©ãƒ³ãƒãƒ£ãƒ¼ã«ç™»éŒ²ã—ã¦ãã ã•ã„。" #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "クリップボード監視" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "クリップボードを監視ã—ã¦ç”»åƒã® URL ã‚’å–り込む" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "å–り込む URL を指定:" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "手動ダウンロード" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "使用ã™ã‚‹ç”»åƒ:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "横å‘ãã®ç”»åƒ" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "最低ã§ã‚‚ç”»é¢è§£åƒåº¦ã® " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "% 以上" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "色" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "ç”»åƒã®æ˜Žã‚‹ã•:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "æš—ã„" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "明るã„" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "ã“ã®è‰²ã‚’å«ã‚€: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(åˆæœŸèª¿æŸ»ã‚’行ã£ãŸå¾Œã«æœ‰åйã«ãªã‚Šã¾ã™)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "評価" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "最低ã§ã‚‚ EXIF ã®è©•価㌠" #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "ç”»åƒã®æŒ‡å®š" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "インジケーターアイコン" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "インジケーターアイコン:" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "明るã„アイコン" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "æš—ã„アイコン" #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "ç¾åœ¨ã®å£ç´™" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "カスタム画åƒ..." #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "ãªã—" #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "ã‚¢ã‚¤ã‚³ãƒ³ã‚’é¸æŠž" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "アイコンãŒéžè¡¨ç¤ºã®å ´åˆã¯ã€ã‚³ãƒžãƒ³ãƒ‰ãƒ©ã‚¤ãƒ³ã‹ãƒ©ãƒ³ãƒãƒ£ãƒ¼ã®ã‚¯ã‚¤ãƒƒã‚¯ãƒªã‚¹ãƒˆã§ Variety ã‚’æ“作ã§ãã¾ã™ã€‚\"variety --help\" " "を実行ã™ã‚‹ã¨ã€åˆ©ç”¨å¯èƒ½ãªã™ã¹ã¦ã®ã‚³ãƒžãƒ³ãƒ‰ãŒè¡¨ç¤ºã•れã¾ã™ã€‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "ãŠæ°—ã«å…¥ã‚Šã®å‹•作" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "メインメニューã«è¡¨ç¤ºã™ã‚‹ãŠæ°—ã«å…¥ã‚Šã®å‹•作:" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "ãŠæ°—ã«å…¥ã‚Šã«ã‚³ãƒ”ー" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "コピーã¨ç§»å‹•" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "フォルダーã«ä¾å­˜..." #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "Facebook ã«æŠ•ç¨¿ã—ã¦å…¬é–‹ã™ã‚‹å‰ã«ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã™ã‚‹ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã‚’表示" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "ログイン画é¢ã®ã‚µãƒãƒ¼ãƒˆ" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "ログイン画é¢ã« Variety ã®å£ç´™ã‚’é©ç”¨" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "プライãƒã‚·ãƒ¼ä¸Šã®è­¦å‘Š: å£ç´™ã‚’表示ã™ã‚‹ã«ã¯ LightDM " "ãŒèª­ã¿å–れるパーミッションã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ã“ã®ã‚ªãƒ—ションを有効ã«ã™ã‚‹ã¨ã€Variety " "ã¯å£ç´™ã‚’公開フォルダーã«ã‚³ãƒ”ーã—ã€ãƒ‘ーミッションを誰ã§ã‚‚読ã¿å–れるよã†ã«å¤‰æ›´ã—ã¾ã™ã€‚デフォルトã§ã¯ã€ãƒ›ãƒ¼ãƒ ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ãŒæš—å·åŒ–ã•れã¦ã„ãªã„å ´åˆã¯ " "~/ピクãƒãƒ£ 㨠/usr/share/backgrounds ãŒå¯¾è±¡ã§ã™ã€‚マルãƒãƒ¦ãƒ¼ã‚¶ãƒ¼ç’°å¢ƒã§ä½¿ç”¨ã™ã‚‹å ´åˆã¯ã”注æ„ãã ã•ã„。" #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "å£ç´™ã®ç”»åƒãƒ•ァイルをã“ã®ãƒ•ォルダーã«ã‚³ãƒ”ー: " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«æˆ»ã™" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "ã¾ã å‹•作ã—ã¾ã›ã‚“ã‹?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "ãƒ›ãƒ¼ãƒ ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ãŒæš—å·åŒ–ã•れã¦ã„ã‚‹ã¨æ€ã‚れるãŸã‚ã€ãã®ä¸­ã«ã‚るフォルダーã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。" #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "ã“ã®ãƒ•ォルダーã¸ã®æ›¸ãè¾¼ã¿æ¨©é™ãŒã‚りã¾ã›ã‚“。" #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "ã“ã®ãƒ•ォルダーã‹ã‚‰ LightDM ãŒãƒ•ァイルを読ã¿å–る権é™ãŒã‚りã¾ã›ã‚“。" #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "Variety ã«ç®¡ç†è€…権é™ã‚’付与ã™ã‚‹ã¨ã€Variety ãŒãƒ‘ーミッションを調整ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "カスタマイズ" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "ヒント" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "更新履歴" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "ウェブサイト" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "ãƒã‚°å ±å‘Šã¨è¦æœ›" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "作者ã«é€£çµ¡" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "寄付" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "PayPal ã§å¯„付" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "ç§ã¯ Variety ã®é–‹ç™ºã‚’余暇ã«è¡Œã£ã¦ã„ã¾ã™ã€‚通常ã¯å­ä¾›é”ãŒå¯ãŸå¾Œã®æ·±å¤œã§ã™ã€‚é¡ã‚’å•ã‚ãšå¯„付を頂ã‘ã‚‹ã¨å¬‰ã—ãæ€ã„ã¾ã™ã€‚寄付㯠Variety " "ãŒã‚ãªãŸã®å½¹ã«ç«‹ã£ãŸäº‹ã‚’æ„味ã—ã€æ´»å‹•ã‚’ç¶šã‘るモãƒãƒ™ãƒ¼ã‚·ãƒ§ãƒ³ã«ãªã‚Šã¾ã™ã€‚\n" "\n" "Thank you,\n" "Peter Levi" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" "ビットコインやãã®ä»–ã®æ”¯æ‰•ã„æ–¹æ³•ã«ã¤ã„ã¦ã¯ Variety " "ã®ã‚¦ã‚§ãƒ–サイト ã‚’ã”覧ãã ã•ã„。" #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "å–得中" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "ç”»åƒãŒå°ã•ã™ãŽã‚‹ãŸã‚無視ã—ã¾ã™" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "残念ã§ã™ãŒ %s エラーã§ã™..." #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "ã“ã®ãƒªãƒ³ã‚¯ã¯ã€ã‚‚ã¯ã‚„無効ã§ã™" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "ç”»åƒã®å–り込ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "詳ã—ã„æƒ…報を得るã«ã¯ç«¯æœ«ã§ -v オプションをã¤ã‘㦠Variety ã‚’èµ·å‹•ã—ã¦å†è©¦è¡Œã—ã¦ãã ã•ã„" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "設定ファイル smart_user.json ãŒå£Šã‚Œã¦ã„ã¾ã™ã€‚ VRTY.ORG ã«å†åº¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。" #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "" #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "\"%dç”»åƒã‚’å–得中" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "1ç”»åƒã‚’å–得中" #: ../variety/Smart.py:684 msgid "Finished" msgstr "完了ã—ã¾ã—ãŸ" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "%s ã§ãƒ­ã‚°ã‚¤ãƒ³" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "VRTY.ORG ã« %s ã§ãƒ­ã‚°ã‚¤ãƒ³ã—ã¾ã™ã‹?" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "å言プラグインãŒã‚りã¾ã›ã‚“" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "å言プラグインãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•れã¦ã„ã¾ã›ã‚“" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "é©åˆ‡ãªå言プラグインãŒã‚りã¾ã›ã‚“" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "キーワードã¨ä½œè€…ã§æ¤œç´¢ã§ãã‚‹å言プラグインãŒã‚りã¾ã›ã‚“" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "å言をå–り込ã‚ã¾ã›ã‚“" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "å–り込ã¿ã‚’ç¶šã‘ã¾ã™ãŒãŠãらãå言サービスãŒãƒ€ã‚¦ãƒ³ã—ã¦ã„ã¾ã™" #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "å言ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "見ã¤ã‘ã«ãã„æŒ‡å®šã«ãªã£ã¦ã„ã¾ã›ã‚“ã‹?" variety-0.8.3/po/ko.po000066400000000000000000002761431362063646600146250ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2015-05-15 13:34+0000\n" "Last-Translator: M.W.Park \n" "Language-Team: Korean \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" "Language: Occitan (post 1500); Provençal\n" "X-Loco-Source-Locale: ms_MY\n" "X-Loco-Parser: loco_parse_po\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Loco-Target-Locale: oc_ZZ\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "Goodreads.com으로부터 ëª…ì–¸ì„ ë¶ˆëŸ¬ì˜µë‹ˆë‹¤" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "ì›ë³¸ 유지하기" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "í‘ë°±" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "강한 í림" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "여린 í림" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "유화" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "연필그림" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "ì ë¬˜í™”" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "픽셀화" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "ì¦ê²¨ì°¾ê¸° í´ë”" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "불러오기 í´ë”" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "버ë¼ì´ì–´í‹°ê°€ 추천하는 요소입니다. ë‹¹ì‹ ì´ ì´ë¯¸ì§€ë¥¼ 선호함 í˜¹ì€ íœ´ì§€í†µìœ¼ë¡œ ì„ íƒí•˜ëŠ” ê²ƒì— ë”°ë¼ ë‹¹ì‹ ì˜ ìž…ë§›ëŒ€ë¡œ ì ì‘합니다." #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "Desktoppr.coì—서 무작위 ë°°ê²½í™”ë©´ì„ ë¶ˆëŸ¬ì˜µë‹ˆë‹¤" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "ë‚˜ì‚¬ì˜ ì˜¤ëŠ˜ì˜ ì²œì²´ 사진" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "ë‹¹ì‹ ì€ ì§€í‘œ ì•„ì´ì½˜ 위ì—서 마우스 íœ ì„ ìŠ¤í¬ë¡¤ 하시는 걸로 ë°°ê²½í™”ë©´ì„ ì•žë’¤ë¡œ 바꾸실 수 있습니다." #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" "만약 ë‹¹ì‹ ì´ ë§¤ë²ˆ ë°°ê²½í™”ë©´ì´ ë°”ë€Œë„ë¡ í•˜ëŠ” ì‚¬ìš©ìž ì„¤ì • 명령어를 사용하고 싶거나 다른 ë°ìФí¬í†± í™˜ê²½ì„ ì‚¬ìš©í•˜ê³  싶다면, " "~/.config/variety/scriptsì—서 스í¬ë¦½íŠ¸ë¥¼ 편집하십시오. 여기ì—는 여러 ë°ìФí¬í†± í™˜ê²½ì„ ìœ„í•œ 예시가 있습니다." #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" "버ë¼ì´ì–´í‹°ëŠ” 명령 줄 ì¸í„°íŽ˜ì´ìŠ¤ë¡œ 제어할 수 있으며 ë‹¹ì‹ ì€ ì´ë¥¼ ì´ìš©í•˜ì—¬ 주로 가장 ë§Žì´ ì‚¬ìš©í•  ëª…ë ¹ì„ í‚¤ë³´ë“œ 단축키로 지정할 수 " "있습니다. \"variety --help\"를 실행해서 모든 유효한 명령어를 보십시오." #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" "ë‹¹ì‹ ì€ ì´ë¯¸ì§€ ë§í¬ í˜¹ì€ íŒŒì¼ì„ 런처 ì•„ì´ì½˜ì— 내려놓는 걸로 내려받기 ë° ë°°ê²½í™”ë©´ìœ¼ë¡œ 사용하실 수 있습니다. 특정 사ì´íŠ¸ë¡œë¶€í„° ë” ë¹ ë¥´ê²Œ " "내려받으시려면, í´ë¦½ 보드 관리를 사용할 수 있습니다(\"ìˆ˜ë™ ë‚´ë ¤ë°›ê¸°\" íƒ­ì„ ë³´ì‹­ì‹œì˜¤)." #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "" "강한 í린 필터를 ì ìš©í•˜ëŠ” ê²ƒì€ ì¶”ìƒì ì¸ 분위기와 튀지 않게 만들면서ë„, ìš°ë¶„íˆ¬ì— ìžˆëŠ” 기본 배경화면과 ê°™ì€ í™”ë ¤í•œ ë°°ê²½í™”ë©´ì„ ì œê³µí•´ì£¼ëŠ” " "훌륭한 방법입니다." #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" "ë‹¹ì‹ ë§Œì˜ ì‚¬ìš©ìž ì„¤ì • 필터를 추가하는 ê±´ 쉬운 ì¼ìž…니다: ~/.config/variety/variety.conf를 편집기로 여셔서 ê¸°ì¡´ì— " "있는 필터를 ì˜ˆì‹œë¡œì¨ ì‚¬ìš©í•˜ì‹­ì‹œì˜¤. 모든 필터는 ì´ë¯¸ì§€ë§¤ì§ì˜ 변환 명령어로 넘겨져야 í•  한 ì¤„ì˜ ì„ íƒ ì‚¬í•­ì¼ ë¿ìž…니다." #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" "ì´ë¯¸ì§€ 소스를 ì„ íƒí•  때, ì´ê²ƒì˜ ì´ë¯¸ì§€ëŠ” í™”ë©´ì˜ ë°‘ì—서 창으로 표시ë©ë‹ˆë‹¤. ì—¬ê¸°ì— ìžˆëŠ” ì´ë¯¸ì§€ë¥¼ 누르셔서 배경화면으로 설정하십시오. " "오른쪽 마우스 버튼으로 누르셔서 ì°½ì„ ë‹«ìœ¼ì‹œê±°ë‚˜, ì´ê²ƒì˜ ì™¸í˜•ì„ ìˆ˜ì • í˜¹ì€ íŒŒì¼ ëª…ë ¹ì„ ë‚´ë¦¬ì‹¤ 수 있습니다. ë‹¹ì‹ ì€ ì—¬ëŸ¬ ì´ë¯¸ì§€ 소스를 " "모든 ì´ë¯¸ì§€ 소스를 \"í•©ì³ì§„\" 섬네ì¼ë¡œ 보기로 설정할 수 있습니다. ì´ ì„¬ë„¤ì¼ë¡œ 보기는 무작위로 ì„ íƒëœ 백여 ê°œì˜ ì´ë¯¸ì§€ ì œí•œì„ " "가지고 있으므로 유ì˜í•˜ì‹­ì‹œì˜¤." #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" "바탕화면 ì•Œë¦¼ì„ ì‚¬ìš©í•˜ì‹œë ¤ë©´ ë°°ê²½í™”ë©´ì´ ë°”ë€” 때, ~/.config/variety/scripts/set_wallpaperì˜ ë°‘ì— ìžˆëŠ” ë‘ " "ì¤„ì„ ì œê±°í•˜ì‹­ì‹œì˜¤." #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" "버ë¼ì´ì–´í‹°ì˜ 지표 ì•„ì´ì½˜ì€ 다른 테마로 꾸미실 수 있습니다 - 만약 ë‹¹ì‹ ì´ \"ë°ìŒ\" ì•„ì´ì½˜ ì„ íƒ ì‚¬í•­ì„ ì„ íƒí•˜ì…¨ë‹¤ë©´, 버ë¼ì´ì–´í‹°ëŠ” 맨 " "처ìŒìœ¼ë¡œ 현재 GTK 테마가 \"버ë¼ì´ì–´í‹°-지표\"ë¼ëŠ” ì´ë¦„ì˜ ì•„ì´ì½˜ì„ 가졌는지를 확ì¸í•˜ê³  기본으로 있는 ë°ìŒ ì•„ì´ì½˜ ëŒ€ì‹ ì— ì´ ì•„ì´ì½˜ì„ " "사용할 것입니다." #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" "ë‹¹ì‹ ì´ ëª…ì–¸ì„ ì¦ê²¨ì°¾ê¸°ì— ì €ìž¥í•¨ì„ ì„ íƒí•˜ì‹¤ 때, ì´ë“¤ì€ 기본으로 ~/.config/variety/favorite_quotes.txtì— " "저장ë©ë‹ˆë‹¤. ì´ íŒŒì¼ì€ 버ë¼ì´ì–´í‹°ì˜ 로컬 íŒŒì¼ ëª…ì–¸ 소스와 í˜¸í™˜ì´ ë©ë‹ˆë‹¤. 만약 ë‹¹ì‹ ì´ ì´ê²ƒì„ 사용하고 싶다면 - ì´ê²ƒì„ " "~/.config/variety/pluginconfig/quotes/ì— ë³µì‚¬í•˜ì‹œê³  로컬 íŒŒì¼ ëª…ì–¸ 소스를 사용하십시오. ì´ íŒŒì¼ì€ " "마찬가지로 유닉스 í¬ì²œ 프로그램과 í˜¸í™˜ì´ ë©ë‹ˆë‹¤." #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "VRTY.ORGì— ë¡œê·¸ì¸í•˜ê¸°" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "ì‚¬ìš©ìž ì´ë¦„: " #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "암호: " #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "ê³„ì •ì´ ì—†ìœ¼ì‹­ë‹ˆê¹Œ? 여기서 íšŒì› ê°€ìž…ì„ í•˜ì‹­ì‹œì˜¤" #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "암호를 잊으셨습니까?" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" "비법: ë˜í•œ, ë‹¹ì‹ ì€ ë¸Œë¼ìš°ì €ì—서 VRTY.ORG로 로그ì¸ì„ 하시고 ë‹¹ì‹ ì˜ " "프로필ì—서 \"버ë¼ì´ì–´í‹° 로그ì¸ì´ ìž‘ë™ë˜ë„ë¡ í•©ë‹ˆë‹¤\" ë§í¬ë¥¼ 누르실 수 있습니다." #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "로그ì¸" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "ì´ë¯¸ì§€" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "í´ë”" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "플리커" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Wallhaven.cc" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "레딧" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "미디어 RSS" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "파ì¼ë“¤ì„ 유지한 채, 소스를 삭제합니다" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "파ì¼ë“¤ì„ 유지한 채, ì†ŒìŠ¤ë“¤ì„ ì‚­ì œí•©ë‹ˆë‹¤" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "ë‚´ë ¤ë°›ì€ íŒŒì¼ë“¤ì„ 삭제하고 소스를 제거합니다" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "ë‚´ë ¤ë°›ì€ íŒŒì¼ë“¤ì„ 삭제하고 ì†ŒìŠ¤ë“¤ì„ ì œê±°í•©ë‹ˆë‹¤" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "월드 ì„ ë¼ì´íЏ ë§µì„ ì‚¬ìš©í–ˆìŠµë‹ˆë‹¤" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "월드 ì„ ë¼ì´íЏ ë§µì„ ì‚¬ìš©í•˜ì‹œë ¤ë©´ 내려받기 ë° 30ë¶„ ì´ë‚´ì˜ 배경화면 변경 ì„¤ì •ì´ í•„ìš”í•©ë‹ˆë‹¤. ì„¤ì •ì€ ìžë™ìœ¼ë¡œ 변경ë˜ì—ˆìŠµë‹ˆë‹¤." #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "ì´ë¯¸ì§€ë¥¼ 추가합니다" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "취소" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "추가하기" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "í´ë”를 추가합니다 - 재귀 ê²€ìƒ‰ì´ ë˜ëŠ” 루트 í´ë”, 하위 í´ë”ë§Œ 추가합니다" #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "편집하기..." #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "ì´ë¯¸ì§€ë¥¼ 봅니다" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "í´ë”를 엽니다" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "권장 ì´ë¯¸ì§€ 소스 사용 í•´ì œ" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "쓰기 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "ì œí•œì„ í•´ì œí–ˆìŠµë‹ˆë‹¤" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "ë°ì´í„° ì†ì‹¤ì„ 방지하기 위해 내려받기 í´ë”ì˜ ìš©ëŸ‰ ì œí•œì„ ìžë™ìœ¼ë¡œ 해제합니다" #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "실제 내려받기 í´ë”: %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "ê¶Œí•œì„ ì¡°ì •í•  수 없습니다" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "ì´ ëª…ë ¹ì–´ë¥¼ ì§ì ‘ 실행해보십시오:\n" "sudo chmod %s \"%s\"" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "로그ì¸ë˜ì—ˆìŠµë‹ˆë‹¤: " #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "ìµëª…" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "ë¡œê·¸ì¸ í˜¹ì€ íšŒì› ê°€ìž…ì„ í•©ë‹ˆë‹¤" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "사용ìžë¥¼ 전환합니다" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "버ë¼ì´ì–´í‹°ì— 오신 걸 환ì˜í•©ë‹ˆë‹¤!" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "계ì†" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" "버ë¼ì´ì–´í‹°ëŠ” ìžë™ 배경화면 바꾸기 프로그램입니다. ì´ í”„ë¡œê·¸ëž¨ì€ ë‹¹ì‹ ì˜ ë°ìФí¬í†± ë°°ê²½í™”ë©´ì„ ë¡œì»¬ ì´ë¯¸ì§€ í˜¹ì€ ì—¬ëŸ¬ 온ë¼ì¸ 소스로부터 " "ë‚´ë ¤ë°›ì€ ì´ë¯¸ì§€ë¥¼ 사용해서 규칙ì ìœ¼ë¡œ 회전하ë„ë¡ í•©ë‹ˆë‹¤. 버리아어티는 배경화면ì—서 조용히 실행ë˜ë©° - 제어하시려면, ë‹¹ì‹ ì˜ ì‹œìŠ¤í…œ 알림 " "ìƒìžì— 있는 ì•„ì´ì½˜ì„ 누르십시오:" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" "버ë¼ì´ì–´í‹°ëŠ” 오픈-소스 소프트웨어ì´ìž, ë¶ˆê°€ë¦¬ì•„ì˜ ì†Œí”„íŠ¸ì›¨ì–´ 개발ìžì¸, 피터 ë ˆë¹„ì— ì˜í•´ 개발ë˜ì—ˆìŠµë‹ˆë‹¤. 만약 ë‹¹ì‹ ì´ ì´ ì†Œí”„íŠ¸ì›¨ì–´ë¥¼ " "좋아하신다면, 기부를 하십시오." #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "지금부터 ë‹¹ì‹ ì€ ì‹œê°„ì„ ë‘셔서 ë‹¤ìŒ í™”ë©´ì— ìžˆëŠ” ë‹¹ì‹ ë§Œì˜ í™˜ê²½ ì„¤ì •ì„ ì„¤ì •í•˜ì‹­ì‹œì˜¤." #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "KDE 사용ìžë“¤ì—게 - 다ìŒì— 나오는 ë¬¸ìž¥ì€ ì¤‘ìš”í•œ 요소ì´ë‹ˆ, ì½ìœ¼ì‹­ì‹œì˜¤:" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" "ë‹¹ì‹ ì€ KDE를 실행하고 계신듯합니다. KDE 4ì—서는 프로그램 안으로부터 ë°°ê²½í™”ë©´ì„ ì„¤ì •í•˜ëŠ” ê²ƒì´ ë¶ˆê°€ëŠ¥í•©ë‹ˆë‹¤ - ì´ë¥¼ 위한 APIê°€ " "없습니다. 버ë¼ì´ì–´í‹°ê°€ ìž‘ë™ë˜ê¸° 위해서는, ì—¬ê¸°ì— ë“¤ì–´ê°€ì…”ì„œ " "ì§€ì‹œë¬¸ì„ ì½ê³  따르십시오." #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "ì•—, 서버가 오류를 반환했습니다(%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "ì„œë²„ì— ì—°ê²°í•  수 없습니다" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "다ìŒ(_N)" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "ì´ì „(_P)" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "현재 ë°ìФí¬í†± 배경화면" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "ì›ë³¸ì„ 봅니다" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "ì¦ê²¨ì°¾ê¸°ì— 복사하기(_F)" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "ì¦ê²¨ì°¾ê¸°ë¡œ ì´ë™í•©ë‹ˆë‹¤" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "íœ´ì§€í†µì— ì‚­ì œí•˜ê¸°(_T)" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "다ìŒ(_N), 사용 기ë¡ì„ 앞으로 나아가는 걸 넘ê¹ë‹ˆë‹¤" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "비법: ì•„ì´ì½˜ ìœ„ì— ë§ˆìš°ìŠ¤ íœ ì„ ìŠ¤í¬ë¡¤ 하셔서\n" "앞뒤로 넘기십시오" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "ì´ë¯¸ì§€ ë³€ê²½ì„ ì¤‘ì§€í•©ë‹ˆë‹¤." #: ../variety/indicator.py:129 msgid "_Image" msgstr "ì´ë¯¸ì§€(_I)" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "ì´ê²ƒì€ 어디서 왔습니까?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "효과 ì—†ì´ ë´…ë‹ˆë‹¤" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "구글 ì´ë¯¸ì§€ 검색" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "페ì´ìФë¶ìœ¼ë¡œ 공유합니다" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "EXIF í‰ì  정하기" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "ì¦ê²¨ì°¾ê¸°ì— 저장하기" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "ì¦ê²¨ì°¾ê¸° 보기..." #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "í´ë¦½ë³´ë“œì— 복사하기" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "구글 명언" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "구글 ì €ìž" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "환경 설정..." #: ../variety/indicator.py:252 msgid "Turn off" msgstr "ë•니다" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "명언(_Q)" #: ../variety/indicator.py:265 msgid "_History" msgstr "사용 기ë¡(_H)" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "배경화면 ì„ íƒê¸°(_W)" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "최근 내려받기 기ë¡(_D)" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "" #: ../variety/indicator.py:302 msgid "About" msgstr "설명" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "기부하기" #: ../variety/indicator.py:310 msgid "Quit" msgstr "ë내기" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "ì´ëŠ” 유효한 미디어 RSS 피드 URLì´ ì•„ë‹ˆê±°ë‚˜ ë‚´ìš©ì´ ì—†ëŠ”ë“¯í•©ë‹ˆë‹¤." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "버ë¼ì´ì–´í‹° - VRTY.ORG" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "고맙지만, 사양합니다" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" "VRTY.ORG를 소개합니다! 참여하고 싶습니까?" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" "VRTY.ORG는 ê°™ì€ ìž…ë§›ì„ ê°€ì§„ 버ë¼ì´ì–´í‹° 사용ìžì™€ ì—°ê²°ì„ í•´ì£¼ê³  ë‹¹ì‹ ì˜ " "ë°°ê²½í™”ë©´ì„ ì•„ì£¼-편리하게 바꾸는 ë°©ë²•ì„ ì œê³µí•˜ë©°, 버ë¼ì´ì–´í‹°ì— 새로운 ì´ë¯¸ì§€ 소스를 찾으시거나 추가하실 수 있고, 다른 사용ìžì˜ " "ì¦ê²¨ì°¾ê¸°ë¥¼ 따르실 수 있습니다." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" "참여하는 ê±´ 몹시 어렵지 않습니다 - 버ë¼ì´ì–´í‹°ê°€ ë‹¹ì‹ ì´ ì„ í˜¸ í˜¹ì€ ë¹„ì„ í˜¸ ì´ë¯¸ì§€ë¥¼ 내려받는 것으로 ë°”íƒ•ì„ ë‘므로, ë‹¹ì‹ ì˜ í”„ë¡œí•„ì€ " "ìžë™ìœ¼ë¡œ ìƒì„±ë  것입니다. ë‹¹ì‹ ì´ ì´ í”„ë¡œí•„ì„ ëª¨ë‘ì—게 공개해서 참여함으로 설정하지 ì•Šì€ ì´ìƒ, ë‹¹ì‹ ì˜ í”„ë¡œí•„ì€ ì œì‚¼ìžì™€ 공유ë˜ì§€ " "않습니다. ì—¬ê¸°ì— ë“¤ì–´ê°€ì…”ì„œ ì´ ì„œë¹„ìŠ¤ì— ê´€í•œ ë” " "ìžì„¸í•œ 사항과 ê°œì¸ ì •ë³´ 보호 ì •ì±…ì„ ì½ìœ¼ì‹­ì‹œì˜¤." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" "컴퓨터들 사ì´ì—서 ì¦ê²¨ì°¾ê¸°ë¥¼ ë™ê¸°í™”합니다와 ê°™ì€ ë²„ë¼ì´ì–´í‹°ì˜ 몇몇 ê¸°ëŠ¥ì€ ì°¸ì—¬ê°€ " "요구ë©ë‹ˆë‹¤." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "VRTY.ORGì— ì°¸ì—¬í•©ë‹ˆë‹¤" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "버ë¼ì´ì–´í‹° - 파노ë¼ë¯¸ì˜¤ ì´ë¯¸ì§€ 소스를 추가합니다" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "파노ë¼ë¯¸ì˜¤" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "ë‹¹ì‹ ì´ ê´€ì‹¬ 있는 ë¶€ë¶„ì„ í™•ëŒ€í•˜ì‹­ì‹œì˜¤." #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "버ë¼ì´ì–´í‹° - 페ì´ìФë¶ì— 발표합니다" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "페ì´ìФë¶ì— 현재 ë°°ê²½í™”ë©´ì˜ ë§í¬ë¥¼ 발표합니다. ì´ ë¬¸ìžë¥¼ ë§í¬ì™€ 함께 발표합니다(í˜¹ì€ ê³µëž€ìœ¼ë¡œ ë‚¨ê¸°ì…”ë„ ë©ë‹ˆë‹¤):" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "í˜„ìž¬ì˜ ëª…ì–¸ì„ ì‚¬ìš©í•©ë‹ˆë‹¤" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "다시는 묻지 않습니다, 문ìžë¥¼ í•­ìƒ ìœ„ì— ë‘¬ì„œ 사용합니다" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "ì´ë¯¸ì§€ë¥¼ ì°¾ì„ ìˆ˜ 없습니다" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "ì´ë¯¸ ì¦ê²¨ì°¾ê¸°ì— 있습니다" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "ì¦ê²¨ì°¾ê¸°ë¡œ ì´ë™í•©ë‹ˆë‹¤(_F)" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "불러왔습니다: ì›ë³¸ì„ 봅니다" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "%sì—서 봅니다" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "알 수 ì—†ìŒ" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "ì €ìž: %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "ì •ê¸°ì  ë³€ê²½ì„ ìž¬ê°œí•©ë‹ˆë‹¤" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "필터를 매우 까다롭게 설정하시겠습니까?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "버ë¼ì´ì–´í‹°ëŠ” ë‹¹ì‹ ì˜ í•„í„° 범위와 관련 있는 매우 ì ì€ ìˆ˜ì˜ ì´ë¯¸ì§€ë¥¼ 찾는 중입니다" #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "ë” ë§Žì€ ì´ë¯¸ì§€ 소스를 추가하시거나 몇몇 내려받기를 기다려주십시오" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "ë” ë§Žì€ ì´ë¯¸ì§€ 소스를 추가하십시오" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "ë”는 ë°°ê²½í™”ë©´ì€ ì—†ìŠµë‹ˆë‹¤" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "현재 ë°°ê²½í™”ë©´ì€ ì´ë¯¸ì§€ ì†ŒìŠ¤ì— ì—†ìŠµë‹ˆë‹¤" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "ë‹¤ìŒ %s. 로 ì´ë™í•  수 없습니다 ì´ íŒŒì¼ì„ 옮길 ê¶Œí•œì´ ì—†ëŠ” 것 같습니다." #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "ë‹¤ìŒ %s. 로 복사할 수 없습니다. ì´ íŒŒì¼ì„ 복사할 ê¶Œí•œì´ ì—†ëŠ” 것 같습니다." #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "삭제할 수 없습니다" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "íœ´ì§€í†µì— %s를 버릴 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤." #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "ìµëª…ì˜ ì‚¬ìš© 통계" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" "버ë¼ì´ì–´í‹°ëŠ” ìµëª…ì˜ ì‚¬ìš© 통계를 수집합니다. \n" "ì´ëŠ” 버ë¼ì´ì–´í‹°ë¥¼ ë” ë‚˜ì€ í”„ë¡œê·¸ëž¨ìœ¼ë¡œ 만들어주게 하며 아무ì—ê²Œë„ ê³µìœ ë˜ì§€ 않습니다. \n" "\n" "ë” ìžì„¸í•œ ì‚¬í•­ì„ ì½ìœ¼ì‹œê±°ë‚˜ ì´ë¥¼ 안 ë³´ì´ê²Œ 설정하시려면, \"ë™ê¸°í™”와 소셜 네트워í¬\"로 가십시오" #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "설정 파ì¼ê³¼ 함께 편집기를 ì—´ 것ì´ê³  ë‹¹ì‹ ì´ íŽ¸ì§‘ê¸°ë¥¼ 저장 ë° ë‹«ê³  나서 변경 ì‚¬í•­ì„ ì ìš©í•  것입니다." #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [ì„ íƒ ì‚¬í•­] [íŒŒì¼ í˜¹ì€ URL]\n" "\n" "로컬 파ì¼ì„ ë„˜ê¹€ì€ ì´ë¥¼ ë²„ë¦¬ì•„ì–´í‹°ì˜ ëŒ€ê¸°ì—´ì— ì¶”ê°€í•  것입니다.\n" "\n" "ì›ê²© URLì„ ë„˜ê¹€ì€ ë²„ë¼ì´ì–´í‹°ê°€ ì´ë¥¼ 불러온 í´ë”ì— ë¶ˆëŸ¬ì˜¬ 것ì´ë©° ëŒ€ê¸°ì—´ì— ìœ„ì¹˜í•˜ë„ë¡ í•  것입니다.\n" "\n" "\n" "특정 ë°°ê²½í™”ë©´ì„ ì •í•˜ì‹œë ¤ë©´ 다ìŒê³¼ ê°™ì€ ëª…ë ¹ì–´ë¥¼ 사용하십시오: %prog /some/local/image.jpg --next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "" "로그 메시지를 봅니다(-vv는 디버깅 메시지를 ë³´ì—¬ì£¼ê¸°ë„ í•˜ë©°, -vvv는 variety_lib를 ë””ë²„ê¹…ì„ í•´ì£¼ê¸°ë„ í•©ë‹ˆë‹¤)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "실행 ì¤‘ì¸ ë²„ë¼ì´ì–´í‹°ë¥¼ 즉시 종료합니다" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "현재 배경화면 위치를 복사합니다. í”„ë¡œê·¸ëž¨ì´ ì´ë¯¸ 실행 ì¤‘ì¼ ë•Œë§Œ 사용ë©ë‹ˆë‹¤." #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "ë‹¤ìŒ ë°°ê²½í™”ë©´ 보기" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "ì´ì „ 배경화면 보기" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "ë‹¤ìŒ ë°°ê²½í™”ë©´ 보기, 사용기ë¡ì„ 앞으로 넘ê¹ë‹ˆë‹¤" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "현재 ë°°ê²½í™”ë©´ì„ íœ´ì§€í†µì— ì´ë™í•©ë‹ˆë‹¤. í”„ë¡œê·¸ëž¨ì´ ì´ë¯¸ 실행 ì¤‘ì¼ ë•Œë§Œ 사용ë©ë‹ˆë‹¤." #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "현재 ë°°ê²½í™”ë©´ì„ ì¦ê²¨ì°¾ê¸°ì— 복사합니다. í”„ë¡œê·¸ëž¨ì´ ì´ë¯¸ 실행 ì¤‘ì¼ ë•Œë§Œ 사용ë©ë‹ˆë‹¤." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "현재 ë°°ê²½í™”ë©´ì„ ì¦ê²¨ì°¾ê¸°ì— ì´ë™í•©ë‹ˆë‹¤. í”„ë¡œê·¸ëž¨ì´ ì´ë¯¸ 실행 ì¤‘ì¼ ë•Œë§Œ 사용ë©ë‹ˆë‹¤." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "ì´ë¯¸ì§€ ë³€ê²½ì„ ì¤‘ì§€í•©ë‹ˆë‹¤." #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "ì •ê¸°ì  ì´ë¯¸ì§€ ë³€ê²½ì„ ìž¬ê°œí•©ë‹ˆë‹¤" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "ì¼ì‹œ ì •ì§€/재개 ìƒíƒœë¥¼ 바꿉니다." #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "ë‹¤ìŒ ëª…ì–¸ 보기" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "ì´ì „ 명언 보기" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "ë‹¤ìŒ ëª…ì–¸ 보기, 사용기ë¡ì„ 앞으로 넘ê¹ë‹ˆë‹¤" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "명언 ì¼ì‹œ ì •ì§€/재개 ìƒíƒœë¥¼ 바꿉니다." #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "현재 ëª…ì–¸ì„ ì¦ê²¨ì°¾ê¸°ì— 저장하기" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "사용 ê¸°ë¡ í‘œì‹œì°½ì„ ì¼­ë‹ˆë‹¤" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "최근 내려받기 í‘œì‹œì°½ì„ ì¼­ë‹ˆë‹¤" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "환경 설정 대화ìƒìž 보기" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "ìˆ˜ë™ ë°°ê²½í™”ë©´ ì„ íƒê¸° 보기 - ì„¬ë„¤ì¼ ì°½ì— í™œì„± ì´ë¯¸ì§€ 소스로부터 ë°›ì€ ì´ë¯¸ì§€ë¡œ ì„ íƒí•©ë‹ˆë‹¤" #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "ì„ íƒ ì‚¬í•­ì„ ì„¤ì • ë° ì ìš©ì„ 합니다. ì„ íƒ ì‚¬í•­ ì´ë¦„ì€ ë²„ë¼ì´ì–´í‹°ì˜ 설정 파ì¼ì¸ " "~/.config/variety/variety.confì—서 사용ë˜ëŠ” ì„ íƒ ì‚¬í•­ê³¼ 같습니다. 여러 ê°œì˜ ì„ íƒ ì‚¬í•­ì€ ë‹¨ í•˜ë‚˜ì˜ ëª…ë ¹ì–´ë¡œ " "ì„¤ì •ë  ìˆ˜ 있습니다. 예시로: 'variety --set-option icon Dark --set-option clock_enabled " "True'와 ê°™ì€ ê±¸ë¡œ ë§ìž…니다. 조심해서 다루십시오: ë‹¹ì‹ ì€ ì„¤ì • 파ì¼ì„ ì§ì ‘ 보호받지 않는 방법으로 바꾸고 계십니다." #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "ì„ íƒ ì‚¬í•­ --next/--fast-forward와 --previous는 ìƒí˜¸ 배타ì ìž…니다" #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "ì„ íƒ ì‚¬í•­ --trash와 --favorite는 ìƒí˜¸ 배타ì ìž…니다" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "ì„ íƒ ì‚¬í•­ --pause와 --resumeì€ ìƒí˜¸ 배타ì ìž…니다" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "ì„ íƒ ì‚¬í•­ --quotes-next/--quotes-fast-forward와 --quotes-previous는 ìƒí˜¸ 배타ì ìž…니다" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "ì´ë¯¸ì§€ê°€ 아닙니다" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "ëŒ€ê¸°ì—´ì— ì¶”ê°€ë습니다" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "다ìŒì„ 누르셔서 보십시오" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "불러왔습니다" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "ì§€ì›ë˜ì§€ 않는 소스 형태입니다" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "지금 ë‹¹ì‹ ì€ ìµœì‹  ë²„ì „ì˜ ë²„ë¼ì´ì–´í‹°ë¥¼ 실행하고 계십니까?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "새로운 ì´ë¯¸ì§€ 소스가 추가ë습니다" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "ì´ë¯¸ ì´ë¯¸ì§€ 소스가 존재합니다, ì´ ì†ŒìŠ¤ë¥¼ 사용합니다" #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "불러왔고 ì ìš©ë˜ì—ˆìŠµë‹ˆë‹¤" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "ì‹¤í–‰ì´ ìž˜ë©ë‹ˆë‹¤!" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "와, 버ë¼ì´ì–´í‹° ë§í¬ê°€ ì‹¤í–‰ì´ ìž˜ë©ë‹ˆë‹¤. 매우 기ì©ë‹ˆë‹¤!" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "ì§€ì›ë˜ì§€ 않는 명령어입니다" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "주어진 버ë¼ì´ì–´í‹°:// URLì„ ì²˜ë¦¬í•  수 없습니다" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "로깅 사용과 ê°™ì´ ì‹¤í–‰í•˜ì—¬ ìžì„¸í•œ ì‚¬í•­ì„ ë´…ë‹ˆë‹¤" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "다시는 묻지 않습니다, í˜„ìž¬ì˜ ëª…ì–¸ì„ í•­ìƒ ì‚¬ìš©í•©ë‹ˆë‹¤" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "발표ë¨" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "페ì´ìŠ¤ë¶ í”¼ë“œë¥¼ ì—´ì–´ í¬ìŠ¤íŠ¸ë¥¼ ë³¼ 수 있습니다" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "발표를 í•  수 없습니다" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "ìžë™ 실행 í•­ëª©ì„ ë§Œë“¤ 수 없습니다" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "ë°ìФí¬í†± ìžë™ 시작 í•­ëª©ì„ ì„¤ì •í•˜ëŠ” ë„ì¤‘ì— ì˜¤ë¥˜ê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤\n" "터미ë„ì—서 -v 플래그 ì˜µì…˜ì„ ì§€ì •í•˜ì‹œê³  다시 시ë„하십시오." #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "" #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "" #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "" #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "버ë¼ì´ì–´í‹° - 페ì´ìФë¶ìœ¼ë¡œ 공유합니다" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "페ì´ìФë¶ìœ¼ë¡œ 공유합니다" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" "지금 ë‹¹ì‹ ì€ ì²˜ìŒìœ¼ë¡œ 페ì´ìФë¶ìœ¼ë¡œ 공유하고 계십니다. 버ë¼ì´ì–´í‹°ì—서 온ë¼ì¸ 소스로부터 온 ì´ë¯¸ì§€ ë° ëª…ì–¸ 공유가 가능합니다. ì´ ê³¼ì •ì€ " "다ìŒê³¼ ê°™ì€ ë°©ë²•ìœ¼ë¡œ ìž‘ë™ë©ë‹ˆë‹¤: \n" "\n" "1. 페ì´ìФë¶ìœ¼ë¡œ 로그ì¸ì„ 합니다\n" "페ì´ìФë¶ì€ ë‹¹ì‹ ì˜ ê¸°ë³¸ 브ë¼ìš°ì €ì—서 열릴 것입니다. 만약 ë‹¹ì‹ ì´ ì´ë¯¸ 로그ì¸ë˜ì–´ìžˆì§€ 않다면 페ì´ìФë¶ì€ ë‹¹ì‹ ì´ ë¡œê·¸ì¸í•˜ë„ë¡ ë§í•  것입니다. " "\n" "\n" "2. 버ë¼ì´ì–´í‹°ë¥¼ 허가하셔서 ë‹¹ì‹ ì˜ í”¼ë“œë¥¼ 발표하십시오.\n" "ë‹¹ì‹ ì€ ë‹¹ì‹ ì˜ í”¼ë“œë¥¼ 발표할 수 있게 버ë¼ì´ì–´í‹°ë¥¼ 허가하ë„ë¡ ìš”êµ¬ë°›ì„ ê²ƒìž…ë‹ˆë‹¤. 버ë¼ì´ì–´í‹°ëŠ” ì´ ê¶Œí•œì„ ë‹¹ì‹ ì´ ì›í•˜ëŠ” ì´ë¯¸ì§€ ë° ëª…ì–¸ì„ " "발표하는 ë°ë§Œ 사용할 것ì´ë©°, ê·¸ 외ì—는 사용하지 ì•Šì„ ê²ƒìž…ë‹ˆë‹¤.\n" "\n" "3. 브ë¼ìš°ì €ê°€ 버ë¼ì´ì–´í‹°ë‚˜ xdg-오픈으로 버ë¼ì´ì–´í‹°:// ë§í¬ë¥¼ ì—´ 수 있ë„ë¡ " "설정하십시오\n" "그러고 나서 ë‹¹ì‹ ì€ ë¸Œë¼ìš°ì €ì—서 버ë¼ì´ì–´í‹°ì™€ 함께 \"버ë¼ì´ì–´í‹°://\" ë§í¬ì— ê´€ë ¨ëœ ì§€ì‹œë¬¸ì´ ìžˆëŠ” 페ì´ì§€ë¡œ 리다ì´ë ‰íŠ¸ë  ê²ƒìž…ë‹ˆë‹¤. " "다ìŒê³¼ ê°™ì€ ì§€ì‹œë¬¸ì„ ë”°ë¥´ì…”ì„œ ì„¤ì •ì„ ì™„ë£Œí•˜ì‹­ì‹œì˜¤. ë‹¹ì‹ ì€ ì´ë¥¼ 단 한 번만 하시면 ë©ë‹ˆë‹¤.\n" "\n" "ë‹¹ì‹ ì˜ ì•”í˜¸ë‚˜ ë¡œê·¸ì¸ ì •ë³´ëŠ” ë¡œì»¬ì— ë³´ê´€ë˜ì§€ 않으며, 몇 주 ë™ì•ˆ 유효한 OAuth 페ì´ìŠ¤ë¶ í† í°ì„ ìƒì„±í•  ë¿ìž…니다. 유효 ê¸°ê°„ì´ " "만료ë˜ë©´ ë‹¹ì‹ ì€ ë‹¤ì‹œ 로그ì¸í•˜ë„ë¡ ìš”êµ¬ë°›ì„ ê²ƒìž…ë‹ˆë‹¤." #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "TheQuotationsPage.com으로부터 ëª…ì–¸ì„ ë¶ˆëŸ¬ì˜µë‹ˆë‹¤" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "버ë¼ì´ì–´í‹° - 레딧 피드를 추가합니다" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "URL í˜¹ì€ ì„œë¸Œë ˆë”§ì˜ ì´ë¦„: " #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "ë¬´ì—‡ì´ ìžˆëŠ”ì§€ í™•ì¸ ì¤‘ì´ë‹ˆ 잠시 기다리십시오" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "버ë¼ì´ì–´í‹° - VRTY.ORG íšŒì› ê°€ìž…" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "íšŒì› ê°€ìž…ì„ í•˜ì‹œê² ìŠµë‹ˆê¹Œ?" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" "ë‹¹ì‹ ì€ VRTY.ORG ì—서 ìµëª…으로 참여하실 수 있지만, íšŒì› ê°€ìž…ì€ " "컴퓨터들 사ì´ì—서 ì¦ê²¨ì°¾ê¸° ë° ì‚¬ìš©ìž ì„¤ì • ì¶”ì²œì„ ë™ê¸°í™”를 합니다 ê°™ì€, 매우 ë©‹ì§„ 몇몇 ê¸°ëŠ¥ì„ ì‚¬ìš©í•  수 있ë„ë¡ í•´ì¤ë‹ˆë‹¤. ë˜í•œ, ì´ ê¸°ëŠ¥ì€ " "ë‹¹ì‹ ì´ ìš´ì˜ì²´ì œë¥¼ 재설치하신다면 ë‹¹ì‹ ì˜ í”„ë¡œí•„ê³¼ 선호하는 ë°°ê²½í™”ë©´ì„ í™•ì‹¤í•˜ê²Œ 잃지 않ë„ë¡ í•´ì¤ë‹ˆë‹¤." #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "íšŒì› ê°€ìž…ì€ ë§¤ìš° 쉬우며 아무 ê°œì¸ ì •ë³´ë¥¼ 요구하지 않습니다." #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" "만약 ë‹¹ì‹ ì´ ìµëª…으로 ì°¸ì—¬í•¨ì„ ì„ íƒí•˜ì…¨ë‹¤ë©´, ë‹¹ì‹ ì€ í™˜ê²½ ì„¤ì •ì— ìžˆëŠ” \"ë™ê¸°í™”와 소셜 " "네트워í¬\" 페ì´ì§€ì—서 ë‚˜ì¤‘ì— ê°€ìž…í•˜ì‹¤ 수 있습니다." #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" "ì´ëŸ°, 우리는 VRTY.ORG 서버를 ì—°ê²°í•  수 없습니다. 서버가 잠시 ë‹¤ìš´ëœ ìƒíƒœì¼ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. 잠시 몇 ë¶„ ë™ì•ˆ 기다리시고 다시 " "ì ‘ì†ì„ 시ë„하시거나 \"ìµëª…으로 참여합니다\"를 ì„ íƒí•˜ì‹œê³  환경 ì„¤ì •ì— ìžˆëŠ” " "\"ë™ê¸°í™”와 소셜 네트워í¬\" 페ì´ì§€ì—서 ë‚˜ì¤‘ì— ê°€ìž…í•˜ì‹­ì‹œì˜¤." #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "íšŒì› ê°€ìž…ì„ ê³„ì†í•˜ì‹œê³  우리가 브ë¼ìš°ì € íƒ­ì— ì—´ì€ ì§€ì‹œë¬¸ì„ ë”°ë¥´ì‹­ì‹œì˜¤." #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "ìµëª…으로 참여할 것입니다" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "여기서 íšŒì› ê°€ìž…ì„ í•˜ì‹­ì‹œì˜¤" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "í´ë”를 ì„ íƒí•˜ì‹­ì‹œì˜¤" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "확ì¸" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "ë°›ì€ ì‹ í˜¸ë¥¼ 중지하는 중입니다, 종료하는 중입니다..." #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "버ë¼ì´ì–´í‹°ê°€ ì´ë¯¸ 실행 중입니다. 실행 ì¤‘ì¸ ì¸ìŠ¤í„´ìŠ¤ì— ëª…ë ¹ì–´ë¥¼ 보냅니다." #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "하단" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "ìƒë‹¨" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "좌측" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "우측" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "위치" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "í¬ê¸°" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "들어있는 í´ë”를 봅니다" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "닫기" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "EXIF í‰ì ì„ ì •í•  수 없습니다" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "무등급" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "ê±°ë¶€ë¨" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "버ë¼ì´ì–´í‹° 사용 기ë¡" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "버ë¼ì´ì–´í‹° 최근 내려받기 기ë¡" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "버ë¼ì´ì–´í‹° ì´ë¯¸ì§€" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "저작권 (c) 2012, 피터 레비 " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "버ë¼ì´ì–´í‹° 설명" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "ìžë™ 배경화면 바꾸기, 내려받기 ë° ê´€ë¦¬ìž í”„ë¡œê·¸ëž¨ìž…ë‹ˆë‹¤." #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" "# 저작권 (c) 2012, 피터 레비 \n" "# ì´ í”„ë¡œê·¸ëž¨ì€ ìžìœ  소프트웨어입니다: ìžìœ  소프트웨어 ìž¬ë‹¨ì— ì˜í•˜ì—¬ 발표ëœ, \n" "\n" "# GNU ì¼ë°˜ 공중 사용 허가서 버전 3약관 아래ì—서 \n" "\n" "# ë‹¹ì‹ ì€ ì´ ì†Œí”„íŠ¸ì›¨ì–´ë¥¼ 재배í¬í•˜ì‹œê±°ë‚˜/í˜¹ì€ ìˆ˜ì •í•˜ì‹¤ 수 있습니다.\n" "\n" "# \n" "\n" "# ì´ í”„ë¡œê·¸ëž¨ì€ ì´ê²ƒì´ 매우 유용하게 ì‚¬ìš©ë  ê²ƒì´ë¼ëŠ” í¬ë§ ë‚´ì—서 ë°°í¬ë˜ì—ˆì§€ë§Œ, \n" "\n" "# 아무 ë³´ì¦ì´ 없습니다; 설령 ìƒì—…ì  ìš©ë„, 만족스러운 품질, 혹ì€Â \n" "\n" "# 특정 목ì ì„ 위한 ì í•©ì„± ë³´ì¦ì´ ì ìš©ë˜ì§€ 않ë”ë¼ë„ ë§ìž…니다. \n" "\n" "# GNU ì¼ë°˜ 공중 사용 허가서ì—서 ë” ìžì„¸í•œ ì‚¬í•­ì„ ë³´ì‹­ì‹œì˜¤.\n" "\n" "# \n" "\n" "# ë‹¹ì‹ ì€ ì´ í”„ë¡œê·¸ëž¨ê³¼ ê°™ì´ GNU ì¼ë°˜ 공중 사용 허가서 ë³µì‚¬ë³¸ì„ ë°›ìœ¼ì…”ì•¼ 합니다. \n" "# 그렇지 않으면, ì„ ë³´ì‹­ì‹œì˜¤.\n" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "버ë¼ì´ì–´í‹°" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "버ë¼ì´ì–´í‹° 배경화면 바꾸기 프로그램" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "다ìŒ" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "ì´ì „" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "ì¼ì‹œ ì •ì§€ / 재개" #: ../variety.desktop.in.h:6 msgid "History" msgstr "사용 기ë¡" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "환경 설정" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "버ë¼ì´ì–´í‹° - Wallhaven.cc ì´ë¯¸ì§€ 소스를 추가합니다" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" "Wallhaven.cc는 다양한 ì´ë¯¸ì§€ 검색 ì„ íƒ ì‚¬í•­ì„ ì œê³µí•©ë‹ˆë‹¤. " "여기서 ë‹¹ì‹ ì€ ì°¾ìœ¼ë ¤ 하는 ê²€ìƒ‰ì–´ì˜ í‚¤ì›Œë“œë¥¼ 지정하시거나, Wallhaven.cc를 방문하셔서, 당신ì—게 만족스러운 검색 결과를 확실하게 " "제공하는, ë‹¹ì‹ ë§Œì˜ ê²€ìƒ‰ ì¡°ê±´ì„ ì„¤ì •í•˜ì‹œê³ , 검색 ì°½ì— ì „ì²´ 월헤ì´ë¸ URLì„ ìž…ë ¥í•˜ì‹¤ 수 있습니다.\n" "\n" "만약 ë‹¹ì‹ ì´ í‚¤ì›Œë“œë¥¼ 지정했다면, 주로 ì‚¬ìš©ë  í‚¤ì›Œë“œ 중 아무 키워드랑 관련 있는 건전한 ì´ë¯¸ì§€ê°€ 나올 것입니다. \n" "\n" "만약 ë‹¹ì‹ ì´ ì›”í—¤ì´ë¸ URLì„ ì§€ì •í–ˆë‹¤ë©´, 분류 ì¡°ê±´ì„ ì£¼ì˜ ê¹Šê²Œ ì„ íƒí•˜ì‹­ì‹œì˜¤ - 보통 버ë¼ì´ì–´í‹°ëŠ” ì´ë¯¸ì§€ë¥¼ 요구하지만, 맨 처ìŒì— " "나오는 수백 ê°œì˜ ë˜ëŒë ¤ì§„ 주소로부터 나타나는 ì´ë¯¸ì§€ë§Œ 사용합니다. 무작위 검색 í˜¹ì€ ë‚ ì§œë³„ ê²€ìƒ‰ì€ ì´ ì´ë¯¸ì§€ 소스가 소멸하기 전까지 ë” " "긴 \"수명\"ì„ ê°€ì§ì„ 뜻합니다. ì¦ê²¨ì°¾ê¸° ê²€ìƒ‰ì€ ë” ë‚˜ì€ í™”ì§ˆì˜ ì´ë¯¸ì§€ë¥¼ 제공하며 연관성 ê²€ìƒ‰ì€ êµ¬ì ˆì´ë‚˜ ìƒ‰ê¹”ì„ ê²€ìƒ‰í•  때 ë” ê´€ë ¨ " "있는 결과를 제공합니다." #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "키워드를 입력하시거나 URLì„ ì—¬ê¸°ì— ë¶™ì´ì‹­ì‹œì˜¤: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "ê²€ìƒ‰ì„ í™•ì¸ ì¤‘ì´ë‹ˆ 잠시 기다리십시오" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "ëª…ì–¸ì„ í‘œì‹œí•©ë‹ˆë‹¤, 로컬 ë¬¸ìž íŒŒì¼ì—서 설정ë©ë‹ˆë‹¤.\n" "ë‹¹ì‹ ë§Œì˜ txt 파ì¼ì„: ~/.config/variety/pluginconfig/quotes/ì— ë„£ìœ¼ì‹­ì‹œì˜¤.\n" "\n" "íŒŒì¼ í˜•ì‹ì€:\n" "\n" "명언 -- ì €ìž\n" ".\n" "ë‘ ë²ˆì§¸ 명언 -- 다른 ì €ìž\n" ".\n" "등등... 입니다\n" "\n" "예: http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "버ë¼ì´ì–´í‹° - 미디어 RSS 피드를 추가합니다" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "ë°‘ì— ìžˆëŠ” ì°½ì— ë¯¸ë””ì–´ RSS í”¼ë“œì˜ URLì„ ë¶™ì–´ë†“ìœ¼ì‹­ì‹œì˜¤. ìž„ì˜ RSS 피드가 아니ë¼, 미디어 RSS í”¼ë“œë§Œì„ ì§€ì›í•œë‹¤ëŠ” ì ì— " "유ì˜í•˜ì‹­ì‹œì˜¤. 미디어 RSS 피드는 미디어를 함유하고 있습니다:ë‚´ìš© 태그는 실제 ì´ë¯¸ì§€ 내용과 바로 ì—°ê²°ì„ í•©ë‹ˆë‹¤. 미디어 RSS 피드를 " "제공하는 몇몇 사ì´íŠ¸ì˜ ì˜ˆì‹œëŠ”: 피카사, 디비언트아트, 스머그머그, 플리커, ì¸í„°íŽ˜ì´ìŠ¤ë¦¬í”„íŠ¸ìž…ë‹ˆë‹¤." #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "ì—¬ê¸°ì— ë¯¸ë””ì–´ RSS í”¼ë“œì˜ URLì„ ë¶™ì–´ë†“ìœ¼ì‹­ì‹œì˜¤: " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "URLì— ë¬´ì—‡ì´ ë“¤ì—ˆëŠ”ì§€ 확ì¸í•˜ëŠ” 중ì´ë‹ˆ 잠시 기다리십시오" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "ì¸ì¦ì— 성공하셨습니다" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "발표하는 중입니다..." #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "ì¸ì¦ì— 실패하셨습니다" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "ì¦ê²¨ì°¾ê¸°ì— 복사하기 대 ì¦ê²¨ì°¾ê¸°ë¡œ ì´ë™í•˜ê¸°" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "기본 설정으로 초기화를 합니다" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "ì´ë¯¸ì§€ ìœ„ì¹˜ì— ë”°ë¼ ë©”ë‰´ì—서 ë‹¹ì‹ ì˜ ì¦ê²¨ì°¾ê¸°ê°€ 'ì¦ê²¨ì°¾ê¸°ì— 복사합니다' í˜¹ì€ 'ì¦ê²¨ì°¾ê¸°ë¡œ ì´ë™í•©ë‹ˆë‹¤' ì¸ì§€ë¥¼ ì„ íƒí•˜ì‹­ì‹œì˜¤:" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "한 줄마다 한 í•­ëª©ì„ ìž…ë ¥í•˜ì‹œê³ , 내려받기, 불러올 수 있는 í´ë”, 다른 사항 í˜¹ì€ íŠ¹ì • í´ë” 경로와 ê°™ì€ ê°ê° í•­ëª©ì„ " "<í´ë”>:<복사합니다, 움ì§ìž…니다, í˜¹ì€ ë‘ ê°œë¥¼ ë™ì‹œì— 사용합니다>와 ê°™ì€ í˜•ì‹ìœ¼ë¡œ 입력하십시오.\n" "여기서 중요한 ê²ƒì€ ìˆœì„œìž…ë‹ˆë‹¤. ì´ë¯¸ì§€ê°€ ë³´ì¼ ë•Œ, 목ë¡ì—서 ì´ë¯¸ì§€ë¥¼ 함유한 첫 번째 í´ë”는 버ë¼ì´ì–´í‹° ë©”ë‰´ì— ë³´ì¼ ì–´ë–¤ ì§ì—…ì„ ìˆ˜í–‰í• ì§€ " "ì •í•  것입니다. '다른 사항'ì€ ì•„ë¬´ 파ì¼ê³¼ 관련시킬 것ì´ë©° 목ë¡ì˜ ë ë¶€ë¶„ì— ìžˆì–´ì•¼ 합니다.\n" "\n" "\n" "예:\n" "\n" "[tab]\n" "ë‚´ë ¤ë°›ì€ í´ë”:복사합니다\n" "\n" "[tab]\n" "불러온 í´ë”:움ì§ìž…니다\n" "\n" "[tab]\n" "/pics/RandomImages:움ì§ìž…니다\n" "\n" "[tab]\n" "/pics/OrganizedAlbums:복사합니다\n" "\n" "[tab]\n" "다른 사항:ë‘ ê°œë¥¼ ë™ì‹œì— 사용합니다" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "VRTY.ORG 통합" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "ì´ ê¸°ëŠ¥ì€ VRTY.ORG í†µí•©ì„ ìš”êµ¬í•©ë‹ˆë‹¤" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "VRTY.ORG í†µí•©ì„ ì‚¬ìš©í•©ë‹ˆë‹¤" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" "ì´ ê¸°ëŠ¥ì€ ë²„ë¼ì´ì–´í‹°ê°€ ë‹¹ì‹ ì´ ì„ í˜¸ í˜¹ì€ ë¹„ì„ í˜¸ 하는 ì´ë¯¸ì§€ ë° ë‹¹ì‹ ì´ ì‚¬ìš©í•œ 온ë¼ì¸ ì†ŒìŠ¤ì— ê´€í•œ ìžë£Œë¥¼ 수집할 수 있는 ê¶Œí•œì´ " "필요합니다.\n" "\n" "ìˆ˜ì§‘ëœ ìžë£ŒëŠ” 기본으로 ìµëª… ìƒíƒœì´ê³  버ë¼ì´ì–´í‹°ê°€ ë‚´ë ¤ë°›ì€ ì´ë¯¸ì§€ë§Œ ë®ì–´ì”Œì› ìœ¼ë©°, 절대로 ë‹¹ì‹ ì´ ê°œì¸ì ì¼ì§€ë„ 모르는 ë‹¹ì‹ ì˜ ë¡œì»¬ í´ë”ì— " "ì´ë¯¸ 보유하고 있는 ìžë£Œë¥¼ 수집하지 않습니다.\n" "\n" "ì´ ìžë£ŒëŠ” 우리가 모ë‘ì—게 ë” ë‚˜ì€ ì´ë¯¸ì§€ë¥¼ 제공하ë„ë¡ í•˜ë©° VRTY.ORGì— " "ë™ë ¥ì´ ë˜ì–´ì¤ë‹ˆë‹¤ - 버ë¼ì´ì–´í‹°ì˜ 모든 사용ìžë¥¼ 위한 귀중한 ìžë£Œìž…니다." #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "ì´ ì£¼ì†ŒëŠ” 유효하지 ì•Šì€ ë ˆë”§ URLì¸ë“¯í•©ë‹ˆë‹¤" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "우리는 ì´ê³³ì—서 아무 ì´ë¯¸ì§€ ì œì•ˆì„ ì°¾ì„ ìˆ˜ 없습니다." #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "QuotesDaddyì˜ ì¼ì¼ 명언 RSS 피드로부터 ëª…ì–¸ì„ ë¶ˆëŸ¬ì˜µë‹ˆë‹¤.\n" "태그나 ì €ìž ê²€ìƒ‰ì„ ì§€ì›í•˜ì§€ 않습니다." #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "버ë¼ì´ì–´í‹° - 플리커를 ì´ë¯¸ì§€ 소스로 추가합니다" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "플리커 검색 ì¡°ê±´ì„ ì§€ì •í•˜ì‹­ì‹œì˜¤. ì„ íƒí•˜ì‹  모든 ì¡°ê±´ì— ì¼ì¹˜í•˜ëŠ” ì‚¬ì§„ì„ " "ë‚´ë ¤ë°›ì„ ê²ƒìž…ë‹ˆë‹¤. ì¡°ê±´ì„ ì„¤ì •í•˜ì§€ ì•Šì„ ê²½ìš°, 공란으로 남겨ë‘십시오." #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "태그: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "쉼표로-ë¶„ë¦¬ëœ íƒœê·¸ 목ë¡ìž…니다. ì´ê²ƒì€ 관련 있는 ì‚¬ì§„ì„ ì°¾ê¸° 위해 모든 태그를 í¬í•¨í•˜ê³  있는 ì‚¬ì§„ì„ ëŠ¥ë¥ ì ìœ¼ë¡œ 검색합니다.\n" "예: 노란색, ìžë™ì°¨" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "사용ìž: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "사용ìžì˜ í¬í† ìŠ¤íŠ¸ë¦¼ ë˜ëŠ” ì‚¬ì§„ë“¤ì˜ URLì„ ì§‘ì–´ë„£ìœ¼ì‹­ì‹œì˜¤.\n" "예: http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "그룹: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "ê·¸ë£¹ì˜ URLì„ ì§‘ì–´ë„£ìœ¼ì‹­ì‹œì˜¤.\n" "예: http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "문ìž:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "ì‚¬ì§„ì— ìžˆëŠ” 제목, 설명과 태그로 검색하는 무료 ë¬¸ìž ê²€ìƒ‰ 기능입니다. ì œì™¸í•˜ê³ ìž í•˜ëŠ” 항목 앞ì—는 -ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤.\n" "예: 사과 -파ì´" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "ì´ˆ" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "ë¶„" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "시간" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "ì¼" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "버ë¼ì´ì–´í‹° 환경 설정" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "ì¼ë°˜ 설정" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "컴퓨터를 시작할 때 버ë¼ì´ì–´í‹° 실행하기" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "ë°°ê²½í™”ë©´ì„ ë°”ê¾¸ëŠ” 주기 " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "최소 ê°„ê²©ì€ 5초입니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "시작할 때 배경화면 바꾸기" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "사용ë¨" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "형ì‹" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "위치" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "추가하기(_A)..." #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "ì´ë¯¸ì§€, í´ë” í˜¹ì€ ì˜¨ë¼ì¸ ì´ë¯¸ì§€ 소스를 추가합니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "편집하기(_E)..." #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "ì„ íƒí•œ 소스를 편집합니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "제거하기(_R)..." #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "ì„ íƒí•œ ì´ë¯¸ì§€ 소스를 제거합니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "사용하기(_U)" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "ì„ íƒí•œ 소스를 사용하고 다른 모든 소스를 사용하지 않습니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "ë°°ê²½í™”ë©´ì„ ë‚´ë ¤ë°›ëŠ” 주기 " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "최소 ê°„ê²©ì€ ì¼ë¶„입니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "로 " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "실제 내려받기 í´ë” " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "ì£¼ì˜ ì‚¬í•­: 만약 ë‹¹ì‹ ì´ ì¤‘ìš”í•œ 파ì¼ì´ 들어있는 ì‚¬ìš©ìž ì„¤ì • 내려받기 í´ë”를 사용하신다면 ì´ ì„ íƒ ì‚¬í•­ì„ ì‚¬ìš©í•˜ì§€ 마십시오. 버ë¼ì´ì–´í‹°ëŠ” " "내려받기 í´ë”ì— ë¬´ì—‡ì´ ë“¤ì—ˆëŠ”ì§€ì— ê´€ê³„ì—†ì´ ì œí•œì„ ìœ ì§€í•  것입니다." #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "내려받기 í´ë” í¬ê¸°ë¥¼ 다ìŒìœ¼ë¡œ 제한합니다 " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "최소 í¬ê¸°ëŠ” 50MB입니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "ê³µê°„ì´ í•„ìš”í•  ê²½ìš°ì— ì˜¤ëž˜ëœ íŒŒì¼ì„ 삭제해서 MB를 확보합니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "ì¦ê²¨ì°¾ê¸°" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "선호하는 ë°°ê²½í™”ë©´ì„ ë‹¤ìŒìœ¼ë¡œ 복사합니다 " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "í•„í„°" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "ì´ í•„í„°ë¥¼ í‘œì‹œëœ ë°°ê²½í™”ë©´ì— ë¬´ìž‘ìœ„ë¡œ ì ìš©í•©ë‹ˆë‹¤(환ìƒì ì¸ í”„ë¡œê·¸ëž¨ì¸ ì´ë¯¸ì§€ë§¤ì§ì— ê°ì‚¬ë¥¼ 표합니다):" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "명언" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "ë°”íƒ•í™”ë©´ì— ë¬´ìž‘ìœ„ 지혜로운 ëª…ì–¸ì„ ë³´ê¸°" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "ë¬¸ìž ìƒ‰ê¹”: " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "ë¬¸ìž ê¸€ê¼´: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "ë°°ê²½ 색깔: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "ë°°ê²½ 불투명ë„: " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " 투명" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "불투명" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "문ìžì— 그림ìžë¥¼ 그리기" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "외형" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "따옴표 공간 너비: " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "ì¢ì€ " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "ë„“ì€" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "ìˆ˜í‰ ìœ„ì¹˜: " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "좌측 " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "ìˆ˜ì§ ìœ„ì¹˜: " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "ìƒë‹¨ " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "배치" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "ì´ ì†ŒìŠ¤ë¡œë¶€í„° 명언 보기: " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "ë” ë§Žì€ " "플러그ì¸" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "ì´ íƒœê·¸ ë° ì €ìžë§Œ 봅니다. 공란으로 남겨서 무작위 ëª…ì–¸ì„ ë´…ë‹ˆë‹¤." #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "예: 웃긴, 고무ì ì¸" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "예: 알베르트 ì•„ì¸ìŠˆíƒ€ì¸, 볼테르" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "ì €ìž: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "소스 ë° í•„í„°ë§" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "ëª…ì–¸ì„ ë°”ê¾¸ëŠ” 주기 " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "최소 ê°„ê²©ì€ 10초입니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "정기ì ìœ¼ë¡œ 변경하기" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "시계" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "í¬ê³  ë©‹ì§„ 디지털 시계를 ë°”íƒ•í™”ë©´ì— ë³´ì—¬ì„œ, 현재 ì‹œê° ë° ë‚ ì§œë¥¼ 표시합니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "ì‹œê³„ì˜ ì™¸í˜•ì„ ì„¤ì •í•˜ì‹œë ¤ë©´ 버ë¼ì´ì–´í‹°ì˜ 설정 파ì¼ì—서 clock_filter ì†ì„±ì„ " "편집하십시오(~/.config/variety/variety.conf). " "~/.config/variety/variety_latest_default.confì— ìžˆëŠ” ì„¤ëª…ì„ ì°¸ê³ í•˜ì…”ì„œ 안내문으로 사용하십시오." #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "시계 글꼴: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "ë‚ ì§œ 글꼴: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "ì´ ë°©ë²•ì˜ íš¨ê³¼ê°€ 미미하셨습니까? ì—¬ê¸°ì— ë“¤ì–´ê°€ì…”ì„œ " "ì½ì–´ë³´ì‹­ì‹œì˜¤. 어떻게 시계를 고급 ì„¤ì •ì„ í•©ë‹ˆê¹Œ? ì—¬ê¸°ì— " "들어가셔서 ì½ì–´ë³´ì‹­ì‹œì˜¤." #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "효과" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "VRTY.ORG" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "VRTY.ORG는 베타 ìƒíƒœì´ë©° 성숙하기 전까지는 ì‹œê°„ì´ ê±¸ë¦´ 것입니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" "VRTY.ORG는 ê°™ì€ ìž…ë§›ì„ ê°€ì§„ 버ë¼ì´ì–´í‹° 사용ìžì™€ ì—°ê²°ì„ í•´ì£¼ê³  ë‹¹ì‹ ì˜ " "ë°°ê²½í™”ë©´ì„ ì•„ì£¼-편리하게 바꾸는 ë°©ë²•ì„ ì œê³µí•˜ë©°, 버ë¼ì´ì–´í‹°ì— 새로운 ì´ë¯¸ì§€ 소스를 찾으시거나 추가하실 수 있고, 다른 사용ìžì˜ " "ì¦ê²¨ì°¾ê¸°ë¥¼ 따르실 수 있습니다. ì´ê²ƒì€ 참여하는 모든 사용ìžì˜ 선호하는 ì´ë¯¸ì§€ë¡œ 공급ë©ë‹ˆë‹¤." #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "사용ìžë¥¼ 만들 수 없습니다 - VRTY.ORGì— ì—°ê²°ì´ ë˜ì§€ 않았습니다. 우리는 ë‚˜ì¤‘ì— ë‹¤ì‹œ 시ë„í•  것입니다." #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" "íšŒì› ê°€ìž…ì€ ì»´í“¨í„°ë“¤ 사ì´ì—서 선호하는 ì´ë¯¸ì§€ ë° ì†ŒìŠ¤ì™€ ì‚¬ìš©ìž ì„¤ì • ì¶”ì²œì„ ë™ê¸°í™”하는 것과 ê°™ì€ ë©‹ì§„ ê¸°ëŠ¥ì„ ì‚¬ìš©í•  수 있ë„ë¡ í•´ì¤ë‹ˆë‹¤." #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "ë™ê¸°í™”" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "컴퓨터들 사ì´ì—서 선호하는 ì´ë¯¸ì§€ë¥¼ ë™ê¸°í™”합니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "VRTY.ORG를 사용 중ì´ê³  로그ì¸ë¼ìžˆìœ¼ì…”야 합니다." #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" "다른 컴퓨터로부터 온 ë‹¹ì‹ ì˜ ì„ í˜¸í•˜ëŠ” ì´ë¯¸ì§€ëŠ” ì´ ì»´í“¨í„°ì— ìžë™ìœ¼ë¡œ ë‚´ë ¤ë°›ì„ ê²ƒìž…ë‹ˆë‹¤. ë‹¹ì‹ ì€ ëª¨ë“  컴퓨터ì—서 ê°™ì€ VRTY.ORG " "사용ìžë¡œ 로그ì¸ë¼ìžˆìœ¼ì…”야 합니다. ë™ê¸°í™”는 아무 ì´ë¯¸ì§€ë¥¼ 지우지 않습니다." #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "ê°œì¸ ì •ë³´ 보호 ì •ì±…" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" "버ë¼ì´ì–´í‹°ëŠ” ì´ê²ƒì´ ë‚´ë ¤ë°›ì€ ì´ë¯¸ì§€ë§Œ ë³´ë‚´ê³ , 절대로 ë‹¹ì‹ ì´ ê°œì¸ ì •ë³´ê°€ 들어있ì„ì§€ë„ ëª¨ë¥´ëŠ” ë‹¹ì‹ ì˜ ë¡œì»¬ í´ë”ì— ì´ë¯¸ 보유하고 있는 " "ìžë£Œë¥¼ 수집하지 않으며, ì´ëŸ¬í•œ ì´ë¯¸ì§€ë¥¼ ë™ê¸°í™”하지 않습니다. 모ë‘ì—게 공개해서 참여함으로 설정하지 ì•Šì€ ì´ìƒ, ìˆ˜ì§‘ëœ ìžë£ŒëŠ” 제삼ìžì™€ " "공유ë˜ì§€ 않습니다. ì—¬ê¸°ì— ë“¤ì–´ê°€ì…”ì„œ ì´ ì„œë¹„ìŠ¤ì— " "관한 ë” ìžì„¸í•œ 사항과 ê°œì¸ ì •ë³´ 보호 ì •ì±…ì„ ì½ìœ¼ì‹­ì‹œì˜¤." #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "사용 통계" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "ìµëª…ì˜ ì‚¬ìš© 통계를 보내서 버ë¼ì´ì–´í‹°ê°€ ë” ë‚˜ì•„ì§ˆ 수 있ë„ë¡ ë„와ì¤ë‹ˆë‹¤" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" "ì´ëŸ¬í•œ 통계는 우리가 사용ìžê°€ 어떻게 ì´ í”„ë¡œê·¸ëž¨ì„ ì‚¬ìš©í•˜ëŠ”ì§€ë¥¼ ì´í•´í•˜ëŠ” 것으로 버ë¼ì´ì–´í‹°ë¥¼ ë” ë‚˜ì•„ì§€ê²Œ í•  수 있ë„ë¡ ë„와ì¤ë‹ˆë‹¤. " "ì´ëŸ¬í•œ ê²ƒë“¤ì€ ë‹¹ì‹ ì˜ ìš´ì˜ì²´ì œ 버전 ë° ëª¨ë‹ˆí„° ì„¤ì •ì— ê´€í•œ ì¼ë°˜ ì •ë³´ 역시 í¬í•¨í•˜ê³  있습니다. ìˆ˜ì§‘ëœ ìžë£ŒëŠ” 아무ì—ê²Œë„ ê³µìœ ë˜ì§€ 않습니다." #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "ë™ê¸°í™”와 소셜 네트워í¬" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "í´ë”를 불러옵니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "수ë™ìœ¼ë¡œ ë‚´ë ¤ë°›ì€ ë°°ê²½í™”ë©´ 저장하기 " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "ëŒê¸°ì™€ 놓기" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "ëŸ°ì²˜ì— ìžˆëŠ” 버ë¼ì´ì–´í‹°ì˜ ì•„ì´ì½˜ì€ 대ìƒì„ 놓는 ìž¥ì¹˜ë¡œì¨ ì‚¬ìš©ë©ë‹ˆë‹¤. ì´ ì•„ì´ì½˜ì— 아무 ì´ë¯¸ì§€ URLì´ë‚˜ 파ì¼ì„ 놓으시면 ë‹¹ì‹ ì˜ ë¶ˆëŸ¬ì˜¤ê¸° " "í´ë”ì— ì €ìž¥í•  것입니다. 그러고 나서 ë‹¹ì‹ ì€ ë‹¤ìŒì„ 누르셔서 ë‹¹ì‹ ì˜ ë°”íƒ•í™”ë©´ì—서 ì´ê²ƒì„ ë³¼ 수 있습니다.\n" "ëŸ°ì²˜ì— ìžˆëŠ” ì•„ì´ì½˜ì„ 보시려면 설명 í˜¹ì€ í™˜ê²½ ì„¤ì •ì„ ì„ íƒí•˜ì‹­ì‹œì˜¤. ë‹¹ì‹ ì€ ì‰½ê²Œ ëŒê¸°-와-놓기를 사용하기 위해 ì´ ì•„ì´ì½˜ì„ ë°”íƒ•í™”ë©´ì— " "잠그실 수 있습니다." #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "í´ë¦½ë³´ë“œ 모니터ë§" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "ì´ë¯¸ì§€ URL í´ë¦½ë³´ë“œë¥¼ 관리하고 불러옵니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "URL 호스트가 ì´ë“¤ 중 í•˜ë‚˜ì¼ ë•Œ 불러오기만 합니다:" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "ìˆ˜ë™ ë‚´ë ¤ë°›ê¸°" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "가능하다면 ì´ëŸ¬í•œ ì´ë¯¸ì§€ë¥¼ 사용합니다:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "가로 방향으로 전환합니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "최소 ë§Œí¼ í¬ê²Œ 합니다 " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "화면 í•´ìƒë„ì˜ %" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "색깔" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "어둡거나 ë°ê²Œ 합니다:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "어둡게" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "ë°ê²Œ" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "ì´ ìƒ‰ê¹”ì„ í•¨ìœ í•©ë‹ˆë‹¤: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(초기 ê²€ìƒ‰ì„ ë§ˆì¹˜ê³  나서 효과가 ì ìš©ë©ë‹ˆë‹¤)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "í‰ì " #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "최소 ì  ë§Œí¼ì˜ EXIF í‰ì ì„ 가지고 있습니다 " #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "색깔 ë° í¬ê¸°" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "지표 ì•„ì´ì½˜" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "지표 ì•„ì´ì½˜:" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "ë°ìŒ" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "ì–´ë‘ " #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "현재 ë°°ê²½í™”ë©´ì„ ì‚¬ìš©í•©ë‹ˆë‹¤" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "ì‚¬ìš©ìž ì„¤ì • ì´ë¯¸ì§€..." #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "사용 안 함" #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "ì•„ì´ì½˜ì„ ì„ íƒí•˜ì‹­ì‹œì˜¤" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "ì•„ì´ì½˜ì´ 숨겨져 ìžˆì„ ë•Œ, 버ë¼ì´ì–´í‹°ëŠ” 명령 줄ì´ë‚˜, 빠른 런처 목ë¡ìœ¼ë¡œë¶€í„° ì œì–´ë  ìˆ˜ 있습니다. \"variety --help\"를 " "실행하셔서 모든 유효한 명령어를 보십시오." #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "ì¦ê²¨ì°¾ê¸° 작업" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "주메뉴ì—서 ì¦ê²¨ì°¾ê¸° ìž‘ì—…ì„ ë´…ë‹ˆë‹¤:" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "ì¦ê²¨ì°¾ê¸°ì— 복사합니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "복사 ë° ì´ë™ì„ ë™ì‹œì— 사용합니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "í´ë”ì— ë”°ë¼..." #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "발표하기 ì „ì— ëŒ€í™” ìƒìžë¥¼ 표시하여 페ì´ìŠ¤ë¶ í¬ìŠ¤íŠ¸ë¥¼ ì‚¬ìš©ìž ì„¤ì •í•©ë‹ˆë‹¤" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "ë¡œê·¸ì¸ í™”ë©´ ì§€ì›" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "버ë¼ì´ì–´í‹°ê°€ 설정한 ë°°ê²½í™”ë©´ì´ ë¡œê·¸ì¸ í™”ë©´ì—서 ì‚¬ìš©ë  ê²ƒìž„ì„ ëª…ì‹¬í•˜ì‹­ì‹œì˜¤" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "ê°œì¸ ì •ë³´ 침해 주ì˜: ë‹¹ì‹ ì˜ ë°°ê²½í™”ë©´ì„ ë³´ì‹œë ¤ë©´ ë¼ì´íЏDMì´ ì´ë¯¸ì§€ë¥¼ ì½ì„ 수 있는 ê¶Œí•œì´ í•„ìš”í•©ë‹ˆë‹¤. ì´ ì„ íƒ ì‚¬í•­ì„ " "사용하시면, 버ë¼ì´ì–´í‹°ëŠ” ë°°ê²½í™”ë©´ì„ ê³µìš© í´ë”ì— ë³µì‚¬í•  것ì´ë©° ì´ ì´ë¯¸ì§€ë¥¼ ì½ê¸° 가능으로 설정하는 것으로 ì´ê²ƒì˜ ê¶Œí•œì„ ë°”ê¿€ 것입니다. " "기본으로, 만약 ë‹¹ì‹ ì˜ í™ˆ í´ë”ê°€ 암호화ë˜ì§€ 않았다면 í´ë”는 ~/Picturesì´ë©°, 암호화ë˜ì—ˆë‹¤ë©´ í´ë”는 " "/usr/share/backgrounds입니다. 다중 ì‚¬ìš©ìž ì‹œìŠ¤í…œì—서는 ì´ ì„ íƒ ì‚¬í•­ì„ ì£¼ì˜ ê¹Šê²Œ 사용하십시오." #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "배경화면 ì´ë¯¸ì§€ 파ì¼ì„ ì´ í´ë”ì— ë³µì‚¬í•©ë‹ˆë‹¤: " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "기본 설정으로 초기화를 합니다" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "ì•„ì§ë„ 실행ë˜ì§€ 않으십니까?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "ë‹¹ì‹ ì˜ í™ˆ í´ë”ê°€ 암호화 ìƒíƒœì¸ë“¯í•©ë‹ˆë‹¤, 그러므로 ì´ í”„ë¡œê·¸ëž¨ 안ì—서 í´ë”를 사용하는 ê²ƒì€ ë¶ˆê°€ëŠ¥í•©ë‹ˆë‹¤." #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "ë‹¹ì‹ ì€ ì´ í´ë”ì— ìž‘ì„± ê¶Œí•œì„ ê°€ì§€ê³  있지 않습니다." #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "ì´ ê¶Œí•œì€ ë¼ì´íЏDMì´ ì´ í´ë”ì— ìžˆëŠ” 파ì¼ì„ ì½ëŠ” 걸 í—ˆë½í•˜ì§€ 않습니다." #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "버ë¼ì´ì–´í‹°ëŠ” ê¶Œí•œì„ ì¡°ì •í•  수 있지만, ë‹¹ì‹ ì€ ê´€ë¦¬ìž ê¶Œí•œì„ ì œê³µí•˜ì…”ì•¼ 합니다." #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "ì‚¬ìš©ìž ì„¤ì •" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "비법과 요령" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "최근 변경 사항" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "웹사ì´íЏ 방문하기" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "버그를 보고하거나 새로운 기능 추가 요구하기" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "피드백 보내기" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "버ë¼ì´ì–´í‹°ì— 기부하기" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "페ì´íŒ”ì„ í†µí•´ 기부하기" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "나는 주로 ë‚´ ìžë…€ë“¤ì´ 취침한 í›„ì— ëŠ¦ì€ ì‹œê°„ì¸, ë‚´ ìžíˆ¬ë¦¬ ì‹œê°„ì„ í™œìš©í•´ì„œ 버리어ì´í‹°ë¥¼ 개발합니다. ë‹¹ì‹ ì´ ì €ì—게 아무 ì•¡ìˆ˜ë§Œí¼ " "기부하시면 고맙게 여기겠습니다. ì´ëŠ” ì €ì—게 버ë¼ì´ì–´í‹°ê°€ 당신과 - 여러 사용ìžì—게 가치가 있다는 ê²ƒì„ ë³´ì—¬ì£¼ê³  - ì €ì—게 ì´ í”„ë¡œê·¸ëž¨ì„ " "계ì†í•´ì„œ 활발하게 작업할 수 있는 ë™ê¸°ë¥¼ 유발합니다.\n" "\n" "ì´ í”„ë¡œê·¸ëž¨ì„ ì‚¬ìš©í•´ì£¼ì…”ì„œ ê°ì‚¬í•©ë‹ˆë‹¤,\n" "\n" "피터 레비" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "불러오는 중입니다" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "ì´ë¯¸ì§€ê°€ 너무 작습니다, 무시합니다" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "죄송합니다, %s 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤..." #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "ì´ëŠ” ë§í¬ê°€ ë”는 유효하지 않ìŒì„ 뜻합니다" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "ëª¨ì¢…ì˜ ì´ìœ ë¡œ 불러오는 걸 실패했습니다" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "ë” ìžì„¸í•œ 정보를 보시려면, 터미ë„ì—서 버ë¼ì´ì–´í‹°ë¥¼ -v ì„ íƒ ì‚¬í•­ê³¼ ê°™ì´ ì‹¤í–‰í•˜ì‹œê³  다시 시ë„하십시오" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "ë‹¹ì‹ ì˜ smart_user.json 설정 파ì¼ì´ 올바르지 않ì€ë“¯í•©ë‹ˆë‹¤. ë‹¹ì‹ ì€ VRTG.ORGì— ë‹¤ì‹œ 로그ì¸í•˜ì…”야 합니다." #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "ë‹¹ì‹ ì˜ VRTY.ORG ìžê²© ì¦ëª…ì´ ì˜¤ëž˜ëœ ê²ƒ 같습니다. 다시 로그ì¸í•˜ì‹­ì‹œì˜¤." #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "%dê°œì˜ ì´ë¯¸ì§€ë¥¼ 불러오는 중입니다" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "한 ê°œì˜ ì´ë¯¸ì§€ë¥¼ 불러오는 중입니다" #: ../variety/Smart.py:684 msgid "Finished" msgstr "완료ë˜ì—ˆìŠµë‹ˆë‹¤" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "%s로 로그ì¸ë˜ì—ˆìŠµë‹ˆë‹¤" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "ë‹¹ì‹ ì€ %s로 VRTY.ORGì— ë¡œê·¸ì¸í•˜ì‹œëŠ” 걸 ì›í•˜ì‹­ë‹ˆê¹Œ?" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "VRTY.ORG ë¡œê·¸ì¸ í™•ì¸" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "명언 플러그ì¸ì´ 없습니다" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "ì„¤ì¹˜ëœ ëª…ì–¸ 플러그ì¸ì´ 없습니다" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "ì í•©í•œ 명언 플러그ì¸ì´ 없습니다" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "ë‹¹ì‹ ì€ í‚¤ì›Œë“œ ë° ì €ìž ê²€ìƒ‰ì„ ì§€ì›í•˜ëŠ” 명언 플러그ì¸ì„ 가지고 있지 않습니다" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "ëª…ì–¸ì„ ë¶ˆëŸ¬ì˜¬ 수 없습니다" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "명언 서비스가 ë‹¤ìš´ëœ ê²ƒ 같습니다, ê³„ì† ì‹œë„하고 있습니다" #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "ëª…ì–¸ì„ ì°¾ì„ ìˆ˜ 없습니다" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "아마 ë‹¹ì‹ ì€ ë§¤ìš° 불분명한 무언가를 찾는 중ì¼ì§€ë„ 모릅니다?" variety-0.8.3/po/pl.po000066400000000000000000002332741362063646600146250ustar00rootroot00000000000000# Polish translation for variety # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the variety package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2015-07-02 19:36+0000\n" "Last-Translator: Seweryn Opyd \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "Pobiera cytaty z Goodreads.com" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "Zachowaj oryginaÅ‚" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "Odcienie szaroÅ›ci" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "Mocne rozmazanie" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "SÅ‚abe rozmazanie" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "Obraz olejny" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "Szkic ołówkiem" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "Pointilism" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "Pixellate" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "Folder Ulubionych" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "Folder ZÅ‚apanych" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "" #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "Losowe tapety z Desktoppr.co" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "Astronomiczny Obraz Dnia od NASA" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "" "Możesz przewijać tapety kółkiem myszy, gdy kursor jest nad ikonkÄ… stanu." #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" "Jeżeli chcesz wykonywać wÅ‚asne polecenie przy każdej zmianie tapety lub " "jeżeli używasz innego Å›rodowiska graficznego, zmieÅ„ " "~/.config/variety/scripts. SÄ… tam także przykÅ‚ady dla różnych Å›rodowisk " "graficznych." #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" "Variety może być kontrolowane z linii komend. Można to wykorzystać do " "zdefiniowania skrótów dla najczęściej wykonywanych operacji. Uruchom " "\"variety --help\", żeby zobaczyć możliwe opcje." #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" "Możesz podać źródÅ‚a obrazów przeciÄ…gajÄ…c link na głównÄ… ikonÄ™. Dla dalszego " "przyspieszenia pobierania można użyć monitorowania schowka (zobacz zakÅ‚adkÄ™ " "\"Pobieranie rÄ™czne\")." #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "" "Użycie mocnego zamazania to Å›wietny sposób na artystyczno-abstrakcyjne, ale " "bardzo kolorowe tapety, utrzymane w duchu domyÅ›lnej tapety Ubuntu." #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" "Dodawanie wÅ‚asnych filtrów jest caÅ‚kiem proste: otwórz " "~/.config/variety/variety.conf i skorzystaj z istniejÄ…cych jako przykÅ‚adów. " "Każdy filtr to po prostu lista opcji do przekazania do ImageMagick, który " "zastosuje filtr." #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" "Gdy zaznaczysz źródÅ‚o obrazów, jego obrazy sÄ… pokazywane na dole ekranu. " "Kliknij obraz, aby ustawić go jako tapetÄ™. Kliknij prawym, żeby zamknąć okno " "w celu zmiany jego wyglÄ…du lub zmiany plików. Można wybrać kilka źródeÅ‚ " "obrazów i stworzyć ich połączony widok. Widok ten jest ograniczony do " "kilkuset wybranych obrazów." #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" "Aby włączyć powiadomienia zmiany tapety, odkomentuj ostatnie dwie linie w " "~/.config/variety/scripts/set_wallpaper." #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" "Ikona indykcyjna Variety jest modyfikowalna przez motywy - jeÅ›li wybierzesz " "opcjÄ™ \"Jasne\" dla ikon, Variety sprawdzi czy w bieżącym motywie GTK " "istnieje ikona \"variety-indicator\" i użyje jej zamiast domyÅ›lnej." #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" "Kiedy zapisujesz cytaty do Ulubionych, sÄ… one zapisywane do " "~/.config/variety/favorite_quotes.txt. Ten plik jest kompatybilny z " "lokalnymi źródÅ‚ami cytatów Variety. JeÅ›li chcesz, możesz skopiować je do " "~/.config/variety/pluginconfig/quotes/ i włączyć \"Pliki Lokalne\" w " "źródÅ‚ach cytatów. Ten plik jest także kompatybilny z Unixowym narzÄ™dziem " "\"fortune\"." #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "Zaloguj siÄ™ na VRTY.ORG" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "Nazwa użytkownika: " #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "HasÅ‚o: " #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "Nie masz konta? Zarejestruj siÄ™." #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "Nie pamiÄ™tasz hasÅ‚a?" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" "Możesz również zalogować siÄ™ na VRTY.ORG w " "przeglÄ…darce i kliknąć „Trigger Variety login†" "w swoim profilu." #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "Zaloguj" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "Obrazy" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "Katalogi" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "Flickr" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Wallhaven.cc" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "Reddit" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "Media RSS" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "UsuÅ„ źródÅ‚o, zachowaj pliki" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "UsuÅ„ źródÅ‚a, zachowaj pliki" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "UsuÅ„ źródÅ‚o i pobrane pliki" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "UsuÅ„ źródÅ‚a i pobrane pliki" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "Mapa oÅ›wietlenia Å›wiata włączona" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "Użycie Mapy oÅ›wietlenia Å›wiata wymaga pobierania oraz zmiany tapety co 30 " "minut lub częściej. Ustawienia zostanÄ… dostosowane automatycznie." #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "Add obrazy" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "Anuluj" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "Dodaj" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "" "Dodaj katalogi – tylko katalog nadrzÄ™dny, podkatalogi sÄ… wyszukiwane " "automatycznie" #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "Edytuj…" #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "Pokaż obraz" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "Otwórz katalog" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "Polecane źródÅ‚a obrazów wyłączone" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "Brak uprawnieÅ„ do zapisu" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "Limity wyłączone" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "" "Zmiana katalogu pobierania automatycznie wyłącza limit rozmiaru, aby " "zapobiec przypadkowej utracie danych" #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "Aktualny folder pobierania: %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "Nie można poprawić uprawnieÅ„" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "PowinieneÅ› rÄ™cznie uruchomić tÄ™ komendÄ™:\n" "sudo chmod %s \"%s\"" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "" #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "Witaj w Variety!" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "Kontynuuj" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "" #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "KDE - Ważne, przeczytaj:" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "Ups, serwer zwróciÅ‚ błąd (%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "Nie udaÅ‚o siÄ™ połączyć z serwerem" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "_NastÄ™pny" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "_Poprzedni" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "Bieżąca tapeta" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "Pokaż źródÅ‚o" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "Kopiuj do Ulubionych" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "PrzenieÅ› do Ulubionych" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "UsuÅ„ do _Kosza" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "Wskazówka: PrzewiÅ„ kółkiem nad ikonÄ…,\n" "żeby zmienić na PoprzedniÄ…/NastÄ™pnÄ…" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "" #: ../variety/indicator.py:129 msgid "_Image" msgstr "_Obraz" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "SkÄ…d to jest?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "Pokaż bez efektów" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "Podziel siÄ™ na Facebooku" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "Ustaw OcenÄ™ EXIF" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "Zapisz do Ulubionych" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "Pokaż Ulubione..." #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "Skopiuj do schowka" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "Google Quote" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "Google Author" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "Preferencje…" #: ../variety/indicator.py:252 msgid "Turn off" msgstr "Wyłącz" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "_Cytat" #: ../variety/indicator.py:265 msgid "_History" msgstr "_Historia" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "_Wybieracz tapety" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "Ostatnio _Pobrane" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "" #: ../variety/indicator.py:302 msgid "About" msgstr "O programie" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "Przekaż darowiznÄ™" #: ../variety/indicator.py:310 msgid "Quit" msgstr "Wyjdź" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "" "To źródÅ‚o (RSS lub URL) wydaje siÄ™ błędne lub pod linkiem nie ma żadnej " "treÅ›ci." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "Variety – dodaj Panoramio jako źródÅ‚o obrazów" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "Najedź na interesujÄ…cy ciÄ™ obszar." #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Variety - opublikuj na Facebooku" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "" "Opublikuj link do bieżącej tapety na Facebooku. Dodaj też nastÄ™pujÄ…cy tekst " "(lub nie):" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "Użyj aktualnego cytatu" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "Nigdy wiÄ™cej nie pytaj, zawsze używaj powyższej frazy" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "Nie znaleziono żadnych obrazów" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "Jest już w Ulubionych" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "PrzenieÅ› do _Ulubionych" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "ZÅ‚apane: Pokaż źródÅ‚o" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "Pokaż w %s" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "Autor: %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "Czy filtrowanie nie jest za ostre?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "Variety znalazÅ‚o zbyt maÅ‚o obrazów speÅ‚niajÄ…cych wymagania" #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "Dodaj wiÄ™cej źródeÅ‚ lub poczekaj na pobranie nowych obrazów" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "ProszÄ™ dodać wiÄ™cej źródeÅ‚ obrazów" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "Nie ma już wiÄ™cej tapet" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "Bieżącej tapety nie ma w źródÅ‚ach" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "" "Nie można przenieść do %s. Prawdopodobnie nie masz uprawnieÅ„ do " "przeniesienia tego pliku." #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "" "Nie można przenieść do %s. Prawdopodobnie nie masz uprawnieÅ„ do skopiowania " "tego pliku." #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "Nie można usunąć" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "Nie masz uprawnieÅ„ do usuniÄ™cia %s do Kosza" #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "" "Otworzy siÄ™ edytor pliku konfiguracji. Po zapisaniu pliku i zamkniÄ™ciu " "edytora zmiany zostanÄ… zastosowane." #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [opcje] [pliki lub adresy URL]\n" "\n" "Podanie plików lokalnych doda je do kolejki Variety.\n" "Podanie nielokalnych adresów URL sprawi, że Variety zÅ‚apie je do ZÅ‚apanych i " "umieÅ›ci w kolejce.\n" "\n" "Å»eby ustawić konkretnÄ… tapetÄ™: %prog /jakiÅ›/lokalny/obraz.jpg --next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "" "Pokaż logi (-vv pokazuje nawet lepsze debugowanie, -vvv debuguje także " "variety_lib)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "Zamknij uruchomionÄ… instancjÄ™" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "Pokaż poÅ‚ożenie bieżącej tapety. Możliwe gdy aplikacja już dziaÅ‚a." #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "Pokaż nastÄ™pnÄ…" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "Pokaż poprzedniÄ…" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "Pokaż nastÄ™pnÄ…, pomiÅ„ historiÄ™" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "" "PrzenieÅ› bieżącÄ… tapetÄ™ do kosza. Możliwe tylko wtedy, gdy aplikacja już " "dziaÅ‚a." #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "PrzenieÅ› bieżącÄ… tapetÄ™ do kosza. Możliwe tylko wtedy, gdy aplikacja już " "dziaÅ‚a." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "PrzenieÅ› bieżącÄ… tapetÄ™ do Ulubionych. Możliwe tylko wtedy, gdy aplikacja " "już dziaÅ‚a." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "Wstrzymaj/Wznów" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "Pokaż nastÄ™pny cytat" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "Pokaż poprzedni cytat" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "Pokaż nastÄ™pny cytat, pomiÅ„ historiÄ™" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "Wstrzymaj/Wznów cytaty" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "Zapisz bieżący cytat do Ulubionych" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "Pokaż/Ukryj historiÄ™" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "Pokaż/Ukryj Niedawno Pobrane" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "Pokaż preferencje" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "" "Pokaż selektor do rÄ™cznego wyboru tapety - pasek z obrazami z aktywnego " "źródÅ‚a obrazów" #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "Ustawia i zastosowuje wybranÄ… opcjÄ™. Nazwy opcji sÄ… takie same jak użyte w " "pliku konfiguracyjnym ~/.config/variety/variety.conf. Wiele opcji może być " "ustawione za pomocÄ… jednego polecenia . PrzykÅ‚ad: 'variety --set-option icon " "Dark --set-option clock_enabled True'. UÅ»YWAĆ OSTROÅ»NIE: Zmieniasz plik " "ustawieÅ„ bezpoÅ›rednio niestrzeżonym sposobem." #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "opcje --next/--fast-forward i --previous siÄ™ wykluczajÄ…" #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "opcje --trash i --favorite siÄ™ wykluczajÄ…" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "opcje --pause i --resume siÄ™ wykluczajÄ…" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "opcje --quotes-next/--quotes-fast-forward i --quotes-previous siÄ™ wykluczajÄ…" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "Plik nie jest obrazem" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "Dodane do kolejki" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "NaciÅ›nij NastÄ™pny aby zobaczyć" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "ZÅ‚apane" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "Czy używasz najnowszej wersji Variety?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "" #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "NieobsÅ‚ugiwane polecenie" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "Nie pytaj wiÄ™cej, zawsze używaj aktualnego cytatu" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "Opublikowano" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "Możesz otworzyć swój kanaÅ‚ Facebooka, żeby zobaczyć post" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "Nie udaÅ‚o siÄ™ opublikować" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "WystÄ…piÅ‚ błąd podczas tworzenia wpisu autostartu.\n" "Uruchom aplikacjÄ™ z konsoli z flagÄ… -v i spróbuj jeszcze raz." #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "" #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "" #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "" #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "Variety - UdostÄ™pnianie na Facebooku" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "UdostÄ™pnianie na Facebooku" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" "Pierwszy raz udostÄ™pniasz na Facebooku. UdostÄ™pnanie przez Variety jest " "dostÄ™pne dla obrazów pochodzÄ…cych ze źródeÅ‚ z sieci i dla cytatów. DziaÅ‚a to " "nastÄ™pujÄ…co:\n" "\n" "1. Zaloguj siÄ™ na Facebooku\n" "Facebook zostanie otwarty w domyÅ›lnej przeglÄ…darce. JeÅ›li nie jesteÅ› jeszcze " "zalogowany, zostaniesz o to poproszony.\n" "\n" "2. Pozwól Variety publikować na swojej " "tablicy.\n" "Zostaniesz poproszony o pozwolenie Variety na publikowanie w Twoim imieniu " "na swojej tablicy. Variety użyje tego uprawnienia jedynie do publikowania " "wskazanych przez Ciebie obrazów i cytatów i niczego innego.\n" "\n" "3. Skonfiguruj przeglÄ…darkÄ™ tak, aby linki " "\"variety://\" byÅ‚y otwierane przez Variety lub xdg-open\n" "NastÄ™pnie zostaniesz przekierowany na stronÄ™ z instrukcjami jak w Twojej " "przeglÄ…darce powiÄ…zać linki \"variety://\" z Variety. Wykonaj te instrukcje, " "aby zakoÅ„czyć procedurÄ™. Wystarczy to zrobić raz.\n" "\n" "Informacje o loginach i hasÅ‚ach nie sÄ… przechowywane lokalnie, jedynie token " "OAuth otrzymany z Facebooka, który jest ważny przez kilka tygodni. Po jego " "wygaÅ›niÄ™ciu zostaniesz poproszony o ponowne zalogowanie." #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "Pobiera cytaty z TheQuotationsPage.com" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "" #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "Wybierz folder" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "OK" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "Otrzymano sygnaÅ‚ zakoÅ„czenia. Zamykanie..." #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "" "Variety jest już uruchomione. WysyÅ‚anie sygnaÅ‚u do dziaÅ‚ajÄ…cego procesu." #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "Dół" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "Góra" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "Lewo" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "Prawo" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "Pozycja" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "Rozmiar" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "Pokaż folder zawierajÄ…cy" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "Zamknij" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "Nie udaÅ‚o siÄ™ ustawić oceny EXIF" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "Bez oceny" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "Odrzucone" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "Historia" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Niedawno Pobrane" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Obrazy" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "Copyright (c) 2012, Peter Levi " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "O Variety" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "Automatyczny pobieracz i zmieniacz tapet." #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "Variety" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Zmieniacz tapet Variety" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "NastÄ™pna" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "Poprzednia" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "Wstrzymaj / Kontynuuj" #: ../variety.desktop.in.h:6 msgid "History" msgstr "Historia" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "Preferencje" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "Variety – dodaj Wallhaven.cc jako źródÅ‚o obrazów" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "Wpisz sÅ‚owa kluczowe lub wklej URL tutaj: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "Sprawdzanie wyników szukania..." #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "Pokazuje cytaty, zdefiniowane w lokalnych plikach tekstowych.\n" "Umieść wÅ‚asne pliki .txt w: ~/.config/variety/pluginconfig/quotes/.\n" "Schemat pliku:\n" "\n" "cytat -- autor\n" ".\n" "drugi cytat -- inny autor\n" ".\n" "itd...\n" "\n" "PrzykÅ‚ad: http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "Variety - dodaj kanaÅ‚ Media RSS" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "ProszÄ™ wklej adres URL lub Media RSS poniżej. Zauważ, że tylko Media RSS " "jest wspierane, nie ogólne RSS. Media RSS zawiera tag media:content łączÄ…cy " "bezpoÅ›rednio do aktualnej zawartoÅ›ci. Niektóre przykÅ‚ady stron " "umożliwiajÄ…cych Media RSS: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "Wklej URL lub kanaÅ‚ RSS: " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "ChwilkÄ™, sprawdzanie zawartoÅ›ci URL" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "Autoryzacja zakoÅ„czona sukcesem" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "Publikowanie..." #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "Autoryzacja siÄ™ nie powiodÅ‚a" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "Kopiuj do Ulubionych lub PrzenieÅ› do Ulubionych" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "Przywróć domyÅ›lne" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "" "Wybierz 'Kopiuj do Ulubionych' lub 'PrzenieÅ› do Ulubionych' w menu w " "zależnoÅ›ci od poÅ‚ożenia obrazu:" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "ProszÄ™ wprowadź jedno wejÅ›cie na liniÄ™, każde w formie :, gdzie Folder może być: Pobrane, ZÅ‚apane, Inne lub " "specyficzna Å›cieżka do folderu.\n" "Kolejność jest ważna. Kiedy obraz jest pokazywany, pierwszy folder na liÅ›cie " "zawierajÄ…cy ten obraz decyduje jakie opcje bÄ™dÄ… pokazywane w menu. 'Inne' " "pasuje do każdego pliku i powinien być ostatni na liÅ›cie.\n" "\n" "PrzykÅ‚ad:\n" "\tPobrane:Kopiuj\n" "\tZÅ‚apane:PrzenieÅ›\n" "\t/pics/RandomImages:PrzenieÅ›\n" "\t/pics/OrganizedAlbums:Kopiuj\n" "\tInne:Oba" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "" #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "Pobiera cytaty z QuotesDaddy RSS.\n" "Szukaie wedÅ‚ug autorów lub tagów nie jest wspierane." #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Variety - dodaj Flickr jako źródÅ‚o obrazów" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "Sprecyzuj kryteria dla Flickr. ZdjÄ™cia, " "które speÅ‚niajÄ… wszystkie warunki bÄ™dÄ… pobrane. Zostaw niepotrzebnÄ… resztÄ™ " "kryteriów pustÄ…." #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "Tagi: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "Lista etykiet rozdzielona przecinkami. ZdjÄ™cie siÄ™ kwalifikuje gdy zawiera " "je wszystkie.\n" "PrzykÅ‚ad: żółty,samochód" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "Użytkownik: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "ProszÄ™ wkleić adres URL do photostream'a użytkownika lub jego zdjÄ™cia.\n" "PrzykÅ‚ad: http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "Grupa: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "ProszÄ™ podać URL grupy.\n" "PrzykÅ‚ad: http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "Tekst:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "Wyszukiwanie tekstu w tytuÅ‚ach, opisach i tagach zdjęć. Wyklucza sÅ‚owa " "poprzedzone -.\n" "PrzykÅ‚ad: jabÅ‚ko -ciasto" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "sekund(-y)" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "min" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "godz." #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "dni" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "Preferencje" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "Ogólne" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "Uruchom Variety wraz z systemem" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "Zmieniaj tapetÄ™ co: " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "Najmniejszy odcinek czasu to 5 sekund" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "ZmieÅ„ tapetÄ™ na starcie" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "Aktywne" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "Typ" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "PoÅ‚ożenie" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "_Dodaj..." #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "Dodaj obrazy, foldery lub źródÅ‚a obrazów online" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "_Edytuj..." #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "Edytuj wybrane źródÅ‚o" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "_UsuÅ„..." #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "UsuÅ„ zaznaczone źródÅ‚a" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "_Użyj" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "Aktywuj zaznaczone żródÅ‚a i deaktywuj resztÄ™" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "Pobierz tapetÄ™ co: " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "Najmniejszy odstÄ™p czasu to minuta" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "do " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "Bieżący folder pobierania " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "Uwaga: NIE używaj tej opcji jeżeli twój folder pobierania zawiera inne ważne " "pliki. Variety zastosuje limit i obojÄ™tnie co do zawartoÅ›ci usunie starsze " "pliki." #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "Ogranicz rozmiar folderu pobierania do " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "Najmnieszy rozmiar to 50 MB" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "MB przez usuwanie starszych plików jeÅ›li niezbÄ™dne" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "Ulubione" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "Kopiuj ulubione tapety do " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "Filtry" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "Dodawaj losowe filtry do tapet (dziÄ™ki ImageMagick):" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "Cytaty" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "Pokaż losowy cytat na pulpicie" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "Kolor tekstu: " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "Czcionka: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "Kolor tÅ‚a: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "Przezroczystość tÅ‚a: " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " Przezroczyste" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "Nieprzezroczyste" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "Rysuj cieÅ„ tekstu" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "WyglÄ…d" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "Szerokość obszaru cytatów: " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "WÄ…ski " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "Szeroki" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "Pozycja poziomo: " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "Lewa strona " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "Pozycja pionowo: " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "Góra " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "PoÅ‚ożenie" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "Pokaż cytaty z: " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "WiÄ™cej " "wtyczek" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "Pokaż tylko te tagi i autorów. Zostaw puste, aby cytaty byÅ‚y losowe." #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "PrzykÅ‚ad: zabawny, interesujÄ…cy" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "PrzykÅ‚ad: Albert Einstein, Voltaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "Autorzy: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "ŹródÅ‚a i filtrowanie" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "ZmieÅ„ cytat co " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "Najmniejszy odstÄ™p czasu to 10 sekund" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "Regularna zmiana" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "Zegar" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "Pokaż duży, cyfrowy zegar na pulpicie" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "Aby zmienić wyglÄ…d zegara zmieÅ„ wÅ‚asność clock_filter w pliku ustwawieÅ„ " "Variety (~/.config/variety/variety.conf). Możesz skorzystać z komentarzy w " "~/.config/variety/variety_latest_default.conf jako przewodnika." #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "Czcionka zegara: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "Czcionka daty: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "Nie dziaÅ‚a? Przeczytaj to. " "Jak jeszcze inaczej skonfigurować zegar? Przeczytaj to." #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "Efekty" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "Folder ZÅ‚apanych" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "Zapisz rÄ™cznie pobrane tapety do " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "PrzeciÄ…gnij i upuść" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "Ikona Variety na pasku głównym może być używana do upuszczania. Upuść plik " "lub adres URL obrazu a zostanie on zapisany do folderu zÅ‚apanych. Wtedy " "można klikajÄ…c NastÄ™pna ustawić jÄ… na pulpicie.\n" "Aby pokazać ikonÄ™ na pasku głównym wybierz O programie lub Preferencje. " "Możesz jÄ… także przypiąć do paska dla wygody w upuszczaniu." #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "Monitorowanie schowka" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "Monitoruj schowek w poszukiwaniu adresów obrazów" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "Ale pobieraj tylko wtedy, gdy źródÅ‚em jest jeden z tych serwisów:" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "RÄ™cznie pobieranie" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "Gdy możliwe używaj obrazów, które sÄ…:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "UÅ‚ożone poziomo" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "WielkoÅ›ci co najmniej " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "% rozdzielczoÅ›ci ekranu" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "Kolor" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "Ciemne czy jasne:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "Ciemne" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "Jasne" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "ZawierajÄ…ce ten kolor: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(Efekt widoczny po chwili poczÄ…tkowego szukania)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "Ocena" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "PosiadajÄ… ocenÄ™ EXIF co najmniej " #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "Kolor i wielkość" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "Ikona wskaźnika" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "Ikona wskaźnika:" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "Jasna" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "Ciemna" #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "Użyj bieżącej tapety" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "WÅ‚asny obraz..." #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "Brak" #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "Wybierz ikonÄ™" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "Gdy ikonka jest niewidoczna, Variety może być sterowane z linii poleceÅ„ lub " "listÄ… (prawy klik) głównego paska. Uruchom \"variety --help\", aby poznać " "wszystkie opcje." #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "Operacje na Ulubionych" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "Operacje na Ulubionych pokazywane w menu:" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "Kopiuj do Ulubionych" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "Kopiuj i PrzenieÅ›" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "W zależnoÅ›ci od folderu..." #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "Pokaż okno, aby edytować post przed opublikowaniem na Facebooku" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "Wsparcie dla Ekranu Logowania" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "" "Upewnij siÄ™, że tapety ustawione przez Variety bÄ™dÄ… użyte przez ekran " "logowania" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "Ostrzeżenie PrywatnoÅ›ci: LightDM potrzebuje uprawnieÅ„ do czytania " "pliku. Gdy opcja jest włączona, Variety skopiuje tapety do publicznego " "folderu i zmieni ich uprawnienia na odczytywalne. DomyÅ›lnie, jest to " "~/Pictures jeÅ›li twój folder domowy nie jest zaszyfrowany, i " "/usr/share/backgrounds jeÅ›li jest. ProszÄ™ używać ze szczególnÄ… ostrożnoÅ›ciÄ… " "na systemach z wieloma użytkownikami." #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "Kopiuj tapety do folderu: " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "Przywróć domyÅ›lne" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "CiÄ…gle nie dziaÅ‚a?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "" "WyglÄ…da na to, że folder domowy jest zaszyfrowany, wiÄ™c zawarte w nim pliki " "nie bÄ™dÄ… dziaÅ‚ać." #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "Brak uprawnieÅ„ do zapisu do tego folderu." #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "LightDM nie ma uprawnieÅ„ do odczytania plików z tego folderu." #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "" "Variety może dostosować uprawnienia, jeżeli otrzyma uprawnienia " "administratora." #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "Dostosuj" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "Sztuczki i kruczki" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "Ostatnie zmiany" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "Odwiedź stronÄ™" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "ZgÅ‚oÅ› błąd lub zaproponuj funkcjÄ™" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "WyÅ›lij zgÅ‚oszenie" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "Wspomóż Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "Wspomóż przez PayPal" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "Rozwijam Variety w wolnym czasie, co oznacza najczęściej późno w nocy, gdy " "moje dzieci Å›piÄ…. Każda kwota bÄ™dzie mile widziana. W ten sposób możesz " "pokazać, że Variety jest dla Ciebie wartoÅ›ciowa i zmotywować mnie do dalszej " "pracy.\n" "\n" "DziÄ™kujÄ™,\n" "Peter Levi" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "Pobieranie" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "Obraz jest za maÅ‚y, ignoruj" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "" #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "Pobieranie siÄ™ nie powiodÅ‚o z jakiegoÅ› powodu" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "" "Aby dowiedzieć siÄ™ wiÄ™cej, prosze uruchom Variety w terminalu z opcjÄ… -v i " "powtórz akcjÄ™" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "" #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "" #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "" #: ../variety/Smart.py:684 msgid "Finished" msgstr "" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "Brak wtyczek do cytatów" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "Nie ma już wiÄ™cej zainstalowanych wtyczek do cytatów" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "Brak odpowiednich wtyczek do cytatów" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "" "Brakuje wtyczek do cytatów, które wspierajÄ… szukanie po sÅ‚owach kluczowych " "lub autorach." #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "Nie można pobrać cytatów" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "" "UsÅ‚uga pobierania cytatów może być niedostÄ™pna, żądanie bÄ™dzie ponowione" #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "Nie znaleziono cytatów" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "Może szukasz czegoÅ› dziwnego?" variety-0.8.3/po/ru.po000066400000000000000000003312141362063646600146310ustar00rootroot00000000000000# Russian translation for variety # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the variety package. # FIRST AUTHOR , 2012. # msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2017-09-29 17:39+0000\n" "Last-Translator: Rodion R. \n" "Language-Team: Russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "Загружать цитаты Ñ Goodreads.com" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "Сохранить оригинал" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "Оттенки Ñерого" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "ЖёÑткое размытие" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "МÑгкое размытие" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "МаÑлÑÐ½Ð°Ñ Ð¶Ð¸Ð²Ð¾Ð¿Ð¸ÑÑŒ" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "Карандашный наброÑок" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "Пуантилизм" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "ПикÑелизациÑ" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "Избранные" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "Загруженные вручную" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "" "Рекомендованные Variety. ПодÑтраиваетÑÑ Ð¿Ð¾Ð´ ваш вкуÑ, оÑновываÑÑÑŒ на " "избранных и удалённых изображениÑÑ…." #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "" "Избранные Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… пользователей Variety (могут Ñодержать " "неприÑтойные изображениÑ)" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "Случайные обои Ñ Desktoppr.co" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "NASA: аÑтрономичеÑкое фото днÑ" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "Карта оÑвещённоÑти Земли Солнцем — живые обои Ñ Die.net" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "Фото Ð´Ð½Ñ Ð¾Ñ‚ Bing" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "Фото выÑокого Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸Ð· Unsplash.com" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "Ð’Ñ‹ можете менÑть обои прокруткой колеÑа мыши на индикаторе." #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" "ЕÑли вы хотите каждый раз при Ñмене обоев выполнÑть Ñвои команды или " "пользуетеÑÑŒ альтернативным окружением рабочего Ñтола, пожалуйÑта, " "отредактируйте Ñкрипты в ~/.config/variety/scripts. Примеры Ð´Ð»Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ñ… " "рабочих Ñред помещены там же." #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" "Variety можно управлÑть из командной Ñтроки, например, назначить горÑчие " "клавиши Ð´Ð»Ñ Ñ‡Ð°Ñто иÑпользуемых операций. ЗапуÑтите «variety --help», чтобы " "увидеть вÑе доÑтупные команды." #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" "Ð’Ñ‹ можете перетаÑкивать ÑÑылки на Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ файлы на значок в панели " "запуÑка Ð´Ð»Ñ Ð¸Ñ… загрузки и иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² качеÑтве обоев. Ð”Ð»Ñ Ð±Ñ‹Ñтрой " "загрузки Ñо Ñпецифичных Ñайтов, вы также можете иÑпользовать Ñлежение за " "буфером обмена (Ñм. вкладку Â«Ð ÑƒÑ‡Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°Â»)." #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "" "ИÑпользование фильтра жёÑткого Ñ€Ð°Ð·Ð¼Ñ‹Ñ‚Ð¸Ñ â€” лучший ÑпоÑоб получить " "абÑтрактные, ненавÑзчивые, но, в то же времÑ, краÑочные обои, подобные " "Ñтандартным в Ubuntu." #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" "Добавить Ñвои ÑобÑтвенные фильтры доÑтаточно проÑто: откройте " "~/.config/variety/variety.conf в текÑтовом редакторе и воÑпользуйтеÑÑŒ " "ÑущеÑтвующими, как примером. Любой фильтр — вÑего лишь набор опций Ð´Ð»Ñ " "команды Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· ImageMagick." #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" "Когда вы выберете иÑточник изображений, его Ñодержимое поÑвитÑÑ Ð² окне в " "нижней чаÑти Ñкрана. Щёлкните там по изображению, чтобы назначить его " "обоÑми. Щёлкните правой кнопкой мыши, чтобы закрыть окно, изменить его " "внешний вид или выполнить операции Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸. Ð’Ñ‹ можете выбрать неÑколько " "иÑточников Ð´Ð»Ñ Â«Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½Ñ‘Ð½Ð½Ð¾Ð³Ð¾Â» проÑмотра ÑÑкизов. Обратите внимание, что " "проÑмотр миниатюр ограничен неÑколькими ÑотнÑми Ñлучайно выбранных " "изображений." #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" "Ð”Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ð¹ при Ñмене обоев раÑкомментируйте две поÑледние " "Ñтроки в файле ~/.config/variety/scripts/set_wallpaper." #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" "Значок индикатора Variety поддерживает темы: еÑли вы выберете «Светлый» вид, " "то Variety Ñперва проверит, еÑть ли в текущей GTK-теме значок «variety-" "indicator», и иÑпользует его вмеÑто вÑтроенного." #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" "Когда вы добавлÑете цитаты в Избранные, они по умолчанию ÑохранÑÑŽÑ‚ÑÑ Ð² " "~/.config/variety/favorite_quotes.txt. Этот файл ÑовмеÑтим Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ " "иÑточником цитат Variety. ЕÑли хотите его иÑпользовать, Ñкопируйте в " "~/.config/variety/pluginconfig/quotes/ и задейÑтвуйте локальный иÑточник " "цитат. Этот файл также ÑовÑеÑтим Ñ Unix-утилитой fortune." #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "Вход в VRTY.ORG" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: " #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "Пароль: " #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "Ðет аккаунта? ЗарегиÑтрируйÑÑ Ð·Ð´ÐµÑÑŒ" #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "Забыли пароль?" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" "Совет: вы также можете войти в VRTY.ORG в " "браузере и нажать ÑÑылку \"Trigger Variety " "login\" в Ñвоём профиле." #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "Войти" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "Ð’Ñе" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "ИзображениÑ" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "Папки" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "Flickr" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Wallhaven.cc" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "Reddit" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "Медиа RSS" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "Удалить иÑточник, Ñохранить файлы" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "Удалить иÑточники, Ñохранить файлы" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "Удалить иÑточник и загруженные файлы" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "Удалить иÑточники и загруженные файлы" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "Включена карта оÑвещённоÑти Земли Солнцем" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "Карта оÑвещённоÑти требует загрузки и Ñмены Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»Ð¾Ð¼ 30 минут или " "меньше. ÐаÑтройки Ñкорректированы автоматичеÑки." #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "Добавить изображениÑ" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "Отмена" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "Добавить" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "" "Добавить папки — добавлÑйте только корневые папки, поиÑк в подпапках " "оÑущеÑтвлÑетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки." #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "Изменить..." #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "Показать изображение" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "Открыть папку" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "Рекомендованные иÑточники изображений отключены" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "Ðет прав Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "Лимит отключён" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "" "Смена папки загрузки автоматичеÑки отключает ограничение размера Ð´Ð»Ñ " "Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñлучайной потери данных" #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° загрузки: %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "Ðе удалоÑÑŒ наÑтроить права доÑтупа" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "Ð’Ñ‹ можете попробовать выполнить Ñту команду вручную:\n" "sudo chmod %s \"%s\"" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "Ðвторизовано как: " #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "Ðноним" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "Войти или зарегиÑтрироватьÑÑ" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "Сменить пользователÑ" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "Добро пожаловать в Variety!" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "Продолжить" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" "Variety – Ñто автоматичеÑÐºÐ°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° Ð´Ð»Ñ Ñмены обоев. Смена идёт на " "регулÑрной оÑнове, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ ÐºÐ¾Ð¼Ð¿ÑŒÑŽÑ‚ÐµÑ€Ð° и из онлайн-" "иÑточников. Она работает в фоновом режиме – Ð´Ð»Ñ Ð½Ð°Ñтройки и ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ " "нажмите иконку в ÑиÑтемном трее." #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" "Variety — Ñто Ñвободное программное обеÑпечение, Ñозданное болгарÑким " "разработчиком Петром Леви. ЕÑли оно вам понравилоÑÑŒ, пожалуйÑта, Ñделайте пожертвование." #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "" "Теперь уделите, пожалуйÑта, немного времени наÑтройкам на Ñледующих Ñкранах." #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "ПользователÑм KDE — пожалуйÑта, прочтите, Ñто важно:" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" "ВероÑтно, вы работаете в KDE. Ð’ KDE 4 невозможно менÑть обои прÑмо из " "программы — нет API Ð´Ð»Ñ Ñтого. Чтобы Variety заработала, пожалуйÑта, " "прочтите и выполните инÑтрукции." #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "Ой, Ñервер вернул ошибку (%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "Ðе удалоÑÑŒ ÑоединитьÑÑ Ñ Ñервером" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "_Следующее" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "_Предыдущее" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "Текущее изображение на рабочем Ñтоле" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "Показать оригинал" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "Копировать в Избр_анные" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "ПеремеÑтить в Избранные" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "Удалить в _Корзину" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "_Дальше, пропуÑтив уже проÑмотренные" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "Совет: прокручивайте обои вперёд и назад\n" "колеÑом мыши на индикаторе программы" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "ПриоÑтановить на текущем" #: ../variety/indicator.py:129 msgid "_Image" msgstr "_Изображение" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "Откуда Ñто?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "Показать без Ñффектов" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "Google поиÑк по картинке" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "ПоделитьÑÑ Ñобытием на Facebook" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "Задать EXIF оценку" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "Сообщить о неприÑтойном изображении" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "Сохранить в Favorites" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "Смотреть Favorites..." #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "Копировать в буфер обмена" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "ИÑкать цитату в Google" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "ИÑкать автора в Google" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "Параметры…" #: ../variety/indicator.py:252 msgid "Turn off" msgstr "Выключить" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "_Цитата" #: ../variety/indicator.py:265 msgid "_History" msgstr "_ИÑториÑ" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "_Переключатель обоев" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "Ðо_вые загрузки" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "ЗапуÑтить Ñлайд-шоу" #: ../variety/indicator.py:302 msgid "About" msgstr "О программе" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "ПожертвованиÑ" #: ../variety/indicator.py:310 msgid "Quit" msgstr "Выход" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "_БезопаÑный режим" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "Это не похоже на URL фида медиа-RSS либо нет доÑтупа." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "Variety — VRTY.ORG" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "Ðет, ÑпаÑибо" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" "ПредÑтавлÑем VRTY.ORG! Желаете приÑоединитьÑÑ?" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" "VRTY.ORG объединÑет пользователей Variety " "Ñо Ñхожими вкуÑами и предоÑтавлÑет Ñупер-удобные пути, чтобы менÑть обои, " "находить и добавлÑть новые иÑточники изображений в Variety и Ñледовать " "избранным других пользователей." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" "УчаÑтвовать очень проÑто - профиль ÑоздаётÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки, по мере оценки " "изображений, Ñкачанных Variety. Профиль защищён от третьих лиц, еÑли профиль " "не ÑвлÑетÑÑ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼. ОзнакомитьÑÑ Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»Ð°Ð¼Ð¸ ÑервиÑа и политикой приватноÑти." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" "УчаÑтие необходимо Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¸Ñ… опций Variety как, например, ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¸Ð·Ð±Ñ€Ð°Ð½Ð½Ð¾Ð³Ð¾ между компьютерами." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "УчаÑтвовать в VRTY.ORG" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "Variety — добавление иÑточника изображений Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "ПожалуйÑта, увеличьте маÑштаб облаÑти ваших интереÑов" #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Variety - Опубликовать в Facebook" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "" "Опубликовать ÑÑылку на текущие обои на Facebook. Включить Ñтот текÑÑ‚ вмеÑте " "Ñ ÑÑылкой (или оÑтавить пуÑтым):" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "ИÑпользовать текущую цитату" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "Ðе Ñпрашивать больше, вÑегда иÑпользовать текÑÑ‚ выше" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ найдены" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "Ð’Ñегда в Избранные" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "ПеремеÑтить в Избр_анные" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "Выбранное: Показать оригиналы" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "Показать на %s" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "ÐеизвеÑтно" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "БезопаÑный режим: включён" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "Включить безопаÑный режим" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "Ðвтор: %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "Возобновить регулÑрные изменениÑ" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "Фильтр Ñлишком Ñтрог?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "" "Variety находит мало фотографий, подходÑщих вашим критериÑм фильтрации " "изображений" #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "" "ПожалуйÑта, добавьте неÑколько иÑточников Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ дождитеÑÑŒ загрузки" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "ПожалуйÑта, добавьте неÑколько иÑточников изображениÑ" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "Больше нет изображений" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "Данное изображение отÑутÑтвует в иÑточнике" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "Ðе могу перенеÑти в %s. Возможно не доÑтаточно прав Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ." #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "" "Ðе могу Ñкопировать в %s. Возможно не доÑтаточно прав Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ." #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "Ðе могу удалить" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ прав Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ %s в корзину." #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" "Ðе удалоÑÑŒ удалить в корзину, чтобы узнать подробноÑти, проверьте " "variety.log." #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" "Удалить в корзину не удалоÑÑŒ, потому что не уÑтановлена подходÑÑ‰Ð°Ñ " "программа. ПожалуйÑта, уÑтановите gvfs (gvfs-bin), trash-cli или konqueror." #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "ÐÐ½Ð¾Ð½Ð¸Ð¼Ð½Ð°Ñ ÑтатиÑтика иÑпользованиÑ" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" "Variety Ñобирает анонимную ÑтатиÑтику иÑпользованиÑ. \n" "Она помогает нам улучшать программу и не передаётÑÑ ÐºÐ¾Ð¼Ñƒ-либо ещё. \n" "Прочитать подробнее или отключить функцию можно на вкладке Â«Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¸ " "общеÑтво»" #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "" "Ñ Ð¾Ñ‚ÐºÑ€Ð¾ÑŽ редактор Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ð¼ файлом и применю Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле того " "как вы Ñохраните файл и закроете редактор." #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [опции] [файлы или адреÑа]\n" "\n" "Передача локальных файлов добавит их в очередь Variety.\n" "Передача удаленных URL-адреÑов добавит их в выбранную папку и помеÑтит их в " "очередь.\n" "\n" "Чтобы уÑтановить конкретную картинку: %prog /любаÑ/локальнаÑ/картинка.jpg --" "next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "" "Показывать журналируемые ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ (-vv показывает более тонкие отладочные " "ÑообщениÑ, -vvv ещё и отноÑÑщиеÑÑ Ðº variety_lib)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "Выйти из запущенного приложениÑ" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "" "Отобразить путь к изображению Ñ Ñ€Ð°Ð±Ð¾Ñ‡ÐµÐ³Ð¾ Ñтола. Работает только при " "запущенном приложении." #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "Показать Ñледующие обои" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "Показать предыдущие обои" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "Показать Ñледующее изображение Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÑ Ð¸Ñторию" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "" "ПеремеÑтить текущие обои в Корзину. Работает только при запущенном " "приложении." #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Копировать текущие обои в Избранные. Работает только при запущенном " "приложении." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "ПеремеÑтить текущие обои в Избранные. Работает только при запущенном " "приложении." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "ПриоÑтановить на текущем изображении" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "Возобновить регулÑрную Ñмену изображений" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "Переключение пауза\\воÑпроизведение" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "Показать Ñледующую цитату" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "Показать предыдущую цитату" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "Показать Ñледующую цитату Ð¸Ð³Ð½Ð¾Ñ€Ð¸Ñ€ÑƒÑ Ð¸Ñторию" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "Переключение пауза\\воÑпроизведение Ð´Ð»Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "Сохранить текущую цитату в Favorites" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "Переключить отображение иÑтории" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "Переключить отображение поÑледних загрузок" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "Показать диалог наÑтроек" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "" "Показать переключатель обоев — панель ÑÑкизов изображений из активных " "интернет-иÑточников" #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "Указание и применение опций. ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿Ñ†Ð¸Ð¹ те же что и в файле конфигурации " "~/.config/variety/variety.conf. ÐеÑколько опций можно указать одной " "командой. Пример: \"variety --set-option icon Dark --set-option " "clock_enabled True\". ИСПОЛЬЗУЙТЕ С ОСТОРОЖÐОСТЬЮ: Ð’Ñ‹ менÑете файл наÑтроек " "непоÑредÑтвенно без механизмов защиты корректноÑти." #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "опции --next/--fast-forward и --previous взаимоиÑключающие" #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "опции --trash и --favorite взаимоиÑключающие" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "опции --pause и --resume взаимоиÑключающие" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "опции --quotes-next/--quotes-fast-forward и --quotes-previous " "взаимоиÑключающие" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "Ðе изображение" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "Добавлено в очередь" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "Ðажмите Далее Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "Полученные" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "Ðеподдерживаемый тип иÑточника" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "Ð’Ñ‹ иÑпользуете поÑледнюю верÑию Variety?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "Ðовый иÑточник изображений добавлен" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "Такой иÑточник изображений уже ÑущеÑтвует, включаю его" #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "Загружено и применено" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "Работает!" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "Ура, ÑÑылки Variety работают. Великолепно!" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "ÐÐµÐ¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÐµÐ¼Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "Ðе удалоÑÑŒ обработать данный variety:// URL" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "ЗапуÑк Ñ Ð²ÐµÐ´ÐµÐ½Ð¸ÐµÐ¼ журнала, чтобы видеть детали" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "Больше не Ñпрашивать и вÑегда иÑпользовать текущую цитату" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "Опубликовано" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "Ð’Ñ‹ можете перейти к Ñвоим фидам в Facebook Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра поÑта" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "Ðе могу опубликовать" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "Ðе удалоÑÑŒ Ñоздать запиÑÑŒ в автозагрузке" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "Ошибка при Ñоздании пункта автозагрузки\n" "ПожалуйÑта, запуÑтите в терминале Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ -v и попробуйте ещё раз." #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "Ðет изображений" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "Ðет изображений в папках Ð´Ð»Ñ Ñлайд-шоу" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "РеÑÑƒÑ€Ñ Wallhaven отключён" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" "ПожалуйÑта, погуглите «Python SNI SSL error», еÑли вы хотите решить проблему " "ÑамоÑтоÑтельно." #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" "ЕÑть SSL неÑовмеÑтимоÑти между вашей верÑией Python и некоторыми https " "Ñайтами, например Wallhaven. Ð’Ñ‹ можете прочеÑть больше об Ñтой проблеме.\n" "\n" "Ð’Ñ‹ хотите уÑтановить вÑе завиÑимоÑти Python, необходимые Ð´Ð»Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñтой " "проблемы?\n" "Ð”Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ необходимо предоÑтавить права ÑуперпользователÑ. " #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "Variety — ошибка SSL. УÑтановить завиÑимоÑти?" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "УÑтановка..." #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" "УÑтановка займёт одну-две минуты. ПожалуйÑта, потерпите. Файл журнала %s" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "ЗавиÑимоÑти уÑтановлены. ПожалуйÑта, перезапуÑтите Variety." #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" "ЕÑли SSL-ошибки не были уÑтранены, поищите в интернете «Python SNI SSL " "error» и найдите другое решение." #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "Сбой. ИÑточники Wallhaven отключены." #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" "SSL-завиÑимоÑти не были уÑпешно уÑтановлены. ПожалуйÑта, проверьте %s или " "поищите в интернете «Python SNI SSL error» и найдите другое решение." #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "Variety — поделитьÑÑ Ð² Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "ПоделитьÑÑ Ð² Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" "Ð’Ñ‹ впервые делитеÑÑŒ в Facebook. ÐŸÑƒÐ±Ð»Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¸Ð· Variety доÑтупна Ð´Ð»Ñ " "изображений, полученных из интернет-иÑточников, и цитат. Работает так: \n" "\n" "1. Войдите в Facebook\n" "Facebook откроетÑÑ Ð² вашем браузере по умолчанию. Вам будет предложено " "войти, еÑли вы не Ñделали Ñтого ранее. \n" "\n" "2. Ðвторизуйте Variety Ð´Ð»Ñ Ð¿ÑƒÐ±Ð»Ð¸ÐºÐ°Ñ†Ð¸Ð¸ в вашей " "ленте.\n" "У Ð²Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ запрошено разрешение Variety публиковать в вашей ленте от вашего " "имени. Variety будет пользоватьÑÑ Ñтим разрешением, только Ð´Ð»Ñ Ð¿ÑƒÐ±Ð»Ð¸ÐºÐ°Ñ†Ð¸Ð¸ " "тех изображений и цитат, которые вы Ñами укажете, и ни Ð´Ð»Ñ Ñ‡ÐµÐ³Ð¾ больше.\n" "\n" "3. ÐаÑтройте браузер на открытие variety:// " "ÑÑылок Variety или xdg-open\n" "Затем Ð²Ð°Ñ Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ на Ñтраницу Ñ Ð¸Ð½ÑтрукциÑми по аÑÑоциации " "\"variety://\" ÑÑылок Variety в вашем браузере. ПожалуйÑта, Ñледуйте Ñтим " "инÑтрукциÑм, чтобы завершить наÑтройку. Это придётÑÑ Ñделать лишь однажды.\n" "\n" "Ðикакие пароли или логины не хранÑÑ‚ÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾, только OAuth токен Facebook, " "дейÑтвительный пару недель. Когда Ñрок его дейÑÑ‚Ð²Ð¸Ñ Ð¸Ñтечёт, вам будет " "предложено авторизоватьÑÑ Ñнова." #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "Загружать цитаты Ñ TheQuotationsPage.com" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "Variety — добавление ленты Reddit" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" "Введите название Ñабреддита или вÑтавьте полный URL Ñабреддита или " "Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Reddit. По желанию можете " "указать порÑдок Ñортировки и период времени. Variety будет иÑпользовать " "запиÑи Ñ Ð¿Ñ€Ñмыми ÑÑылками на Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Imgur Ñтраницы Ñ Ð¿ÐµÑ€Ð²Ð¾Ð¹ Ñотней " "результатов, возвращённых Reddit.\n" "\n" "Пример: вы можете указать проÑто «comics» или http://www.reddit.com/r/comics\n" "Пример: топ запиÑей меÑÑца: http://www." "reddit.com/r/comics/top/?sort=top&t=month" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "URL или название Ñабреддита: " #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "Минутку, проверим, что там" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "Variety — региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð° VRTY.ORG" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "Желаете зарегиÑтрироватьÑÑ?" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" "Ð’Ñ‹ можете учаÑтвовать в VRTY.ORG анонимно, " "но региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñтавит дополнительные опции, например, Ñинхронизацию избранного между компьютерами, а также " "перÑональные рекомендации. Это убережёт Ð²Ð°Ñ Ð¾Ñ‚ " "потери данных Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð¸ избранного в Ñлучае переуÑтановки операционной " "ÑиÑтемы." #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‡ÐµÐ½ÑŒ проÑта и не требует отправки перÑональных данных." #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" "ЕÑли вы выберете анонимное учаÑтие, то можете зарегиÑтрироватьÑÑ Ð¿Ð¾Ð·Ð¶Ðµ на " "вкладке Â«Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¸ общеÑтво» в Параметрах." #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" "Ой, нем не удалоÑÑŒ ÑоединитьÑÑ Ñ VRTY.ORG. Возможно, Ñервер недоÑтупен. " "ПожалуйÑта, подождите пару минут и попробуйте ещё раз либо выберите «УчаÑтвовать анонимно» и зарегиÑтрируйтеÑÑŒ позже " "на вкладке Â«Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¸ общеÑтво» в " "Параметрах." #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "" "ПожалуйÑта, продолжите региÑтрацию и Ñледуйте инÑтрукциÑм в открывшейÑÑ " "вкладке браузера." #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "Я буду учаÑтвовать анонимно" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "Я зарегиÑтрирован, дайте войти" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "ЗарегиÑтрируйтеÑÑŒ здеÑÑŒ" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "Выберите папку" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "OK" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "Получен Ñигнал отмены - выхожу..." #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "Variety уже запущена. Отправка команды на запущенный ÑкземплÑÑ€." #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "Снизу" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "Сверху" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "Слева" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "Справа" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "Положение" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "Размер" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "Показать в папке" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "Закрыть" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "Ðе удалоÑÑŒ задать EXIF оценку" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "Без оценки" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "Отклонено" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Variety" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Ðовые загрузки Variety" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Variety" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "ÐвторÑкие права © 2012, Peter Levi " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "О Variety" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "ÐвтоматичеÑкий Ñменщик, загрузчик и менеджер обоев." #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" "# ÐвторÑкие права © 2012, Peter Levi \n" "# Это Ñвободное программное обеÑпечение; вы можете раÑпроÑтранÑть и/или " "изменÑть его \n" "# на уÑловиÑÑ… лицензии GNU General Public License верÑии 3, опубликованной \n" "# Фондом Ñвободного программного обеÑпечениÑ.\n" "# \n" "# Эта программа раÑпроÑтранÑетÑÑ Ð² надежде, что она будет полезной, но \n" "# БЕЗ КÐКИХ-ЛИБО ГÐРÐÐТИЙ; даже без подразумеваемых гарантий \n" "# КОММЕРЧЕСКОЙ ВЫГОДЫ, УДОВЛЕТВОРИТЕЛЬÐОГО КÐЧЕСТВРили ПРИГОДÐОСТИ ДЛЯ " "КОÐКРЕТÐОЙ \n" "# ЦЕЛИ. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… Ñведений обратитеÑÑŒ к лицензии GNU " "General Public License.\n" "# \n" "# Ð’Ñ‹ должны были получить копию GNU General Public License \n" "# Ñ Ñтой программой. ЕÑли нет, Ñмотрите .\n" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "Variety" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Variety — программа Ð´Ð»Ñ Ñмены обоев" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "Следующее" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "Предыдущее" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "Пауза / Продолжить" #: ../variety.desktop.in.h:6 msgid "History" msgstr "ИÑториÑ" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "Параметры" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "Variety — добавить иÑточник иображений Wallhaven.cc" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" "Wallhaven.cc предоÑтавлÑет множеÑтво " "опций поиÑка изображений. Ðиже можно иÑпользовать ключевые Ñлова Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка " "или поÑетить Wallhaven.cc, наÑтройте " "критерии поиÑка там и вÑтавьте полный Ð°Ð´Ñ€ÐµÑ Ð² поле ввода.\n" "\n" "ЕÑли вы введёте ключевые Ñлова – Ñамые понравившиеÑÑ SFW-Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ (Safe " "For Work, \"БезопаÑные Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° рабочем меÑте\"), которые " "подходÑÑ‚ к ключевым Ñловам, будут иÑпользованы.\n" "\n" "ЕÑли вы введёте ÑÑылку, позаботьтеÑÑŒ о выборе категории – Variety поÑтоÑнно " "запрашивает изображениÑ, но иÑпользует только неÑколько Ñотен результатов. " "\"Random\" и \"Date\" означают, что иÑточник будет иÑпользован неÑколько " "дольше, пока не будет иÑчерпан. \"Favorites\" предоÑтавит лучшие результаты, " "а \"Relevance\" предоÑтавит точные ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ поиÑке по фразам и цветам." #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "Введите Ñюда ключевые Ñлова или вÑтавьте URL: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "Одну минуту, проверка поиÑкового запроÑа" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "Показывает цитаты из локальных текÑтовых файлов.\n" "ПомеÑтите ваши txt файлы в: ~/.config/variety/pluginconfig/quotes/.\n" "Формат файла:\n" "\n" "цитата -- автор\n" ".\n" "Ð²Ñ‚Ð¾Ñ€Ð°Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚Ð° -- другой автор\n" ".\n" "и Ñ‚. д.\n" "\n" "Пример: http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "Variety — добавление ленты медиа RSS" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "ПожалуйÑта, вÑтавьте URL канала Медиа RSS ниже. Обратите внимание, что " "поддерживаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ каналы Медиа RSS, а не произвольные ленты RSS. Медиа " "RSS каналы Ñодержат тег media:content, ÑÑылающийÑÑ Ð½ÐµÐ¿Ð¾ÑредÑтвенно на Ñамо " "изображение. Ðекоторые примеры Ñайтов, предоÑтавлÑющих Медиа RSS каналы: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "Ð’Ñтавьте URL канала Медиа RSS Ñюда: " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "Минутку, проверим, что по Ñтому адреÑу" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "УÑÐ¿ÐµÑˆÐ½Ð°Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "ПубликациÑ..." #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "Ошибка авторизации" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "Копировать или перемеÑтить в Избранные" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "СброÑить наÑтройки" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "" "Выберите отображение в меню «Копировать в Избранные» или «ПеремеÑтить в " "Избранные» в завиÑимоÑти от раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ:" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "ПожалуйÑта, делайте по одной запиÑи на линию, вÑе пункты вида <Папка>:, где папкой могут быть Downloaded, Fetched, Others или путь к " "определённой локальной папке.\n" "ПорÑдок важен. Когда будет показано изображение, Ð¿ÐµÑ€Ð²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ° в ÑпиÑке, " "ÑÐ¾Ð´ÐµÑ€Ð¶Ð°Ñ‰Ð°Ñ Ñто изображение, определит, какие операции отобразÑÑ‚ÑÑ Ð² меню " "Variety. «Others» должна быть в конце ÑпиÑка, потому что любой файл входит в " "Ñту категорию.\n" "\n" "Пример (пишите именно по-английÑки):\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "ÐžÐ¿Ñ†Ð¸Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ интеграции Ñ VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "Включить интеграцию Ñ VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" "Ð”Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ опции, программе нужно знать, какие Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²Ð°Ð¼ (не) нравÑÑ‚ÑÑ " "и какие онлайн-реÑурÑÑ‹ иÑпользовать.\n" "\n" "Собранные данные анонимны и отноÑÑÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ к изображениÑм, которые Ñкачаны " "программой, – изображениÑ, изначально бывшие на компьютере, оÑтаютÑÑ " "личными.\n" "\n" "Эти данные помогают нам предоÑтавлÑть лучшие Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸ обеÑпечивать VRTY.ORG – реÑÑƒÑ€Ñ Ð´Ð»Ñ Ð²Ñех пользователей " "Variety." #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "Ðе похоже на допуÑтимый URL Реддит" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "Ðе удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ данному запроÑу" #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "Загружать цитаты из RSS ленты QuotesDaddy.\n" "ПоиÑк по тегам и авторам не поддерживаетÑÑ." #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Variety — добавление иÑточника изображений Flickr" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "ПожалуйÑта, задайте уÑÐ»Ð¾Ð²Ð¸Ñ Ð¿Ð¾Ð¸Ñка на Flickr. Будут загружены только фотографии, " "ÑоответÑвующие вÑем уÑловиÑм. ОÑтавьте ненужные Ð¿Ð¾Ð»Ñ Ð¿ÑƒÑтыми." #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "Теги: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "СпиÑок тегов, разделённых запÑтой. Чтобы ÑоответÑтвовать, Ñ„Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° " "Ñодержать их вÑе одновременно.\n" "Пример: жёлтый,машина" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "Пользователь: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "ПожалуйÑта, укажите URL пользовательÑкой галереи или одной из её " "фотографий.\n" "Пример: http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "Группа: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "ПожалуйÑта, вÑтавьте URL-Ð°Ð´Ñ€ÐµÑ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹.\n" "Пример: http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "ТекÑÑ‚:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "Свободный поиÑк по текÑту заголовков, опиÑаний и тегов фотографий. " "ИÑключаемые параметры предварÑÑŽÑ‚ÑÑ Ð·Ð½Ð°ÐºÐ¾Ð¼ «-».\n" "Ðапример: Ñблочный -пирог" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "Ñекунды" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "минуты" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "чаÑÑ‹" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "дни" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "Параметры Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "ОÑновные" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "ЗапуÑкать Variety при Ñтарте ÑиÑтемы" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "МенÑть обои каждые " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "Минимальный интервал 5 Ñекунд" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "МенÑть обои при запуÑке" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "БезопаÑный режим. ИÑключает неприÑтойные и Ñомнительные изображениÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" "ЭкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ, оÑновывающаÑÑÑ Ð½Ð° оценках ÑообщеÑтва. Узнать " "больше" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "Включено" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "Тип" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "РаÑположение" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "_Добавить…" #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "Добавить изображениÑ, папки или интернет-иÑточники" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "_Изменить…" #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "Изменить выделенный иÑточник" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "_Удалить..." #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "Удалить выделенные иÑточники изображений" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "_Применить" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "Включить выбранные иÑточники и отключить оÑтальные" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "Загружать обои каждые " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "Минимальный интервал — 1 минута" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "в " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "Папка загрузки " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "Внимание: ÐЕ иÑпользуйте Ñту опцию, еÑли в указанной вами папке загрузки " "еÑть ценные файлы. Variety будет придерживатьÑÑ Ð»Ð¸Ð¼Ð¸Ñ‚Ð° незавиÑимо от " "Ñодержимого папки." #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "Ограничить размер папки загрузки до " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "Минимальный размер 50 МБ" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "МБ, при необходимоÑти удалÑÑ Ñтарые файлы" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "Избранные" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "Копировать избранные обои в " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "Фильтры" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "" "ПрименÑть Ñлучайные фильтры к отображаемым обоÑм (ÑпаÑибо чудеÑному " "ImageMagick):" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "Цитаты" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "Показывать Ñлучайные мудрые цитаты на рабочем Ñтоле" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "Цвет текÑта: " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "Шрифт текÑта: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "Цвет фона: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "ПрозрачноÑть фона: " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " Прозрачный" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "Ðепрозрачный" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "РиÑовать текÑÑ‚ Ñ Ñ‚ÐµÐ½ÑŒÑŽ" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "Внешний вид" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "Ширина облаÑти цитат: " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "Ð£Ð·ÐºÐ°Ñ " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "ШирокаÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "Горизонтальное положение: " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "Слева " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "Вертикальное положение: " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "Сверху " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "РаÑположение" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "Показывать цитаты из Ñтих иÑточников: " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "Больше " "раÑширений" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "" "Показывать только Ñти теги и авторов (оÑтавьте пуÑтым Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ " "Ñлучайных цитат)." #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "Пример: funny, inspirational" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "Пример: Albert Einstein, Voltaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "Ðвторы: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "ИÑточники и фильтры" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "МенÑть цитату через " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "Минимальный интервал 10 Ñекунд" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "ПоÑтоÑÐ½Ð½Ð°Ñ Ñмена" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "ЧаÑÑ‹" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "" "Показывать на рабочем Ñтоле большие Ñимпатичные цифровые чаÑÑ‹ Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ð¼Ð¸ " "временем и датой" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "ÐаÑтройте внешний вид чаÑов, отредактировав ÑвойÑтво clock_filter в файле " "наÑтроек Variety (~/.config/variety/variety.conf). Ð’ качеÑтве руководÑтва " "иÑпользуйте комментарии в ~/.config/variety/variety_latest_default.conf." #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "Шрифт чаÑов: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "Шрифт даты: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "Ðе работают? Читай тут. Как " "ещё наÑтроить чаÑÑ‹? Прочти " "здеÑÑŒ." #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "Эффекты" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñлайд-шоу" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "Избранные изображениÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¾ вÑех подключённых иÑточников" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "Ð’Ñе Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð· папки Downloads" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "Папка по выбору (Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð· подпапок) " #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "ПорÑдок изображений в Ñлайд-шоу " #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "Случайный" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "По имени, от Рдо Я" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "По имени, от Я до Ð" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "По дате, Ñначала Ñтарые" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "По дате, Ñначала новые" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "Экран" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "ЗапуÑтить на мониторе" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "Оконный режим Ð´Ð»Ñ Ñлайд-шоу " #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "Во веÑÑŒ Ñкран" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "Рабочий Ñтол (оÑтаётÑÑ Ð¿Ð¾Ð´ другими окнами)" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "Развёрнутое окно" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "Обычное окно" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "Динамика" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "Интервал между Ñменой изображений " #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr " Ñекунды" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "БыÑтрое иÑчезновение " #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "Медленное иÑчезновение" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "Меньше увеличений" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "Больше увеличений" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "Меньше Ñмещений" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "Больше Ñмещений" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "СброÑить наÑтройки" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° Ñтой Ñтранице будут применены поÑле перезапуÑка Ñлайд-шоу" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "ЗапуÑтить Ñлайд-шоу" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "Слайд-шоу" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "VRTY.ORG" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "" "VRTY.ORG на Ñтадии бета-теÑтированиÑ, и развитие займёт некоторое времÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" "VRTY.ORG объединÑет пользователей Ñ " "похожими вкуÑами и предоÑтавлÑет удобные ÑпоÑобы изменÑть обои, добавлÑть " "новые иÑточники изображений и Ñледить за избранным других пользователей. " "Ð¡ÐµÑ€Ð²Ð¸Ñ Ð¿Ð¾Ð¿Ð¾Ð»Ð½ÑетÑÑ Ð»ÑŽÐ±Ð¸Ð¼Ñ‹Ð¼Ð¸ изображениÑми вÑех учаÑтников." #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "" "Ðе удалоÑÑŒ Ñоздать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ â€” нет ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ VRTY.ORG. Попробуем ещё " "раз позже." #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" "РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ такие отличные возможноÑти, как ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¸Ð·Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… " "изображений между компьютерами и личные рекомендации." #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "СинхронизациÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "Синхронизировать избранные Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ компьютерами" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "ТребуетÑÑ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ VRTY.ORG и входа на него" #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" "Ваши избранные Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… компьютеров будут автоматичеÑки " "загружены на Ñтот. Ðеобходимо лишь войти на VRTY.ORG Ñо вÑех уÑтройÑтв как " "один пользователь. Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ðµ удалит никаких изображений." #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "Политика конфиденциальноÑти" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" "Variety отÑылает данные только о Ñкачанном, – изображениÑ, которые были на " "компьютере, оÑтаютÑÑ Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸, их ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°. Данные не будут " "доÑтупны третьим лицам, еÑли профиль не объÑвлен публичным. Прочитать больше о ÑервиÑе и " "политике приватноÑти." #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "СтатиÑтика иÑпользованиÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "" "Помочь Ñделать Variety лучше, отправлÑÑ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½ÑƒÑŽ ÑтатиÑтику иÑпользованиÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" "Эта ÑтатиÑтика поможет нам улучшить Variety, понÑть, как пользователи " "взаимодейÑтвуют Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹. Она также включает общую информацию о вашей ОС " "и наÑтройках монитора. Собранные данные не будут переданы третьим лицам." #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¸ общеÑтво" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "Загруженные вручную" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "Сохранить загруженные вручную Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "ПеретаÑкивание" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "Значок Variety в панели запуÑка может Ñлужить целью Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ‚Ð°ÑкиваниÑ. " "Перетащите любой URL Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ файл прÑмо на него, и они ÑохранÑÑ‚ÑÑ Ð² " "папку загруженных вручную изображений. Затем вы можете нажать кнопку " "«Следующие», чтобы увидеть их на рабочем Ñтоле.\n" "Чтобы значок отобразилÑÑ Ð² панели запуÑка, выберите пункт меню «О программе» " "или «Параметры». Ð’Ñ‹ можете закрепить его там Ð´Ð»Ñ Ð»Ñ‘Ð³ÐºÐ¾Ð³Ð¾ доÑтупа к функции " "перетаÑкиваниÑ." #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "Слежение за буфером обмена" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "" "Следить за буфером обмена и при обнаружении там URL изображений, загружать их" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "Загружать, только еÑли URL хоÑта один из Ñледующих:" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "Ð ÑƒÑ‡Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "По возможноÑти иÑпользовать изображениÑ, которые:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "Имеют альбомную ориентацию" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "По крайней мере " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "% от размера Ñкрана" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "Цвет" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "Тёмные или Ñветлые:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "Тёмные" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "Светлые" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "Содержат Ñтот цвет: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(ПрименÑетÑÑ Ð¿Ð¾Ñле первоначального поиÑка)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "Оценка" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "EXIF оценка не меньше " #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "Цвет и размер" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "Значок индикатора" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "Значок индикатора:" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "Светлый" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "Тёмный" #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "Текущие обои" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "Выбрать изображение..." #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "Ðет" #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "Выберите значок" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "Когда значок индикатора Ñкрыт, можно управлÑть Variety из командной Ñтроки " "или через ÑпиÑки дейÑтвий панели запуÑка. ЗапуÑтите «variety --help», чтобы " "поÑмотреть вÑе доÑтупные команды." #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "Избранные операции" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "Избранные операции, отображаемые в главном меню:" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "Копировать в Избранные" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "Обе (копировать и перемеÑтить)" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "ЗавиÑит от папки..." #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "Показывать диалог Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи в Facebook перед публикацией" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "Поддержка Ñкрана входа в ÑиÑтему" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "" "УдоÑтоверьтеÑÑŒ, что обои, уÑтановленные Variety, будут иÑпользоватьÑÑ Ð½Ð° " "Ñкране входа в ÑиÑтему" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "Предупреждение: Ð”Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐ¸Ñ… обоев LightDM требуютÑÑ Ð¿Ñ€Ð°Ð²Ð° " "на чтение файла. При включённой опции Variety Ñкопирует обои в общедоÑтупную " "папку и изменит права доÑупа на чтение Ð´Ð»Ñ Ð²Ñех. По умоланию, папка " "~/Pictures в домашней директории не зашифрована, как и " "/usr/share/backgrounds, еÑли ÑущеÑтвует. ПожалуйÑта, иÑпользуйте Ñ " "оÑторожноÑтью в многопользовательÑких ÑиÑтемах." #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "Копировать файлы обоев в Ñту папку: " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "СброÑить наÑтройки" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "Ð’ÑÑ‘ ещё не работает?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "" "Похоже, ваш домашний каталог зашифрован, поÑтому иÑпользовать его подпапки " "не получитÑÑ." #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ прав на запиÑÑŒ в Ñту папку." #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "Права доÑтупа не позволÑÑŽÑ‚ LightDM читать файлы из Ñтой папки." #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "" "Variety может наÑтроить права доÑтупа, но вы должны предоÑтавить права " "админиÑтратора." #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "ÐаÑтройка предпочтений" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "Полезные Ñоветы" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "ПоÑледние изменениÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "ПоÑетить Ñайт" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "Сообщить об ошибке или предложить новую функцию" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "Отправить отзыв" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "Пожертвовать на Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "Пожертвовать через PayPal" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "Я разрабатываю Variety в Ñвоё Ñвободное времÑ, наÑтупающее обычно в те " "поздние чаÑÑ‹, когда мои дети укладываютÑÑ Ñпать. Буду благодарен за любую " "пожертвованную Ñумму. Это покажет мне, что Variety ценна Ð´Ð»Ñ Ð²Ð°Ñ â€” " "пользователей — и побудит активнее продолжать работу над программой.\n" "\n" "СпаÑибо,\n" "Петр Леви" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" "Ð”Ð»Ñ Bitcoin и других ÑпоÑобов оплаты, поÑетите веб-Ñайт Variety." #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "Получение" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "Изображение Ñлишком маленькое, игнорирую его" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "Извините, получена ошибка %s..." #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "Это значит, что ÑÑылка более не дейÑтвительна" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "Получение прервано по некоторым причинам" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "" "Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации, пожалуйÑта, запуÑтите Variety из " "терминала Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ -v и повторите дейÑтвие" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "" "Конфигурационный файл \"smart_user.json\" иÑпорчен. Перезайдите на VRTY.ORG." #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "Данные Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° на Ñайт VRTY.ORG уÑтарели. Перезайдите." #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "Загружено изображений: %d" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "Загружено 1 изображение" #: ../variety/Smart.py:684 msgid "Finished" msgstr "Завершено" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "Ðвторизовано как %s" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "Выполнить вход на VRTY.ORG как %s?" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "Подтверждение логина Ð´Ð»Ñ VRTY.ORG" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "Ðет раÑширений Ð´Ð»Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "Ðе уÑтановлено ни одного раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "Ðет подходÑщих раÑширений Ð´Ð»Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "" "У Ð²Ð°Ñ Ð½ÐµÑ‚ раÑширений, поддерживающих поиÑк по ключевым Ñловам и авторам в " "цитатах" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "Ðе удалоÑÑŒ загрузить цитаты" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "Возможно, ÑÐµÑ€Ð²Ð¸Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚ недоÑтупен, но мы продолжим попытки" #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "Ðе удалоÑÑŒ найти цитаты" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "Возможно, вы ищете что-то Ñлишком неопределённое?" variety-0.8.3/po/sr.po000066400000000000000000003255561362063646600146430ustar00rootroot00000000000000# Serbian translation for variety # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the variety package. # FIRST AUTHOR , 2013. # МироÑлав Ðиколић , 2016. msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2016-02-15 06:04+0000\n" "Last-Translator: МироÑлав Ðиколић \n" "Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" "Language: sr\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "Ðабавља цитате Ñа Ñајта „Goodreads.com“" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "Задржи изворну" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "ЛеÑтвица Ñивила" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "Тешко замућење" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "Меко замућење" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "Уље на платну" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "Скица оловком" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "ИÑтачкавање" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "ПикÑелизација" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "ФаÑцикла омиљених" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "ФаÑцикла преузетих" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "" "Које предлаже РазноврÑноÑÑ‚. Прилагођава Ñе вашим укуÑима онако како " "означавате Ñлике омиљеним или Ñмећем." #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "" "ПоÑледње омиљене других кориÑника РазноврÑноÑти. [Може да Ñадржи ÐСФВ Ñлике]" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "ÐаÑумичне позадине Ñа ДеÑктоппр.цо-а" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "ÐÐСÐ-ина аÑтрономÑка Ñлика дана" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "Карта оÑунчаноÑти земље — живе позадине Ñа Дие.нет-а" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "Бингова фотографија дана" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "Фотографије виÑоке резолуције Ñа УнÑплаш.ком-а" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "" "Можете да мењате позадину назад и напред премицањем точкића миша на врху " "иконице указивача." #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" "Ðко желите да извршите произвољне наредбе при Ñвакој промени позадине или " "ако кориÑтите неко друго окружење радне површи, уредите Ñкрипте у фаÑцикли " "„~/.config/variety/scripts“. У њој Ñу примери за разна окружења радне површи." #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" "РазноврÑноÑÑ‚ Ñе може контролиÑати из линије наредби и ви то можете кориÑтити " "да одредите пречице таÑтатуре за радње које најчешће кориÑтите. Покрените " "„variety --help“ да видите Ñве доÑтупне наредбе." #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" "Можете убацити везе за Ñлике или датотеке на иконици за покретање да их " "преузмете и кориÑтите као позадине. За брже преузимање Ñа одређеног Ñајта, " "можете такође кориÑтити праћење оÑтавом (видите језичак „Ручно преузимање“)." #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "" "Примена пропуÑника тешког замућења је одличан начин за добијање апÑтрактног-" "изгледа и ненаметљиве, али обојене позадине, Ñлично у духу Ñа подразумеваним " "у Убунтуу." #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" "Додавање ваших прилагођених пропуÑника је прилично лако: отворите " "„~/.config/variety/variety.conf“ у уређивачу и кориÑтите поÑтојеће " "пропуÑнике као пример. Сваки пропуÑник је Ñамо ред опција за проÑлеђивање " "наредби претварања Магије Ñлике." #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" "Када изаберете извор Ñлике, његове Ñлике Ñе приказују у прозору на дну " "екрана. ПритиÑните на Ñлику да је поÑтавите као позадину. ПритиÑните деÑним " "таÑтером миша да затворите прозор, да измените његов изглед или да обавите " "радње Ñа датотекама. Можете изабрати више извора Ñлика да направите " "„Ñтопљени“ преглед минијатура за Ñве њих. Знајте да је преглед минијатура " "ограничен на неколико Ñтотина Ñлучајно изабраних Ñлика." #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" "Да омогућите обавештења на радној површи када Ñе промени позадина, " "откоментирајте два реда на дну Ñкрипте " "„~/.config/variety/scripts/set_wallpaper“." #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" "Иконица указивача РазноврÑноÑти темÑка — ако изаберете „Ñветлу“ опцију за " "иконицу, РазноврÑноÑÑ‚ ће прво проверити да ли тренутна Гтк тема има иконицу " "под називом „variety-indicator“ и кориÑтиће је умеÑто приложене Ñветле " "иконице." #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" "Када одлучите да Ñачувате цитате у Омиљене, по оÑнови Ñе чувају у датотеци " "„~/.config/variety/favorite_quotes.txt“. Ова датотека је ÑаглаÑна Ñа " "изворима цитата меÑних датотека РазноврÑноÑти. Ðко желите да је кориÑтите — " "умножите је у„~/.config/variety/pluginconfig/quotes/“ и укључите изворе " "цитата меÑних датотека. Ова датотека је такође ÑаглаÑна Ñа УникÑовом алатком " "богатÑтва." #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "Пријављивање на ВРТИ.ОРГ" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "КориÑник: " #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "Лозинка: " #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "Ðемате налог? РегиÑтрујте Ñе овде" #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "Заборавили Ñте лозинку?" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" "Савет: Можете такође да Ñе пријавите на ВРТИ.ОРГ у прегледнику и да притиÑнете на везу " "„Окини пријаву РазноврÑноÑти“ у вашем профилу." #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "Пријави ме" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "Све" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "Слике" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "ФаÑцикле" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "Фликр" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Волхевен.цц" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "Редит" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "МедијÑки РСС" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "Уклони извор, задржи датотеке" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "Уклони изворе, задржи датотеке" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "Уклони извор и избриши преузете датотеке" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "Уклони изворе и избриши преузете датотеке" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "Карта оÑунчаноÑти земље је укључена" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "Коришћење карте оÑунчаноÑти земље захтева да преузимање и промена буду " "укључени Ñа учеÑталошћу од 30 минута или мање. Подешавања Ñе ÑамоÑтално " "дотерују." #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "Додајте Ñлике" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "Откажи" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "Додај" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "" "Додајте фаÑцикле — Додајте Ñамо корене фаÑцикле, Ñадржане фаÑцикле Ñе " "претражују дубинÑки" #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "Уреди..." #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "Прегледајте Ñлику" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "Отвори фаÑциклу" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "Извор препоручених Ñлика је иÑкључен" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "Ðемате овлашћење за упиÑ" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "Ограничење је иÑкључено" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "" "СамоÑтална промена фаÑцикле за преузимање иÑкључује ограничење величине ради " "Ñпречавања Ñлучајног губитка података" #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "Тренутна фаÑцикла за преузимање: %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "ÐиÑам уÑпео да подеÑим овлашћења" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "Можете покушати ручно да покренете наредбу:\n" "sudo chmod %s „%s“" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "Пријављени Ñте као: " #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "Безимени" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "Пријавите Ñе или Ñе учланите" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "Промени кориÑника" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "Добро дошли у РазноврÑноÑÑ‚!" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "ÐаÑтави" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" "РазноврÑноÑÑ‚ је ÑамоÑтални измењивач позадина. Кружи кроз ваше позадине " "радне површи на редовној оÑнови кориÑтећи меÑне Ñлике или Ñлике преузете из " "различитих извора на мрежи. Ради тихо у позадини — да управљате њиме, " "притиÑните на ову иконицу у ÑиÑтемÑкој фиоци:" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" "РазноврÑноÑÑ‚ је Ñофтвер отвореног кода, који је приредио Питер Леви, " "програмер из бугарÑке. Ðко вам Ñе Ñвиђа, приложите неки динар." #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "Сада одвојте мало времена да подеÑите поÑтавке на Ñледећим екранима." #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "КДЕ кориÑници — Важно, прочитајте:" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" "Изгледа да радите у КДЕ-у. У КДЕ-у 4 је немогуће подеÑити позадину из " "програма — нема ÐПИ-ја за то. Да би РазноврÑноÑÑ‚ радила, прочитајте и " "пратите упутÑтва овде." #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "УупÑ, Ñервер је вратио грешку (%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "Ðе могу да Ñе повежем Ñа Ñервером" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "_Следећа" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "_Претходна" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "Тренутна позадина површи" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "Прикажи извор" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "Умножи у _омиљене" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "ПремеÑти у омиљене" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "Пребаци у _Ñмеће" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "_Следећи, преÑкачући иÑторијат за напред" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "Савет: Премакните точкић преко\n" "иконице за Ñледећу и претходну" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "ЗаÑтани на текућој" #: ../variety/indicator.py:129 msgid "_Image" msgstr "_Слика" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "Одакле је ово?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "Прикажи без дејÑтва" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "Гуглова претрага Ñлика" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "Дели на ФејÑбуку" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "ПодеÑи ЕКСИФ оцену" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "Сачувај у омиљеним" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "Прегледај омиљене..." #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "Умножи у оÑтаву" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "Гуглови цитати" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "Гуглов аутор" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "ПоÑтавке..." #: ../variety/indicator.py:252 msgid "Turn off" msgstr "ИÑкључи" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "_Цитат" #: ../variety/indicator.py:265 msgid "_History" msgstr "_ИÑторијат" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "_Избирач позадине" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "Скорашња _преузимања" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "Покрени покретни приказ" #: ../variety/indicator.py:302 msgid "About" msgstr "О програму" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "Прилог" #: ../variety/indicator.py:310 msgid "Quit" msgstr "Изађи" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "" "Ово не изгледа као иÑправна адреÑа довода РСС Ñадржаја или на њој нема " "Ñадржаја." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "РазноврÑноÑÑ‚ — ВРТИ.ОРГ" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "Ðе, хвала" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" "Увод у ВРТИ.ОРГ! Да ли желите да учеÑтвујете?" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" "ВРТИ.ОРГ повезује кориÑнике РазноврÑноÑти " "Ñа Ñличним укуÑа и пружа Ñупер погодан начин за промену позадине, да пронађе " "и додате нове изворе Ñлика у РазноврÑноÑÑ‚, и да пратите омиљене Ñлике других " "кориÑника." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" "За учешће није потребан никакав напор — ваш профил биће ÑамоÑтално изграђен, " "како будете означили Ñлике које преузме РазноврÑноÑÑ‚ да вам Ñе Ñвиђају или " "не. Ваш профил неће бити дељен Ñа трећим лицима, оÑим ако не одлучите да га " "учините јавним. Овде " "прочитајте нешто више о уÑлузи и политици приватноÑти." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" "УчеÑтвовање је потребно за неке функције РазноврÑноÑти као што је уÑаглашавање омиљених између рачунара." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "УчеÑтвујте у ВРТИ.ОРГ-у" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "Додајте Панорамио као извор Ñлика" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "Панорамио" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "Увеличајте вашу облаÑÑ‚ интереÑовања." #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Објавите на ФејÑбуку" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "" "Објави везу ка тренутној позадини на ФејÑбуку. Укључи овај текÑÑ‚ уз везу " "(или Ñамо оÑтавите празнину):" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "КориÑти текући цитат" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "Ðемој више да ме питаш, увек кориÑти приложени текÑÑ‚" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "ÐиÑам пронашао ниједну Ñлику" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "Већ је међу омиљеним" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "ПремеÑти у _омиљење" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "Добављено: прикажи изворну" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "Прегледај у %s" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "Ðепознато" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "Ðутор: %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "ÐаÑтави Ñа редовним променама" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "Да ли је разврÑтавање превише Ñтрого?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "" "РазноврÑноÑÑ‚ проналази премало Ñлика које Ñе Ñлажу Ñа кључним речима " "издвајања" #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "Додајте још извора Ñлика или Ñачекајте да Ñе неке преузму" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "Додајте још извора Ñлика" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "Ðема више позадина" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "Тренутна позадина није из извора Ñлика" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "" "Ðе могу да премеÑтим у „%s“. Вероватно немате овлашћења за премештање ове " "датотеке." #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "" "Ðе могу да умножим у „%s“. Вероватно немате овлашћења за умножавање ове " "датотеке." #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "Ðе могу да обришем" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "Ðемате овлашћења за премештање „%s“ у Ñмеће." #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "Резултати безименог коришћења" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" "РазноврÑноÑÑ‚ прикупља резултате безименог коришћења. \n" "Оно нам помажу да га учинимо бољим и не деле Ñе ни Ñа ким. \n" "Да прочитате више или да иÑкључите опцију, идите на „УÑаглашавање и друштво“" #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "" "Отвориће Ñе уређивач текÑта Ñа датотеком подешавања и биће примењене измене " "након што Ñачувате и затворите уређивач." #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [опције] [датотеке или адреÑе]\n" "\n" "МеÑне датотеке биће заказане додавањем.\n" "Удаљени Ñадржаји биће преузети у фаÑциклу Ñа позадинама програма и " "заказивани за приказ.\n" "\n" "За поÑтављање одређене позадине: %prog /нека/меÑна/Ñлика.jpg --next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "" "Приказује поруке дневника („-vv“ приказује поруке прочишћавања, „-vvv“ " "приказује и дневник библиотеке)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "ИÑкључује покренути примерак" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "" "ИÑпиÑује тренутну путању позадине. КориÑти Ñе Ñамо када је програм већ " "покренут." #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "Приказује Ñледећу позадину" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "Приказује претходну позадину" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "Приказује Ñледећу позадину преÑкачући иÑторијат наредних позадина" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "" "Премешта тренутну позадину у Ñмеће. КориÑти Ñе Ñамо када је програм већ " "покренут." #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Умножава тренутну позадину у омиљене. КориÑти Ñе Ñамо када је програм већ " "покренут." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Премешта тренутну позадину у омиљене. КориÑти Ñе Ñамо када је програм већ " "покренут." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "ЗаÑтаје на текућој Ñлици" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "ÐаÑтавља Ñа редовним променама Ñлика" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "Окида Ñтање заÑтајања и наÑтавка" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "Приказује Ñледећи цитат" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "Приказује претходни цитат" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "Приказује Ñледећи цитат, преÑкачући иÑторијат наредних позадина" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "Окида Ñтање заÑтајања и наÑтавка цитата" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "Чува текући цитат у омиљеним" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "Окида приказ иÑторијата" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "Окида приказ Ñкорашњих преузимања" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "Приказује прозор поÑтавки" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "" "Приказује ручног избирача позадина — траку минијатура иÑпуњену Ñликама из " "активних извора Ñлика" #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "Подешава и примењује опцију. Ðазиви опција Ñу иÑти као и они у датотеци " "подешавања „~/.config/variety/variety.conf“. Више опција може бити подешено " "у једној наредби. Пример: „variety --set-option icon Dark --set-option " "clock_enabled True“. КОРИСТИТЕ УЗ ОПРЕЗ: Мењате датотеку подешавања " "непоÑредно на незаштићен начин." #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "опције „--next/--fast-forward“ и „--previous“ Ñе узајамно иÑкључују" #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "опције „--trash“ и „--favorite“ Ñе узајамно иÑкључују" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "опције „--pause“ и „--resume“ Ñе узајамно иÑкључују" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "опције „--quotes-next/--quotes-fast-forward“ и „--quotes-previous“ Ñе " "узајамно иÑкључују" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "Ðије Ñлика" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "Заказано је" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "ПритиÑните „Следећа“ да је видите" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "Ðабављена" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "Ðеподржана врÑта извора" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "Да ли радите Ñа најновијим издањем програма?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "Ðови извор Ñлике је додат" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "Извор Ñлике већ поÑтоји, укључујем га" #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "Ðабављено и примењено" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "Ради!" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "Опа бато, везе РазноврÑноÑти раде. Баш лепо!" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "Ðеподржана наредба" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "Ðе могу да обрадим дату адреÑу „variety://“" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "Покрените Ñа укљученим запиÑником да видите детаље" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "Ðемој више да ме питаш, увек кориÑти текући цитат" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "Објављено" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "Можете отворити Ñвој ФејÑбук довод да видите објаву" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "ÐиÑам уÑпео да објавим" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "Ðе могу да направим Ñтавку Ñамопокретања" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "Дошло је до грешке приликом Ñтварања уноÑа Ñамопокретања\n" "Покрените програм из терминала Ñа одредницом „-v“, и покушајте поново." #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "Ðема Ñлика" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "Ðема Ñлика у фаÑциклама покретних приказа" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "" #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "" #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "" #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "РазноврÑноÑÑ‚ — дељење ФејÑбуком" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "Дељење ФејÑбуком" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" "Делите на ФејÑбуку по први пут. Дељење из програма је доÑтупно за Ñлике које " "долазе из мрежних извора и за цитате. Ради на овај начин:\n" "\n" "1. Пријавите Ñе на ФејÑбук\n" "ФејÑбук ће Ñе отворити у вашем оÑновном прегледнику. Биће вам затражено да " "Ñе пријавите ако већ ниÑте пријављени.\n" "\n" "2. ОвлаÑтите РазноврÑноÑÑ‚ да објави на вашем " "доводу.\n" "Биће вам затражено да дозволите РазноврÑноÑти да објави на вашем доводу у " "ваше име. РазноврÑноÑÑ‚ ће кориÑтити ово овлашћење Ñамо да објави те Ñлике и " "цитате које ћете му ви рећи, ништа друго.\n" "\n" "3. ПодеÑите прегледника да отвори везе " "„variety://“ програмом РазноврÑноÑÑ‚ или „xdg-open“-ом\n" "Тада ћете бити преуÑмерени на Ñтраницу Ñа упутÑтвима за придруживање " "„variety://“ веза Ñа РазноврÑношћу у вашем прегледнику. Пратите та упутÑтва " "да биÑте довршили подешавање. Морате то да урадите Ñамо једном.\n" "\n" "Ðикакве лозинке или подаци о пријављивању Ñе не чувају локално, Ñамо један " "прÑтен Оовлашћивања ФејÑбуком који ће важити за неколико недеља. Ðакон " "иÑтека његовог важења биће вам затражено да Ñе поново пријавите." #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "Ðабавио Ñам цитате Ñа Странице_цитата.ком" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "Додајте довод Редита" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" "Упишите назив Ñадржаног редита или убаците пуну адреÑу Ñадржаног редита или " "кориÑника Редита. Можете да наведете " "редоÑлед ређања и временÑко раздобље ако желите. РазноврÑноÑÑ‚ ће кориÑтити " "објаве до непоÑредних Ñлика или до Ñтраница Имгура унутар првих 100 предаја " "које даје Редит.\n" "\n" "Пример: Можете једноÑтавно да наведете „comics“ или http://www.reddit.com/r/comics\n" "Пример: Ðајбоље објаве меÑеца: http://www." "reddit.com/r/comics/top/?sort=top&t=month" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "ÐдреÑа или назив Ñадржаног редита: " #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "Само тренутак да проверим шта има" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "Учлањење на ВРТИ.ОРГ" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "Да ли желите да Ñе учланите?" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" "Можете да учеÑтвујете на ВРТИ.ОРГ-у " "анонимно, али учлањење укључује неке врло фине функције, као што је уÑаглашавање омиљених између рачунара и перÑонализоване препоруке. Такође оÑигурава да нећете " "изгубити ваш профил и омиљене позадине ако поново инÑталирате оперативни " "ÑиÑтем." #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "Ð£Ð¿Ð¸Ñ Ñ˜Ðµ врло лак и не захтева никакве личне податке." #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" "Ðко изаберете да учеÑтвујете анонимно, можете каÑније да Ñе учланите на " "Ñтраници „УÑаглашавање и друштво“ у поÑтавкама." #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" "Јаооо, не можемо да Ñе повежемо на ВРТИ.ОРГ. Можда је Ñервер пао. Сачекајте " "неколико минута и покушајте поново или изаберите „УчеÑтвуј анонимно“ и учланите Ñе каÑније на " "Ñтраници „УÑаглашавање и друштво“ у " "поÑтавкама." #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "" "ÐаÑтавите Ñа упиÑивањем и пратите упутÑтва у језичку прегледника који Ñмо " "отворили." #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "УчеÑтвоваћу анонимно" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "УпиÑан Ñам, пријави ме" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "Овде Ñе упишите" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "Изаберите фаÑциклу" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "У реду" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "Примио Ñам знак за прекид, излазим..." #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "РазноврÑноÑÑ‚ је већ покренута. Шаљем наредбу покренутом примерку." #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "Доле" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "Горе" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "Лево" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "ДеÑно" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "Положај" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "Величина" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "Прикажи Ñадржајну фаÑциклу" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "Затвори" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "Ðе могу да подеÑим ЕКСИФ оцену" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "Без оцене" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "Одбијено" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "ИÑторијат програма" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Скорашња преузимања" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Слике програма" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "ÐуторÑка права © 2012, Питер Леви " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "О РазноврÑноÑти" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "СамоÑтални измењивач позадина, преузимач и управник." #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" "ÐуторÑка права © 2012, Питер Леви \n" "Овај програм је Ñлободан Ñофтвер; можете га раÑподељивати\n" "и/или мењати под уÑловима Гнуове опште јавне лиценце коју\n" "је објавила Задужбина Ñлободног Ñофтвера; издања 3 лиценце\n" "или (по вашем избору) било којег новијег издања.\n" "\n" "Овај програм Ñе раÑподељује у нади да ће бити кориÑтан,\n" "али БЕЗ ИКÐКВЕ ГÐРÐÐЦИЈЕ; чак и без примењене гаранције\n" "ТРЖИШÐЕ ВРЕДÐОСТИ или ПРИЛÐГОЂЕÐОСТИ ОДРЕЂЕÐОЈ ÐÐМЕÐИ.\n" "Погледајте Гнуову Општу јавну лиценцу за више детаља.\n" "\n" "Требали Ñте да примите примерак Гнуове Опште јавне лиценце\n" "уз овај програм. Ðко ниÑте, видите .\n" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "РазноврÑноÑÑ‚" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Измењивач позадина РазноврÑноÑÑ‚" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "Следећа" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "Претходна" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "ЗаÑтани / ÐаÑтави" #: ../variety.desktop.in.h:6 msgid "History" msgstr "ИÑторијат" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "ПоÑтавке" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "Додајте Волхевен.цц као извор Ñлика" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" "Волхевен.цц обезбеђује разне опције " "претраге Ñлика. ИÑпод можете да наведете кључне речи за претрагу, или да " "поÑетите Волхевен.цц, подеÑите ваша " "мерила претраге, да Ñе уверите да вам Ñе резултати допадају, и да убаците " "читаву адреÑу Волхевена у поље.\n" "\n" "Ðко наведете кључне речи, најцењеније Ñлике безбедне за рад које одговарају " "Ñвим кључним речима биће коришћене. \n" "\n" "Ðко наведете адреÑу Волхевена, пажљиво изаберите критеријуме ређања — " "програм редовно захтева Ñлике, али кориÑти Ñамо Ñлике из првих неколико " "Ñтотина резултата. „ÐаÑумично“ или „Датум“ значиће да ће тај извор Ñлика " "имати дужи век трајања док Ñе не потроши. „Омиљене“ ће обезбедити боље Ñлике " "а „ЗначајноÑт“ ће обезбедити ближе поклапање за време претраге за изразима " "или бојама." #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "Овде упишите кључне речи или убаците адреÑу: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "Само тренутак да проверим претрагу" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "Прикажите цитате, одређене у меÑним текÑтуалним датотекама.\n" "Ставите ваше личне текÑтуалне датотеке у: " "~/.config/variety/pluginconfig/quotes/.\n" "Ð—Ð°Ð¿Ð¸Ñ Ð´Ð°Ñ‚Ð¾Ñ‚ÐµÐºÐµ је:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Пример: http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "Додајте МедијÑки РСС довод" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "Убаците адреÑу МедијÑког РСС довода иÑпод. Знајте да Ñу подржани Ñамо " "МедијÑки РСС доводи, а не произвољни РСС доводи. МедијÑки РСС доводи Ñадрже " "ознаке „медиј:Ñадржај“ које воде непоÑредно до актуелног Ñадржаја Ñлике. " "Ðеки примери Ñајтова који обезбеђују МедијÑке РСС доводе Ñу: Пиказа, девијантÐРТ, СмугМуг, Фликр, ИнтерфејÑЛИФТ." #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "УнеÑите адреÑу МедијÑког РСС довода: " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "Само тренутак да проверим шта је на тој адреÑи" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "Овлашћивање је уÑпело" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "Објављујем..." #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "Овлашћивање није уÑпело" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "Умножавање у омиљене наÑпрам премештања у омиљене" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "Врати на оÑновно" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "" "Изаберите да ли вам више одговара „Умножи у омиљене“ или „ПремеÑти у " "омиљене“ у изборнику завиÑно од путање Ñлике:" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "Упишите један ÑƒÐ½Ð¾Ñ Ð¿Ð¾ реду, Ñваки ÑƒÐ½Ð¾Ñ Ñƒ облику <ФаÑцикла>:<Умножи, ПремеÑти " "или Оба>, где фаÑцикла може бити преузетих, набављених, оÑталих или нарочита " "путања фаÑцикле.\n" "РедоÑлед је важан. Када Ñе прикаже Ñлика, прва фаÑцикла на ÑпиÑку која " "Ñадржи Ñлику одредиће које радње ће бити приказане у изборнику " "РазноврÑноÑти. „ОÑтале“ одговара било којој датотеци и треба бити поÑледња " "на ÑпиÑку.\n" "\n" "Пример:\n" "\tПреузете:Умножи\n" "\tÐабављене:ПремеÑти\n" "\t/pics/наÑумичне_Ñлике:ПремеÑти\n" "\t/pics/Ñређени_албуми:Умножи\n" "\tОÑтале:Оба" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "Обједињавање ВРТИ.ОРГ-а" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "Ова функција захтева обједињавање ВРТИ.ОРГ-а" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "Укључи обједињавање ВРТИ.ОРГ-а" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" "За ову функцију РазноврÑноÑÑ‚ треба дозволу за прикупљање података о Ñликама " "које вам Ñе Ñвиђају или не и о мрежним изворима које Ñте укључили.\n" "\n" "Прикупљени подаци Ñу анонимни по оÑнови и покривају Ñамо Ñлике које " "РазноврÑноÑÑ‚ преузме, никада Ñлике које већ имате у Ñвојим меÑним фаÑциклама " "које могу бити личне.\n" "\n" "Ови подаци нам помажу да обезбедимо боље Ñлике за Ñвакога и погоне ВРТИ.ОРГ-а — вредан реÑÑƒÑ€Ñ Ð·Ð° Ñве кориÑнике " "РазноврÑноÑти." #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "Изгледа да ово није иÑправна адреÑа Редита" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "Ðе могу да пронађем никакве предаје Ñлика." #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "Ðабавља цитате Ñа Цитатдедијевих дневних РСС довода цитата.\n" "Ðе подржава претрагу према ознакама или ауторима." #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Додајте Фликр као извор Ñлика" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "Одредите Фликров начин претраге. Слике " "које Ñе поклапају Ñа изабраном кључном речи биће преузете. ОÑтавите " "непотребне кључне речи празним." #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "Ознаке: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "СпиÑак ознака раздвојених зарезом. Слика мора да их Ñадржи Ñве иÑтовремено " "да би одговарала претрази.\n" "Пример: жуто,кола" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "КориÑник: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "УнеÑите адреÑу за фото-токове кориÑника или за једну од њихових Ñлика.\n" "Пример: http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "Скуп: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "УнеÑите адреÑу Ñкупа позадина.\n" "Пример: http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "ТекÑÑ‚:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "Претрага наÑлова, опиÑа и ознака Ñлика. ИÑкључите обухватање речи додавањем " "знака „-“.\n" "Пример: apple -pie" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "Ñекунде" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "минута" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "Ñати" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "дана" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "ПоÑтавке РазноврÑноÑти" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "Опште" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "Покрени РазноврÑноÑÑ‚ Ñа покретањем рачунара" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "Промени позадину након " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "Ðајмањи период је 5 Ñекунде" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "Промени позадину при покретању" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "Укључено" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "Ð’Ñ€Ñта" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "Путања" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "_Додај..." #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "Додајте Ñлике, фаÑцикле или изворе Ñлика на мрежи" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "_Уреди..." #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "Уредите изабрани извор" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "_Уклони..." #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "Уклоните изабране изворе Ñлика" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "_КориÑти" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "Укључите изабране изворе а иÑкључите Ñве друге" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "Преузми позадину Ñваких " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "Ðајмањи период је један минут" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "у " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "Тренутна фаÑцикла за преузимање " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "Опрез: ÐЕМОЈТЕ кориÑтити ову опцију ако кориÑтите произвољну фаÑциклу за " "преузимања Ñа кориÑним датотекама у њој. РазноврÑноÑÑ‚ ће Ñе придржавати " "ограничења без обзира шта Ñе налази у фаÑцикли за преузимање." #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "Ограничи фаÑциклу преузимања на " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "Ðајмања величина је 50 MB" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "MB бриÑањем Ñтаријих датотека када је потребно" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "Омиљене" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "Умножи омиљене позадине у " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "ПропуÑници" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "" "ÐаÑумично примени ове пропуÑнике на приказане позадине (захваљујући дивној " "Магији Ñлика):" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "Цитати" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "Прикажи наÑумичне мудре цитате на радној површи" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "Боја текÑта: " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "Слова текÑта: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "Боја позадине: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "ПровидноÑÑ‚ позадине: " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " Прозирна" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "Ðепрозирна" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "ИÑцртај Ñенку текÑта" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "Изглед" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "Ширина облаÑти цитата: " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "УÑка " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "Широка" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "Водораван положај: " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "Лево " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "УÑправни положај: " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "Горе " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "ПоÑтављање" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "Прикажи цитате из ових извора: " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "Још " "прикључака" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "" "Прикажи Ñамо ове ознаке и ауторе. ОÑтавите празно за приказивање наÑумичних " "цитата." #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "Пример: забавни, образовни" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "Пример: Ðикола ТеÑла, ДеÑанка МакÑимовић" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "Ðутори: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "Извори и издвајање" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "Промени цитат након " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "Ðајмањи период је 10 Ñекунде" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "Редовна промена" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "Сат" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "" "Прикажи леп велики дигитални Ñат на радној површи, који приказује тренутно " "време и датум" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "Да подеÑите изглед Ñата уредите ÑвојÑтво пропуÑника_Ñата у датотеци " "подешавања (~/.config/variety/variety.conf). КориÑтите напомене у датотеци " "„~/.config/variety/variety_latest_default.conf“ као водич." #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "Слова за Ñат: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "Слова за датум: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "Ово не ради? Прочитајте " "овде. Како убудуће да подеÑите Ñат? Прочитајте овде." #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "ДејÑтва" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "Слике за покретни приказ" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "Омиљене Ñлике" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "Слике у Ñвим укљученим изворима Ñлика" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "Све Ñлике у фаÑцикли за преузимања" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "Произвољна фаÑцикла (укључује Ñлике у Ñадржаним фаÑциклама) " #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "РедоÑлед Ñлика у покретном приказу " #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "ÐаÑумично" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "Према називу, од Рдо Ш (A-Z)" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "Према називу, од Ш до Ð (Z-A)" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "Према датуму, прво Ñтарије" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "Према датуму, прво новије" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "Екран" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "Покрени на екрану" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "Режим прозора за покретни приказ " #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "Преко целог екрана" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "Радна површ (оÑтаје иÑпод других прозора)" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "Увећан прозор" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "Уобичајен прозор" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "Динамика" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "Период између промена Ñлика " #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr " Ñекунде" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "Брзо ишчезавање " #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "Споро ишчезавање" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "Мање увеличање" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "Веће увеличање" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "Мање увлачење" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "Веће увлачење" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "Врати на оÑновно" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" "Измене на овој Ñтраници Ñтупају на Ñнагу након поновног покретања покретног " "приказа" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "Сада покрени покретни приказ" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "Покретни приказ" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "ВРТИ.ОРГ" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "ВРТИ.ОРГ је у развоју и требаће му времена да Ñазре" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" "ВРТИ.ОРГ повезује кориÑнике РазноврÑноÑти " "Ñа Ñличним укуÑа и пружа Ñупер погодан начин за промену позадине, да додате " "нове изворе Ñлика у РазноврÑноÑÑ‚, и да пратите омиљене Ñлике других " "кориÑника. ИÑпуњен је омиљеним Ñликама Ñвих кориÑника који учеÑтвују." #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "" "Ðе могу да направим кориÑника — нема везе Ñа ВРТИ.ОРГ-ом. КаÑније ћемо " "покушати опет." #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" "Учлањење омогућава одличне функције као што је уÑклађивање омиљених Ñлика и " "извора између рачунара и перÑонализованих препорука." #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "УÑаглашавање" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "УÑаглаÑи омиљене Ñлике између рачунара" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "Захтева да је ВРТИ.ОРГ укључен и да Ñте пријављени." #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" "Ваше омиљене Ñлике Ñа других рачунара биће аутоматÑки преузете на овом " "рачунару. Морате бити пријављени Ñвуда Ñа иÑтим кориÑником ВРТИ.ОРГ-а. " "УÑаглашавање неће избриÑати Ñлике." #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "Политика приватноÑти" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" "РазноврÑноÑÑ‚ шаље податке Ñамо за Ñлике које је преузео, никада за Ñлике " "које већ имате у Ñвојим фаÑциклама које могу бити личне, а уÑаглашавање не " "ради за овакве Ñлике. Прикупљени подаци Ñе не деле Ñа трећим лицима, оÑим " "ако одлучите да ваш профил учините јавним. Овде прочитајте више о уÑлузи " "и политици приватноÑти." #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "СтатиÑтика коришћења" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "" "Помозите да РазноврÑноÑÑ‚ учинимо бољим тако што ћете поÑлати анонимне " "резултате коришћења" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" "Ови резултати нам помажу да унапредимо РазноврÑноÑÑ‚ разумевањем како " "кориÑници делују Ñа њим. Они такође укључују опште податке о издању вашег " "оперативног ÑиÑтема и подешавању монитора. Прикупљени подаци Ñе не деле ни " "Ñа ким." #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "УÑаглашавање и друштво" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "ФаÑцикла за набавке" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "Сачувај ручно преузете позадине у " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "Превлачење и убацивање" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "Иконица РазноврÑноÑти у покретачу Ñлужи као мета убацивања. Убаците неку " "адреÑу Ñлике или датотеке у њу и она ће бити Ñачувана у вашој фаÑцикли за " "набављање. Онда можете да притиÑнете „Следећа“ да је видите на радној " "површи.\n" "Да прикажете иконицу у покретачу изаберите „О програму“ или „ПоÑтавке“. " "Можете пожелети да је закључате тамо ради лакшег приÑтупа превлачења и " "убацивања." #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "Праћење оÑтаве" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "Прати оÑтаву за адреÑама Ñлика и набави их" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "Ðли набави Ñамо када је домаћин адреÑе један од ових:" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "Ручно преузимање" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "Када је могуће кориÑти Ñлике:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "Које имају пејзажно уÑмерење" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "Које Ñу величине барем " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "% резолуције екрана" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "Боја" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "Које Ñу тамне или Ñветле:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "Тамне" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "Светле" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "Које Ñадрже ову боју: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(Ступају у дејÑтво након почетне претраге)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "Оцењивање" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "Које имају ЕКСИФ оцену барем " #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "Боја и величина" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "Иконица указивача" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "Иконица указивача:" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "Светла" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "Тамна" #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "КориÑти текућу позадину" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "Произвољна Ñлика..." #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "Ðишта" #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "Изаберите иконицу" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "Када је иконица Ñкривена, РазноврÑноÑÑ‚ можете контролиÑати Ñа линије " "наредби, или Ñа брзог ÑпиÑка покретача. Покрените „variety --help“ да видите " "Ñве доÑтупне наредбе." #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "Радње омиљених" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "Радње омиљених за приказ у главном изборнику:" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "Умножи у омиљене" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "И умножи и премеÑти" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "ЗавиÑно од фаÑцикле..." #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "Прикажи прозорче за прилагођавање објаве ФејÑбука пре објављивања" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "Подршка екрана пријављивања" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "" "Уверите Ñе да ће позадине које подеÑи РазноврÑноÑÑ‚ бити коришћене на екрану " "пријављивања" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "Упозорење приватноÑти: Да покаже вашу позадину Лаганом управнику " "приказа Ñу потребна овлашћења за читање преко Ñлике. Са овом опцијом " "укљученом, РазноврÑноÑÑ‚ ће умножити позадине у јавној фаÑцикли и промениће " "њихова овлашћења чинећи да Ñвако може да их чита. По оÑнови, фаÑцикла је " "„~/Слике“ ако ваша лична фаÑцикла није шифрована, а „/usr/share/backgrounds“ " "ако јеÑте. КориÑтите уз опрез на ÑиÑтемима Ñа више кориÑника." #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "Умножи датотеке Ñлика позадина у овој фаÑцикли: " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "Врати на оÑновно" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "Да ли још увек не ради?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "" "Изгледа да је ваша лична фаÑцикла шифрована, тако да коришћење фаÑцикли " "унутар ње неће радити." #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "Ðемате овлашћење за пиÑање у овој фаÑцикли." #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "Овлашћења не дозвољавају да ЛајтДМ чита датотеке из ове фаÑцикле-." #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "" "РазноврÑноÑÑ‚ може да прилагоди овлашћења, али ви морате да обезбедите " "овлашћења админиÑтратора." #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "Прилагођавање" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "Савети и трикови" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "Ðедавне измене" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "ПоÑетите веб Ñајт" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "Пријавите грешку или затражите функцију" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "Пошаљите повратне информације" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "Приложите неки динар пројекту" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "Приложите неки динар путем Пеј-Пола" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "Развијам РазноврÑноÑÑ‚ у моје Ñлободно време, што обично значи у каÑним " "Ñатима након што моја деца оду на Ñпавање. Сваки Ð¸Ð·Ð½Ð¾Ñ ÐºÐ¾Ñ˜Ð¸ будете приложили " "биће цењен. То ће ми показати да ви — и кориÑници — цените РазноврÑноÑÑ‚, и " "то ће ме мотивиÑати да наÑтавим активно да радим на њему.\n" "\n" "Хвала вам,\n" "Питер Леви" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" "За Битновчић и друге начине плаћања поÑетите веб Ñтраницу РазноврÑноÑти." #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "Ðабављам" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "Слика је превише мала, занемарујем је" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "Извините, добих „%s“ грешку..." #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "Ово значи да веза није више иÑправна" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "Ðабавка није уÑпела због нечега" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "" "За више података, покрените програм у терминалу Ñа опцијом „-v“ и поново " "покушајте радњу" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "" "Изгледа да вам је оштећена датотека подешавања „smart_user.json“. Мораћете " "поново да Ñе пријавите на ВРТИ.ОРГ." #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "Вероватно Ñу вам иÑтекла уверења за ВРТИ.ОРГ. Поново Ñе пријавите." #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "Ðабављам %d Ñлике" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "Ðабављам 1 Ñлику" #: ../variety/Smart.py:684 msgid "Finished" msgstr "Завршио Ñам" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "Пријављени Ñте као „%s“" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "" "Да ли желите да Ñе пријавите на ВРТИ.ОРГ као %s?" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "Потврда пријављивања на ВРТИ.ОРГ" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "Ðема прикључка цитата" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "Прикључак цитата није инÑталиран" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "Ðема одговарајућег прикључка цитата" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "" "Ðемате прикључак цитата који подржава претрагу по кључним речима и ауторима" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "Ðе могу да набавим цитате" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "Можда Ñу Ñе урушиле уÑлуге цитата, покушаваћемо и даље" #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "Ðе могу да нађем цитате" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "Можда тражите нешто врло непознато?" variety-0.8.3/po/tr.po000066400000000000000000002703321362063646600146330ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2019-11-28 11:27+0000\n" "Last-Translator: YaÅŸar Çiv \n" "Language-Team: Launchpad Turkish Translators VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" "İpucu: Ayrıca bir tarayıcıda VRTY.ORG " "sitesine giriÅŸ yapabilir ve profilinizdeki \"Trigger " "Variety login\" baÄŸlantısını tıklayabilirsiniz." #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "GiriÅŸ" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "Tümü" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "Resimler" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "Dizinler" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "Flickr" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Wallhaven.cc" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "Reddit" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "Medya RSS" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "Kaynağı kaldır, dosyaları sakla" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "Kaynakları kaldır, dosyaları sakla" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "Kaynağı kaldır ve indirilen dosyaları sil" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "Kaynakları kaldır ve indirilen dosyaları sil" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "Dünya GüneÅŸ Işığı Haritası etkin" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "Dünya GüneÅŸ Işığı Haritasını kullanmak, hem indirme hem de deÄŸiÅŸtirme " "iÅŸleminin 30 dakikaveya daha kısa aralıklarla etkinleÅŸtirilmesini " "gerektirir. Ayarlar otomatik olarak ayarlandı." #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "Resimleri Ekle" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "Vazgeç" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "Ekle" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "" "Dizinleri Ekle - Sadece kök dizinleri ekleyin, alt dizinler tekrarlı olarak " "aranır" #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "Düzenle..." #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "Resmi Görüntüle" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "Dizin Aç" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "Önerilen resim kaynağı devre dışı" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "Yazma izni yok" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "Sınır devre dışı" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "" "İndirme dizinini deÄŸiÅŸtirmek, yanlışlıkla veri kaybını önlemek için boyut " "sınırını otomatik olarak kapatır" #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "Gerçek indirme dizini: %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "İzinler ayarlanamadı" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "Bu komutu elle çalıştırmayı deneyebilirsiniz:\n" "sudo chmod %s \"%s\"" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "Oturumu açan: " #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "Anonim" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "GiriÅŸ yap yada kayıt ol" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "Kullanıcı deÄŸiÅŸtir" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "Variety'e hoÅŸgeldiniz!" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "Devam" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" "Variety bir otomatik duvar kağıdı deÄŸiÅŸtiricidir. ÇeÅŸitli çevrimiçi " "kaynaklardan indirilen resimler veya yerel resimler kullanarak masaüstü " "duvar kağıdınızı düzenli olarak döndürür. Arkaplanda sessizce çalışır - " "kontrol etmek için sistem çekmecenizdeki simgeye tıklayın:" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" "Variety, Bulgaristan'dan bir yazılım geliÅŸtiricisi olan Peter Levi " "tarafından oluÅŸturulan açık kaynaklı bir yazılımdır. BeÄŸendiysen lütfen bağış yap." #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "" "Åžimdi tercihlerinizi aÅŸağıdaki ekranlarda ayarlamak için biraz zaman ayırın." #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "KDE Kullanıcıları - Önemli, lütfen okuyun:" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" "KDE'de çalışıyor gibi görünüyorsunuz. KDE 4'te duvar kağıdını program " "içinden çıkarmak mümkün deÄŸildir - bunun için API yoktur. Variety'nin " "çalışması için lütfen buradaki talimatları okuyun ve uygulayın." #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "Amanın, sunucu hata verdi (%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "Sunucuya baÄŸlanılamadı" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "_Sonraki" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "_Önceki" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "Åžimdiki masaüstü duvar kağıdı" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "Kökeni göster" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "_Sık Kullanılanlara Kopyala" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "Sık Kullanılanlara Taşı" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "_Çöpe Gönder" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "_İleri, ilerleme geçmiÅŸi atlanarak" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "İpucu: İleri veya Geri için simge\n" "üzerinde kaydırma tekerleÄŸi kullan" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "Geçerlide duraklat" #: ../variety/indicator.py:129 msgid "_Image" msgstr "_Resim" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "Bu nereden?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "Etkiler olmadan göster" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "Google Resim Arama" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "Facebook'ta PaylaÅŸ" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "EXIF Puanını Ayarla" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "NSFW resmini bildir" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "Sık Kullanılanlara Kaydet" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "Sık Kullanılanları Görüntüle..." #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "Panoya Kopyala" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "Google Alıntısı" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "Google Yazarı" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "Tercihler..." #: ../variety/indicator.py:252 msgid "Turn off" msgstr "Kapat" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "_Alıntı" #: ../variety/indicator.py:265 msgid "_History" msgstr "_GeçmiÅŸ" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "Duvar Kağıdı Seçici" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "Son _İndirilenler" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "Slayt Gösterisi BaÅŸlat" #: ../variety/indicator.py:302 msgid "About" msgstr "Hakkında" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "Bağış Yap" #: ../variety/indicator.py:310 msgid "Quit" msgstr "Çık" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "_Güvenli mod" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "" "Bu geçerli bir Medya RSS besleme URL'si gibi görünmüyor veya orada içerik " "yok." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "Variety - VRTY.ORG" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "Hayır, teÅŸekkürler" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" "tanıtım VRTY.ORG! Katılmak ister misin?" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" "VRTY.ORG Variety kullanıcılarını benzer " "zevklerle birbirine baÄŸlar ve duvar kağıdınızı deÄŸiÅŸtirmek, yeni resim " "kaynakları bulmak ve eklemek ve diÄŸer kullanıcıların sık kullandıklarını " "takip etmek için süper kullanışlı yöntemler sunar." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" "Katılım çaba gerektirmez - Variety tarafından indirilen resimleri beÄŸenir " "veya beÄŸenmezseniz, profiliniz otomatik olarak oluÅŸturulur. Herkese açık " "olmayı seçmezseniz, profiliniz üçüncü ÅŸahıslarla paylaşılmayacaktır. Hizmet ve gizlilik politikası " "hakkında daha fazla ayrıntıyı buradan okuyun." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" "Bilgisayarlar arasında sık kullanılanların " "eÅŸzamanlaması gibi bazı özellikler için katılım gereklidir." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "VTRY.ORG'a katılın" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "Variety - Panoramio görüntü kaynağı ekle" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "Lütfen ilgi alanınızı yakınlaÅŸtırın." #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Variety - Facebook'ta Yayınla" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "" "Geçerli duvar kağıdını Facebook'ta bir baÄŸlantıyla yayınla. Bu metni " "baÄŸlantıyla birlikte ekle (veya sadece boÅŸ bırak):" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "Geçerli alıntıyı kullan" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "Artık sorma, her zaman yukarıdaki metni kullan" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "Resim bulunamadı" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "Zaten Sık Kullanılanlarda" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "_Sık Kullanılanlara Taşı" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "Getirildi: Kökeni Göster" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "%s'de görüntüle" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "Bilinmeyen" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "Güvenli Mod: Açık" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "Güvenli modu aç" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "Yazar: %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "Düzenli deÄŸiÅŸiklikleri devam ettir" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "Süzme çok mu katı?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "Variety, resim süzme ölçütlerinize uyan çok az resim buluyor" #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "" "Lütfen daha fazla resim kaynağı ekleyin yada bazı indirmeleri bekleyin" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "Lütfen daha fazla resim kaynağı ekleyin" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "Daha fazla duvar kağıdı yok" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "Geçerli duvar kağıdı resim kaynaklarında deÄŸil" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "" "%s konumuna taşınamadı. Büyük olasılıkla bu dosyayı taşımak için izinleriniz " "yok." #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "" "%s konumuna kopyalanamadı. Büyük olasılıkla bu dosyayı kopyalamak için " "izniniz yok." #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "Silinemedi" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "%s dosyasını çöp kutusuna göndermek için izniniz yok." #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" "Çöpe gönderme baÅŸarısız, daha fazla bilgi için variety.log dosyasını kontrol " "edin." #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" "Uygun program yüklenmediÄŸi için çöpe gönderme baÅŸarısız oldu. Lütfen gvfs " "(gvfs-bin), trash-cli veya konqueror kurun." #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "Anonim kullanım istatistikleri" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" "Variety anonim kullanım istatistikleri toplar. \n" "Bunlar daha iyi hale getirmemize yardımcı olur ve kimseyle paylaşılmaz. \n" "Daha fazla okumak veya bunları kapatmak için \"EÅŸzamanlama ve sosyal\" e " "gidin\"" #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "" "Yapılandırma dosyasıyla bir editör açacağım ve sen deÄŸiÅŸiklikleri kaydedip " "kapattıktan sonra deÄŸiÅŸiklikleri uygulayacağım." #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [seçenek] [dosya veya url]\n" "\n" "Yerel dosyaları es geçmek onları Variety'nin sırasına ekleyecektir.\n" "Uzak URL'leri geçmek, onları Variety tarafından Getirilenler dizinine " "getirecek ve bunları sıraya yerleÅŸtirecektir.\n" "\n" "Belirli bir duvar kağıdını ayarlamak için: %prog /some/local/resim.jpg --next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "" "Kayıt mesajlarını göster (-vv daha da iyi hata ayıklama mesajlarını " "gösterir, -vvv debugs variety_lib)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "Çalışan örneÄŸini bırak" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "" "Geçerli duvar kağıdı konumunu yazdır. Sadece uygulama zaten çalışıyorsa " "kullanılır." #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "Sonraki Duvar Kağıdını Göster" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "Önceki Duvar Kağıdını Göster" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "İlerleme geçmiÅŸini atlayarak Sonraki duvar kağıdını göster" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "" "Geçerli duvar kağıdını Çöpe taşı. Sadece uygulama zaten çalışıyorsa " "kullanılır." #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Geçerli duvar kağıdını Sık Kullanılanlara kopyala. Sadece uygulama zaten " "çalışıyorsa kullanılır." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Geçerli duvar kağıdını Sık Kullanılanlara taşı. Sadece uygulama zaten " "çalışıyorsa kullanılır." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "Geçerli resimde durakla" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "Düzenli resim deÄŸiÅŸikliklerine devam et" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "Durdurma/Devam GeçiÅŸi durumu" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "Sonraki alıntıyı göster" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "Önceki alıntıyı göster" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "İlerleme geçmiÅŸini atlayarak Sonraki alıntıyı göster" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "Alıntıların GeçiÅŸini Durdur/Devam durumu" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "Geçerli alıntıyı Sık Kullanılanlara kaydet" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "Tarih görünümünü deÄŸiÅŸtir" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "Son İndirilenler ekranını deÄŸiÅŸtir" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "Tercihler iletiÅŸim kutusunu göster" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "" "Elle duvar kağıdı seçiciyi göster - etkin resim kaynaklarından görüntülerle " "dolu küçük resim çubuÄŸu" #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "Bir seçenek belirler ve uygular. Seçenek isimleri Variety'nin yapılandırma " "dosyası ~/.config/variety/variety.conf'da kullanılanla aynıdır. Tek bir " "komutta çoklu seçenekler ayarlanabilir. Örnek: 'variety --set-option icon " "Dark --set-option clock_enabled True'. DİKKATLİ KULLAN: Ayar dosyasını " "doÄŸrudan korumasız bir ÅŸekilde deÄŸiÅŸtiriyorsunuz." #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "" "seçenekler --next/--fast-forward ve --previous karşılıklı olarak " "ayrıcalıklıdır" #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "seçenekler --trash ve --favorite karşılıklı olarak ayrıcalıklıdır" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "seçenekler --pause ve --resume karşılıklı olarak ayrıcalıklıdır" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "--quotes-next/--quotes-fast-forward ve --quotes-previous seçenekleri " "birbirini dışlar" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "Bir Resim deÄŸil" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "Sıraya eklendi" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "Görmek için İleri'ye basın" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "Getirildi" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "Desteklenmeyen kaynak türü" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "Variety'nin en son sürümünü mü kullanıyorsunuz?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "Yeni resim kaynağı eklendi" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "Resim kaynağı zaten var, onu etkinleÅŸtirin" #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "Getirildi ve uygulandı" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "İşe yarıyor!" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "Variety baÄŸlantıları çalışıyor. Harika!" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "Desteklenmeyen komut" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "Verilen variety:// URL iÅŸlenemedi" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "Ayrıntıları görmek için günlüğe kaydetme ile çalıştır" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "Artık sorma, her zaman geçerli alıntıyı kullan" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "Yayınlanan" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "Yayını görmek için Facebook akışınızı açabilirsiniz" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "Yayınlanamadı" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "Otomatik baÅŸlatma giriÅŸi oluÅŸturulamadı" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "Otomatik baÅŸlatma masaüstü giriÅŸi oluÅŸturulurken bir hata oluÅŸtu\n" "Lütfen bir terminalden -v bayrağıyla çalıştırın ve tekrar deneyin." #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "Resim yok" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "Slayt gösterisi dizinlerinde resim yok" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "Wallhaven resim kaynakları devre dışı" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" "Sorunu kendiniz düzeltmek istiyorsanız lütfen google'da \"Python SNI SSL " "hatası\" arayın." #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" "Python sürümü ile Wallhaven gibi bazı https siteleri arasında SSL " "uyumsuzlukları var. buradaki sorun hakkında daha fazla bilgi " "edinebilirsiniz.\n" "\n" "Bu sorunu çözmek için gereken Python bağımlılıklarını yüklemek istiyor " "musunuz? \n" "Bu iÅŸlem süper kullanıcı ayrıcalıkları isteyecek. " #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "Variety - SSL hatası. Bağımlılıklar kurulsun mu?" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "Kuruluyor..." #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" "Kurulum bir iki dakika sürecek. Lütfen sabırlı olun. Günlük dosyası %s 'de" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "Bağımlılıklar kuruldu. Lütfen ÅŸimdi Variety'i tekrar baÅŸlatın." #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" "SSL hataları devam ederse, \"Python SNI SSL hatası\" için google'a " "baÅŸvurmanız ve baÅŸka bir çözüm aramanız gerekir." #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "BaÅŸarısız. Wallhaven kaynakları devre dışı." #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" "SSL-related bağımlılıkları baÅŸarıyla kurulmadı. Lütfen %s veya " "google'da\"Python SNI SSL hatası\" na bakın ve baÅŸka bir çözüm arayın." #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "Variety - Facebook Paylaşımı" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "Facebook Paylaşımı" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" "Facebook'ta ilk defa paylaşımda bulunuyorsunuz. Çevrimiçi kaynaklardan ve " "alıntılardan gelen resimler için Variety'den paylaşım mümkün. Bu ÅŸekilde " "çalışır: \n" "\n" "1. Facebook’a girin\n" "Facebook varsayılan tarayıcınızda açılır. GiriÅŸ yapmadıysanız, giriÅŸ " "yapmanız istenir. \n" "\n" " 2. Akışta yayınlamak için Variety'i " "yetkilendirin.\n" "Variety'nin sizin yerinize akışta yayınlamasına izin vermeniz " "istenecektir.Variety, yalnızca bu izni, anlattığınız resimleri ve alıntıları " "yayınlamak için kullanacaktır, baÅŸka bir ÅŸey yoktur.\n" "\n" " 3. Tarayıcıyı variety:// baÄŸlantılarını Variety " "veyaxdg-open ile açmak için yapılandırın.\n" "Ardından, tarayıcınızda Variety ile \"variety://\" baÄŸlantılarını " "iliÅŸkilendirmek için talimatları içeren bir sayfaya yönlendirileceksiniz. " "Kurulumu tamamlamak için lütfen bu talimatları izleyin. Bunu yalnızca bir " "kez yapmanız gerekiyor.\n" "\n" "Hiçbir ÅŸifre veya giriÅŸ bilgisi yerel olarak saklanmaz, sadece birkaç hafta " "boyunca geçerli olacak bir OAuth Facebook belirteci verilir. GeçerliliÄŸi " "sona erdikten sonra tekrar giriÅŸ yapmanız istenecektir." #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "TheQuotationsPage.com'dan alıntılar getirir" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "Variety - Reddit akışını ekle" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" "Alt alanın adını girin veya alt alanın tam adresini veya Reddit kullanıcıyı yapıştırın. İsterseniz " "sıralama düzenini ve zaman periyodunu belirtebilirsiniz. Variety, Reddit " "tarafından döndürülen ilk 100 gönderimdeki resimleri veya Imgur sayfalarını " "yönlendirmek için yayınları kullanacaktır.\n" "\n" "Örnek: Basitçe 'çizgi romanlar' veya http://www.reddit.com/r/comicsbel" "irtebilirsiniz.\n" "Örnek: Ayın en iyi yayınları: http://www." "reddit.com/r/comics/top/?sort=top&t=month" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "URL veya bir alt alanın adı: " #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "Orada ne olduÄŸunu kontrol etmek için sadece bir dakika" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "Variety - VRTY.ORG kaydı" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "Kayıt olmak ister misiniz?" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" "Anonim olarak VRTY.ORG katılımı " "yapabilirsiniz, ancak kayıt olmak, bilgisayarlar arasında sık " "kullanılanların eÅŸzamanlaması ve kiÅŸiselleÅŸtirilmiÅŸ öneriler gibi bazı çok " "güzel özellikler saÄŸlar. Ayrıca, iÅŸletim sisteminizi yeniden yüklerseniz " "profilinizi ve sık kullanılan duvar kağıtlarınızı kaybetmemenizi saÄŸlar." #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "Kayıt çok kolaydır ve herhangi bir kiÅŸisel veri gerektirmez." #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" "Anonim olarak katılmayı seçerseniz, Tercihler'deki \"EÅŸzamanlama ve sosyal\" sayfasından daha sonra " "kayıt olabilirsiniz." #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" "Hay aksi, VRTY.ORG'a baÄŸlanamadık. Sunucu kapalı olabilir. Lütfen birkaç " "dakika bekleyin ve tekrar deneyin ya da \"Anonim " "olarak katıl\" öğesini seçin ve daha sonra Tercihler'deki \"EÅŸzamanlama ve sosyal\" sayfasından kaydolun." #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "" "Lütfen kayıt iÅŸlemine devam edin ve açtığımız tarayıcı sekmesindeki " "talimatları izleyin." #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "Anonim olarak katılacağım" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "Kayıtlıyım, giriÅŸ yapayım" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "Buraya kayıt ol" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "Bir dizin seç" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "Tamam" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "Sonlandırma sinyali alındı, çıkılıyor ..." #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "Variety zaten çalışıyor. Komutu çalışan örneÄŸe gönderme." #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "Alt" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "Üst" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "Sol" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "SaÄŸ" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "Konum" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "Boyut" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "İçeren Dizini Göster" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "Kapat" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "EXIF derecelendirmesi ayarlanamadı" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "DerecelendirilmemiÅŸ" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "Reddedilen" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "Variety GeçmiÅŸi" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Variety Son İndirilenler" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Variety Resimleri" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "Telif Hakkı (c) 2012, Peter Levi " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "Variety Hakkında" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "Otomatik bir duvar kağıdı deÄŸiÅŸtirici, indirici ve yönetici." #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" "# Telif Hakkı (c) 2012, Peter Levi \n" "# Bu program ücretsiz bir yazılımdır: Özgür Yazılım Vakfı tarafından \n" "# yayınlanan GNU Genel Kamu Lisansı sürüm 3 ÅŸartlarına göre yeniden \n" "# dağıtabilir ve/veya deÄŸiÅŸtirebilirsiniz. \n" "# \n" "# Bu program, YARARLANABİLİRLİK, MEMNUNİYET KALİTESİ veya BELİRLİ BİR AMACA " "\n" "# UYGUNLUKLA ima edilen garantiler olmadan, yararlı olacağı umuduyla, ancak " "\n" "# HERHANGİ BİR GARANTİ OLMAKSIZIN dağıtılmıştır. Daha fazla bilgi için GNU \n" "# Genel Kamu Lisansına bakınız. \n" "# \n" "# Bu programla birlikte GNU Genel Kamu Lisansının bir kopyasını almalısınız. " "\n" "# DeÄŸilse, bkz. .\n" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "Variety" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Variety Duvar Kağıdı DeÄŸiÅŸtirici" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "İleri" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "Geri" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "Duraklat / Devam" #: ../variety.desktop.in.h:6 msgid "History" msgstr "GeçmiÅŸ" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "Tercihler" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "Variety - Wallhaven.cc resim kaynağı ekle" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" "Wallhaven.cc çeÅŸitli görsel arama " "seçenekleri sunar. AÅŸağıda arama yapmak için anahtar kelimeler belirtebilir " "veya Wallhaven.cc adresini ziyaret " "edebilirsiniz, arama kriterlerinizi buradan ayarlayın, sonuçları " "beÄŸendiÄŸinizden emin olun ve Wallhaven URL'sini tamamen kutuya yapıştırın.\n" "\n" "Anahtar kelimeleri belirtirseniz, tüm anahtar kelimelere uyan en popüler " "güvenli çalışma resimleri kullanılır. \n" "\n" "Bir Wallhaven URL'si belirtirseniz, lütfen sıralama ölçütlerini dikkatli bir " "ÅŸekilde seçin - Variety düzenli olarak görüntüleri ister, ancak yalnızca " "döndürülen ilk birkaç yüz görüntüyü kullanır. Rastgele veya Tarih, bu " "görüntü kaynağının, bitene kadar daha uzun bir \"hayatı\" olacağı anlamına " "gelir. Sık kullanılanlar, daha iyi resimler sunacak ve Alaka düzeyi " "ifadeleri veya renkleri ararken daha alakalı eÅŸleÅŸmeler saÄŸlayacaktır." #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "Anahtar kelimeleri girin veya URL'yi buraya yapıştırın: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "Bu aramayı kontrol etmek için sadece bir dakika" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "Yerel metin dosyalarında tanımlanan teklifleri görüntüler.\n" "Kendi txt dosyalarınızı: ~/.config/variety/pluginconfig/quotes/ içine " "koyun.\n" "Dosya biçimi:\n" "\n" "alıntı -- yazar\n" "\n" "ikinci alıntı -- baÅŸka bir yazar \n" "\n" "vs... \n" "\n" "Örnek: http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "Variety - Medya RSS beslemesi ekle" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "Lütfen Medya RSS akışının URL'sini aÅŸağıya yapıştırın. Sadece Media RSS " "yayınlarının desteklendiÄŸini, rasgele RSS beslemelerinin desteklenmediÄŸini " "lütfen unutmayın. Medya RSS beslemeleri, medyayı içerir: doÄŸrudan gerçek " "resim içeriÄŸine baÄŸlantı veren içerik etiketleri. Medya RSS beslemeleri " "saÄŸlayan sitelerin bazı örnekleri ÅŸunlardır: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "Medya RSS beslemesinin URL'sini buraya yapıştırın: " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "Bu URL'de ne olduÄŸunu kontrol etmek için sadece bir dakika" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "Yetkilendirme baÅŸarılı" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "Yayınlama..." #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "Yetkilendirme baÅŸarısız" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "Sık Kullanılanlara Kopyala vs. Sık Kullanılanlara Taşı" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "Varsayılana Sıfırla" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "" "Görüntü konumuna baÄŸlı olarak, menüden 'Sık Kullanılanlara Kopyala' veya'Sık " "Kullanılanlara Taşı' tercihinizi seçin:" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "Lütfen her satır başına bir giriÅŸ, :, " "Dizinin İndirilebileceÄŸi, Getirilen, DiÄŸerleri veya belirli birdizin yolunun " "bulunduÄŸu bir biçimde giriÅŸ girin.\n" "Düzen önemlidir. Bir resim gösterildiÄŸinde, bu listedeki görüntüyü içeren " "ilk dizin Variety'nin menüsünde hangi iÅŸlemlerin gösterileceÄŸini belirler. " "'DiÄŸerleri' herhangi bir dosyayla eÅŸleÅŸir ve listede sonuncu olmalıdır.\n" "\n" "Örnek:\n" "\tİndirilenler:Kopyala\n" "\tGetirilenler:Taşı\n" "\t/resimler/RastgeleResimler:Taşı\n" "\t/resimler/DüzenlenmiÅŸAlbümler:Kopyala\n" "\tDiÄŸerleri:Her ikiside" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "VRTY.ORG entegrasyonu" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "Bu özellik VRTY.ORG entegrasyonu gerektirir" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "VRTY.ORG entegrasyonunu etkinleÅŸtir" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" "Bu özellik için Variety, beÄŸendiÄŸiniz veya beÄŸenmediÄŸiniz resimler ve " "etkinleÅŸtirdiÄŸiniz çevrimiçi kaynaklar hakkında veri toplamak için izine " "ihtiyaç duyar.\n" "\n" "Toplanan veriler varsayılan olarak anonimdir ve yalnızca Variety'nin " "indirdiÄŸi resimleri kapsar, hiçbir zaman yerel dizinlerinizde özel " "olabilecek resimleri almaz.\n" "\n" "Bu veriler, herkes için daha iyi resimler saÄŸlamamıza ve VRTY.ORG sitesine malzeme bulmamıza yardımcı " "oluyor - tüm Variety kullanıcıları için deÄŸerli bir kaynak." #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "Bu geçerli bir Reddit URL'si gibi görünmüyor" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "Orada herhangi bir resim gönderisi bulamadık." #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "QuotesDaddy'nin günlük RSS beslemesinden alıntılar getirir.\n" "Etiketlere veya yazarlara göre arama yapmayı desteklemiyor." #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Variety - Flickr'ı bir resim kaynağı olarak ekle" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "Lütfen Flickr arama kriterlerini belirtin. " "Seçilen kriterlerin hepsine uyan fotoÄŸraflar indirilecektir. Gereksiz " "kriterleri boÅŸ bırakın." #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "Etiketler: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "Virgülle ayrılmış bir etiket listesi. Bir fotoÄŸrafın eÅŸleÅŸmesi için hepsini " "aynı anda içermesi gerekir.\n" "Örnek: sarı,araba" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "Kullanıcı: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "Lütfen URL'yi kullanıcının fotoÄŸraf akışına veya fotoÄŸraflarından birine " "ekleyin.\n" "Örnek: http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "Grup: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "Lütfen grubun URL'sini ekleyin.\n" "Örnek: http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "Metin:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "FotoÄŸrafların baÅŸlıklarında, açıklamalarında ve etiketlerinde serbest metin " "araması. Åžartları - ile hazırlayarak hariç tutun.\n" "Örnek: apple -pie" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "saniye" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "dakika" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "saat" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "gün" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "Variety Tercihleri" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "Genel" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "Bilgisayar baÅŸladığında Variety'i baÅŸlat" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "Her duvar kağıdını deÄŸiÅŸtir " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "En az aralık 5 saniyedir" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "BaÅŸlangıçta duvar kağıdını deÄŸiÅŸtir" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "Güvenli mod. NSFW ve kabataslak görüntülerden kaçının" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" "Deneysel özellik. Topluluk derecelendirmelerine dayanır. Daha " "fazlasını burada okuyun" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "Etkin" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "Tür" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "Konum" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "_Ekle..." #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "Resimler, dizinler veya çevrimiçi resim kaynakları ekle" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "_Düzenle..." #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "Seçilen kaynağı düzenle" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "_Kaldır..." #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "Seçilen resim kaynaklarını kaldır" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "_Kullan" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "Seçilen kaynakları etkinleÅŸtir ve diÄŸerlerini devre dışı bırak" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "Her duvar kağıdını indirin " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "En az aralık bir dakikadır" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "doÄŸru " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "Gerçek indirme dizini " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "Dikkat: DeÄŸerli dosyalar içeren özel bir indirme dizini kullanırsanız bu " "seçeneÄŸi KULLANMAYIN. Variety, indirme dizininde ne olduÄŸuna bakılmaksızın " "sınırı koruyacaktır." #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "İndirme dizinini sınırla " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "En az boyut 50 MB" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "MB GerektiÄŸinde en eski dosyaları silerek" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "Sık Kullanılanlar" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "Sık kullanılan duvar kağıtlarını kopyala " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "Süzgeçler" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "" "Bu süzgeçleri görüntülenen duvar kağıtlarına rastgele uygulayın (harika " "ImageMagick'e teÅŸekkürler):" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "Alıntılar" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "Masaüstünde rastgele akıllı alıntıları göster" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "Metin rengi: " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "Metin yazı tipi: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "Zemin rengi: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "Zemin matlığı: " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " Saydam" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "Mat" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "Metin gölgesi çiz" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "Görünüm" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "Alıntıların alan geniÅŸliÄŸi: " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "Dar " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "GeniÅŸ" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "Yatay konum: " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "Sol " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "Dikey konum: " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "Üst " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "YerleÅŸtirme" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "Bu kaynaklardan alıntıları göster: " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "Daha fazla " "eklenti" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "" "Sadece bu etiketleri ve yazarları göster. Rastgele alıntıları göstermek için " "boÅŸ bırakın." #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "Örnek: komik, ilham verici" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "Örnek: Albert Einstein, Voltaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "Yazarlar: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "Kaynaklar ve süzme" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "Her alıntıyı deÄŸiÅŸtir " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "En az aralık 10 saniyedir" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "Düzenli deÄŸiÅŸim" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "Saat" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "" "Masaüstünde ÅŸu anki saati ve tarihi gösteren güzel bir dijital saat göster" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "Saatin görünümünü yapılandırmak için Variety'nin ayarlar dosyasındaki " "clock_filter özelliÄŸini düzenleyin (~/.config/variety/variety.conf). " "~/.config/variety/variety_latest_default.conf dosyasındaki yorumları kılavuz " "olarak kullanın." #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "Saat yazı tipi: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "Tarih yazı tipi: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "Bunlar çalışmıyor mu? Burayı oku. " "Saat nasıl yapılandırılır? Burayı " "okuyun." #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "Etkiler" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "Slayt gösterisi için resimler" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "Sık kullanılan resimler" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "Tüm etkin resim kaynaklarındaki resimler" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "İndirilenler dizinindeki tüm resimler" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "Özel dizin (alt dizinlerdeki görüntüleri içerir) " #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "Slayt gösterisindeki resimlerin sırası " #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "Rastgele" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "A'dan Z'ye isimle" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "Z'den A'ya isimle" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "En eski tarihle" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "En yeni tarihle" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "Ekran" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "Monitörde çalıştır" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "Slayt gösterisi için pencere modu " #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "Tam ekran" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "Masaüstü (diÄŸer pencerelerin altında kalır)" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "Büyütülen pencere" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "Normal pencere" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "Dinamik" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "Görüntü deÄŸiÅŸiklikleri arasındaki mesafe " #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr " saniye" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "Hızlı solma " #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "YavaÅŸ solma" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "Daha az yakınlaÅŸtırma" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "Daha fazla yakınlaÅŸtırma" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "Daha az göster" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "Daha fazla göster" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "Varsayılana sıfırla" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" "Slayt gösterisi yeniden baÅŸlatıldıktan sonra bu sayfadaki deÄŸiÅŸiklikler " "etkili olur" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "Slay gösterisini ÅŸimdi baÅŸlat" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "Slayt gösterisi" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "VRTY.ORG" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "VRTY.ORG betadır ve olgunlaÅŸması biraz zaman alacak" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" "VRTY.ORG, Variety kullanıcılarını benzer " "zevklerle birbirine baÄŸlar ve duvar kağıdınızı deÄŸiÅŸtirmek, yeni resim " "kaynakları eklemek ve diÄŸerler kullanıcıların sık kullanılanlarını takip " "etmek için süper kullanışlı yollar sunar. Tüm katılımcı kullanıcıların en " "sevdiÄŸi resimler tarafından beslenir." #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "" "Kullanıcı oluÅŸturulamadı - VRTY.ORG sitesine baÄŸlantı yok. Daha sonra " "tekrar deneyeceÄŸiz." #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" "Kayıt, sık kullanılan resimlerin ve kaynakların bilgisayarlar ve " "kiÅŸiselleÅŸtirilmiÅŸ öneriler arasında eÅŸzamanlaması gibi harika özellikleri " "saÄŸlar." #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "EÅŸzamanla" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "Sık kullanılan resimleri bilgisayarlarınız arasında eÅŸzamanlayın" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "VRTY.ORG etkin ve giriÅŸ yapılmış olmayı gerektirir." #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" "DiÄŸer bilgisayarlardan en sevdiÄŸiniz resimler otomatik olarak bu bilgisayara " "indirilecektir. Her yerde aynı VRTY.ORG kullanıcısıyla giriÅŸ yapmış olmanız " "gerekir. EÅŸzamanlama hiçbir resmi silmez." #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "Gizlilik politikası" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" "Variety, yalnızca indirdiÄŸi resimler için veri gönderir, yerel " "dizinlerinizde zaten özel olabilecek görüntüler için asla veri göndermez ve " "eÅŸzamanlama bu tür görüntüler için çalışmaz. Profilinizi herkese açık " "tutmayı seçmezseniz, toplanan veriler üçüncü taraflarla paylaşılmaz. burada hizmet ve gizlilik " "politikası hakkında daha fazla ayrıntı okuyun." #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "Kullanım istatistikleri" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "" "Anonim kullanım istatistikleri göndererek Variety'yi daha iyi hale getirmeye " "yardımcı olun" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" "Bu istatistikler, kullanıcıların onunla nasıl etkileÅŸimde bulunduÄŸunu " "anlayarak Variety'yi geliÅŸtirmemize yardımcı olur. Ayrıca, iÅŸletim sistemi " "sürümünüz ve monitör kurulumunuz hakkında genel bilgiler de içerir. Toplanan " "veriler kimseyle paylaşılmaz." #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "EÅŸzamanlama ve sosyal" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "Dizini getir" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "Elle indirilen duvar kağıtlarını kaydet " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "Sürükle ve bırak" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "Variety'nin simgesi baÅŸlatıcıda bir bırakma hedefi olarak hizmet veriyor. " "Üzerine herhangi bir resim URL'sini veya dosyayı bırakın ve getirme dizinine " "kaydedilecektir. Daha sonra düğmesine basabilirsiniz. Masaüstünüzde görmek " "için ilerleyin.\n" "BaÅŸlatıcıdaki simgeyi göstermek için Hakkında veya Tercihler'i seçin. Kolay " "sürükle-bırak eriÅŸimi için orada kilitlemek isteyebilirsiniz." #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "Pano izleme" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "Resim URL'leri için panoya göz atın ve onları getirin" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "Ancak, yalnızca URL sunucusu bunlardan biri olduÄŸunda getir:" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "Elle indirme" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "Mümkün olduÄŸunda görüntüleri kullanın:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "Manzara yönlendirmesi var" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "En azından büyükler " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "Ekran çözünürlüğünün yüzdesi" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "Renk" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "Koyu veya aydınlık:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "Koyu" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "Aydınlık" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "Bu rengi içerir: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(İlk aramadan sonra etkili olur)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "DeÄŸerlendirme" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "En az EXIF deÄŸerlendirmesi var " #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "Renk ve boyut" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "Gösterge Simgesi" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "Gösterge simgesi:" # Simge seçeneÄŸi #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "Aydınlık" # Simge seçeneÄŸi #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "Koyu" # Simge seçeneÄŸi #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "Geçerli duvar kağıdını kullan" # Simge seçeneÄŸi #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "Özel resim..." # Simge seçeneÄŸi #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "Yok" # Simge seçeneÄŸi #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "Bir simge seç" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "Simge gizlendiÄŸinde, Variety komut satırından veya baÅŸlatıcı hızlı " "listesinden kontrol edilebilir. Kullanılabilir tüm komutları görmek için " "\"variety --help\" komutunu çalıştırın." #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "Sık Kullanılanlar İşlemleri" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "Ana menüde gösterilecek sık kullanılan iÅŸlemler:" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "Sık kullanılanlara kopyala" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "Hem Kopyala hem de Taşı" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "Dizine baÄŸlı ..." #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "" "Yayınlamadan önce Facebook yayınını özelleÅŸtirmek için iletiÅŸim kutusu" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "GiriÅŸ Ekranı DesteÄŸi" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "" "Variety tarafından ayarlanan duvar kağıtlarının giriÅŸ ekranında " "kullanılacağından emin olun" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "Gizlilik uyarısı: Duvar kağıdınızı göstermek için LightDM görüntü " "üzerinde okuma izinlerine ihtiyaç duyar. Bu seçenek açık olduÄŸunda, Variety " "duvar kağıtlarını herkese açık bir dizine kopyalar ve herkes tarafından " "okunabilir hale getirmek için izinlerini deÄŸiÅŸtirir. Varsayılan olarak, " "dizin, ev dizininiz ÅŸifrelenmemiÅŸse ve /usr/share/backgrounds ise ~/Pictures " "dizinidir. Çok kullanıcılı sistemlerde dikkatli kullanın." #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "Duvar kağıdı görüntü dosyalarını bu dizine kopyalayın: " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "Varsayılana sıfırla" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "Hala çalışmıyor mu?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "" "Ev dizininiz ÅŸifreli görünüyor, bu yüzden içindeki dizinleri kullanmak iÅŸe " "yaramayacak." #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "Bu dizin için yazma izniniz yok." #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "İzinler, LightDM'nin bu dizindeki dosyaları okumasına izin vermez." #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "" "Variety izinleri ayarlayabilir, ancak süper kullanıcı ayrıcalıkları vermeniz " "gerekir." #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "ÖzelleÅŸtirme" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "Ipuçları ve Püf noktaları" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "Son deÄŸiÅŸiklikler" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "Siteyi ziyaret et" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "Bir hatayı bildirin veya bir özellik isteyin" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "Geribildirim gönder" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "Variety'e bağış yap" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "PayPal ile bağış yapın" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "BoÅŸ zamanlarımda Variety'yi geliÅŸtiriyorum, bu da genellikle çocuklarımın " "yatağına gittiÄŸi geç saatler anlamına geliyor. Bağışladığınız herhangi bir " "miktar takdir edilecek. Bu bana Variety'nin sizin tarafınızdan - " "kullanıcılar - deÄŸer verildiÄŸini gösterecek ve aktif olarak çalışmaya devam " "etmem için beni motive edecek.\n" "\n" "TeÅŸekkür ederim,\n" "Peter Levi" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" "Bitcoin ve diÄŸer ödeme yöntemleri için Variety'nin websitesi.'ni " "ziyaret edin" #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "Getiriliyor" # çok küçük - sil ve kullanma #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "Görüntü çok küçük, görmezden geliyor" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "Üzgünüm, %s hatası var ..." #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "Bu, baÄŸlantının artık geçerli olmadığı anlamına gelir" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "Getirme bazı nedenlerden dolayı baÅŸarısız oldu" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "" "Daha fazla bilgi almak için, lütfen Variety'yi terminalden -v seçeneÄŸiyle " "çalıştırın ve eylemi yeniden deneyin" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "" "smart_user.json config dosyanız bozuk görünüyor. VRTY.ORG’a tekrar giriÅŸ " "yapmanız gerekebilir." #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "" "VRTY.ORG kimlik bilgileriniz muhtemelen eski. Lütfen yeniden giriÅŸ yapın." #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "%d resim getirildi" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "1 resim getirildi" #: ../variety/Smart.py:684 msgid "Finished" msgstr "Bitti" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "%s olarak oturum açıldı" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "" "VRTY.ORG'a %s olarak giriÅŸ yapmak istiyor " "musunuz?" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "VRTY.ORG giriÅŸ onayı" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "Alıntı eklentisi yok" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "Kurulu alıntı eklentisi yok" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "Uygun alıntı eklentisi yok" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "" "Anahtar kelimelere ve yazarlara göre arama yapmayı destekleyen alıntı " "eklentileriniz yok" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "Alıntı alınamadı" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "Alıntıların hizmetleri düşebilir, denemeye devam edeceÄŸiz" #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "Alıntılar bulunamadı" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "Belki çok belirsiz bir ÅŸey arıyor olabilir misin?" variety-0.8.3/po/uk.po000066400000000000000000003330571362063646600146310ustar00rootroot00000000000000# Ukrainian translation for variety # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the variety package. # Mykola Tkach , 2013. # msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2018-07-22 13:51+0000\n" "Last-Translator: Jon900 \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "Вибирає цитати з Goodreads.com" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "Зберегти оригінал" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "Тони Ñірого" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "ЖорÑтке розмиттÑ" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "М’Ñке розмиттÑ" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "ÐœÐ°Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð¾Ð»Ñ–Ð¹Ð½Ð¾ÑŽ фарбою" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "Ðакид олівцем" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "Пуантилізм" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "ПікÑелізаціÑ" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "Вибрані" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "Завантажені вручну" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "" "Раджено Variety. Відповідно до Вашого Ñмаку, віднеÑти Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð¾ Вибраних " "або позначити Ñк ÑміттÑ." #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "" "ОÑтанні вибрані Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½ÑˆÐ¸Ñ… кориÑтувачів Variety. [Можуть бути " "неприйнÑтними (NSFW )]" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "Випадкові шпалери з Desktoppr.co" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "NASA: аÑтрономічна Ñвітлина днÑ" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "Мапа оÑвітленноÑти Землі Солнцем — живі шпалери з Die.net" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "Світлина Ð´Ð½Ñ Ð²Ñ–Ð´ Bing" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "Світлина виÑокої роздільноÑти із Unsplash.com" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "" "Ви можете змінювати шпалери прокручуваннÑм коліща миші на індикаторі." #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" "Якщо Ви бажаєте щораз при змінюванні шпалер виконувати Ñвої команди або " "кориÑтуєтеÑÑ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð¸Ð¼ оточеннÑм Ñтільниці, будь лаÑка, відредагуйте " "Ñкрипти у ~/.config/variety/scripts. Приклади Ð´Ð»Ñ Ñ€Ñ–Ð·Ð½Ð¸Ñ… робочих Ñередовищ " "поміщені теж там." #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" "Variety можна керувати з командного Ñ€Ñдка, наприклад, призначити гарÑчі " "клÑвіші Ð´Ð»Ñ Ð´Ñ–Ð¹ що чаÑто викориÑтовуютьÑÑ. ЗапуÑтіть «variety --help», аби " "побачити уÑÑ– доÑтупні команди." #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" "Ви можете перетÑгувати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ файли, на піктограму у " "панелі запуÑку Ð´Ð»Ñ Ñ—Ñ… Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° викориÑÑ‚Ð°Ð½Ð½Ñ Ñƒ ÑкоÑти шпалер. Ð”Ð»Ñ " "швидкого Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ñ– Ñпецифічних Ñайтів, Ви також можете викориÑтовувати " "ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° буфером обміну (див. вкладку «Ручне завантаженнÑ»)." #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "" "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ñƒ жорÑткого Ñ€Ð¾Ð·Ð¼Ð¸Ñ‚Ñ‚Ñ â€” кращий ÑпоÑіб отримати абÑтрактні, " "ненав’Ñзливі, але, у той же чаÑ, барвиÑті шпалери, подібні Ñтандартним в " "Ubuntu." #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" "Додати Ñвої влаÑні фільтри доÑить проÑто: відкрийте " "~/.config/variety/variety.conf у текÑтовому редакторі й ÑкориÑтайтеÑÑ " "Ñ–Ñнуючими, Ñк прикладом. Будь-Ñкий фільтр — уÑього лише набір опцій Ð´Ð»Ñ " "команди Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð· ImageMagick." #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" "Коли Ви виберете джерело зображень, його вміÑÑ‚ з’ÑвитьÑÑ Ñƒ вікні у долішній " "чаÑтині екрану. Клацніть там по зображенню, щоб призначити його шпалерами. " "Клацніть правою кнопкою миші, щоб закрити вікно, змінити його зовнішній " "виглÑд або виконати дії з файлами. Ви можете вибрати декілька джерел Ð´Ð»Ñ " "«об’єднаного» переглÑду еÑкізів. Зверніть увагу, що переглÑд мініатюр " "обмежений декількома ÑотнÑми випадково вибраних зображень." #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" "Ð”Ð»Ñ Ð²Ð¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñповіщень при зміні шпалер розкоментуйте два оÑтанні Ñ€Ñдки у " "файлі ~/.config/variety/scripts/set_wallpaper." #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" "Піктограма індикатора Variety підтримує теми: Ñкщо Ви виберете «Світлий» " "виглÑд, то Variety перш перевірить, чи Ñ” у поточній GTK-темі піктограма " "«variety-indicator», й викориÑтає Ñ—Ñ— заміÑть вбудованої." #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" "Коли Ви додаєте цитати у Вибрані, вони типово зберігаютьÑÑ Ñƒ " "~/.config/variety/favorite_quotes.txt. Цей файл ÑуміÑний з локальним " "джерелом цитат Variety. Якщо бажаєте його викориÑтовувати, Ñкопіюйте у " "~/.config/variety/pluginconfig/quotes/ та залучіть локальне джерело цитат. " "Цей файл також ÑуміÑний з Unix-заÑобом fortune." #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "Увійти на VRTY.ORG" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача: " #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "Пароль: " #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "Ðемає облікового запиÑу? ЗареєÑтруйтеÑÑ Ñ‚ÑƒÑ‚" #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "Забули Ñвій пароль?" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" "Порада: Ви також можете увійти на VRTY.ORG " "у переглÑдачі тенет й натиÑнути поÑÐ¸Ð»Ð°Ð½Ð½Ñ \"Trigger " "Variety login\" у Ñвоєму профілі." #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "Увійти" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "УÑÑ–" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "ЗображеннÑ" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "Теки" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "Flickr" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "Wallhaven.cc" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "Reddit" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "Медійні RSS" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "Вилучити джерело, зберегти файли" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "Вилучити джерела, зберегти файли" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "Вилучити джерело й завантажені файли" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "Вилучити джерела й завантажені файли" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "Мапу ÑонÑчного Ñвітла на плÑнеті увімкнено" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "" "ВикориÑÑ‚Ð°Ð½Ð½Ñ Ð¼Ð°Ð¿Ð¸ ÑонÑчного Ñвітла потребує одночаÑного ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ " "параметрів автоматичного ÑÑ‚ÑÐ³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½Ðµ рідше ніж раз на 30-ть " "хвилин. Параметри будуть Ñкориговані автоматично." #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "Додати зображеннÑ" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "СкаÑувати" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "Додати" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "" "Додати теки — додавайте лише кореневі теки, пошук у підтеках рекурÑивний" #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "Змінити…" #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "Показати зображеннÑ" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "Відкрити теку" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "Раджене джерело зображень вимкнено" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "Ðемає прав Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð¾" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "" "Зміна теки Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¾ вимикає Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñƒ Ð´Ð»Ñ " "Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÐ¾Ð²Ð¾Ñ— втрати даних" #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "Поточна тека завантаженнÑ: %s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ права" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "Ви можете Ñпробувати вручну виконати команду:\n" "sudo chmod %s \"%s\"" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "Ðвторизовано Ñк: " #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "Ðнонім" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "Увійти або зареєÑтруватиÑÑ" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "Змінити кориÑтувача" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "ЛаÑкаво проÑимо до Variety!" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "Далі" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" "Variety автоматично змінює шпалери. Проґрама здійÑнює регулÑрну ротацію " "шпалер на Ñтільниці викориÑтовуючи локальні або завантажені з різних " "інтернет-джерел зображеннÑ. Вона працює у тловому режимі - Ð´Ð»Ñ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ " "нею, клацніть цю піктограму у ÑиÑтемній таці:" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" "Variety Ñ” проґрамним забезпеченнÑм з відкритим джерельним кодом, що Ñтворене " "розробником проґрамного Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ Ð· Болгарії Пітером Леві. Якщо Вам Ñ†Ñ " "проґрама подобаєтьÑÑ, будь лаÑка, пожертвуйте." #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "" "Тепер, будь лаÑка, знайдіть чаÑ, щоб вÑтановити параметри на наÑтупних " "екранах." #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "КориÑтувачі KDE — будь-лаÑка, прочитайте, це важливо:" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" "ЗдаєтьÑÑ Ð’Ð¸ викориÑтовуєте Ñередовище KDE. У KDE 4, неможливо вÑтановити " "шпалери з Ñередини проґрами - немає API Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ щоб Variety " "працювала, будь лаÑка, уважно прочитайте та виконайте вказівки наведені тут ." #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "Ðа жаль, Ñервер повернув помилку (%s)" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "Ðе вдалоÑÑ Ð·'єднатиÑÑ Ð· Ñервером" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "ÐаÑтупні" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "Попередні" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "Поточне Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð° Ñтільниці" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "Показати оригінал" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "Копіювати у Вибрані" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "ПереміÑтити у Вибрані" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "Вилучити у Ñмітник" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "_Далі, пропуÑкаючи вперед Ñ–Ñторію" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "Порада: гортайте шпалери\n" "крутÑчи коліщатко миші на індикаторі" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "Призупинити на поточному" #: ../variety/indicator.py:129 msgid "_Image" msgstr "_ЗображеннÑ" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "Ð—Ð²Ñ–Ð´ÐºÑ–Ð»Ñ Ñ†Ðµ?" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "Показати без ефектів" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "Пошук зображень на Google" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "ПоділитиÑÑ Ñƒ Facebook" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "Ð’Ñтановити EXIF рейтиг" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "Звіт Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ NSFW" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "Зберегти у Вибраних" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "ДивитиÑÑ Ð’Ð¸Ð±Ñ€Ð°Ð½Ñ–..." #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "Копіювати до буферу обміну" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "Поґуглити цитату" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "Поґуглити автора" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "ÐалаштуваннÑ…" #: ../variety/indicator.py:252 msgid "Turn off" msgstr "Вимкнути" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "_Цитата" #: ../variety/indicator.py:265 msgid "_History" msgstr "ІÑторіÑ" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "_Перемикач шпалер" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "Ðові завантаженнÑ" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "Почати показ Ñлайдів" #: ../variety/indicator.py:302 msgid "About" msgstr "Про проґраму" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "Пожертвувати" #: ../variety/indicator.py:310 msgid "Quit" msgstr "Вийти" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "_Безпечний режим" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "Це не Ñхоже на URL Ñтрічки RSS або немає доÑтупу" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "Variety - VRTY.ORG" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "ÐÑ–, дÑкую" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" "Ð’Ð²ÐµÐ´ÐµÐ½Ð½Ñ VRTY.ORG! Бажаєте прийнÑти учаÑть?" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" "VRTY.ORG поєднати кориÑтувачів Variety з " "аналогічними Ñмаками Ñ– забезпечити надзручний ÑпоÑіб зміни Ваших шпалер, щоб " "знайти та додати нові джерела зображень до Variety Ñ– проÑтежити за Вибраним " "інших кориÑтувачів." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" "УчаÑть не потребує ніÑких зуÑиль - Ваш профіль буде побудований автоматично, " "Ñкі завантажені на Variety Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð’Ð°Ð¼ подобаютьÑÑ Ñ‡Ð¸ не подобаютьÑÑ. Ваш " "профіль не буде переданий третім оÑобам, Ñкщо Ви вирішите його оприлюднити. " "Більш докладну інформацію " "про ÑÐµÑ€Ð²Ñ–Ñ Ð¹ політику конфіденційноÑти читайте тут." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" "УчаÑть Ñ” обов'Ñзковою Ð´Ð»Ñ Ð´ÐµÑких функцій Variety таких Ñк ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð’Ð¸Ð±Ñ€Ð°Ð½Ð¾Ð³Ð¾ між комп'ютерами." #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "ПрийнÑти учаÑть у VRTY.ORG" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "Variety — додати джерело зображень Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "Panoramio" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "Будь лаÑка, збільшіть мірило ділÑнки ваших зацікавлень" #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Variety — оприлюднити у Facebook" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "" "Оприлюднити поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° поточні шпалери у Facebook. Включити цей текÑÑ‚ " "разом з поÑиланнÑм (або залишити порожнім):" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "ВикориÑтовувати поточну цитату" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "Більше не питати, завжди викориÑтовувати цей текÑÑ‚" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "Зображень не знайдено" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "Завжди у Вибрані" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "ПереміÑтити у Вибрані" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "Обране: Показати оригінали" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "Показати на %s" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "Ðевідомо" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "Безпечний режим: Увімк" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "Увімкнути безпечний режим" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "Ðвтор: %s" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "Відновити регулÑрні зміни" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "Фільтр занадто Ñуворий?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "" "Variety знаходить замало Ñвітлин, Ñкі відповідають Вашим критеріÑм " "фільтрації зображень" #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "" "Будь-лаÑка, додайте більше джерел зображень або дочекайтеÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "Будь-лаÑка, додайте більше джерел зображень" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "Зображень більше немає" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "Це Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñутнє у джерелі" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "Ðе можу перенеÑти у %s. Можливо не виÑтачає прав Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ." #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "Ðе можу Ñкопіювати %s. Можливо не виÑтачає прав Ð´Ð»Ñ ÐºÐ¾Ð¿Ñ–ÑŽÐ²Ð°Ð½Ð½Ñ." #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "Ðе можу вилучити" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "У Ð’Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” прав Ð´Ð»Ñ Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ %s у Ñмітник." #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ до Ñмітника, щоб дізнатиÑÑ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð¸Ñ†Ñ–, перевірте " "variety.log." #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" "Вилучити до Ñмітника на вдалоÑÑ, бо не вÑтановлена відповідна програма. Будь " "лаÑка, вÑтановіть gvfs (gvfs-bin), trash-cli або konqueror." #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "Ðнонімна ÑтатиÑтика викориÑтаннÑ" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" "Variety збирає анонімну ÑтатиÑтику викориÑтаннÑ. \n" "Це допомагає нам зробити проґраму кращою й не поділÑєтьÑÑ Ð½Ñ– з ким. \n" "Щоб дізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ або вимкнути функцію, перейдіть у розділ " "\"Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ñ– Ñоціюм\"" #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "" "Буде відкритий редактор із файлом налаштувань, зміни будуть заÑтоÑовані " "піÑÐ»Ñ Ñ‚Ð¾Ð³Ð¾ Ñк ви збережете файл та закриєте редактор." #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" "%prog [параметри] [файли чи url]\n" "\n" "Вказані локальні файли будуть додані у чергу Variety.\n" "Файли за вказаним адреÑами URL будуть завантажені до теки Fetched й додані " "до черги.\n" "\n" "Ð”Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ð½ÐºÑ€ÐµÑ‚Ð½Ð¾Ð³Ð¾ зображеннÑ: %prog /будь-" "Ñке/локальне/зображеннÑ.jpg --next" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "" "Показувати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ñƒ (-vv показує більш докладні зневаджувальні " "повідомленнÑ, -vvv — Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñкі відноÑÑтьÑÑ Ð´Ð¾ variety_lib)" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "Вийти із запущеного примірника" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "" "Показати шлÑÑ… до Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ñ– Ñтільниці. Працює лише при запущеному " "заÑтоÑунку." #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "Показати наÑтупні шпалери" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "Показати попередні шпалери" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "Показати наÑтупне Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½ÐµÑ…Ñ‚ÑƒÑŽÑ‡Ð¸ Ñ–Ñторію" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "" "ПереміÑтити поточні шпалери до Ñмітника. Працює лише при запущеному " "заÑтоÑунку." #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "Копіювати поточні шпалери у Вибрані. Працює лише при запущеному заÑтоÑунку." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "" "ПереміÑтити поточні шпалери у Вибрані. Працює лише при запущеному заÑтоÑунку." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "Призупинити на поточному зображенні" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "Відновити регулÑрне Ð·Ð¼Ñ–Ð½ÑŽÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½ÑŒ" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "ÐŸÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ ÐŸÑ€Ð¸Ð·ÑƒÐ¿Ð¸Ð½Ð¸Ñ‚Ð¸/Відтворити" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "Показати наÑтупну цитату" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "Показати попередню цитату" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "Показати наÑтупну цитату нехтуючи Ñ–Ñторію" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "ÐŸÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ ÐŸÑ€Ð¸Ð·ÑƒÐ¿Ð¸Ð½Ð¸Ñ‚Ð¸/Відтворити Ð´Ð»Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "Зберегти поточну цитату у Вибраних" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "Перемикнути показ Ñ–Ñторії" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "Перемикнути показ оÑтанніх завантажень" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "Показати діÑлоґ налаштувань" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "" "Показати перемикач шпалер — панель еÑкізів зображень з активних інтернет-" "джерел" #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñ‚Ð° заÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð². Ðазви параметрів ті Ñамі що й у " "файлі налаштувань ~/.config/variety/variety.conf. Декілька параметрів можна " "вказати однією командою. Приклад: 'variety --set-option icon Dark --set-" "option clock_enabled True'. ВИКОРИСТОВУЙТЕ З ОБЕРЕЖÐІСТЮ: Ви змінюєте файл " "налаштувань безпоÑередньо без механізмів перевірки коректноÑти параметрів." #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "параметри --next/--fast-forward та --previous Ñ” взаємовиключними" #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "параметри --trash та --favorite Ñ” взаємовиключними" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "параметри --pause та --resume Ñ” взаємовиключними" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "" "параметри --quotes-next/--quotes-fast-forward та --quotes-previous Ñ” " "взаємовиключними" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "Ðе Ñ” зображеннÑм" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "Додано до цитат" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "ÐатиÑніть Далі Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "Отримані" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "Ðепідтримуваний тип джерела" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "Чи Ваша верÑÑ–Ñ Variety найновіша?" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "Ðове джерело зображень додано" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "Таке джерело зображень вже Ñ–Ñнує, вмикаю його" #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "Завантажено та заÑтоÑовано" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "Це працює!" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "Вау, поÑÐ¸Ð»Ð°Ð½Ð½Ñ Variety працюють. Чудово!" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "Команда не підтримуєтьÑÑ" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "Ðе вдалоÑÑ Ð¾Ð¿Ñ€Ð°Ñ†ÑŽÐ²Ð°Ñ‚Ð¸ дану variety:// URL" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "ЗапуÑтити з журналюваннÑм, щоб бачити подробиці" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "Більше не запитувати, завжди викориÑтовувати поточну цитату" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "Оприлюднено" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "" "Ви можете перейти до Ñвоєї Ñтрічки у Facebook Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду повідомленнÑ" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "Ðеможливо оприлюднити" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "Ðе вдалоÑÑ Ñтворити Ð·Ð°Ð¿Ð¸Ñ Ð² автозавантаженні" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "" "Помилка при Ñтворенні пункту автозавантаженнÑ\n" "Будь-лаÑка, запуÑтіть у терміналі з параметром -v й Ñпробуйте ще раз." #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñутні" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "Ðемає зображень у теках Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду Ñлайдів" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "Джерело Wallhaven відімкнено" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" "Будь лаÑка, поґуґліть «Python SNI SSL error», Ñкщо Ви бажаєте вирішити " "проблему ÑамоÑтійно." #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" "Є SSL неÑуміÑноÑти між Вашою верÑією Python Ñ– деÑкими Ñайтами за протоколом " "HTTPS, такими Ñк Wallhaven. Ви можете прочитати докладніше про проблему тут.\n" "\n" "Ви хочете, вÑтановити Python залежноÑти, необхідні Ð´Ð»Ñ Ð²Ð¸Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ñ”Ñ— " "проблеми? \n" "Ð¦Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” прав ÑуперкориÑтувача. " #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "Variety — помилка SSL. Ð’Ñтановити залежноÑти?" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "Ð’ÑтановленнÑ..." #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°Ð¹Ð¼Ðµ одну-дві хвилини. Будь лаÑка, зачекайте. Файл журналу %s" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "ЗалежноÑти вÑтановлені. Будь лаÑка, перезапуÑтіть Variety." #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" "Якщо помилки SSL зберігаютьÑÑ, Вам доведетьÑÑ Ð¿Ð¾Ò‘ÑƒÒ‘Ð»Ð¸Ñ‚Ð¸ Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ іншого " "Ñ€Ñ–ÑˆÐµÐ½Ð½Ñ 'Python SNI SSL error'." #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "Збій. Джерела Wallhaven відімкнені." #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" "Пов'Ñзані з SSL залежноÑти не були уÑпішно вÑтановлені. Див. %s або " "поґуґліть 'Python ÐДВ SSL error' Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ іншого рішеннÑ." #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "Variety — поділитиÑÑ Ð½Ð° Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "ПоділитиÑÑ Ð½Ð° Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" "Ви вперше ділитеÑÑ Ñƒ Facebook. ÐŸÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð· Variety доÑтупна Ð´Ð»Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½ÑŒ, " "отриманих з інтернет-джерел, та цитат. Працює так:\n" "\n" "1. Увійдіть до Facebook\n" "Facebook відкриєтьÑÑ Ñƒ Вашому переглÑдачі типово. Вам буде запропоновано " "увійти, Ñкщо ви не зробили цього раніше.\n" "\n" "2. Ðвторизуйте Variety Ð´Ð»Ñ Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ— у Вашій " "Ñтрічці.\n" "У Ð’Ð°Ñ Ð±ÑƒÐ´Ðµ запитано дозвіл Variety публікувати у Вашій Ñтрічці від Вашого " "ім’Ñ. Variety буде кориÑтуватиÑÑ Ñ†Ð¸Ð¼ дозволом, лише Ð´Ð»Ñ Ð¿ÑƒÐ±Ð»Ñ–ÐºÐ°Ñ†Ñ–Ñ— тих " "зображень Ñ– цитат, Ñкі Ви Ñамі вкажете, й ні Ð´Ð»Ñ Ñ‡Ð¾Ð³Ð¾ більше.\n" "\n" "3. Ðалаштуйте переглÑдач на Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ " "variety:// поÑилань Variety або xdg-open\n" "Потім Ð’Ð°Ñ Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÑŒ на Ñторінку з інÑтрукціÑми по аÑоціÑції " "\"variety://\" поÑилань Variety у Вашому переглÑдачі. Будь лаÑка, " "дотримуйтеÑÑ Ñ†Ð¸Ñ… вказівок, аби завершити налаштуваннÑ. Це потрібно буде " "зробити лише одного разу.\n" "\n" "ÐÑ–Ñкі паролі або логіни не зберігаютьÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾, лише OAuth токен Facebook, " "дійÑний протÑгом пари тижнів. Коли термін його дії вийде, Вам буде " "запропоновано авторизуватиÑÑ Ð·Ð½Ð¾Ð²Ñƒ." #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "Вибирає цитати з TheQuotationsPage.com" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "Variety — Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñтрічки Reddit" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" "Уведіть назву Ñабреддиту або вÑтавте повну URL Ñабреддиту або кориÑтувача Reddit. За бажаннÑм можете вказати порÑдок " "ÑÐ¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° період чаÑу. Variety буде викориÑтовувати запиÑи з прÑмими " "поÑиланнÑми на Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ Imgur Ñторінки з першими 100 поданнÑми, " "поверненими Reddit.\n" "\n" "Приклад: Ви можете вказати проÑто «comics» або http://www.reddit.com/r/comics\n" "Приклад: топ запиÑів міÑÑцÑ: http://www." "reddit.com/r/comics/top/?sort=top&t=month" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "URL-адреÑа або ім'Ñ subreddit: " #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "Лише мить щоб перевірити, що там" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "Variety - реєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð½Ð° VRTY.ORG" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "Ви бажали-б зареєÑтруватиÑÑ?" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" "Ви можете прийнÑти учаÑть на VRTY.ORG " "анонімно але реєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ” дуже хороші функції, такі Ñк ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð’Ð¸Ð±Ñ€Ð°Ð½Ð¾Ð³Ð¾ між комп’ютерами та перÑональні поради. Вона також гарантує, що Ви не " "втратите Ñвій профіль та улюблені шпалери при перевÑтановленні ОС." #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð´ÑƒÐ¶Ðµ проÑта й не вимагає ÑкихоÑÑŒ оÑобиÑтих даних." #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" "Якщо Ви вибираєте взÑти учаÑть анонімно, Ви можете зареєÑтруватиÑÑ Ð½Ð° " "Ñторінці налаштувань \"Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ñ– Ñоціюм\" " "пізніше." #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" "Ðажаль ми не змогли з’єднатиÑÑ Ð· VRTY.ORG. Сервер міг впаÑти. Будь лаÑка " "зачекайте декілька хвилин й Ñпробуйте ще раз або виберіть \"ВзÑти учаÑть анонімно\" Ñ– зареєÑтруватиÑÑ " "пізніше на Ñторінці налаштувань \"Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ñ– " "Ñоціюм\"." #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "" "Будь лаÑка продовжіть реєÑтрацію Ñ– дотримуйтеÑÑ Ð²ÐºÐ°Ð·Ñ–Ð²Ð¾Ðº на вкладці " "відкритого нами переглÑдача тенет." #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "Я буду брати учаÑть анонімно" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "Я зареєÑтрований, дайте увійти" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ñ‚ÑƒÑ‚" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "Оберіть теку" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "Так" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "Отримано Ñигнал Ð¿Ñ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸Â â€” вихід…" #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "Variety вже працює. ÐадÑÐ¸Ð»Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ до запущеного примірника." #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "Знизу" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "Згори" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "Ліворуч" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "Праворуч" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "РозташуваннÑ" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "Розмір" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "Показати у теці" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "Закрити" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати оцінку в EXIF" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "Без оцінки" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "Відхилено" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "ІÑÑ‚Ð¾Ñ€Ñ–Ñ Variety" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Ðові Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Variety" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Variety" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "ÐвторÑькі права © 2012, Peter Levi " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "Про Variety" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "Ðвтоматичний змінювач, завантажувач та керівник шпалер." #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "http://peterlevi.com/variety" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" "# ÐвторÑькі права © 2012, Peter Levi \n" "# Це вільне проґрамне забезпеченнÑ; Ви можете розповÑюджувати та/або " "змінювати його\n" "# за умовами ліцензії GNU General Public License верÑÑ–Ñ— 3, оприлюдненої\n" "# Фундацією вільного проґрамного забезпеченнÑ.\n" "#\n" "# Ð¦Ñ Ð¿Ñ€Ð¾Ò‘Ñ€Ð°Ð¼Ð° розповÑюджуєтьÑÑ Ð·Ñ– ÑподіваннÑм, що вона буде кориÑною, але\n" "# БЕЗ БУДЬ-ЯКИХ ЗÐПОРУК; навіть без натÑку на запоруки\n" "# КОМЕРЦІЙÐОЇ ВИГОДИ, ЗÐДОВІЛЬÐОЇ ЯКОСТИ або ПРИДÐТÐОСТИ ДЛЯ КОÐКРЕТÐОЇ\n" "# МЕТИ. Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¸Ñ… відомоÑтей звернітьÑÑ Ð´Ð¾ ліцензії GNU " "General Public License.\n" "#\n" "# Ви повинні були отримати копію GNU General Public License\n" "# з цією проґрамою. Якщо ні, дивітьÑÑ .\n" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "Variety" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Variety — проґрама Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½Ð¸ шпалер" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "ÐаÑтупні" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "Попередні" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "Призупинити / Продовжити" #: ../variety.desktop.in.h:6 msgid "History" msgstr "ІÑторіÑ" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "ÐалаштуваннÑ" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "Variety - додати джерело зображень Wallhaven.cc" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" "Wallhaven.cc забезпечує Ñ€Ñ–Ð·Ð½Ð¾Ð¼Ð°Ð½Ñ–Ñ‚Ñ‚Ñ " "параметрів пошуку шпалер. Ðижче Ви можете вказати ключові Ñлова Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ, " "або ж відвідати Wallhaven.cc, налаштуйте " "влаÑні критерії пошуку зображень, переконайтеÑÑ, що Вам до вподоби " "результати, та вÑтавте поÑÐ¸Ð»Ð°Ð½Ð½Ñ Wallhaven у поле.\n" "\n" "Якщо Ви вирішите вказати ключові Ñлова, з них викориÑтовуватимутьÑÑ Ð»Ð¸ÑˆÐµ " "найуподобаніші, безпечні Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸, зображеннÑ, ті Ñкі відповідають уÑім " "ключовим Ñловам.\n" "\n" "Якщо Ви вкажете поÑÐ¸Ð»Ð°Ð½Ð½Ñ Wallhaven, обирайте критерії пошуку з головою - " "Variety реґулÑрно вимагає зображеннÑ, але викориÑтовує лише шпалери з " "кількох Ñотень тих, Ñкі повернулиÑÑ. Критерій пошуку \"Випадкове\" або " "\"Пошук за датою\" означатиме, що така Ñвітлина \"проживе\" довше, ніж решта " "зображень. Під критерієм \"Улюблені\" маєтьÑÑ Ð½Ð° увазі Ð½Ð°Ð´Ð°Ð½Ð½Ñ ÐºÑ€Ð°Ñ‰Ð¸Ñ… " "зображень, влаÑне завдÑки проґрамі Relevance, що дозволить знайти кращі " "збіги, шукаючи за кольорами чи фразами." #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "Уведіть ключові Ñлова або поÑиланнÑ: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "Хвилинку, перевірка пошукового запиту" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" "Показує цитати збережені в текÑтовому файлі.\n" "ПоміÑтіть влаÑний txt файл до: ~/.config/variety/pluginconfig/quotes/.\n" "Формат файлу:\n" "\n" "цитата -- автор\n" ".\n" "наÑтупна цитата -- наÑтупний автор\n" ".\n" "так далі...\n" "\n" "Приклад: http://rvelthuis.de/zips/quotes.txt" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "Variety — додати Ñтрічку ÐœÐµÐ´Ñ–Ñ RSS" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" "Будь-лаÑка вÑтавте URL каналу ÐœÐµÐ´Ñ–Ñ RSS нижче. Зверніть увагу, що " "підтримуютьÑÑ Ð»Ð¸ÑˆÐµ канали Медіа RSS, а не довільні Ñтрічки RSS. Канали ÐœÐµÐ´Ñ–Ñ " "RSS міÑÑ‚Ñть теґ media:content, Ñкий поÑилаєтьÑÑ Ð±ÐµÐ·Ð¿Ð¾Ñередньо на Ñаме " "зображеннÑ. ДеÑкі приклади Ñайтів, що надають Медіа RSS канали: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "Ð’Ñтавте URL каналу ÐœÐµÐ´Ñ–Ñ RSS Ñюди: " #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "Хвилинку, перевіримо, що за цією адреÑою" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "УÑпіх авторизації" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "ОприлюденнÑ..." #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "Помилка авторизації" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "Копіювати або переміÑтити у Вибрані" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "ПеревÑтановити типові налаштуваннÑ" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "" "Виберіть, чи Ви бажаєте бачити у меню 'Копіювати у Вибрані' чи 'ПереміÑти у " "Вибрані', залежно від Ñ€Ð¾Ð·Ñ‚Ð°ÑˆÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ:" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" "Будь-лаÑка, робіть по одному запиÑу на лінію, уÑÑ– пункти повинні виглÑдати " "Ñк: <Тека>:, де текою можуть бути Downloaded, Fetched, " "Others або шлÑÑ… до певної локальної теки.\n" "ПорÑдок важливий. Коли буде показано зображеннÑ, перша тека у переліку, що " "міÑтить зображеннÑ, визначить, Ñкі операції покажутьÑÑ Ð² меню Variety. " "'Others' повинно бути у кінці переліку, тому що будь-Ñкий файл входить до " "цієї категорії.\n" "\n" "Приклад (Пишіть Ñаме англійÑькою):\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "VRTY.ORG інтеґраціÑ" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "Ð¦Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” інтеграції VRTY.ORG" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "Увімкнути VRTY.ORG інтеґрацію" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" "ПодобаєтьÑÑ Ð’Ð°Ð¼ чи не подобаєтьÑÑ Ð°Ð»Ðµ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— функції Variety потрібен " "дозвіл Ð´Ð»Ñ Ð·Ð±Ð¾Ñ€Ñƒ даних про Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– джерела в інтернеті Ñкі Ви увімкнули " ".\n" "\n" "Зібрані дані Ñ” типово анонімними Ñ– охоплюють лише Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñкі завантажені " "Variety, та ніколи не включають в Ñебе Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñкі Ви вже мали у Ñвоїх " "локальних теках й Ñкі можуть бути приватними.\n" "\n" "Ці дані допомагають нам забезпечити кращі Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²ÑÑ–Ñ… та VRTY.ORG - цінний реÑÑƒÑ€Ñ Ð´Ð»Ñ Ð²ÑÑ–Ñ… кориÑтувачів " "Variety." #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "ЗдаєтьÑÑ Ñ†Ñ Reddit URL не дійÑна" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "Ми не змогли знайти ÑкихоÑÑŒ поданих там зображень." #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" "Бере цитати з щоденної RSS Ñтрічки на QuotesDaddy's.\n" "Ðе підтримує пошук по теґах та авторові." #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Variety — додати Flickr Ñк джерело зображень" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "" "Будь-лаÑка, вкажіть умови пошуку на Flickr. Буде завантажено лише Ñвітлини Ñкі " "відповідають уÑім умовам. Залиште непотрібні Ð¿Ð¾Ð»Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ–Ð¼Ð¸." #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "Теґи: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "Перелік теґів, розділених комою. Світлина повинна міÑтити Ñ—Ñ… уÑÑ– одночаÑно,\n" "Приклад: жовтий,машина" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "КориÑтувач: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" "Будь-лаÑка, вкажіть URL галереї кориÑтувача або однієї з його Ñвітлин.\n" "Приклад: http://www.flickr.com/photos/peter-levi/" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "Група: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" "Будь-лаÑка, вÑтавте адреÑу URL групи.\n" "Приклад: http://www.flickr.com/group" "s/wallpapers/" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "ТекÑÑ‚:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "Вільний пошук за текÑтом заголовків, опиÑів та теґів Ñвітлин. Параметри, що " "виключаютьÑÑ Ð²Ð¸Ð¿ÐµÑ€ÐµÐ´Ð¶ÑƒÑŽÑ‚ÑŒÑÑ Ð·Ð½Ð°ÐºÐ¾Ð¼ -.\n" "Приклад: Ñблучний -пиріг" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "Ñекунд(и)" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "хвилин(и)" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "годин(и)" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "дні(в)" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "Загальні" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "ЗапуÑкати Variety при Ñтарті ÑиÑтеми" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "Змінювати шпалери кожні " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "Мінімальний інтервал 5 Ñекунд" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "Змінювати шпалери при запуÑку" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "Безпечний режим. Уникати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð· позначками NSFW Ñ– sketchy" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" "ЕкÑпериментальна функціÑ. Ð£Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ñ€Ñ–Ð²Ð½Ñ–Ð² безпеки. ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "Увімкнено" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "Тип" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "РозташуваннÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "_Додати…" #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "Додати зображеннÑ, теки або інтернет-джерела" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "З_мінити…" #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "Змінити виділене джерело" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "_Вилучити…" #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "Вилучити виділені джерела зображень" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "_ЗаÑтоÑувати…" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "Увімкнути вибрані джерела та від’єднати решту" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "Завантажувати шпалери кожні " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "Мінімальний інтервал - 1 хвилина" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "у " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "Тека Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" "Увага: ÐЕ викориÑтовуйте цей параметр, Ñкщо у вказаній Вами теці " "Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ” важливі файли. Variety буде дотримуватиÑÑ Ð¼ÐµÐ¶Ñ– незалежно від " "вміÑту теки." #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "Обмежити розмір теки Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð¾ " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "Мінімальний розмір 50 МБ" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "МБ, за необхідноÑти вилучаючи Ñтарі файли" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "Вибрані" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "Копіювати вибрані шпалери у " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "Фільтри" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "" "ЗаÑтоÑовувати випадкові фільтри до виведених на екран шпалер (дÑкуємо " "чудовому ImageMagick)" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "Цитати" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "Показати випадкові афоризми на Ñтільниці" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "Колір текÑту: " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "Шрифт текÑту: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "Колір тла: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "ПрозоріÑть тла: " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " Прозорий" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "Ðепрозорий" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "Показувати тінь від текÑту" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "Зовнішній виглÑд" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "Ширина ділÑнки цитат: " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "Вузька " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "Широка" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "Горизонтальне розташуваннÑ: " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "Ліворуч " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "Вертикальне розташуваннÑ: " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "Вгорі " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "РозташуваннÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "Показувати цитати з цих джерел: " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" "Більше " "додатків" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "" "Показувати лише Ð´Ð»Ñ Ñ†Ð¸Ñ… теґів та авторів. Залиште порожнім щоб показувати " "випадкові цитати." #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "Приклад: funny, inspirational" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "Приклад: Albert Einstein, Voltaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "Ðвтори: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "Джерела та фільтруваннÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "Змінювати цитату через " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "Мінімальний інтервал 10 Ñекунд" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "ПоÑтійна зміна" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "Годинник" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "" "Показувати на Ñтільниці великий цифровий годинник з поточним чаÑом та датою" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "Ðалаштуйте зовнішній виглÑд годинника, змінюючи параметр the clock_filter у " "файлі налаштувань Variety (~/.config/variety/variety.conf). У ÑкоÑти " "поÑібника викориÑтовуйте коментарі у " "~/.config/variety/variety_latest_default.conf." #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "Шрифт годинника: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "Шрифт дати: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" "Ðе працює? Читай " "тут. Як ще налаштувати годинник? Прочитай тут." #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "Ефекти" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ Ñлайдів" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "Улюблені зображеннÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð· уÑÑ–Ñ… під’єднаних джерел" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "УÑÑ– Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð· теки Downloads" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "Тека за вибором (включаючи Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ–Ð· підтек) " #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "ПорÑдок зображень при показі Ñлайдів " #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "Випадково" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "За ім’Ñм, від Рдо Я" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "За ім’Ñм, від Я до Ð" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "За датою, Ñпочатку Ñтарі" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "За датою, Ñпочатку нові" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "Екран" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "ЗапуÑтити на моніторі" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "Віконний режим Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ñƒ Ñлайдів " #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "Ðа увеÑÑŒ екран" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "Ð¡Ñ‚Ñ–Ð»ÑŒÐ½Ð¸Ñ†Ñ (залишаєтьÑÑ Ð¿Ñ–Ð´ іншими вікнами)" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "Розгорнуте вікно" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "Звичайне вікно" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "Динаміка" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "Інтервал між зміною зображень " #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr " Ñекунди" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "Швидке Ð·Ð½Ð¸ÐºÐ½ÐµÐ½Ð½Ñ " #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "Повільне зникненнÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "Менше збільшень" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "Більше збільшень" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "Менше зÑувів" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "Більше зÑувів" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "Скинути налаштуваннÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" "Зміни на цій Ñторінці будуть заÑтоÑовані піÑÐ»Ñ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿ÑƒÑку показу Ñлайдів" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "Почати показ Ñлайдів" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "Показ Ñлайдів" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "VRTY.ORG" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "" "VRTY.ORG знаходитьÑÑ Ð½Ð° Ñтадії бета теÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¹ потрібен певний Ñ‡Ð°Ñ Ð´Ð»Ñ " "доопрацюваннÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" "VRTY.ORG поєднує кориÑтувачів Variety з " "аналогічними Ñмаками Ñ– забезпечує надзручні ÑпоÑоби Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½Ð¸ Ваших шпалер, " "Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… джерел зображень Variety Ñ– ÑÑ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° Вибраним інших " "кориÑтувачів. Це джерело поповнюєтьÑÑ ÑƒÐ»ÑŽÐ±Ð»ÐµÐ½Ð¸Ð¼Ð¸ зображеннÑми уÑÑ–Ñ… " "кориÑтувачів, що беруть учаÑть." #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "" "Ðе вдалоÑÑ Ñтворити кориÑтувача - немає Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· VRTY.ORG. Спробуйте ще " "раз пізніше." #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" "РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑ” кориÑтуватиÑÑ Ñ†Ñ–ÐºÐ°Ð²Ð¸Ð¼Ð¸ функціÑми, такими Ñк " "ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ ÑƒÐ»ÑŽÐ±Ð»ÐµÐ½Ð¸Ñ… зображень Ñ– джерел між комп'ютерами та оÑобиÑті " "поради." #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "СинхронізаціÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ ÑƒÐ»ÑŽÐ±Ð»ÐµÐ½Ð¸Ñ… зображень між комп’ютерами" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "Потрібно увімкнути VRTY.ORG та пройти ідентифікацію" #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" "Ваші улюблені Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð· інших комп’ютерів будуть автоматично завантажені " "на комп’ютер. Ви повинні увійти у ÑиÑтему від одного кориÑтувача VRTY.ORG " "Ñкрізь. Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð½Ðµ призведе до Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð½Ñ–Ñких зображень." #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "Політика конфіденційноÑти" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" "Variety надÑилає дані лише про Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½ÐµÑŽ завантажені й ніколи про " "Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñкі вже були у Ваших локальних теках, Ñкі можуть бути приватними " "й такі Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ ÑинхронізуютьÑÑ. Зібрані дані не передаютьÑÑ Ñ‚Ñ€ÐµÑ‚Ñ–Ð¼ " "оÑобам, Ñкщо Ви погодитеÑÑ Ð·Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ Ñвій профіль загальнодоÑтупним. Читайте більш докладну " "інформацію про ÑÐµÑ€Ð²Ñ–Ñ Ñ– політику конфіденційноÑти тут." #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "СтатиÑтика викориÑтаннÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "" "Допоможіть зробити Variety кращою, надіÑлавши анонімну ÑтатиÑтику " "викориÑтаннÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" "Ð¦Ñ ÑтатиÑтика допоможе нам поліпшити Variety й даÑть Ñ€Ð¾Ð·ÑƒÐ¼Ñ–Ð½Ð½Ñ Ñ‚Ð¾Ð³Ð¾ Ñк " "кориÑтувачі взаємодіють з проґрамою. Вона також включає у Ñебе загальну " "інформацію про вашу верÑÑ–ÑŽ ОС Ñ– Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð½Ñ–Ñ‚Ð¾Ñ€Ð°. Зібрані дані не " "поділÑютьÑÑ Ð½Ñ– з ким." #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ñ– Ñоціюм" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "Завантажені вручну" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "Зберегти завантажені вручну Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñƒ " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "ПеретÑгуваннÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" "Піктограма Variety на панелі запуÑку може Ñлугувати метою Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ‚ÑгуваннÑ. " "ПеретÑгніть будь-Ñку URL Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ файл прÑмо на неї, й вони " "збережутьÑÑ Ñƒ теку завантажених вручну зображень. Потім ви можете натиÑнути " "кнопку Далі, щоб побачити Ñ—Ñ… на Ñтільниці.\n" "Щоб піктограма показалаÑÑ Ñƒ панелі запуÑку, виберіть пункт меню Про проґраму " "або ÐалаштуваннÑ. Ви можете закріпити Ñ—Ñ— там Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñтого доÑтупу до функції " "перетÑгуваннÑ." #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "Ð¡Ñ‚ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° буфером обміну" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "" "Стежити за буфером обміну при виÑвлені там адреÑи зображеннÑ, завантажувати " "Ñ—Ñ…" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "Завантажувати, лише Ñкщо URL хоÑту один з наÑтупних" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "Ручне завантаженнÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "За можливіÑтю викориÑтовувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñкі:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "Мають альбомну орієтацію" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "Принаймні " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "50" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "80" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "100" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "% від розміру екрану" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "Колір" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "Темні або Ñвітлі:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "Темні" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "Світлі" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "МіÑÑ‚Ñть цей колір: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "(Ð’Ñтупає у Ñилу піÑÐ»Ñ Ð´ÐµÑких початкових пошуків)" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "Оцінка" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "Оцінка в EXIF не менше " #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "1" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "2" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "3" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "4" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "5" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "Колір та розмір" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "Піктограма індикатора" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "Піктограма індикатора:" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "Світла" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "Темна" #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "Поточні шпалери" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "Вибрати зображеннÑ…" #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "Ðемає" #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "Вибрати піктограму" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "Коли піктограму індикатора приховано, можна керувати Variety з командного " "Ñ€Ñдка або через переліки дій панелі запуÑку. ЗапуÑтіть \"variety --help\" " "щоб переглÑнути уÑÑ– доÑтупні команди." #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "Вибрані операції" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "Вибрані операції, що показуютьÑÑ Ð² оÑновному меню:" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "Копіювати у Вибрані" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "Обидві (копіювати та переміÑтити)" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "Залежить від теки…" #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "" "Показувати діÑлоґ зміни текÑту Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñƒ Facebook перед оприлюдненнÑм" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "Підтримка екрану входу у ÑиÑтему" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "" "ПереконайтеÑÑ, що шпалери, вÑтановлені Variety, будуть викориÑтовуватиÑÑ Ð½Ð° " "екрані входу у ÑиÑтему" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" "ПопередженнÑ: Щоб показати Ваші шпалери, LightDM потрібен дозвіл на " "Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ. При увімкненні цього параметру, Variety Ñкопіює шпалери " "у загальну теку та змінить права, так що уÑÑ– кориÑтувачі будуть мати бачити " "Ñ—Ñ…. Типово це тека ~/Pictures, Ñкщо Ваша Ð´Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñ‚ÐµÐºÐ° у не зашифрованому " "виглÑді, та — /usr/share/backgrounds, Ñкщо вона зашифрована. Будь лаÑка, " "викориÑтовуйте цей параметр обережно." #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "Копіювати файли шпалер Ð´Ð»Ñ Ñтільниці у цю теку: " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "Відновити типові значеннÑ" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "УÑе ще не працює?" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "" "ЗдаєтьÑÑ, Вашу домашню теку зашифровано, так що викориÑÑ‚Ð°Ð½Ð½Ñ Ñ‚ÐµÐºÐ¸ в ній не " "буде працювати" #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "У Ð’Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” права на Ð·Ð°Ð¿Ð¸Ñ Ð´Ð¾ цієї теки" #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "Права не дозволÑють LightDM читати файли з цієї теки." #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "" "Можна налаштувати дозвіл, але Ви повинні будете надати Variety Ð¿Ð¾Ð²Ð½Ð¾Ð²Ð°Ð¶ÐµÐ½Ð½Ñ " "ÑуперкориÑтувача." #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "Ðалаштувати" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "КориÑні поради" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "ОÑтанні зміни" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "Завітати на Ñайт" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "Звітувати про помилку або запропонувати нову функцію" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "ÐадіÑлати відгук" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "Пожертвувати на Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "Пожертвувати через PayPal" #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" "Я розроблÑÑŽ Variety у Ñвій вільний чаÑ, Ñкий приходить звичайно у ті пізні " "години, коли мої діти лÑгають Ñпати. Буду вдÑчний за будь-Ñку грошову " "підтримку. Це покаже мені, що Variety Ñ” кориÑною Ð´Ð»Ñ Ð’Ð°Ñ Ñ‚Ð° надаÑть мені " "Ð½Ð°Ñ‚Ñ…Ð½ÐµÐ½Ð½Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ–ÑˆÐµ продовжувати роботу над проґрамою.\n" "\n" "ДÑкую,\n" "Пітер Леві" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" "Ð”Ð»Ñ Bitcoin та інших ÑпоÑобів оплати, відвідайте веб-Ñайт Variety." #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "ОтриманнÑ" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð°Ð´Ñ‚Ð¾ мале, нехтуємо" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "Ðажаль ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° %s..." #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "Це не означає, що поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆÐµ не дійÑне" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "ÐžÑ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾ з певних причин" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "" "Ð”Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð´Ð¾ÐºÐ»Ð°Ð´Ð½Ñ–ÑˆÐ¾Ñ— інформації, будь-лаÑка, запуÑтіть Variety з " "терміналу з параметром -v та повторіть дію" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "" "Ваш конфігураційний файл smart_user.json здаєтьÑÑ Ð·Ñ–Ð¿Ñований. Можливо Вам " "доведетьÑÑ Ð·Ð½Ð¾Ð²Ñƒ увійти на VRTY.ORG." #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "" "Ваші облікові дані на VRTY.ORG ймовірно заÑтаріли. Будь лаÑка, увійдіть " "знову." #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "Завантажено зображень: %d" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "Завантажено 1 зображеннÑ" #: ../variety/Smart.py:684 msgid "Finished" msgstr "Завершено" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "Ðвторизовано Ñк %s" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "" "Ви бажаєте увійти на VRTY.ORG Ñк %s?" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "Схвалити вхід на VRTY.ORG" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "Додатки Ð´Ð»Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚ відÑутні" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "Ðе вÑтановлено жодного додатку Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "Ðемає відповідного додатку Ð´Ð»Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "" "Ð’ Ð’Ð°Ñ Ð²Ñ–Ð´Ñутні додатки з підтримкою пошуку за ключовими Ñловами чи за автором" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "Ðе можу отримати цитати" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "" "Можливо ÑÐµÑ€Ð²Ñ–Ñ Ñ†Ð¸Ñ‚Ð°Ñ‚ недоÑтупний зараз, ми продовжимо Ñпроби під’єднатиÑÑ" #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ цитати." #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "Можливо Ви шукаєте щоÑÑŒ вельми темне?" variety-0.8.3/po/zh_CN.po000066400000000000000000002043771362063646600152150ustar00rootroot00000000000000# Chinese (Simplified) translation for variety # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the variety package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: variety\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2017-09-18 20:45-0700\n" "PO-Revision-Date: 2014-07-15 23:54+0000\n" "Last-Translator: kaiman \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2019-12-22 09:06+0000\n" "X-Generator: Launchpad (build bceb5ef013b87ef7aafe0755545ceb689ca7ac60)\n" #: ../data/plugins/quotes/GoodreadsSource.py:49 msgid "Fetches quotes from Goodreads.com" msgstr "从 Goodreads.com 获å–箴言" #: ../variety/Texts.py:20 msgid "Keep original" msgstr "ä¿æŒåŽŸå§‹" #: ../variety/Texts.py:21 msgid "Grayscale" msgstr "ç°åº¦" #: ../variety/Texts.py:22 msgid "Heavy blur" msgstr "" #: ../variety/Texts.py:23 msgid "Soft blur" msgstr "" #: ../variety/Texts.py:24 msgid "Oil painting" msgstr "油画" #: ../variety/Texts.py:25 msgid "Pencil sketch" msgstr "" #: ../variety/Texts.py:26 msgid "Pointilism" msgstr "" #: ../variety/Texts.py:27 msgid "Pixellate" msgstr "" #: ../variety/Texts.py:31 msgid "The Favorites folder" msgstr "" #: ../variety/Texts.py:32 msgid "The Fetched folder" msgstr "" #: ../variety/Texts.py:35 msgid "" "Recommended by Variety. Adapts to your taste as you mark images as favorite " "or trash." msgstr "" #: ../variety/Texts.py:37 msgid "" "Latest favorites by the other users of Variety. [May contain NSFW images]" msgstr "" #: ../variety/Texts.py:38 msgid "Random wallpapers from Desktoppr.co" msgstr "" #: ../variety/Texts.py:39 msgid "NASA's Astronomy Picture of the Day" msgstr "" #: ../variety/Texts.py:41 msgid "World Sunlight Map - live wallpaper from Die.net" msgstr "" #: ../variety/Texts.py:42 msgid "Bing Photo of the Day" msgstr "" #: ../variety/Texts.py:43 msgid "High-resolution photos from Unsplash.com" msgstr "" #: ../variety/Texts.py:47 msgid "" "You can change the wallpaper back and forth by scrolling the mouse wheel on " "top of the indicator icon." msgstr "" #: ../variety/Texts.py:48 msgid "" "If you want to run custom commands every time the wallpaper changes or if " "you use an alternative desktop environment, please edit the scripts in " "~/.config/variety/scripts. There are examples there for various desktop " "environments." msgstr "" #: ../variety/Texts.py:49 msgid "" "Variety can be controlled from the command line and you can use this to " "define keyboard shortcuts for the operations you use most often. Run " "\"variety --help\" to see all available commands." msgstr "" #: ../variety/Texts.py:50 msgid "" "You can drop image links or files on the launcher icon to download them and " "use them as wallpapers. For quicker downloading from a specific site, you " "can also use clipboard monitoring (see \"Manual downloading\" tab)." msgstr "" #: ../variety/Texts.py:51 msgid "" "Applying a heavy blurring filter is a great way to get abstract-looking and " "unobtrusive, yet colorful wallpapers, similar in spirit to the default one " "in Ubuntu." msgstr "" #: ../variety/Texts.py:52 msgid "" "Adding your own custom filters is quite easy: open " "~/.config/variety/variety.conf in an editor and use the existing filters as " "an example. Every filter is just a line of options to be passed to " "ImageMagick's convert command." msgstr "" #: ../variety/Texts.py:53 msgid "" "When you select an image source, its images are displayed in a window at the " "bottom of the screen. Click an image there to set is as wallpaper. Right-" "click to close the window, to modify its appearance or to perform file " "operations. You can select multiple image sources to create a \"merged\" " "thumbnail view of all of them. Please mind that thumbnail view is limited to " "several hundred randomly selected images." msgstr "" #: ../variety/Texts.py:54 msgid "" "To enable desktop notifications when the wallpaper changes, uncomment the " "two lines at the bottom of ~/.config/variety/scripts/set_wallpaper." msgstr "" #: ../variety/Texts.py:55 msgid "" "Variety's indicator icon is themeable - if you you choose the \"Light\" " "option for the icon, Variety will first check if the current GTK theme has " "an icon named \"variety-indicator\" and will use it instead of the bundled " "light icon." msgstr "" #: ../variety/Texts.py:56 msgid "" "When you choose to save quotes to Favorites, these are by default saved to " "~/.config/variety/favorite_quotes.txt. This file is compatible with " "Variety's local files quote source. If you want to use it - copy it to " "~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote " "source. This file is also compatible with the Unix fortune utility." msgstr "" #: ../data/ui/LoginOrRegisterDialog.ui.h:1 msgid "Login to VRTY.ORG" msgstr "" #: ../data/ui/LoginOrRegisterDialog.ui.h:2 msgid "Username: " msgstr "" #: ../data/ui/LoginOrRegisterDialog.ui.h:3 msgid "Password: " msgstr "" #: ../data/ui/LoginOrRegisterDialog.ui.h:4 msgid "No account? Register here" msgstr "" #: ../data/ui/LoginOrRegisterDialog.ui.h:5 msgid "Forgot your password?" msgstr "" #: ../data/ui/LoginOrRegisterDialog.ui.h:6 msgid "" "Tip: You can also login to VRTY.ORG in a " "browser and click the link \"Trigger Variety " "login\" in your profile." msgstr "" #: ../data/ui/LoginOrRegisterDialog.ui.h:7 msgid "Login" msgstr "" #: ../variety/PreferencesVarietyDialog.py:254 msgid "All" msgstr "" #: ../variety/PreferencesVarietyDialog.py:377 #: ../variety/PreferencesVarietyDialog.py:543 #: ../data/ui/PreferencesVarietyDialog.ui.h:11 msgid "Images" msgstr "图片" #: ../variety/PreferencesVarietyDialog.py:378 msgid "Folders" msgstr "文件夹" #: ../variety/PreferencesVarietyDialog.py:380 ../data/ui/AddFlickrDialog.ui.h:2 msgid "Flickr" msgstr "" #: ../variety/PreferencesVarietyDialog.py:381 #: ../data/ui/AddWallhavenDialog.ui.h:2 msgid "Wallhaven.cc" msgstr "" #: ../variety/PreferencesVarietyDialog.py:382 ../data/ui/AddRedditDialog.ui.h:2 msgid "Reddit" msgstr "" #: ../variety/PreferencesVarietyDialog.py:383 #: ../data/ui/AddMediaRssDialog.ui.h:2 msgid "Media RSS" msgstr "" #: ../variety/PreferencesVarietyDialog.py:408 msgid "Remove the source, keep the files" msgstr "从æºé‡Œç§»é™¤ï¼Œä½†ä¿ç•™æ–‡ä»¶" #: ../variety/PreferencesVarietyDialog.py:409 msgid "Remove the sources, keep the files" msgstr "从æºé‡Œç§»é™¤ï¼Œä½†ä¿ç•™æ–‡ä»¶" #: ../variety/PreferencesVarietyDialog.py:416 msgid "Remove the source and delete the downloaded files" msgstr "移除æºï¼Œå¹¶ä¸”删除已下载文件" #: ../variety/PreferencesVarietyDialog.py:417 msgid "Remove the sources and delete the downloaded files" msgstr "移除æºï¼Œå¹¶ä¸”删除已下载文件" #: ../variety/PreferencesVarietyDialog.py:450 msgid "World Sunlight Map enabled" msgstr "å¯ç”¨ä¸–界鸟瞰地图" #: ../variety/PreferencesVarietyDialog.py:451 msgid "" "Using the World Sunlight Map requires both downloading and changing enabled " "at intervals of 30 minutes or less. Settings were adjusted automatically." msgstr "ä¸–ç•Œé¸Ÿçž°åœ°å›¾ä¸‹è½½é—´éš”è¦æ±‚ä¸å¤§äºŽ30分钟。é…ç½®ä¹‹å‰æ˜¯è‡ªåŠ¨è°ƒæ•´çš„" #: ../variety/PreferencesVarietyDialog.py:536 msgid "Add Images" msgstr "添加图片" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 ../variety/FolderChooser.py:66 msgid "Cancel" msgstr "å–æ¶ˆ" #: ../variety/PreferencesVarietyDialog.py:537 #: ../variety/PreferencesVarietyDialog.py:561 msgid "Add" msgstr "添加" #: ../variety/PreferencesVarietyDialog.py:559 msgid "" "Add Folders - Only add the root folders, subfolders are searched recursively" msgstr "增加文件夹-åªéœ€è¦æ·»åŠ é¡¶å±‚æ–‡ä»¶å¤¹ï¼Œå­æ–‡ä»¶å¤¹ä¼šè‡ªåŠ¨æ·»åŠ " #: ../variety/PreferencesVarietyDialog.py:689 #: ../variety/PreferencesVarietyDialog.py:702 #: ../data/ui/PreferencesVarietyDialog.ui.h:170 msgid "Edit..." msgstr "编辑..." #: ../variety/PreferencesVarietyDialog.py:696 msgid "View Image" msgstr "æµè§ˆå›¾åƒ" #: ../variety/PreferencesVarietyDialog.py:699 msgid "Open Folder" msgstr "打开文件夹" #: ../variety/PreferencesVarietyDialog.py:1070 msgid "Recommended images source disabled" msgstr "" #: ../variety/PreferencesVarietyDialog.py:1098 #: ../variety/PreferencesVarietyDialog.py:1117 #: ../variety/PreferencesVarietyDialog.py:1125 msgid "No write permissions" msgstr "没有写æƒé™" #: ../variety/PreferencesVarietyDialog.py:1105 msgid "Limit disabled" msgstr "é™åˆ¶å–消" #: ../variety/PreferencesVarietyDialog.py:1106 msgid "" "Changing the download folder automatically turns off the size limit to " "prevent from accidental data loss" msgstr "自动修改下载文件夹关闭大å°é™åˆ¶ï¼Œ 防止æ„外的数æ®ä¸¢å¤±" #: ../variety/PreferencesVarietyDialog.py:1112 #, python-format msgid "Actual download folder: %s " msgstr "实际下载文件夹:%s " #: ../variety/PreferencesVarietyDialog.py:1192 msgid "Could not adjust permissions" msgstr "ä¸èƒ½ä¿®æ”¹æƒé™" #: ../variety/PreferencesVarietyDialog.py:1193 #, python-format msgid "" "You may try manually running this command:\n" "sudo chmod %s \"%s\"" msgstr "" "ä½ éœ€è¦æ‰‹åЍè¿è¡Œå‘½ä»¤ï¼š\n" "sudo chmod %s \"%s\"" #: ../variety/PreferencesVarietyDialog.py:1225 msgid "Logged in as: " msgstr "" #: ../variety/PreferencesVarietyDialog.py:1227 msgid "Anonymous" msgstr "" #: ../variety/PreferencesVarietyDialog.py:1228 #: ../data/ui/PreferencesVarietyDialog.ui.h:111 msgid "Login or register" msgstr "" #: ../variety/PreferencesVarietyDialog.py:1228 msgid "Switch user" msgstr "" #: ../data/ui/WelcomeDialog.ui.h:1 msgid "Welcome to Variety!" msgstr "Variety 欢迎您!" #: ../data/ui/WelcomeDialog.ui.h:2 ../data/ui/SmartFeaturesNoticeDialog.ui.h:3 msgid "Continue" msgstr "ç»§ç»­" #: ../data/ui/WelcomeDialog.ui.h:3 msgid "" "Variety is an automatic wallpaper changer. It rotates your desktop wallpaper " "on a regular basis using local images or images downloaded from various " "online sources. It runs quietly in the background - to control it, click " "this icon in your system tray:" msgstr "" #: ../data/ui/WelcomeDialog.ui.h:4 msgid "" "Variety is open-source software, created by Peter Levi, a software developer " "from Bulgaria. If you like it, please donate." msgstr "" #: ../data/ui/WelcomeDialog.ui.h:5 msgid "" "Now please take some time to set your preferences on the following screens." msgstr "" #: ../data/ui/WelcomeDialog.ui.h:6 msgid "KDE Users - Important, please read:" msgstr "KDE用户 - é‡è¦ï¼Œ 请阅读" #: ../data/ui/WelcomeDialog.ui.h:7 msgid "" "You appear to be running KDE. In KDE 4 it is impossible to set the wallpaper " "from inside a program - there is no API for this. To make Variety work, please read " "and follow the instructions here." msgstr "" #: ../variety/LoginOrRegisterDialog.py:80 #, python-format msgid "Oops, server returned error (%s)" msgstr "" #: ../variety/LoginOrRegisterDialog.py:85 msgid "Could not connect to server" msgstr "" #: ../variety/indicator.py:54 ../variety/indicator.py:101 #: ../variety/indicator.py:180 msgid "_Next" msgstr "下一个(_N)" #: ../variety/indicator.py:59 ../variety/indicator.py:106 #: ../variety/indicator.py:185 msgid "_Previous" msgstr "上一个(_P)" #: ../variety/indicator.py:66 msgid "Current desktop wallpaper" msgstr "当剿¡Œé¢å£çº¸" #: ../variety/indicator.py:70 msgid "Show origin" msgstr "" #: ../variety/indicator.py:81 ../variety/VarietyWindow.py:666 #: ../variety/ThumbsManager.py:144 msgid "Copy to _Favorites" msgstr "æ‹·è´åˆ°æ”¶è—夹(_F)" #. both #: ../variety/indicator.py:86 ../variety/VarietyWindow.py:675 #: ../data/ui/PreferencesVarietyDialog.ui.h:167 msgid "Move to Favorites" msgstr "移动到收è—夹" #: ../variety/indicator.py:92 ../variety/ThumbsManager.py:160 msgid "Delete to _Trash" msgstr "移动到回收站(_T)" #: ../variety/indicator.py:111 ../variety/indicator.py:190 msgid "_Next, skipping forward history" msgstr "" #: ../variety/indicator.py:119 msgid "" "Tip: Scroll wheel over icon\n" "for Next and Previous" msgstr "" "Tip: 在缩略图上滚动滚轮\n" "å¯ä»¥å‘剿ˆ–å‘åŽåˆ‡æ¢" #: ../variety/indicator.py:125 ../variety/indicator.py:199 #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Pause on current" msgstr "" #: ../variety/indicator.py:129 msgid "_Image" msgstr "" #: ../variety/indicator.py:136 ../variety/ThumbsManager.py:167 msgid "Where is it from?" msgstr "" #: ../variety/indicator.py:140 msgid "Show without effects" msgstr "" #: ../variety/indicator.py:148 msgid "Google Image Search" msgstr "" #: ../variety/indicator.py:154 ../variety/indicator.py:237 #: ../data/ui/FacebookPublishDialog.ui.h:2 msgid "Share on Facebook" msgstr "分享到 Facebook" #: ../variety/indicator.py:161 ../variety/ThumbsManager.py:136 msgid "Set EXIF Rating" msgstr "" #: ../variety/indicator.py:172 msgid "Report NSFW image" msgstr "" #: ../variety/indicator.py:205 ../variety/VarietyWindow.py:820 msgid "Save to Favorites" msgstr "" #: ../variety/indicator.py:210 msgid "View Favorites..." msgstr "" #: ../variety/indicator.py:217 msgid "Copy to Clipboard" msgstr "å¤åˆ¶åˆ°å‰ªè´´æ¿" #: ../variety/indicator.py:227 msgid "Google Quote" msgstr "" #: ../variety/indicator.py:232 msgid "Google Author" msgstr "" #: ../variety/indicator.py:244 ../variety/indicator.py:298 msgid "Preferences..." msgstr "首选项..." #: ../variety/indicator.py:252 msgid "Turn off" msgstr "关闭" #: ../variety/indicator.py:258 msgid "_Quote" msgstr "" #: ../variety/indicator.py:265 msgid "_History" msgstr "历å²(_H)" #: ../variety/indicator.py:271 msgid "_Wallpaper Selector" msgstr "" #: ../variety/indicator.py:277 msgid "Recent _Downloads" msgstr "最近下载(_D)" #: ../variety/indicator.py:292 msgid "Start Slideshow" msgstr "" #: ../variety/indicator.py:302 msgid "About" msgstr "关于" #: ../variety/indicator.py:306 ../data/ui/PreferencesVarietyDialog.ui.h:196 msgid "Donate" msgstr "æèµ " #: ../variety/indicator.py:310 msgid "Quit" msgstr "退出" #: ../variety/indicator.py:428 msgid "_Safe mode" msgstr "" #: ../variety/AddMediaRssDialog.py:40 msgid "" "This does not seem to be a valid Media RSS feed URL or there is no content " "there." msgstr "è¾“å…¥ä¸æ˜¯ä¸€ä¸ªåˆæ³•çš„RSS链接或者RSSé“¾æŽ¥é‡Œé¢æ²¡æœ‰å†…容" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:1 msgid "Variety - VRTY.ORG" msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:2 msgid "No, thanks" msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:4 msgid "" "Introducing VRTY.ORG! Wanna take part?" msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:5 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to find and add new image sources to Variety, and to follow other users' " "favorites." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:6 msgid "" "Participation takes no effort - your profile will be built automatically, as " "you like or dislike images downloaded by Variety. Your profile will not be " "shared with third parties, unless you opt-in to make it public. Read more details about the " "service and the privacy policy here." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:7 msgid "" "Participation is required for some features of Variety such as synchronization of favorites between computers." msgstr "" #: ../data/ui/SmartFeaturesNoticeDialog.ui.h:8 #: ../data/ui/PreferencesVarietyDialog.ui.h:107 msgid "Participate in VRTY.ORG" msgstr "" #: ../data/ui/AddPanoramioDialog.ui.h:1 msgid "Variety - add Panoramio image source" msgstr "" #: ../data/ui/AddPanoramioDialog.ui.h:2 msgid "Panoramio" msgstr "" #: ../data/ui/AddPanoramioDialog.ui.h:3 msgid "Please zoom over your area of interest." msgstr "" #: ../data/ui/FacebookPublishDialog.ui.h:1 msgid "Variety - Publish to Facebook" msgstr "Variety - å‘布到 Facebook" #: ../data/ui/FacebookPublishDialog.ui.h:3 msgid "" "Publish a link to the current wallpaper on Facebook. Include this text along " "with the link (or just leave empty):" msgstr "" #: ../data/ui/FacebookPublishDialog.ui.h:4 msgid "Use current quote" msgstr "" #: ../data/ui/FacebookPublishDialog.ui.h:5 ../variety/VarietyWindow.py:2676 msgid "Do not ask anymore, always use the text above" msgstr "总是用上é¢çš„æ–‡å­—ä¸å†æé—®" #: ../variety/AddWallhavenDialog.py:38 ../variety/AddFlickrDialog.py:138 msgid "No images found" msgstr "没有找到图åƒ" #: ../variety/VarietyWindow.py:662 ../variety/VarietyWindow.py:820 #: ../variety/VarietyWindow.py:2835 msgid "Already in Favorites" msgstr "æ”¶è—夹中已存在" #: ../variety/VarietyWindow.py:667 ../variety/ThumbsManager.py:151 msgid "Move to _Favorites" msgstr "移动到收è—夹(_F)" #: ../variety/VarietyWindow.py:697 ../variety/ThumbsManager.py:119 msgid "Fetched: Show Origin" msgstr "抓到数æ®" #: ../variety/VarietyWindow.py:699 ../variety/VarietyWindow.py:810 #: ../variety/ThumbsManager.py:121 #, python-format msgid "View at %s" msgstr "在%sæµè§ˆ" #: ../variety/VarietyWindow.py:749 msgid "Unknown" msgstr "" #: ../variety/VarietyWindow.py:761 msgid "Safe mode: On" msgstr "" #: ../variety/VarietyWindow.py:761 msgid "Turn Safe mode on" msgstr "" #: ../variety/VarietyWindow.py:780 #, python-format msgid "Author: %s" msgstr "" #: ../variety/VarietyWindow.py:803 ../variety/VarietyWindow.py:817 msgid "Resume regular changes" msgstr "" #: ../variety/VarietyWindow.py:952 msgid "Filtering too strict?" msgstr "匹é…规则过于严格?" #: ../variety/VarietyWindow.py:953 msgid "" "Variety is finding too few images that match your image filtering criteria" msgstr "Varity用您目å‰çš„图片规则匹é…到的图片太少" #: ../variety/VarietyWindow.py:1451 msgid "Please add more image sources or wait for some downloads" msgstr "è¯·å¢žåŠ æ›´å¤šçš„å›¾ç‰‡æºæˆ–者等待下载结æŸ" #: ../variety/VarietyWindow.py:1453 msgid "Please add more image sources" msgstr "请增加更多的图片æº" #: ../variety/VarietyWindow.py:1454 msgid "No more wallpapers" msgstr "没有更多的桌é¢å›¾ç‰‡" #: ../variety/VarietyWindow.py:1660 msgid "Current wallpaper is not in the image sources" msgstr "当å‰çš„æ¡Œé¢å›¾ç‰‡ä¸åœ¨å›¾ç‰‡æºä¸­" #: ../variety/VarietyWindow.py:1695 #, python-format msgid "" "Could not move to %s. You probably don't have permissions to move this file." msgstr "ä¸èƒ½ç§»åŠ¨åˆ° %s。你å¯èƒ½æ²¡æœ‰ç›¸åº”çš„æƒé™ç§»åŠ¨è¯¥æ–‡ä»¶ã€‚" #: ../variety/VarietyWindow.py:1697 #, python-format msgid "" "Could not copy to %s. You probably don't have permissions to copy this file." msgstr "ä¸èƒ½å¤åˆ¶åˆ° %s。你å¯èƒ½æ²¡æœ‰ç›¸åº”çš„æƒé™å¤åˆ¶è¯¥æ–‡ä»¶ã€‚" #: ../variety/VarietyWindow.py:1717 ../variety/VarietyWindow.py:1745 #: ../variety/VarietyWindow.py:1750 msgid "Cannot delete" msgstr "无法删除" #: ../variety/VarietyWindow.py:1718 #, python-format msgid "You don't have permissions to delete %s to Trash." msgstr "你没有æƒé™åˆ é™¤ %s 到回收站。" #: ../variety/VarietyWindow.py:1746 msgid "Deleting to trash failed, check variety.log for more information." msgstr "" #: ../variety/VarietyWindow.py:1751 msgid "" "Deleting to trash failed because no suitable program is installed. Please " "install gvfs (gvfs-bin), trash-cli, or konqueror." msgstr "" #: ../variety/VarietyWindow.py:1908 msgid "Anonymous usage statistics" msgstr "" #: ../variety/VarietyWindow.py:1909 msgid "" "Variety collects anonymous usage statistics. \n" "These help us make it better and are not shared with anyone. \n" "To read more or turn them off, go to \"Sync and social\"" msgstr "" #: ../variety/VarietyWindow.py:2092 msgid "" "I will open an editor with the config file and apply the changes after you " "save and close the editor." msgstr "å°†è¦æ‰“开文本编辑器编辑é…置文件。在您ä¿å­˜å…³é—­æ–‡æœ¬ç¼–辑器åŽåº”用更改" #: ../variety/VarietyWindow.py:2130 msgid "" "%prog [options] [files or urls]\n" "\n" "Passing local files will add them to Variety's queue.\n" "Passing remote URLs will make Variety fetch them to Fetched folder and place " "them in the queue.\n" "\n" "To set a specific wallpaper: %prog /some/local/image.jpg --next" msgstr "" #: ../variety/VarietyWindow.py:2140 msgid "" "Show logging messages (-vv shows even finer debugging messages, -vvv debugs " "variety_lib too)" msgstr "显示日志消æ¯(-vv 显示更详细的debug消æ¯, -vvv 用æ¥debug varity的库文件" #: ../variety/VarietyWindow.py:2144 msgid "Make the running instance quit" msgstr "让è¿è¡Œä¸­çš„实例退出" #: ../variety/VarietyWindow.py:2148 msgid "" "Print the current wallpaper location. Used only when the application is " "already running." msgstr "打å°å½“剿¡Œé¢å›¾ç‰‡åœ°å€ã€‚ åªæœ‰å½“Varietyè¿è¡Œæ—¶å¯ç”¨" #: ../variety/VarietyWindow.py:2152 msgid "Show Next wallpaper" msgstr "显示下一å£çº¸" #: ../variety/VarietyWindow.py:2156 msgid "Show Previous wallpaper" msgstr "显示å‰ä¸€å£çº¸" #: ../variety/VarietyWindow.py:2160 msgid "Show Next wallpaper, skipping the forward history" msgstr "显示下一张å£çº¸ï¼Œ 跳过å‰ä¸€å£çº¸åކå²" #: ../variety/VarietyWindow.py:2164 msgid "" "Move current wallpaper to Trash. Used only when the application is already " "running." msgstr "删除当å‰å£çº¸ã€‚程åºè¿è¡Œæ—¶å¯ç”¨" #: ../variety/VarietyWindow.py:2168 msgid "" "Copy current wallpaper to Favorites. Used only when the application is " "already running." msgstr "æ‹·è´å½“å‰å£çº¸åˆ°Favorites." #: ../variety/VarietyWindow.py:2172 msgid "" "Move current wallpaper to Favorites. Used only when the application is " "already running." msgstr "剪切当å‰å£çº¸åˆ°Favorites." #: ../variety/VarietyWindow.py:2176 msgid "Pause on current image" msgstr "" #: ../variety/VarietyWindow.py:2180 msgid "Resume regular image changes" msgstr "" #: ../variety/VarietyWindow.py:2184 msgid "Toggle Pause/Resume state" msgstr "åˆ‡æ¢ æš‚åœ/ç»§ç»­ 状æ€" #: ../variety/VarietyWindow.py:2188 msgid "Show Next quote" msgstr "显示下一箴言" #: ../variety/VarietyWindow.py:2192 msgid "Show Previous quote" msgstr "显示å‰ä¸€ç®´è¨€" #: ../variety/VarietyWindow.py:2196 msgid "Show Next quote, skipping the forward history" msgstr "显示下一箴言,跳过å‘剿˜¾ç¤ºåކå²" #: ../variety/VarietyWindow.py:2200 msgid "Toggle Quotes Pause/Resume state" msgstr "切æ¢ç®´è¨€ æš‚åœ/ç»§ç»­ 状æ€" #: ../variety/VarietyWindow.py:2204 msgid "Save the current quote to Favorites" msgstr "" #: ../variety/VarietyWindow.py:2208 msgid "Toggle History display" msgstr "切æ¢åކ岿˜¾ç¤º" #: ../variety/VarietyWindow.py:2212 msgid "Toggle Recent Downloads display" msgstr "åˆ‡æ¢æœ€è¿‘下载现实" #: ../variety/VarietyWindow.py:2216 msgid "Show Preferences dialog" msgstr "çŽ°å®žé¦–é€‰é¡¹å¯¹è¯æ¡†" #: ../variety/VarietyWindow.py:2220 msgid "" "Show manual wallpaper selector - the thumbnail bar filled with images from " "the active image sources" msgstr "" #: ../variety/VarietyWindow.py:2224 msgid "" "Sets and applies an option. The option names are the same that are used in " "Variety's config file ~/.config/variety/variety.conf. Multiple options can " "be set in a single command. Example: 'variety --set-option icon Dark --set-" "option clock_enabled True'. USE WITH CAUTION: You are changing the settings " "file directly in an unguarded way." msgstr "" #: ../variety/VarietyWindow.py:2238 msgid "options --next/--fast-forward and --previous are mutually exclusive" msgstr "选项 --next/--fast-forward å’Œ --previous 是互斥的" #: ../variety/VarietyWindow.py:2241 msgid "options --trash and --favorite are mutually exclusive" msgstr "选项 --trash å’Œ --favorite 是互斥的" #: ../variety/VarietyWindow.py:2244 msgid "options --pause and --resume are mutually exclusive" msgstr "选项 --parse å’Œ --resume 是互斥的" #: ../variety/VarietyWindow.py:2247 msgid "" "options --quotes-next/--quotes-fast-forward and --quotes-previous are " "mutually exclusive" msgstr "选项 --qutoes-next/--quotes-fast-forward å’Œ --quotes-previous 是互斥的" #: ../variety/VarietyWindow.py:2364 ../variety/ImageFetcher.py:60 #: ../variety/ImageFetcher.py:70 ../variety/ImageFetcher.py:77 #: ../variety/ImageFetcher.py:110 msgid "Not an image" msgstr "䏿˜¯ä¸€ä¸ªå›¾åƒ" #: ../variety/VarietyWindow.py:2369 msgid "Added to queue" msgstr "加入队列" #: ../variety/VarietyWindow.py:2370 ../variety/VarietyWindow.py:2376 msgid "Press Next to see it" msgstr "点击下一步查看" #: ../variety/VarietyWindow.py:2376 msgid "Fetched" msgstr "获å–完毕" #: ../variety/VarietyWindow.py:2422 msgid "Unsupported source type" msgstr "" #: ../variety/VarietyWindow.py:2423 ../variety/VarietyWindow.py:2471 msgid "Are you running the most recent version of Variety?" msgstr "" #: ../variety/VarietyWindow.py:2429 msgid "New image source added" msgstr "" #: ../variety/VarietyWindow.py:2431 msgid "Image source already exists, enabling it" msgstr "" #: ../variety/VarietyWindow.py:2457 msgid "Fetched and applied" msgstr "" #: ../variety/VarietyWindow.py:2467 msgid "It works!" msgstr "" #: ../variety/VarietyWindow.py:2467 msgid "Yay, Variety links work. Great!" msgstr "" #: ../variety/VarietyWindow.py:2471 msgid "Unsupported command" msgstr "" #: ../variety/VarietyWindow.py:2473 msgid "Could not process the given variety:// URL" msgstr "" #: ../variety/VarietyWindow.py:2474 msgid "Run with logging enabled to see details" msgstr "" #: ../variety/VarietyWindow.py:2673 msgid "Do not ask anymore, always use the current quote" msgstr "" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "Published" msgstr "å·²å‘布" #: ../variety/VarietyWindow.py:2708 ../variety/VarietyWindow.py:2737 msgid "You may open your Facebook feed to see the post" msgstr "您å¯ä»¥æ‰“开您的Facebook feedæ¥æŸ¥çœ‹å‘布" #: ../variety/VarietyWindow.py:2711 ../variety/VarietyWindow.py:2740 msgid "Could not publish" msgstr "ä¸èƒ½å‘布" #: ../variety/VarietyWindow.py:2903 msgid "Could not create autostart entry" msgstr "" #: ../variety/VarietyWindow.py:2904 msgid "" "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." msgstr "创建autostart desktop entry错误. 请从控制å°é‡æ–°è¿è¡Œç¨‹åºï¼ˆå¢žåŠ -v选项)" #: ../variety/VarietyWindow.py:2954 msgid "No images" msgstr "" #: ../variety/VarietyWindow.py:2954 msgid "There are no images in the slideshow folders" msgstr "" #: ../variety/VarietyWindow.py:2989 msgid "Wallhaven image sources disabled" msgstr "" #: ../variety/VarietyWindow.py:2990 msgid "" "Please google \"Python SNI SSL error\" if you want to fix the problem " "yourself." msgstr "" #: ../variety/VarietyWindow.py:2996 msgid "" "There are SSL incompatibilities between your version of Python and some " "https sites like Wallhaven. You can read more about the issue here.\n" "\n" "Do you want to install the Python dependencies required to fix this problem? " "\n" "This operation will ask for superuser privileges. " msgstr "" #: ../variety/VarietyWindow.py:3001 msgid "Variety - SSL error. Install dependencies?" msgstr "" #: ../variety/VarietyWindow.py:3022 msgid "Installing..." msgstr "" #: ../variety/VarietyWindow.py:3023 #, python-format msgid "" "Installation will take a minute or two. Please be patient. Log file is at %s" msgstr "" #: ../variety/VarietyWindow.py:3036 msgid "Dependencies were installed. Please restart Variety now." msgstr "" #: ../variety/VarietyWindow.py:3037 msgid "" "If SSL errors persist, you will have to google for \"Python SNI SSL error\" " "and seek another solution." msgstr "" #: ../variety/VarietyWindow.py:3040 msgid "Failure. Wallhaven sources disabled." msgstr "" #: ../variety/VarietyWindow.py:3041 #, python-format msgid "" "SSL-related dependencies were not installed successfully. Please see %s or " "google \"Python SNI SSL error\" and seek another solution." msgstr "" #: ../data/ui/FacebookFirstRunDialog.ui.h:1 msgid "Variety - Facebook Sharing" msgstr "Variety - 分享到Facebook" #: ../data/ui/FacebookFirstRunDialog.ui.h:2 #: ../data/ui/PreferencesVarietyDialog.ui.h:171 msgid "Facebook Sharing" msgstr "Facebook分享" #: ../data/ui/FacebookFirstRunDialog.ui.h:3 msgid "" "You are sharing on Facebook for the first time. Sharing from Variety is " "available for images that come from online sources and for quotes. It works " "this way: \n" "\n" "1. Login to Facebook\n" "Facebook will open in your default browser. You will be prompted to login if " "you are not already logged in. \n" "\n" "2. Authorize Variety to publish to your " "feed.\n" "You will be asked to allow Variety to publish to your feed on your behalf. " "Variety will only use this permission to publish those images and quotes " "that you tell it to, nothing else.\n" "\n" "3. Configure browser to open variety:// links " "with Variety or xdg-open\n" "Then you will be redirected to a page with instructions to associate " "\"variety://\" links with Variety in your browser. Please follow these " "instructions to complete the setup. You have to do this only once.\n" "\n" "No passwords or login information is kept locally, just an OAuth Facebook " "token that will be valid for a couple of weeks. After its validity expires " "you will be asked to login again." msgstr "" #: ../data/plugins/quotes/QuotationsPageSource.py:35 msgid "Fetches quotes from TheQuotationsPage.com" msgstr "从 QuotationsPage.com 获å–箴言" #: ../data/ui/AddRedditDialog.ui.h:1 msgid "Variety - add Reddit feed" msgstr "" #: ../data/ui/AddRedditDialog.ui.h:3 msgid "" "Enter the name of a subreddit or paste the full URL of a subreddit or a Reddit user. You may specify sort order and " "time period if you wish. Variety will use posts to direct images or to Imgur " "pages within the first 100 submissions returned by Reddit.\n" "\n" "Example: You may specify simply 'comics' or http://www.reddit.com/r/comics\n" "Example: Top posts from the month: http://www." "reddit.com/r/comics/top/?sort=top&t=month" msgstr "" #: ../data/ui/AddRedditDialog.ui.h:7 msgid "URL or name of a subreddit: " msgstr "" #: ../data/ui/AddRedditDialog.ui.h:8 msgid "Just a moment to check what's there" msgstr "" #: ../data/ui/AddRedditDialog.ui.h:9 ../data/ui/AddWallhavenDialog.ui.h:10 #: ../data/ui/AddMediaRssDialog.ui.h:6 ../data/ui/AddFlickrDialog.ui.h:17 msgid " " msgstr " " #: ../data/ui/SmartRegisterDialog.ui.h:1 msgid "Variety - VRTY.ORG registration" msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:2 msgid "Would you like to register?" msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:3 msgid "" "You may participate in VRTY.ORG " "anonymously, but registration enables some very nice features, such as synchronization of favorites between computers and " "personalized recommendations. It also ensures " "you will not lose your profile and favorite wallpapers if you reinstall your " "OS." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:4 msgid "Registration is very easy and does not require any personal data." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:5 msgid "" "If you choose to participate anonymously, you can register later from the " "\"Sync and social\" page in Preferences." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:6 msgid "" "Oops, we could not connect to VRTY.ORG. Server might be down. Please wait a " "couple of minutes and try again or choose \"Participate anonymously\" and register later " "from the \"Sync and social\" page in " "Preferences." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:7 msgid "" "Please continue the registration and follow the instructions in the browser " "tab we opened." msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:8 msgid "I will participate anonymously" msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:9 msgid "I'm registered, let me login" msgstr "" #: ../data/ui/SmartRegisterDialog.ui.h:10 msgid "Register here" msgstr "" #: ../variety/FolderChooser.py:65 msgid "Choose a folder" msgstr "选择一个文件夹" #: ../variety/FolderChooser.py:66 msgid "OK" msgstr "确定" #: ../variety/__init__.py:147 msgid "Terminating signal received, quitting..." msgstr "收到退出信å·ï¼Œæ­£åœ¨é€€å‡º" #: ../variety/__init__.py:202 msgid "" "Variety is already running. Sending the command to the running instance." msgstr "Variey正在è¿è¡Œ. å‘é€å‘½ä»¤åˆ°æ­£åœ¨è¿è¡Œçš„实例" #: ../variety/ThumbsManager.py:41 ../data/ui/PreferencesVarietyDialog.ui.h:55 msgid "Bottom" msgstr "底部" #: ../variety/ThumbsManager.py:42 msgid "Top" msgstr "顶部" #: ../variety/ThumbsManager.py:43 msgid "Left" msgstr "左侧" #: ../variety/ThumbsManager.py:44 ../data/ui/PreferencesVarietyDialog.ui.h:52 msgid "Right" msgstr "å³ä¾§" #: ../variety/ThumbsManager.py:94 msgid "Position" msgstr "ä½ç½®" #: ../variety/ThumbsManager.py:98 ../data/ui/PreferencesVarietyDialog.ui.h:133 msgid "Size" msgstr "大å°" #: ../variety/ThumbsManager.py:109 msgid "Show Containing Folder" msgstr "显示包å«çš„æ–‡ä»¶å¤¹" #: ../variety/ThumbsManager.py:178 msgid "Close" msgstr "关闭" #: ../variety/ThumbsManager.py:198 msgid "Could not set EXIF rating" msgstr "" #: ../variety/ThumbsManager.py:217 msgid "Unrated" msgstr "未评级的" #: ../variety/ThumbsManager.py:224 msgid "Rejected" msgstr "已拒ç»" #: ../variety/ThumbsManager.py:326 msgid "Variety History" msgstr "Variety 历å²" #: ../variety/ThumbsManager.py:328 msgid "Variety Recent Downloads" msgstr "Variety 最近下载" #: ../variety/ThumbsManager.py:330 msgid "Variety Images" msgstr "Variety 图片" #: ../data/ui/AboutVarietyDialog.ui.h:1 msgid "Copyright (c) 2012, Peter Levi " msgstr "Copyright (c) 2012, Peter Levi " #: ../data/ui/AboutVarietyDialog.ui.h:2 msgid "About Variety" msgstr "关于 Variety" #: ../data/ui/AboutVarietyDialog.ui.h:3 msgid "An automatic wallpaper changer, downloader and manager." msgstr "一个å£çº¸è‡ªåŠ¨åˆ‡æ¢ã€ä¸‹è½½å’Œç®¡ç†è½¯ä»¶ã€‚" #: ../data/ui/AboutVarietyDialog.ui.h:4 msgid "http://peterlevi.com/variety" msgstr "" #: ../data/ui/AboutVarietyDialog.ui.h:5 msgid "" "# Copyright (c) 2012, Peter Levi \n" "# This program is free software: you can redistribute it and/or modify it \n" "# under the terms of the GNU General Public License version 3, as published " "\n" "# by the Free Software Foundation.\n" "# \n" "# This program is distributed in the hope that it will be useful, but \n" "# WITHOUT ANY WARRANTY; without even the implied warranties of \n" "# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR \n" "# PURPOSE. See the GNU General Public License for more details.\n" "# \n" "# You should have received a copy of the GNU General Public License along \n" "# with this program. If not, see .\n" msgstr "" #: ../variety.desktop.in.h:1 msgid "Variety" msgstr "" #: ../variety.desktop.in.h:2 msgid "Variety Wallpaper Changer" msgstr "Variety å£çº¸åˆ‡æ¢å™¨" #: ../variety.desktop.in.h:3 msgid "Next" msgstr "下一个" #: ../variety.desktop.in.h:4 msgid "Previous" msgstr "上一个" #: ../variety.desktop.in.h:5 msgid "Pause / Resume" msgstr "æš‚åœ / æ¢å¤" #: ../variety.desktop.in.h:6 msgid "History" msgstr "历å²" #: ../variety.desktop.in.h:7 msgid "Preferences" msgstr "首选项" #: ../data/ui/AddWallhavenDialog.ui.h:1 msgid "Variety - add Wallhaven.cc image source" msgstr "" #: ../data/ui/AddWallhavenDialog.ui.h:3 msgid "" "Wallhaven.cc provides a variety of image " "search options. Below you can specify keywords to search for, or visit Wallhaven.cc, setup your search criteria " "there, ensure you like the results, and paste the full Wallhaven URL in the " "box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all " "of the keywords will be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully " "- Variety regularly requests images, but uses only images from the first " "several hundred returned. Random or Date will mean this image source will " "have a longer \"lifetime\" till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for " "phrases or colors." msgstr "" #: ../data/ui/AddWallhavenDialog.ui.h:8 msgid "Enter keywords or paste URL here: " msgstr "输入关键字或粘贴URL于此: " #: ../data/ui/AddWallhavenDialog.ui.h:9 ../data/ui/AddFlickrDialog.ui.h:16 msgid "Just a moment to check this search" msgstr "ç¨å¾…片刻" #: ../data/plugins/quotes/LocalFilesSource.py:34 msgid "" "Displays quotes, defined in local text files.\n" "Put your own txt files in: ~/.config/variety/pluginconfig/quotes/.\n" "The file format is:\n" "\n" "quote -- author\n" ".\n" "second quote -- another author\n" ".\n" "etc...\n" "\n" "Example: http://rvelthuis.de/zips/quotes.txt" msgstr "" #: ../data/ui/AddMediaRssDialog.ui.h:1 msgid "Variety - add Media RSS feed" msgstr "" #: ../data/ui/AddMediaRssDialog.ui.h:3 msgid "" "Please paste the URL of the Media RSS feed below. Please note that only " "Media RSS feeds are supported, not arbitrary RSS feeds. Media RSS feeds " "contain media:content tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: Picasa, deviantART, SmugMug, Flickr, InterfaceLIFT." msgstr "" #: ../data/ui/AddMediaRssDialog.ui.h:4 msgid "Paste the URL of the Media RSS feed here: " msgstr "" #: ../data/ui/AddMediaRssDialog.ui.h:5 msgid "Just a moment to check what's at that URL" msgstr "" #: ../variety/FacebookHelper.py:116 msgid "Authorization successful" msgstr "" #: ../variety/FacebookHelper.py:116 msgid "Publishing..." msgstr "" #: ../variety/FacebookHelper.py:121 msgid "Authorization failed" msgstr "" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:1 msgid "Copy to Favorites vs. Move to Favorites" msgstr "" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:2 msgid "Reset to Default" msgstr "é‡ç½®ä¸ºé»˜è®¤å€¼" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:3 msgid "" "Select whether your prefer 'Copy to Favorites' or 'Move to Favorites' in the " "menu depending on the image location:" msgstr "" #: ../data/ui/EditFavoriteOperationsDialog.ui.h:4 msgid "" "Please enter one entry per line, each entry in the form :, where Folder can be Downloaded, Fetched, Others or a specific " "folder path.\n" "Order is important. When an image is shown, the first folder in this list " "which contains the image will determine which operations will be shown in " "Variety's menu. 'Others' matches any file and should be last in the list.\n" "\n" "Example:\n" "\tDownloaded:Copy\n" "\tFetched:Move\n" "\t/pics/RandomImages:Move\n" "\t/pics/OrganizedAlbums:Copy\n" "\tOthers:Both" msgstr "" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:1 msgid "VRTY.ORG integration" msgstr "" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:2 msgid "This feature requires VRTY.ORG integration" msgstr "" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:3 msgid "Enable VRTY.ORG integration" msgstr "" #: ../data/ui/SmartFeaturesConfirmationDialog.ui.h:4 msgid "" "For this feature Variety needs permission to collect data about the images " "you like or dislike and the online sources you have enabled.\n" "\n" "Collected data is anonymous by default and covers only images which Variety " "downloaded, never images you already had in your local folders that might be " "private.\n" "\n" "This data helps us provide better images for everyone and fuels VRTY.ORG - a valuable resource for all users " "of Variety." msgstr "" #: ../variety/AddRedditDialog.py:43 msgid "This does not seem to be a valid Reddit URL" msgstr "" #: ../variety/AddRedditDialog.py:46 msgid "We could not find any image submissions there." msgstr "" #: ../data/plugins/quotes/QuotesDaddySource.py:31 msgid "" "Fetches quotes from QuotesDaddy's daily quotes RSS feed.\n" "Does not support searching by tags or authors." msgstr "" #: ../data/ui/AddFlickrDialog.ui.h:1 msgid "Variety - add Flickr as an image source" msgstr "Variety - 添加 Flickr ä½œä¸ºå›¾åƒæ¥æº" #: ../data/ui/AddFlickrDialog.ui.h:3 msgid "" "Please specify the Flickr search criteria. " "Photos that match all of the chosen criteria will be downloaded. Leave " "unneeded criteria empty." msgstr "请指定Flickrçš„æœå›¾è§„则。所有满足æœå›¾è§„则的图片将被下载" #: ../data/ui/AddFlickrDialog.ui.h:4 #: ../data/ui/PreferencesVarietyDialog.ui.h:60 msgid "Tags: " msgstr "标记: " #: ../data/ui/AddFlickrDialog.ui.h:5 msgid "" "A comma-separated list of tags. A photo has to contain all of them " "simultaneosly in order to match.\n" "Example: yellow,car" msgstr "" "ä¸åŒæ ‡ç­¾ç”¨é€—å·åˆ†éš”。包括所有标签的图片æ‰å¯è¢«é€‰ä¸­\n" "例å­: yellow, car" #: ../data/ui/AddFlickrDialog.ui.h:7 msgid "User: " msgstr "用户å: " #: ../data/ui/AddFlickrDialog.ui.h:8 msgid "" "Please insert the URL to the user's photostream or to one of their photos.\n" "Example: http://www.flickr.com/photos/peter-levi/" msgstr "" #: ../data/ui/AddFlickrDialog.ui.h:10 msgid "Group: " msgstr "群组: " #: ../data/ui/AddFlickrDialog.ui.h:11 msgid "" "Please insert the group's URL.\n" "Example: http://www.flickr.com/group" "s/wallpapers/" msgstr "" #: ../data/ui/AddFlickrDialog.ui.h:13 msgid "Text:" msgstr "文本:" #: ../data/ui/AddFlickrDialog.ui.h:14 msgid "" "Free text search in photos' titles, descriptions and tags. Exclude terms by " "prepending them with -.\n" "Example: apple -pie" msgstr "" "æœç´¢å›¾ç‰‡æ ‡é¢˜ï¼Œæè¿°å’Œæ ‡ç­¾ã€‚ 用“-â€é™¤åŽ»ä¸éœ€è¦çš„项\n" "例å­ï¼šapple - pie(æœç´¢è‹¹æžœå›¾ç‰‡ï¼Œä½†æ˜¯ä¸è¦è‹¹æžœæ´¾çš„图片)" #: ../data/ui/PreferencesVarietyDialog.ui.h:1 msgid "seconds" msgstr "ç§’" #: ../data/ui/PreferencesVarietyDialog.ui.h:2 msgid "minutes" msgstr "分钟" #: ../data/ui/PreferencesVarietyDialog.ui.h:3 msgid "hours" msgstr "å°æ—¶" #: ../data/ui/PreferencesVarietyDialog.ui.h:4 msgid "days" msgstr "天" #: ../data/ui/PreferencesVarietyDialog.ui.h:5 msgid "Variety Preferences" msgstr "Variety 首选项" #: ../data/ui/PreferencesVarietyDialog.ui.h:6 msgid "General" msgstr "基本设置" #: ../data/ui/PreferencesVarietyDialog.ui.h:7 msgid "Start Variety when the computer starts" msgstr "å¯åŠ¨æ—¶åŒæ—¶å¯åЍVariety" #: ../data/ui/PreferencesVarietyDialog.ui.h:8 msgid "Change wallpaper every " msgstr "切æ¢å£çº¸æ¯ " #: ../data/ui/PreferencesVarietyDialog.ui.h:9 msgid "Minimum interval is 5 seconds" msgstr "最å°é—´éš”æ˜¯5ç§’" #: ../data/ui/PreferencesVarietyDialog.ui.h:10 msgid "Change wallpaper on start" msgstr "å¯åŠ¨æ—¶åˆ‡æ¢å£çº¸" #: ../data/ui/PreferencesVarietyDialog.ui.h:12 msgid "Safe mode. Avoid NSFW and sketchy images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:13 msgid "" "Experimental feature. Relies on community ratings. Read " "more here" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:14 msgid "Enabled" msgstr "å¯ç”¨" #: ../data/ui/PreferencesVarietyDialog.ui.h:15 msgid "Type" msgstr "类型" #: ../data/ui/PreferencesVarietyDialog.ui.h:16 msgid "Location" msgstr "ä½ç½®" #: ../data/ui/PreferencesVarietyDialog.ui.h:17 msgid "_Add..." msgstr "添加(_A)..." #: ../data/ui/PreferencesVarietyDialog.ui.h:18 msgid "Add images, folders or online image sources" msgstr "æ·»åŠ å›¾ç‰‡ï¼Œæ–‡ä»¶å¤¹æˆ–è”æœºå›¾ç‰‡æº" #: ../data/ui/PreferencesVarietyDialog.ui.h:19 msgid "_Edit..." msgstr "编辑(_E)..." #: ../data/ui/PreferencesVarietyDialog.ui.h:20 msgid "Edit the selected source" msgstr "编辑被选中的æº" #: ../data/ui/PreferencesVarietyDialog.ui.h:21 msgid "_Remove..." msgstr "删除(_R)..." #: ../data/ui/PreferencesVarietyDialog.ui.h:22 msgid "Remove selected image sources" msgstr "删除被选中的图片æº" #: ../data/ui/PreferencesVarietyDialog.ui.h:23 msgid "_Use" msgstr "使用(_U)" #: ../data/ui/PreferencesVarietyDialog.ui.h:24 msgid "Enable the selected sources and disable all others" msgstr "å¯ç”¨é€‰ä¸­çš„æºåŒæ—¶ç¦ç”¨å…¶ä»–çš„æºã€‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:25 msgid "Download a wallpaper every " msgstr "下载一张å£çº¸æ¯ " #: ../data/ui/PreferencesVarietyDialog.ui.h:26 msgid "Minimum interval is one minute" msgstr "最å°é—´éš”æ˜¯ä¸€åˆ†é’Ÿ" #: ../data/ui/PreferencesVarietyDialog.ui.h:27 msgid "to " msgstr "到 " #: ../data/ui/PreferencesVarietyDialog.ui.h:28 msgid "Actual download folder " msgstr "实际下载文件夹 " #: ../data/ui/PreferencesVarietyDialog.ui.h:29 msgid "" "Caution: do NOT use this option if you use a custom download folder with " "valuable files in it. Variety will maintain the limit regardless of what is " "in the download folder." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:30 msgid "Limit download folder to " msgstr "存放下载文件的文件夹容é‡é™åˆ¶ä¸º " #: ../data/ui/PreferencesVarietyDialog.ui.h:31 msgid "Minimum size is 50 MB" msgstr "最å°å°ºå¯¸ä¸º 50 MB" #: ../data/ui/PreferencesVarietyDialog.ui.h:32 msgid "MB by deleting oldest files when necessary" msgstr "MB å¿…è¦æ—¶åˆ é™¤æœ€æ—©çš„æ–‡ä»¶" #: ../data/ui/PreferencesVarietyDialog.ui.h:33 msgid "Favorites" msgstr "æ”¶è—夹" #: ../data/ui/PreferencesVarietyDialog.ui.h:34 msgid "Copy favorite wallpapers to " msgstr "æ‹·è´æ”¶è—å£çº¸åˆ° " #: ../data/ui/PreferencesVarietyDialog.ui.h:35 msgid "Filters" msgstr "修饰" #: ../data/ui/PreferencesVarietyDialog.ui.h:36 msgid "" "Randomly apply these filters to the displayed wallpapers (thanks to the " "wonderful ImageMagick):" msgstr "用下é¢çš„ä¿®é¥°é£Žæ ¼éšæœºåº”ç”¨äºŽå½“å‰æ˜¾ç¤ºçš„å£çº¸ï¼ˆå½’功于神奇的ImageMagick):" #: ../data/ui/PreferencesVarietyDialog.ui.h:37 msgid "Quotes" msgstr "箴言" #: ../data/ui/PreferencesVarietyDialog.ui.h:38 msgid "Show random wise quotes on the desktop" msgstr "åœ¨æ¡Œé¢æ˜¾ç¤ºéšæœºçš„æ™ºæ…§ç®´è¨€" #: ../data/ui/PreferencesVarietyDialog.ui.h:39 msgid "Text color: " msgstr "文字颜色 " #: ../data/ui/PreferencesVarietyDialog.ui.h:40 msgid "Text font: " msgstr "文字字体: " #: ../data/ui/PreferencesVarietyDialog.ui.h:41 msgid "Backdrop color: " msgstr "背景色: " #: ../data/ui/PreferencesVarietyDialog.ui.h:42 msgid "Backdrop opacity: " msgstr "èƒŒæ™¯é€æ˜Žåº¦ï¼š " #: ../data/ui/PreferencesVarietyDialog.ui.h:43 msgid " Transparent" msgstr " 逿˜Ž" #: ../data/ui/PreferencesVarietyDialog.ui.h:44 msgid "Opaque" msgstr "ä¸é€æ˜Ž" #: ../data/ui/PreferencesVarietyDialog.ui.h:45 msgid "Draw a text shadow" msgstr "显示文字阴影" #: ../data/ui/PreferencesVarietyDialog.ui.h:46 msgid "Appearance" msgstr "外观" #: ../data/ui/PreferencesVarietyDialog.ui.h:47 msgid "Quotes area width: " msgstr "箴言区域宽度 " #: ../data/ui/PreferencesVarietyDialog.ui.h:48 msgid "Narrow " msgstr "窄 " #: ../data/ui/PreferencesVarietyDialog.ui.h:49 msgid "Wide" msgstr "宽" #: ../data/ui/PreferencesVarietyDialog.ui.h:50 msgid "Horizontal position: " msgstr "æ°´å¹³ä½ç½® " #: ../data/ui/PreferencesVarietyDialog.ui.h:51 msgid "Left " msgstr "左侧 " #: ../data/ui/PreferencesVarietyDialog.ui.h:53 msgid "Vertical position: " msgstr "ç«–ç›´ä½ç½® " #: ../data/ui/PreferencesVarietyDialog.ui.h:54 msgid "Top " msgstr "顶部 " #: ../data/ui/PreferencesVarietyDialog.ui.h:56 msgid "Placement" msgstr "ä½ç½®" #: ../data/ui/PreferencesVarietyDialog.ui.h:57 msgid "Show quotes from these sources: " msgstr "显示箴言从如下æºï¼š " #: ../data/ui/PreferencesVarietyDialog.ui.h:58 msgid "" "More " "plugins" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:59 msgid "Show only these tags and authors. Leave empty to show random quotes." msgstr "ä»…æ˜¾ç¤ºå¦‚ä¸‹æ ‡ç­¾å’Œä½œè€…çš„ï¼Œç•™ç©ºåˆ™éšæœºæ˜¾ç¤ºç®´è¨€ã€‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:61 msgid "Example: funny, inspirational" msgstr "例如:funny, inspirational" #: ../data/ui/PreferencesVarietyDialog.ui.h:62 msgid "Example: Albert Einstein, Voltaire" msgstr "例如:Albert Einstein, Voltaire" #: ../data/ui/PreferencesVarietyDialog.ui.h:63 msgid "Authors: " msgstr "作者: " #: ../data/ui/PreferencesVarietyDialog.ui.h:64 msgid "Sources and filtering" msgstr "æºå’Œè¿‡æ»¤å™¨" #: ../data/ui/PreferencesVarietyDialog.ui.h:65 msgid "Change quote every " msgstr "切æ¢ç®´è¨€æ¯ " #: ../data/ui/PreferencesVarietyDialog.ui.h:66 msgid "Minimum interval is 10 seconds" msgstr "最å°é—´éš”为10 ç§’" #: ../data/ui/PreferencesVarietyDialog.ui.h:67 msgid "Regular change" msgstr "切æ¢è§„则" #: ../data/ui/PreferencesVarietyDialog.ui.h:68 msgid "Clock" msgstr "æ—¶é’Ÿ" #: ../data/ui/PreferencesVarietyDialog.ui.h:69 msgid "" "Show a nice big digital clock on the desktop, displaying the current time " "and date" msgstr "æ˜¾ç¤ºä¸€ä¸ªæ¼‚äº®çš„å¤§æ•°å­—æ—¶é’Ÿï¼Œç”¨äºŽæ˜¾ç¤ºå½“å‰æ—¶é—´å’Œæ—¥æœŸã€‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:70 msgid "" "To configure the clock's appearance edit the clock_filter property in " "Variety's settings file (~/.config/variety/variety.conf). Use the comments " "in ~/.config/variety/variety_latest_default.conf as a guide." msgstr "" "è¦é…置时钟的外观å¯ç¼–辑Varietyçš„é…置文件中的clock_filter属性。å¯ä»¥å‚ç…§~/.config/variety/variety_latest_" "default.conf中的内容。" #: ../data/ui/PreferencesVarietyDialog.ui.h:71 msgid "Clock font: " msgstr "时钟字体: " #: ../data/ui/PreferencesVarietyDialog.ui.h:72 msgid "Date font: " msgstr "日期字体: " #: ../data/ui/PreferencesVarietyDialog.ui.h:73 msgid "" "These don't work? Read here. How " "to further configure the clock? Read " "here." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:74 msgid "Effects" msgstr "特效" #: ../data/ui/PreferencesVarietyDialog.ui.h:75 msgid "Images for slideshow" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:76 msgid "Favorite images" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:77 msgid "Images in all enabled image sources" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:78 msgid "All images in the Downloads folder" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:79 msgid "Custom folder (includes images in subfolders) " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:80 msgid "Order of images in slideshow " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:81 msgid "Random" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:82 msgid "By name, A to Z" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:83 msgid "By name, Z to A" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:84 msgid "By date, oldest first" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:85 msgid "By date, newest first" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:86 msgid "Screen" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:87 msgid "Run on monitor" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:88 msgid "Window mode for the slideshow " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:89 msgid "Fullscreen" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:90 msgid "Desktop (stays below other windows)" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:91 msgid "Maximized window" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:92 msgid "Normal window" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:93 msgid "Dynamics" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:94 msgid "Interval between image changes " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:95 msgid " seconds" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:96 msgid "Quick fade " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:97 msgid "Slow fade" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:98 msgid "Less zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:99 msgid "More zoom" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:100 msgid "Less pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:101 msgid "More pan" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:102 msgid "Reset to defaults" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:103 msgid "Changes on this page take effect after the slideshow is restarted" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:104 msgid "Start slideshow now" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:105 msgid "Slideshow" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:106 msgid "VRTY.ORG" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:108 msgid "VRTY.ORG is in beta and will take some time to mature" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:109 msgid "" "VRTY.ORG connects Variety users with " "similar tastes and provides super-convenient ways to change your wallpaper, " "to add new image sources to Variety, and to follow other users' favorites. " "It is fueled by the favorite images of all participating users." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:110 msgid "" "Could not create user - no connection to VRTY.ORG. We will try again later." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:112 msgid "" "Registration enables cool features like synchronization of favorite images " "and sources between computers and personalized recommendations." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:113 ../variety/Smart.py:635 #: ../variety/Smart.py:684 msgid "Sync" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:114 msgid "Synchronize favorite images between computers" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:115 msgid "Requires VRTY.ORG enabled and logged in." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:116 msgid "" "Your favorite images from other computers will be automatically downloaded " "to this computer. You need to be logged in with the same VRTY.ORG user " "everywhere. Sync will not delete any images." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:117 msgid "Privacy policy" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:118 msgid "" "Variety sends data only for images it downloaded, never for images you " "already had in your local folders that might be private, and Sync does not " "work for such images. Collected data is not shared with third parties, " "unless you opt-in to make your profile public. Read more details about the " "service and the privacy policy here." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:119 msgid "Usage statistics" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:120 msgid "Help make Variety better by sending anonymous usage statistics" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:121 msgid "" "These stats help us improve Variety by understanding how users interact with " "it. They also include general info about your OS version and monitor setup. " "Collected data is not shared with anyone." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:122 msgid "Sync and social" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:123 msgid "Fetch folder" msgstr "存放获å–图片的文件夹" #: ../data/ui/PreferencesVarietyDialog.ui.h:124 msgid "Save manually downloaded wallpapers to " msgstr "手动ä¿å­˜ä¸‹è½½çš„å£çº¸åˆ° " #: ../data/ui/PreferencesVarietyDialog.ui.h:125 msgid "Drag and drop" msgstr "拖放" #: ../data/ui/PreferencesVarietyDialog.ui.h:126 msgid "" "Variety's icon in the launcher serves as a drop target. Drop any image URL " "or file on it and it will be saved to your fetch folder. You can then press " "Next to see it on your desktop.\n" "To show the icon in the launcher choose About or Preferences. You may wish " "to lock it there for easy drag-and-drop access." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:128 msgid "Clipboard monitoring" msgstr "监视剪贴æ¿" #: ../data/ui/PreferencesVarietyDialog.ui.h:129 msgid "Monitor clipboard for image URLs and fetch them" msgstr "监视剪贴æ¿ä¸­å›¾ç‰‡çš„URL并获å–它们" #: ../data/ui/PreferencesVarietyDialog.ui.h:130 msgid "But fetch only when the URL host is one of these:" msgstr "仅获å–下é¢ç½‘站之一的图片" #: ../data/ui/PreferencesVarietyDialog.ui.h:131 msgid "Manual downloading" msgstr "手动下载" #: ../data/ui/PreferencesVarietyDialog.ui.h:132 msgid "When possible use images that:" msgstr "用到图片之处:" #: ../data/ui/PreferencesVarietyDialog.ui.h:134 msgid "Have landscape orientation" msgstr "ä¿æŒæ™¯è§‚å–å‘" #: ../data/ui/PreferencesVarietyDialog.ui.h:135 msgid "Are big at least " msgstr "大å°è‡³å°‘是 " #: ../data/ui/PreferencesVarietyDialog.ui.h:136 msgid "50" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:137 msgid "80" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:138 msgid "100" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:140 #, no-c-format msgid "% of the screen resolution" msgstr "% çš„å±å¹•分辨率" #: ../data/ui/PreferencesVarietyDialog.ui.h:141 msgid "Color" msgstr "颜色" #: ../data/ui/PreferencesVarietyDialog.ui.h:142 msgid "Are dark or light:" msgstr "暗或亮:" #: ../data/ui/PreferencesVarietyDialog.ui.h:143 msgctxt "Color option - images that are dark or light" msgid "Dark" msgstr "暗色" #: ../data/ui/PreferencesVarietyDialog.ui.h:144 msgctxt "Color option - images that are dark or light" msgid "Light" msgstr "加亮" #: ../data/ui/PreferencesVarietyDialog.ui.h:145 msgid "Contain this color: " msgstr "包括该色彩: " #: ../data/ui/PreferencesVarietyDialog.ui.h:146 msgid "(Takes effect after some initial searching)" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:147 msgid "Rating" msgstr "评分" #: ../data/ui/PreferencesVarietyDialog.ui.h:148 msgid "Have EXIF rating at least " msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:149 msgid "1" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:150 msgid "2" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:151 msgid "3" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:152 msgid "4" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:153 msgid "5" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:154 msgid "Color and size" msgstr "色彩与尺寸" #: ../data/ui/PreferencesVarietyDialog.ui.h:155 msgid "Indicator Icon" msgstr "指示器图标" #: ../data/ui/PreferencesVarietyDialog.ui.h:156 msgid "Indicator icon:" msgstr "指示器图标:" #: ../data/ui/PreferencesVarietyDialog.ui.h:157 msgctxt "Icon option" msgid "Light" msgstr "加亮" #: ../data/ui/PreferencesVarietyDialog.ui.h:158 msgctxt "Icon option" msgid "Dark" msgstr "暗色" #: ../data/ui/PreferencesVarietyDialog.ui.h:159 msgctxt "Icon option" msgid "Use current wallpaper" msgstr "用当å‰å£çº¸" #: ../data/ui/PreferencesVarietyDialog.ui.h:160 msgctxt "Icon option" msgid "Custom image..." msgstr "定制图片" #: ../data/ui/PreferencesVarietyDialog.ui.h:161 msgctxt "Icon option" msgid "None" msgstr "æ— " #: ../data/ui/PreferencesVarietyDialog.ui.h:162 msgid "Select an icon" msgstr "选择图标" #: ../data/ui/PreferencesVarietyDialog.ui.h:163 msgid "" "When the icon is hidden, Variety can be controlled from the command line, or " "from the launcher quicklist. Run \"variety --help\" to see all available " "commands." msgstr "" "当图标éšè—时,å¯ä»¥é€šè¿‡å‘½ä»¤æˆ–å¯åŠ¨å™¨å›¾æ ‡çš„ä¸Šä¸‹æ–‡èœå•中控制Variety。è¿è¡Œ\"variety --help\" å¯ä»¥çœ‹åˆ°æ‰€æœ‰å¯ç”¨çš„命令。" #: ../data/ui/PreferencesVarietyDialog.ui.h:164 msgid "Favorites Operations" msgstr "æ”¶è—夹æ“作" #: ../data/ui/PreferencesVarietyDialog.ui.h:165 msgid "Favorites operations to show in main menu:" msgstr "在主èœå•显示收è—夹æ“作" #: ../data/ui/PreferencesVarietyDialog.ui.h:166 msgid "Copy to Favorites" msgstr "æ‹·è´åˆ°æ”¶è—夹" #: ../data/ui/PreferencesVarietyDialog.ui.h:168 msgid "Both Copy and Move" msgstr "æ‹·è´ä¸”移动" #: ../data/ui/PreferencesVarietyDialog.ui.h:169 msgid "Depends on folder..." msgstr "ä¾èµ–文件夹..." #: ../data/ui/PreferencesVarietyDialog.ui.h:172 msgid "Display dialog to customize the Facebook post before publishing" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:173 msgid "Login Screen Support" msgstr "ç™»å½•å±æ”¯æŒ" #: ../data/ui/PreferencesVarietyDialog.ui.h:174 msgid "" "Make sure the wallpapers set by Variety will be used on the login screen" msgstr "确认登录å±å£çº¸ç”±Variety设置" #: ../data/ui/PreferencesVarietyDialog.ui.h:175 msgid "" "Privacy warning: To show your wallpaper LightDM needs read " "permissions over the image. With this option on, Variety will copy the " "wallpapers to a public folder and change their permissions to make them " "readable by all. By default, the folder is ~/Pictures if your home folder in " "not encrypted, and /usr/share/backgrounds if it is. Please use with care on " "multiuser systems." msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:176 msgid "Copy wallpaper image files to this folder: " msgstr "å¤åˆ¶å£çº¸å›¾ç‰‡åˆ°è¯¥æ–‡ä»¶å¤¹ï¼š " #: ../data/ui/PreferencesVarietyDialog.ui.h:177 msgid "Reset to default" msgstr "é‡ç½®ä¸ºé»˜è®¤è®¾ç½®" #: ../data/ui/PreferencesVarietyDialog.ui.h:178 msgid "Still doesn't work?" msgstr "还ä¸èƒ½å·¥ä½œï¼Ÿ" #: ../data/ui/PreferencesVarietyDialog.ui.h:179 msgid "" "It seems your home folder is encrypted, so using folders inside it will not " "work." msgstr "貌似你的主文件夹被加密了,因此其中的文件夹ä¸èƒ½ä½¿ç”¨ã€‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:180 msgid "You don't have write permissions for this folder." msgstr "你没有这个文件夹的写æƒé™ï¼š" #: ../data/ui/PreferencesVarietyDialog.ui.h:181 msgid "Permissions do not allow LightDM to read files from this folder." msgstr "该文件夹没有赋予LightDM读文件的æƒé™" #: ../data/ui/PreferencesVarietyDialog.ui.h:182 msgid "" "Variety can adjust the permissions, but you will have to provide superuser " "privileges." msgstr "Variety能够调整æƒé™ï¼Œä½†ä½ å¿…é¡»æä¾›è¶…级用户的æƒé™ã€‚" #: ../data/ui/PreferencesVarietyDialog.ui.h:183 msgid "Customize" msgstr "自定义" #: ../data/ui/PreferencesVarietyDialog.ui.h:184 msgid "Tips and tricks" msgstr "æç¤ºå’Œçªé—¨" #: ../data/ui/PreferencesVarietyDialog.ui.h:185 msgid "Recent changes" msgstr "最近切æ¢" #: ../data/ui/PreferencesVarietyDialog.ui.h:186 msgid "Visit website" msgstr "æµè§ˆç½‘ç«™" #: ../data/ui/PreferencesVarietyDialog.ui.h:187 msgid "Report a bug or request a feature" msgstr "报告BUG或申请特性" #: ../data/ui/PreferencesVarietyDialog.ui.h:188 msgid "Send feedback" msgstr "å‘é€å馈" #: ../data/ui/PreferencesVarietyDialog.ui.h:189 msgid "Donate to Variety" msgstr "æèµ  Variety" #: ../data/ui/PreferencesVarietyDialog.ui.h:190 msgid "Donate via PayPal" msgstr "通过PayPalæèµ " #: ../data/ui/PreferencesVarietyDialog.ui.h:191 msgid "" "I am developing Variety in my spare time, which usually means the late hours " "after my kids go to bed. Any amount you donate will be appreciated. It will " "show me Variety is valued by you - the users - and will motivate me to " "continue working actively on it.\n" "\n" "Thank you,\n" "Peter Levi" msgstr "" #: ../data/ui/PreferencesVarietyDialog.ui.h:195 msgid "" "For Bitcoin and other payment methods please go to Variety's website." msgstr "" #: ../variety/ImageFetcher.py:56 ../variety/ImageFetcher.py:102 msgid "Fetching" msgstr "正在获å–" #. too small - delete and do not use #: ../variety/ImageFetcher.py:116 msgid "Image too small, ignoring it" msgstr "图片太å°ç•¥è¿‡å®ƒ" #: ../variety/ImageFetcher.py:138 #, python-format msgid "Sorry, got %s error..." msgstr "" #: ../variety/ImageFetcher.py:139 msgid "This means the link is no longer valid" msgstr "" #: ../variety/ImageFetcher.py:142 msgid "Fetch failed for some reason" msgstr "因为æŸäº›åŽŸå› èŽ·å–失败" #: ../variety/ImageFetcher.py:143 msgid "" "To get more information, please run Variety from terminal with -v option and " "retry the action" msgstr "è¦èŽ·å–æ›´å¤šä¿¡æ¯ï¼Œè¯·åœ¨ç»ˆç«¯ä¸­ä»¥ -v 傿•°è¿è¡Œ Variety ç„¶åŽé‡è¯•æ“作" #: ../variety/Smart.py:119 msgid "" "Your smart_user.json config file appears broken. You may have to login again " "to VRTY.ORG." msgstr "" #: ../variety/Smart.py:211 msgid "Your VRTY.ORG credentials are probably outdated. Please login again." msgstr "" #: ../variety/Smart.py:636 #, python-format msgid "Fetching %d images" msgstr "" #: ../variety/Smart.py:636 msgid "Fetching 1 image" msgstr "" #: ../variety/Smart.py:684 msgid "Finished" msgstr "" #: ../variety/Smart.py:705 #, python-format msgid "Logged in as %s" msgstr "" #: ../variety/Smart.py:717 #, python-format msgid "" "Do you want to login to VRTY.ORG as %s?" msgstr "" #: ../variety/Smart.py:718 msgid "VRTY.ORG login confirmation" msgstr "" #: ../variety/QuotesEngine.py:232 msgid "No quote plugins" msgstr "没有箴言æ’ä»¶" #: ../variety/QuotesEngine.py:232 msgid "There are no quote plugins installed" msgstr "箴言æ’件没安装" #: ../variety/QuotesEngine.py:238 msgid "No suitable quote plugins" msgstr "没åˆé€‚的箴言æ’ä»¶" #: ../variety/QuotesEngine.py:239 msgid "" "You have no quote plugins which support searching by keywords and authors" msgstr "æ²¡æ”¯æŒæœç´¢å…³é”®å­—和作者的箴言æ’ä»¶" #: ../variety/QuotesEngine.py:251 msgid "Could not fetch quotes" msgstr "ä¸èƒ½èŽ·å–箴言" #: ../variety/QuotesEngine.py:252 msgid "Quotes services may be down, we will continue trying" msgstr "" #: ../variety/QuotesEngine.py:255 msgid "Could not find quotes" msgstr "" #: ../variety/QuotesEngine.py:256 msgid "Maybe you are searching for something very obscure?" msgstr "" variety-0.8.3/pyproject.toml000066400000000000000000000004631362063646600161400ustar00rootroot00000000000000[tool.black] line-length = 100 target_version = ['py35'] include = '\.pyi?$' exclude = ''' ( /( \.eggs # exclude a few common directories in the | \.git # root of the project | \.hg | \.mypy_cache | \.tox | \.venv | _build | build | dist )/ ) ''' variety-0.8.3/requirements.txt000066400000000000000000000001111362063646600164760ustar00rootroot00000000000000beautifulsoup4 lxml configobj pycairo requests pygobject pillow httplib2 variety-0.8.3/setup.py000066400000000000000000000056531362063646600147440ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE from __future__ import print_function import os import sys from variety_lib.varietyconfig import get_version if sys.version_info[0] < 3: print("Variety requires Python 3 - please run this script using python3.", file=sys.stderr) sys.exit(1) try: import DistUtilsExtra.auto except ImportError: print( "To build variety you need python-distutils-extra for Python 3 - https://launchpad.net/python-distutils-extra", file=sys.stderr, ) sys.exit(1) assert DistUtilsExtra.auto.__version__ >= "2.18", "needs DistUtilsExtra.auto >= 2.18" # Dynamically generate and install the data directory for Variety BUILD_SETTINGS_PATH = "variety_lib/variety_build_settings.py" class InstallWithDataDirectory(DistUtilsExtra.auto.install_auto): def run(self): data_path = os.path.join(self.prefix, "share/variety/") with open(BUILD_SETTINGS_PATH, "w") as f: f.write("### Autogenerated by setup.py - do not edit!\n") f.write("__variety_data_directory__ = %r\n" % data_path) print("This build will look for Variety's data in %r." % data_path) DistUtilsExtra.auto.install_auto.run(self) DistUtilsExtra.auto.setup( name="variety", version=get_version(), license="GPL-3", author="Peter Levi", author_email="peterlevi@peterlevi.com", description="Wallpaper changer, downloader and manager", long_description=""" Variety is a wallpaper manager for Linux systems. It supports numerous desktops and wallpaper sources, including local files and online services: Flickr, Wallhaven, Unsplash, and more. Where supported, Variety sits as a tray icon to allow easy pausing and resuming. Otherwise, its desktop entry menu provides a similar set of options. Variety also includes a range of image effects, such as oil painting and blur, as well as options to layer quotes and a clock onto the background.""", url="https://github.com/varietywalls/variety", cmdclass={"install": InstallWithDataDirectory}, data_files=[("share/metainfo", ["variety.appdata.xml"])], ) # Remove this after we're done with the build if os.path.exists(BUILD_SETTINGS_PATH): os.remove(BUILD_SETTINGS_PATH) variety-0.8.3/tests/000077500000000000000000000000001362063646600143635ustar00rootroot00000000000000variety-0.8.3/tests/TestAPODDownloader.py000066400000000000000000000021151362063646600203360ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests.TestDownloader import get_plugin_downloader, test_download_one_for class TestAPODDownloader(unittest.TestCase): def test_download_one(self): dl = get_plugin_downloader("APODDownloader") test_download_one_for(self, dl) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestAttrDict.py000066400000000000000000000031051362063646600173120ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests import setup_test_logging from variety.AttrDict import AttrDict setup_test_logging() class TestAttrDict(unittest.TestCase): def test_attr_dict(self): a = AttrDict({"a": {"b": 1}}) self.assertFalse(bool(a.deep.inside)) self.assertTrue(bool(a.a)) self.assertEqual(1, a.a.b) a.l.k = 3 self.assertEqual(3, a.l.k) a.f.g.h = 2 self.assertEqual(2, a.f.g.h) a["x"]["y"]["z"] = 1 self.assertEqual(1, a["x"]["y"]["z"]) b = AttrDict(x=1, y=2) self.assertFalse(bool(b.deep.inside)) self.assertEqual(1, b.x) self.assertEqual(2, b.y) b.c = {"z": 3} self.assertEqual(3, b.c.z) self.assertFalse(bool(b.c.dredrefre)) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestBingDownloader.py000066400000000000000000000023521362063646600204750ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests.TestDownloader import get_plugin_downloader, test_download_one_for class TestBingDownloader(unittest.TestCase): def test_download_one(self): dl = get_plugin_downloader("BingDownloader") test_download_one_for(self, dl) def test_fill_queue(self): dl = get_plugin_downloader("BingDownloader") queue = dl.fill_queue() self.assertTrue(len(queue) > 0) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestChromeOSWallpapersDownloader.py000066400000000000000000000021511362063646600233250ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests.TestDownloader import get_plugin_downloader, test_download_one_for class TestChromeOSWallpapersDownloader(unittest.TestCase): def test_download_one(self): dl = get_plugin_downloader("ChromeOSWallpapersDownloader") test_download_one_for(self, dl) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestDesktopprDownloader.py000066400000000000000000000021271362063646600215710ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests.TestDownloader import get_plugin_downloader, test_download_one_for class TestDesktopprDownloader(unittest.TestCase): def test_download_one(self): dl = get_plugin_downloader("DesktopprDownloader") test_download_one_for(self, dl) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestDownloader.py000066400000000000000000000032071362063646600176750ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import os import shutil import unittest from jumble.Jumble import Jumble from tests import setup_test_logging from variety import Util from variety.AttrDict import AttrDict setup_test_logging() def get_plugin_downloader(typename): p = Jumble(["variety/plugins/builtin"]) p.load() plugin = p.get_plugins(typename=typename)[0]["plugin"] parent = AttrDict() parent.size_ok = lambda x, y: True plugin.set_variety(parent) return plugin def test_download_one_for(test_case, dl): dl.target_folder = "/tmp/variety/%s" % dl.__class__.__name__ shutil.rmtree(dl.target_folder, ignore_errors=True) for _ in range(5): f = dl.download_one() if f and os.path.isfile(f) and Util.is_image(f, check_contents=True): return test_case.fail("Tried download_one 5 times, all failed") if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestEartviewDownloader.py000066400000000000000000000021271362063646600214040ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests.TestDownloader import get_plugin_downloader, test_download_one_for class TestEarthviewDownloader(unittest.TestCase): def test_download_one(self): dl = get_plugin_downloader("EarthviewDownloader") test_download_one_for(self, dl) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestFlickrDownloader.py000066400000000000000000000061241362063646600210310ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests.TestDownloader import test_download_one_for from variety.FlickrDownloader import FlickrDownloader class TestFlickrDownloader(unittest.TestCase): def test_download_one(self): test_download_one_for( self, FlickrDownloader(None, "user:www.flickr.com/photos/peter-levi/;user_id:93647178@N00;"), ) def test_obtain_userid_ok(self): self.assertEqual( (True, "ok", "34388055@N08"), FlickrDownloader.obtain_userid("http://www.flickr.com/photos/camillelacroix/"), ) def test_obtain_userid_fail(self): self.assertEqual( (False, "User not found", None), FlickrDownloader.obtain_userid("http://www.flickr.com/photos/bad_username_here_xxx/"), ) def test_obtain_groupid_ok(self): self.assertEqual( (True, "ok", "40961104@N00"), FlickrDownloader.obtain_groupid("http://www.flickr.com/groups/wallpapers/"), ) def test_obtain_groupid_fail(self): self.assertEqual( (False, "Group not found", None), FlickrDownloader.obtain_groupid("http://www.flickr.com/groups/bad_groupname_here_xxx/"), ) def test_get_photo_id(self): self.assertEqual( "7527967456", FlickrDownloader.get_photo_id("https://www.flickr.com/photos/peter-levi/7527967456/"), ) self.assertEqual( "7527967456", FlickrDownloader.get_photo_id("https://www.flickr.com/photos/peter-levi/7527967456"), ) def test_get_image_url(self): self.assertEqual( "https://live.staticflickr.com/8426/7527967456_41f8ae5caf_k.jpg", FlickrDownloader.get_image_url("https://www.flickr.com/photos/peter-levi/7527967456/"), ) def test_get_extra_metadata(self): expected = { "headline": "IMG_1924", "keywords": ["greece", "greek", "islands"], "description": "", "authorURL": "https://www.flickr.com/photos/93647178@N00", "author": "Peter Levi", } self.assertEqual( expected, FlickrDownloader.get_extra_metadata( "https://www.flickr.com/photos/peter-levi/7527967456/" ), ) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestGoodreadsSource.py000066400000000000000000000022601362063646600206650ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from jumble.Jumble import Jumble class TestGoodreadsSource(unittest.TestCase): def test_get_for_author(self): p = Jumble(["variety/plugins/builtin"]) p.load() source = p.get_plugins(typename="GoodreadsSource")[0] q = source["plugin"].get_for_author("Вежинов") self.assertTrue(len(q) > 0) self.assertEqual("Goodreads", q[0]["sourceName"]) variety-0.8.3/tests/TestImageFetcher.py000066400000000000000000000067171362063646600201330ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import os.path import shutil import unittest from variety import Util from variety.ImageFetcher import ImageFetcher class TestImageFetcher(unittest.TestCase): def test_fetch(self): target_folder = "/tmp/variety/ImageFetcher" shutil.rmtree(target_folder, ignore_errors=True) os.makedirs(target_folder) for url in [ "https://w.wallhaven.cc/full/dg/wallhaven-dgeqoj.jpg", "http://unsplash.com/photos/7EqQ1s3wIAI/download", "http://az608707.vo.msecnd.net/files/GreaterFlamingos_EN-US13682107304_1366x768.jpg", "http://a.desktopprassets.com/wallpapers/07865fb0cb575e82fe43d3e1b634f6e2309e2114/foto_alese45.jpg", ]: f = ImageFetcher.fetch(url, target_folder, verbose=False) self.assertIsNotNone(f) self.assertTrue(os.path.isfile(f)) self.assertTrue(Util.is_image(f, check_contents=False)) self.assertTrue(Util.is_image(f, check_contents=True)) self.assertNotEqual("download", f) def test_extract_from_cd(self): self.assertEqual( "img.jpg", ImageFetcher.extract_filename_from_content_disposition("attachment; filename=img.jpg"), ) self.assertEqual( "img.jpg", ImageFetcher.extract_filename_from_content_disposition( "attachment; filename='img.jpg'" ), ) self.assertEqual( "img.jpg", ImageFetcher.extract_filename_from_content_disposition( 'attachment; filename="img.jpg"' ), ) self.assertEqual( None, ImageFetcher.extract_filename_from_content_disposition("attachment; a=b") ) def test_url_ok(self): self.assertFalse(ImageFetcher.url_ok("some garbage", False, ["flickr.com", "wallbase.cc"])) self.assertFalse(ImageFetcher.url_ok("some garbage", True, ["flickr.com", "wallbase.cc"])) self.assertFalse(ImageFetcher.url_ok("http://www.host.com/x/y/z", False, ["flickr.com"])) self.assertFalse( ImageFetcher.url_ok("http://cnn.com/x/y", True, ["flickr.com", "wallbase.cc"]) ) self.assertFalse( ImageFetcher.url_ok("http://somehost.com/x/y", True, ["", "flickr.com", "wallbase.cc"]) ) self.assertTrue(ImageFetcher.url_ok("http://www.host.com/x/y/z.jpg", False, ["flickr.com"])) self.assertTrue( ImageFetcher.url_ok("http://www.wallbase.cc/x/y/z", True, ["flickr.com", "wallbase.cc"]) ) self.assertTrue( ImageFetcher.url_ok("https://www.flickr.com/a", True, ["flickr.com", "wallbase.cc"]) ) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestJumble.py000066400000000000000000000025471362063646600170230ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import os.path import sys import unittest from jumble.IPlugin import IPlugin from jumble.Jumble import Jumble from variety.plugins.IQuoteSource import IQuoteSource sys.path.insert(0, os.path.realpath(os.path.dirname(__file__))) class P1(IPlugin): pass class P2(IQuoteSource): pass class TestJumble(unittest.TestCase): def test_load(self): p = Jumble(["variety/plugins/builtin"]) p.load() self.assertEqual(15, len(p.get_plugins())) self.assertEqual(15, len(p.get_plugins(IPlugin))) self.assertEqual(1, len(p.get_plugins(name="Goodreads"))) variety-0.8.3/tests/TestMediaRssDownloader.py000066400000000000000000000034721362063646600213310ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests.TestDownloader import test_download_one_for from variety.plugins.builtin.downloaders.MediaRSSDownloader import MediaRSSDownloader from variety.plugins.builtin.downloaders.MediaRSSSource import MediaRSSSource class TestMediaRssDownloader(unittest.TestCase): def test_download_one(self): test_download_one_for( self, MediaRSSSource().create_downloader( "http://backend.deviantart.com/rss.xml?q=boost%3Apopular+leaves&type=deviation" ), ) def test_validate_deviantart(self): self.assertTrue( MediaRSSDownloader.validate( "http://backend.deviantart.com/rss.xml?q=boost%3Apopular+leaves&type=deviation" ) ) def test_validate_non_media_rss(self): self.assertFalse(MediaRSSDownloader.validate("http://www.dnevnik.bg/rss/?page=index")) def test_validate_non_rss(self): self.assertFalse(MediaRSSDownloader.validate("http://google.com")) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestQuotationsPageSource.py000066400000000000000000000036701362063646600217270ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from jumble.Jumble import Jumble class TestQuotationsPageSource(unittest.TestCase): def test_get_random(self): p = Jumble(["variety/plugins/builtin"]) p.load() source = p.get_plugins(typename="QuotationsPageSource")[0] q = source["plugin"].get_random() self.assertTrue(len(q) > 0) self.assertEqual("TheQuotationsPage.com", q[0]["sourceName"]) def test_get_for_author(self): p = Jumble(["variety/plugins/builtin"]) p.load() source = p.get_plugins(typename="QuotationsPageSource")[0] q = source["plugin"].get_for_author("voltaire") self.assertTrue(len(q) > 0) self.assertEqual("TheQuotationsPage.com", q[0]["sourceName"]) self.assertEqual("Voltaire", q[0]["author"]) def test_get_for_keyword(self): p = Jumble(["variety/plugins/builtin"]) p.load() source = p.get_plugins(typename="QuotationsPageSource")[0] q = source["plugin"].get_for_keyword("funny") self.assertTrue(len(q) > 0) self.assertEqual("TheQuotationsPage.com", q[0]["sourceName"]) self.assertTrue(q[0]["quote"].lower().find("funny") >= 0) variety-0.8.3/tests/TestRedditDownloader.py000066400000000000000000000055411362063646600210340ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests.TestDownloader import test_download_one_for from variety.AttrDict import AttrDict from variety.plugins.builtin.downloaders.RedditDownloader import RedditDownloader from variety.plugins.builtin.downloaders.RedditSource import RedditSource class TestRedditDownloader(unittest.TestCase): def test_download_one(self): source = RedditSource() test_download_one_for(self, source.create_downloader("http://www.reddit.com/r/AutumnPorn/")) def test_build_json_url(self): self.assertEqual( "http://www.reddit.com/r/comics/.json?limit=100", RedditDownloader.build_json_url("http://www.reddit.com/r/comics/"), ) self.assertEqual( "http://www.reddit.com/r/comics/top/.json?limit=100", RedditDownloader.build_json_url("http://www.reddit.com/r/comics/top/"), ) self.assertEqual( "http://www.reddit.com/r/comics/top/.json?sort=top&t=week&limit=100", RedditDownloader.build_json_url("http://www.reddit.com/r/comics/top/?sort=top&t=week"), ) def test_validate(self): parent = AttrDict() parent.options.safe_mode = True source = RedditSource() source.set_variety(parent) def _validate(url): return source.validate(url)[1] is None self.assertTrue(_validate("http://www.reddit.com/r/comics")) self.assertFalse(_validate("http://www.reddit.com/r/nsfw/")) parent.options.safe_mode = False self.assertTrue(_validate("http://www.reddit.com/r/comics")) self.assertTrue(_validate("http://www.reddit.com/r/nsfw/")) self.assertTrue(_validate("http://www.reddit.com/r/AutumnPorn/")) self.assertTrue(_validate("http://www.reddit.com/r/AutumnPorn/top?sort=top&t=month")) self.assertFalse(_validate("http://www.reddit.com/r/bestof/")) self.assertFalse(_validate("http://www.reddit.com/r/dhkjregfhjregfjfdrejh/")) self.assertFalse(_validate("http://www.notreddit.com/r/dhkjregfhjregfjfdrejh/")) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestUnsplashConfigurableDownloader.py000066400000000000000000000037351362063646600237420ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests.TestDownloader import test_download_one_for from variety.AttrDict import AttrDict from variety.plugins.builtin.downloaders.UnsplashConfigurableSource import ( UnsplashConfigurableSource, ) class TestUnsplashConfigurableDownloader(unittest.TestCase): def _source(self): parent = AttrDict() parent.size_ok = lambda x, y: True source = UnsplashConfigurableSource() source.set_variety(parent) return source def test_download_one(self): test_download_one_for(self, self._source().create_downloader("landscape")) def test_validate(self): source = self._source() self.assertIsNone(source.validate("nature")[1]) self.assertIsNone(source.validate("https://unsplash.com/s/photos/landscape")[1]) self.assertIsNone(source.validate("https://unsplash.com/@fotografierende")[1]) self.assertIsNone( source.validate("https://unsplash.com/collections/3694365/gradient-nation")[1] ) def test_fill_queue(self): dl = self._source().create_downloader("nature") queue = dl.fill_queue() self.assertTrue(len(queue) > 0) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestUnsplashDownloader.py000066400000000000000000000024411362063646600214120ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests.TestDownloader import get_plugin_downloader, test_download_one_for class TestUnsplashDownloader(unittest.TestCase): def test_download_one(self): dl = get_plugin_downloader("UnsplashDownloader") test_download_one_for(self, dl) def test_fill_queue(self): dl = get_plugin_downloader("UnsplashDownloader") dl.target_folder = "/tmp/variety/" queue = dl.fill_queue() self.assertTrue(len(queue) > 0) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestUtil.py000066400000000000000000000262751362063646600165260ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import os import os.path import time import unittest from variety.Util import Util, cache, debounce, throttle class TestUtil(unittest.TestCase): @classmethod def setUpClass(cls): # Chdir to the tests directory so that we can find our test images curdir = os.path.dirname(os.path.abspath(__file__)) if curdir: os.chdir(curdir) def test_sanitize_filename(self): self.assertEqual("i_m____g_.jpg", Util.sanitize_filename("i?m?*%^g_.jpg")) def test_get_local_name(self): self.assertEqual("img.jpg", Util.get_local_name("http://example.com/a/img?a=b")) self.assertEqual("img.jpg", Util.get_local_name("http://example.com/a/img.jpg?a=b")) self.assertEqual("img.jpg", Util.get_local_name("http://example.com/a/img.jpg#x")) self.assertEqual("img.jpg", Util.get_local_name("http://example.com/a/img.jpg?a=b#x")) self.assertEqual("im g.jpg", Util.get_local_name("http://example.com/a/im%20g.jpg?a=b#x")) self.assertEqual("im_g.jpg", Util.get_local_name("http://example.com/a/im%22g.jpg?a=b#x")) self.assertTrue(len(Util.get_local_name("a" * 1000 + ".jpg")) < 255) def test_split(self): self.assertEqual(["a", "b", "c", "d", "e"], Util.split("a\nb,c ,,d\n e")) def test_metadata(self): self.assertTrue(os.path.exists("test.jpg")) info = { "sourceURL": "b", "imageURL": "d", "sourceName": "a", "sourceLocation": "c", "sourceType": "flickr", "author": "автор", "authorURL": "url", "keywords": ["дума1", "дума2"], "headline": "проба1 проба1", "description": "проба2 проба2", "sfwRating": 50, "extraData": {"key1": "val1", "key2": "val2"}, } self.assertEqual(info, Util.read_metadata("test.jpg")) self.assertTrue(Util.write_metadata("test.jpg", info)) self.assertEqual(info, Util.read_metadata("test.jpg")) self.assertTrue(os.path.exists("test.svg")) self.assertEqual(info, Util.read_metadata("test.svg")) Util.write_metadata("test.svg", info) self.assertEqual(info, Util.read_metadata("test.svg")) def test_read_write_rating(self): self.assertTrue(os.path.exists("test.jpg")) self.assertEqual(None, Util.get_rating("test.jpg")) Util.set_rating("test.jpg", None) self.assertEqual(None, Util.get_rating("test.jpg")) Util.set_rating("test.jpg", 4) self.assertEqual(4, Util.get_rating("test.jpg")) Util.set_rating("test.jpg", -1) self.assertEqual(-1, Util.get_rating("test.jpg")) Util.set_rating("test.jpg", 0) self.assertEqual(0, Util.get_rating("test.jpg")) Util.set_rating("test.jpg", None) self.assertEqual(None, Util.get_rating("test.jpg")) try: Util.set_rating("test.jpg", -10) self.assertTrue(False, "Exception expected") except ValueError: pass # OK def test_find_unique_name(self): self.assertEqual("/etc/fstab_1", Util.find_unique_name("/etc/fstab")) self.assertEqual("/etc/bash_1.bashrc", Util.find_unique_name("/etc/bash.bashrc")) def test_folderpath(self): self.assertEqual("/", Util.folderpath("/")) self.assertEqual("/a/b/c/", Util.folderpath("/a/b/c")) def test_gtk_to_fcmatch_font(self): self.assertEqual( ("Bitstream Charter:Bold:Italic:10", "10"), Util.gtk_to_fcmatch_font("Bitstream Charter Bold Italic 10"), ) def test_file_in(self): self.assertTrue(Util.file_in("/a/b/a.txt", "/a/")) self.assertTrue(Util.file_in("/a/b/a.txt", "/a/b/")) self.assertFalse(Util.file_in("/a/b/a.txt", "/c/")) def test_same_file_paths(self): self.assertTrue(Util.same_file_paths("/a/../b/c", "/b/c")) self.assertFalse(Util.same_file_paths("/a/../b/c", "/a/./b/c")) def test_compare_versions(self): self.assertEqual(-1, Util.compare_versions("0.6.9", "0.7.0-alpha1")) self.assertEqual(-1, Util.compare_versions("0.4.10", "0.4.11")) self.assertEqual(-1, Util.compare_versions("0.4.10", "0.5")) self.assertEqual(-1, Util.compare_versions("0.4.10", "1")) self.assertEqual(0, Util.compare_versions("0.4.10", "0.4.10")) self.assertEqual(0, Util.compare_versions("1.0.0", "1.0")) # PEP 440 details self.assertEqual(1, Util.compare_versions("0.4.10", "0.4.8")) self.assertEqual(1, Util.compare_versions("0.4.10", "0.4")) self.assertEqual(1, Util.compare_versions("0.4.10", "0")) self.assertEqual(1, Util.compare_versions("0.7.0-beta1", "0.7.0-alpha1")) self.assertEqual(1, Util.compare_versions("0.7.0", "0.7.0-alpha1")) self.assertEqual(1, Util.compare_versions("0.7.0", "0.7.0-beta1")) def test_md5(self): self.assertEqual("098f6bcd4621d373cade4e832627b4f6", Util.md5("test")) def test_md5file(self): self.assertEqual("6af710446c1554d7bc79d7939d6900e4", Util.md5file("test.jpg")) def test_collapseuser(self): self.assertEqual( "~/.config/variety", Util.collapseuser("%s/.config/variety" % os.path.expanduser("~")) ) self.assertEqual( "/home/peteraaa/.config/variety", Util.collapseuser("/home/peteraaa/.config/variety") ) self.assertEqual("/media/.config/variety", Util.collapseuser("/media/.config/variety")) def test_random_hash(self): s = set(Util.random_hash() for i in range(100)) self.assertEqual(100, len(s)) for x in s: self.assertEqual(32, len(x)) def test_get_file_icon_name(self): self.assertEqual("folder", Util.get_file_icon_name("/xxx/yyy/zzz")) # nonexistent self.assertEqual("user-home", Util.get_file_icon_name("~")) self.assertEqual("folder-pictures", Util.get_file_icon_name("~/Pictures")) def test_get_xdg_pictures_folder(self): self.assertEqual(os.path.expanduser("~/Pictures"), Util.get_xdg_pictures_folder()) def test_safe_map(self): def f(i): if i <= 10: raise Exception return i self.assertEqual([20, 30], list(Util.safe_map(f, [1, 5, 20, 10, 30, 4]))) def test_fetch(self): resp = Util.fetch("//google.com") self.assertTrue(len(resp) > 0) def test_convert_url(self): self.assertEqual( "wallpapers_net_some_category_html", Util.convert_to_filename("http://wallpapers.net/some-category.html"), ) def test_get_size(self): self.assertEqual((32, 32), Util.get_size("test.jpg")) self.assertRaises(Exception, lambda: Util.get_size("fake_image.jpg")) def test_is_image(self): self.assertTrue(Util.is_image("test.jpg")) self.assertTrue(Util.is_image("test.jpg", check_contents=True)) self.assertTrue(Util.is_image("fake_image.jpg")) self.assertFalse(Util.is_image("fake_image.jpg", check_contents=True)) def test_is_animated_gif(self): self.assertFalse(Util.is_animated_gif("test.jpg")) self.assertTrue(Util.is_animated_gif("animated.gif")) self.assertFalse(Util.is_animated_gif("not-animated.gif")) def test_is_dead_or_not_image(self): self.assertTrue(Util.is_dead_or_not_image(None)) self.assertTrue(Util.is_dead_or_not_image("not a URL")) self.assertTrue(Util.is_dead_or_not_image("http://www.google.com/")) self.assertTrue(Util.is_dead_or_not_image("http://vrty.org/")) self.assertTrue(Util.is_dead_or_not_image("http://www.google.com/dejkjdrelkjflkrejfjre")) self.assertFalse( Util.is_dead_or_not_image( "http://upload.wikimedia.org/wikipedia/commons/5/53/Wikipedia-logo-en-big.png" ) ) self.assertFalse( Util.is_dead_or_not_image( "https://farm8.staticflickr.com/7133/7527967878_85fea93129_o.jpg" ) ) self.assertFalse( Util.is_dead_or_not_image( "http://interfacelift.com/wallpaper/D98ef829/00899_rustedbolt_2560x1600.jpg" ) ) self.assertTrue( Util.is_dead_or_not_image("http://wallpapers.wallbase.cc/rozne/wallpaper-1227671.jpg") ) self.assertTrue( Util.is_dead_or_not_image("http://ns223506.ovh.net/rozne/a1b2/wallpaper-1996019.png") ) def test_debounce(self): """ Test that the increment function is being debounced. The counter should only be incremented once 10 seconds after the last call to the function """ count = [0] @debounce(0.6) def increment(): count[0] += 1 self.assertTrue(count[0] == 0) increment() increment() time.sleep(0.4) self.assertTrue(count[0] == 0) increment() increment() increment() increment() self.assertTrue(count[0] == 0) time.sleep(0.6) self.assertTrue(count[0] == 1) def test_throttle_no_trailing(self): count = [0] @throttle(seconds=0.3) def increment(): count[0] += 1 self.assertTrue(count[0] == 0) increment() self.assertTrue(count[0] == 1) increment() self.assertTrue(count[0] == 1) time.sleep(0.2) increment() self.assertTrue(count[0] == 1) time.sleep(0.2) increment() self.assertTrue(count[0] == 2) increment() self.assertTrue(count[0] == 2) time.sleep(0.31) self.assertTrue(count[0] == 2) def test_throttle_with_trailing(self): count = [0] @throttle(seconds=0.3, trailing_call=True) def increment(): count[0] += 1 self.assertTrue(count[0] == 0) increment() self.assertTrue(count[0] == 1) increment() self.assertTrue(count[0] == 1) time.sleep(0.2) increment() self.assertTrue(count[0] == 1) time.sleep(0.2) increment() self.assertTrue(count[0] == 2) increment() self.assertTrue(count[0] == 2) time.sleep(0.31) self.assertTrue(count[0] == 3) def test_cache(self): @cache(ttl_seconds=10) def fib(n): return 1 if n <= 1 else fib(n - 1) + fib(n - 2) self.assertEqual(573147844013817084101, fib(100)) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestVarietyWindow.py000066400000000000000000000025261362063646600204150ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from variety.VarietyWindow import VarietyWindow class TestVarietyWindow(unittest.TestCase): def test_replace_clock_filter_offsets(self): f = "-fill '#DDDDDD' -annotate 0x0+[%HOFFSET+100]+[%VOFFSET+150] '%H:%M' -pointsize 50 -annotate 0x0+[%HOFFSET+100]+[%VOFFSET+100] '%A, %B %d'" ff = VarietyWindow.replace_clock_filter_offsets(f, 200, 3) expected = "-fill '#DDDDDD' -annotate 0x0+300+153 '%H:%M' -pointsize 50 -annotate 0x0+300+103 '%A, %B %d'" self.assertEqual(expected, ff) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/TestWallhavenDownloader.py000066400000000000000000000024471362063646600215440ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import unittest from tests.TestDownloader import test_download_one_for from variety.plugins.builtin.downloaders.WallhavenSource import WallhavenSource class TestWallhavenDownloader(unittest.TestCase): def test_download_one(self): test_download_one_for(self, WallhavenSource().create_downloader("landscape")) def test_fill_queue(self): dl = WallhavenSource().create_downloader("nature") queue = dl.fill_queue() self.assertTrue(len(queue) > 0) if __name__ == "__main__": unittest.main() variety-0.8.3/tests/__init__.py000066400000000000000000000005621362063646600164770ustar00rootroot00000000000000import logging def setup_test_logging(): print("Setting up variety logger") logger = logging.getLogger("variety") logger.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") ch.setFormatter(formatter) logger.addHandler(ch) variety-0.8.3/tests/animated.gif000066400000000000000000000021321362063646600166320ustar00rootroot00000000000000GIF89a22™÷ÑH‚a÷ª!ù !ÿ NETSCAPE2.0,22ÿœ™Áꜜ*ˆ©Å´Ë-d(z¦™éÉ¢lÙž%Ôp¬Àóé[ÔP½bq6Ä1z€ñéÓ9}ÀÎÔx…b¡UÍu§}‚ÉØ*ŽJ»Ê47èA»Épë[×ÜùÑžL×÷ð§&XñÇÖ'–˜7µˆg8¸×èxWi Y(9I㉩ÈÇÙ’:ª#zjó9¶É q«i*ÂUVGC&‹ÁÅ!˜ñø»ìHD5G¢hCØ‹ 7œË‹%›Œz}‹‹µ2­ÌÄý«E‹`f+˸¢-έ„îƒa\îøÏ4ÏÄQRiÔ½:²¨=a|XÝ[Èâ$‰Â0}S…1£Æ !ù ,-/òœ‰Áꜜ#ˆ©Å´Ÿ-d(zZãAæZvíª-PùÂcź®Ö6NÛ …4+°k ‡L@$Çó%–Cj³Ú”Ê’Ðkµk4©*^ffüû”³i‰uÍk?àU¹â ×Úð^¤ÆWöHgwWètˆè”·8•8¸G'9høé4Ù9—ä)Fš2JÊÉY— qÑzYyÒ*ˇ–6ã䊑ÅÑvÆ£ÛUåÚk@|Eb«–ˆË»Wœ•*ìÌ==kV+f$ëÚ·BFä­‹þtý (>Þr¬ÚîûEù3fuÙh*§O{ £8¨ê:´ä±U’´­(!ù ,-/òœ‰Áꜜ#ˆ©Å´Ÿ-d(zZãAæZvíª-PùÂcź®Ö6NÛ …4+°k ‡L@$Çó%–Cj³Ú”Ê’Ðkµk4©*^ffüû”³i‰uÍk?àU¹â ×Úð^¤ÆWöHgwWètˆè”·8•8¸G'9høé4Ù9—ä)Fš2JÊÉY— qÑzYyÒ*ˇ–6ã䊑ÅÑvÆ£ÛUåÚk@|Eb«–ˆË»Wœ•*ìÌ==kV+f$ëÚ·BFä­‹þtý (>Þr¬ÚîûEù3fuÙh*§O{ £8¨ê:´ä±U’´­(!ù ,-/òœ‰Áꜜ#ˆ©Å´Ÿ-d(zZãAæZvíª-PùÂcź®Ö6NÛ …4+°k ‡L@$Çó%–Cj³Ú”Ê’Ðkµk4©*^ffüû”³i‰uÍk?àU¹â ×Úð^¤ÆWöHgwWètˆè”·8•8¸G'9høé4Ù9—ä)Fš2JÊÉY— qÑzYyÒ*ˇ–6ã䊑ÅÑvÆ£ÛUåÚk@|Eb«–ˆË»Wœ•*ìÌ==kV+f$ëÚ·BFä­‹þtý (>Þr¬ÚîûEù3fuÙh*§O{ £8¨ê:´ä±U’´­(;variety-0.8.3/tests/fake_image.jpg000066400000000000000000000000141362063646600171300ustar00rootroot00000000000000Not an imagevariety-0.8.3/tests/not-animated.gif000066400000000000000000000001621362063646600174310ustar00rootroot00000000000000GIF89a((€ÿÿÀÀÀ!ù,((IŒ©Ëí£œ´Ú‹³Þ¼{„"ð!ã–è ®ìæÆpüb´lßµ¥ïUÊO¡¨h$!³!ÇÙé©h¥ƒ¯ŠÍj·Ü®÷ ‹ÇÞ;variety-0.8.3/tests/test.jpg000066400000000000000000000113031362063646600160420ustar00rootroot00000000000000ÿØÿàJFIFÿá„ExifII*2i‡Jœœпроба2 проба2†’\проба2 проба2ÿá 1http://ns.adobe.com/xap/1.0/ автор проба2 проба2 дума1 дума2 ÿípPhotoshop 3.08BIMTxпроба2 проба2iпроба1 проба1 дума1 дума2ÿÛC     ÿÛC   ÿþпроба2 проба2ÿÀ "ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ûóãOÆ”ø|‡LÓZ¬–{‹«ˆÚX4èY¶,’"|ÎÌÀ„Œc;X’çæßŸøÖ+˳=Íì«Ìo5Á%Ñ™G¥¢2E,8 œzTõ‹GS·»h…éÕ¯fÕ.íÁ"WF>] ï‘h«Óï ñÔK¢Iý‰jÏáˆ#±·Ô涉ÚHØÈÑ63—Ï\ò8ÀÝÏ^?/Ï3¬SÅK …›‚‹µ×Wæúv·]ÏÐòœ¦Œp±ÄÕŠ”¥ª¾É_·~½LO|Fñƒm¶Â{ ç t—û9ØCaÚsà+ ümOˆ ºV¨öã[´ðÜZ©Ho¢RÙP’c‘ (xÉ8ܤ ó6§à{+‹ÖÑôótÏìæÝU¥¹ wÊá_kÉ©þÝIáðÚ²é²é:®ŽðkSÛœ†+­¯…–ÙJã‚IXd¹î2Èá±mÊvMî›ÛåëÞëÏ£9ÊðUp²ÅacË(ôZ]z_ñ]¾ìߊZmÿ‡|Q ‰ìßJ¼¸Ð.'æÜd³b@ÀY ”±$™öîéˆ4tÔ&ð›¼vºÓø~Ý·[ê2³ÉòÇÂÈ9R½NOQõÇo‚Ãâ%¥Î¡¤FÕ¥µûí…ä†;}RØV7uÅ"c ¥˜A~YÖt¼~¯¨^øz%c¶~1ŠH#ŽçËŽê=ÖóŒ–9Wã¹Î1Ýdµ¾²ñ8hs)=mº}û¾¶ívreyŪG^\²†×ê½{ô×ORþ›­hZžý¥5Ëip[¤ ê+Kr®à L!faƒò¶ON*ׄ¼3«ÍâÍkL’ê{È5s‡ k‰ ÒÍ$ìåÃ0òm‘Ü‚}{rÛÃ7|Ukwo©E­[Û image/svg+xml variety-0.8.3/tests/test.svg.metadata.json000066400000000000000000000006501362063646600206130ustar00rootroot00000000000000{ "author": "автор", "authorURL": "url", "description": "проба2 проба2", "extraData": { "key1": "val1", "key2": "val2" }, "headline": "проба1 проба1", "imageURL": "d", "keywords": [ "дума1", "дума2" ], "sfwRating": 50, "sourceLocation": "c", "sourceName": "a", "sourceType": "flickr", "sourceURL": "b" }variety-0.8.3/tests/test_lint.py000066400000000000000000000031161362063646600167430ustar00rootroot00000000000000#!/usr/bin/python3 # -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import subprocess import unittest class TestPylint(unittest.TestCase): def test_project_errors_only(self): """run pylint in error only mode your code may well work even with pylint errors but have some unusual code""" return_code = subprocess.call(["pylint3", "-E", "variety"]) # not needed because nosetests displays pylint console output # self.assertEqual(return_code, 0) # un-comment the following for loads of diagnostics # ~ def test_project_full_report(self): # ~ '''Only for the brave # ~ # ~ you will have to make judgement calls about your code standards # ~ that differ from the norm''' # ~ return_code = subprocess.call(["pylint", 'variety']) if __name__ == "__main__": "you will get better results with nosetests" unittest.main() variety-0.8.3/toolchain/000077500000000000000000000000001362063646600152015ustar00rootroot00000000000000variety-0.8.3/toolchain/autoformat000077500000000000000000000010331362063646600173050ustar00rootroot00000000000000#!/usr/bin/env bash # This is our code autoformatting tool. It's run on all code files and runs Black, isort and # whatever other code-fixing tools we decide to use. # # Usage: autoformat [ ...] # Note this expects Black and isort to be in you path. if (( $# < 1 )); then echo 'Usage: autoformat [ ...]' exit 1 fi # isort must be run before Black echo 'Running isort' isort -rc "$@" echo 'Running Black' black --line-length 100 --target-version py35 "$@" variety-0.8.3/toolchain/generate-pot000077500000000000000000000005441362063646600175240ustar00rootroot00000000000000#!/usr/bin/env bash # This regenerates the pot file into po/variety.pot # This file must then be uploaded to https://translations.launchpad.net/variety/trunk/+translations-upload cd po || cd ../po xgettext -k_ -kN_ -L Glade -o variety.pot \ ../variety/*.py \ ../variety/**/*.py \ ../variety_lib/*.py \ ../jumble/*.py \ ../data/ui/*.ui variety-0.8.3/toolchain/pre-commit-autoformat000077500000000000000000000007531362063646600213670ustar00rootroot00000000000000#!/bin/bash # # Pre-commit git hook that runs autoformat on all changed files # Install as a git hook by running this in the project root folder: # cd .git/hooks && ln -sf ../../toolchain/pre-commit-autoformat pre-commit # # Note that commits will proceed even when autoformat makes changes to the files # (which is different from how pre-commit hooks often work). git diff --cached --name-only --diff-filter=ACM | \ grep -E '\.py$' | \ xargs -i sh -c 'toolchain/autoformat {}; git add {}' variety-0.8.3/variety.appdata.xml000066400000000000000000000025501362063646600170410ustar00rootroot00000000000000 variety.desktop CC0-1.0 GPL-3.0 Variety Wallpaper changer that automatically downloads wallpapers

Variety changes the desktop wallpaper on a regular basis, using user-specified or automatically downloaded images.

Variety sits conveniently as an indicator in the panel and can be easily paused and resumed. The mouse wheel can be used to scroll wallpapers back and forth until you find the perfect one for your current mood.

Apart from displaying images from local folders, several different online sources can be used to fetch wallpapers according to user-specified criteria.

Variety can also automatically apply various fancy filters to the displayed images - charcoal painting, oil painting, heavy blurring, etc. - so that your desktop is always fresh and unique.

https://launchpad.net/variety https://github.com/varietywalls/variety/issues eclipseo_at_fedoraproject.org
variety-0.8.3/variety.desktop.in000066400000000000000000000014571362063646600167130ustar00rootroot00000000000000[Desktop Entry] _Name=Variety _Comment=Variety Wallpaper Changer Categories=GNOME;GTK;Utility; Exec=variety %U MimeType=text/uri-list;x-scheme-handler/variety;x-scheme-handler/vrty; Icon=variety Terminal=false Type=Application StartupNotify=false Actions=Next;Previous;PauseResume;History;Preferences; Keywords=Wallpaper;Changer;Change;Download;Downloader;Variety; StartupWMClass=Variety [Desktop Action Next] Exec=variety --next _Name=Next OnlyShowIn=Unity; [Desktop Action Previous] Exec=variety --previous _Name=Previous OnlyShowIn=Unity; [Desktop Action PauseResume] Exec=variety --toggle-pause _Name=Pause / Resume OnlyShowIn=Unity; [Desktop Action History] Exec=variety --history _Name=History OnlyShowIn=Unity; [Desktop Action Preferences] Exec=variety --preferences _Name=Preferences OnlyShowIn=Unity; variety-0.8.3/variety/000077500000000000000000000000001362063646600147045ustar00rootroot00000000000000variety-0.8.3/variety/AboutVarietyDialog.py000066400000000000000000000023751362063646600210230ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging from variety_lib.AboutDialog import AboutDialog logger = logging.getLogger("variety") # See variety_lib.AboutDialog.py for more details about how this class works. class AboutVarietyDialog(AboutDialog): __gtype_name__ = "AboutVarietyDialog" def finish_initializing(self, builder): # pylint: disable=E1002 """Set up the about dialog""" super(AboutVarietyDialog, self).finish_initializing(builder) # Code for other initialization actions should be added here. variety-0.8.3/variety/AbstractAddByQueryDialog.py000066400000000000000000000064021362063646600220750ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import threading from gi.repository import Gdk, Gtk # pylint: disable=E0611 from variety.Util import Util class AbstractAddByQueryDialog(Gtk.Dialog): def validate(self, query): """ Example valid: return formatted(query), None Example invalid: return query, _('Not a proper XYZ query') """ raise NotImplementedError() def commit(self, final_query): """ Performs the actions to really add a valid query or URL to Variety Example: self.parent.on_add_dialog_okay(Options.SourceType.XYZ, final_query, self.edited_row) """ raise NotImplementedError() def finish_initializing(self, builder): """Called when we're finished initializing. finish_initalizing should be called after parsing the ui definition and creating a AbstractAddByQueryDialog object with it in order to finish initializing the start of the new AbstractAddByQueryDialog instance. """ # Get a reference to the builder and set up the signals. self.builder = builder self.ui = builder.get_ui(self) self.edited_row = None def set_edited_row(self, edited_row): self.edited_row = edited_row self.ui.query.set_text(self.edited_row[2]) def on_btn_ok_clicked(self, widget, data=None): if not len(self.ui.query.get_text().strip()): self.destroy() else: threading.Timer(0, self.ok_thread).start() def on_btn_cancel_clicked(self, widget, data=None): self.destroy() def ok_thread(self): def _start_ui(): self.ui.message.set_visible(True) self.ui.buttonbox.set_sensitive(False) self.ui.query.set_sensitive(False) self.ui.spinner.set_visible(True) self.ui.spinner.start() self.ui.error.set_label("") Util.add_mainloop_task(_start_ui) query = self.ui.query.get_text().strip() final_query, invalid_msg = self.validate(query) def _stop_ui(): if invalid_msg: self.ui.buttonbox.set_sensitive(True) self.ui.error.set_label(invalid_msg) self.ui.spinner.stop() self.ui.query.set_sensitive(True) self.ui.message.set_visible(False) self.ui.spinner.set_visible(False) self.ui.query.grab_focus() else: self.commit(final_query) self.destroy() Util.add_mainloop_task(_stop_ui) variety-0.8.3/variety/AddConfigurableDialog.py000066400000000000000000000034421362063646600214120ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE from variety.AbstractAddByQueryDialog import AbstractAddByQueryDialog from variety_lib.helpers import get_builder class AddConfigurableDialog(AbstractAddByQueryDialog): __gtype_name__ = "AddConfigurableDialog" def __new__(cls): builder = get_builder("AddConfigurableDialog") new_object = builder.get_object("add_configurable_dialog") new_object.finish_initializing(builder) return new_object def set_source(self, source): self.source = source self.set_title("Variety - add {} source".format(source.get_source_name())) self.ui.title.set_text(source.get_source_name()) self.ui.instruction.set_markup(source.get_ui_instruction()) self.ui.short_instruction.set_markup(source.get_ui_short_instruction()) def validate(self, query): return self.source.validate(query) def commit(self, final_query): if len(final_query): self.parent.on_add_dialog_okay( self.source.get_source_type(), final_query, self.edited_row ) variety-0.8.3/variety/AddFlickrDialog.py000066400000000000000000000141731362063646600202270ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import threading import urllib.parse from gi.repository import Gdk, Gtk # pylint: disable=E0611 from variety.FlickrDownloader import FlickrDownloader from variety.Options import Options from variety.Util import Util, _, on_gtk from variety_lib.helpers import get_builder logger = logging.getLogger("variety") class AddFlickrDialog(Gtk.Dialog): __gtype_name__ = "AddFlickrDialog" def __new__(cls): """Special static method that's automatically called by Python when constructing a new instance of this class. Returns a fully instantiated AddFlickrDialog object. """ builder = get_builder("AddFlickrDialog") new_object = builder.get_object("add_flickr_dialog") new_object.finish_initializing(builder) return new_object def finish_initializing(self, builder): """Called when we're finished initializing. finish_initalizing should be called after parsing the ui definition and creating a AddFlickrDialog object with it in order to finish initializing the start of the new AddFlickrDialog instance. """ # Get a reference to the builder and set up the signals. self.builder = builder self.ui = builder.get_ui(self) self.edited_row = None def set_edited_row(self, edited_row): self.edited_row = edited_row location = edited_row[2] s = location.split(";") params = {} for x in s: if len(x) and x.find(":") > 0: k, v = x.split(":") params[k.lower()] = urllib.parse.unquote_plus(v) if "text" in params: self.ui.text.set_text(params["text"]) if "tags" in params: self.ui.tags.set_text(params["tags"]) if "user" in params: if "://" not in params["user"]: params["user"] = "https://" + params["user"] self.ui.user_url.set_text(params["user"]) if "group" in params: if "://" not in params["group"]: params["group"] = "https://" + params["group"] self.ui.group_url.set_text(params["group"]) def on_btn_ok_clicked(self, widget, data=None): """The user has elected to save the changes. Called before the dialog returns Gtk.ResponseType.OK from run(). """ threading.Timer(0, self.ok_thread).start() @on_gtk def show_spinner(self): self.ui.buttonbox.set_sensitive(False) self.ui.message.set_visible(True) self.ui.spinner.set_visible(True) self.ui.spinner.start() self.ui.error.set_label("") def ok_thread(self): search = "" if len(self.ui.tags.get_text().strip()): search += ( "tags:" + ",".join( [urllib.parse.quote_plus(t.strip()) for t in self.ui.tags.get_text().split(",")] ) + ";" ) if len(self.ui.text.get_text().strip()): search += "text:" + urllib.parse.quote_plus(self.ui.text.get_text().strip()) + ";" self.error = "" user_url = self.ui.user_url.get_text().strip() if len(user_url) > 0: self.show_spinner() u = FlickrDownloader.obtain_userid(user_url) if u[0]: search += ( "user:" + self.ui.user_url.get_text().replace("http://", "").replace("https://", "") + ";" ) search += "user_id:" + u[2] + ";" else: self.error = self.error + "\n" + u[1] group_url = self.ui.group_url.get_text().strip() if len(group_url) > 0: self.show_spinner() g = FlickrDownloader.obtain_groupid(group_url) if g[0]: search += ( "group:" + self.ui.group_url.get_text().replace("http://", "").replace("https://", "") + ";" ) search += "group_id:" + g[2] else: self.error = self.error + "\n" + g[1] if not len(self.error) and len(search) > 0: self.show_spinner() if FlickrDownloader.count_search_results(search) <= 0: self.error = _("No images found") def _stop_ui(): self.ui.buttonbox.set_sensitive(True) self.ui.spinner.stop() self.ui.spinner.set_visible(False) self.ui.message.set_visible(False) if len(self.error) > 0: self.ui.error.set_label(self.error) for entry in (self.ui.text, self.ui.tags, self.ui.user_url, self.ui.group_url): if entry.get_text().strip(): entry.grab_focus() break else: if len(search): self.parent.on_add_dialog_okay( Options.SourceType.FLICKR, search, self.edited_row ) self.destroy() Util.add_mainloop_task(_stop_ui) def on_btn_cancel_clicked(self, widget, data=None): """The user has elected cancel changes. Called before the dialog returns Gtk.ResponseType.CANCEL for run() """ self.destroy() if __name__ == "__main__": dialog = AddFlickrDialog() dialog.show() Gtk.main() variety-0.8.3/variety/AttrDict.py000066400000000000000000000036561362063646600170060ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import json from collections import defaultdict class AttrDict(defaultdict): @staticmethod def converted(v): if isinstance(v, AttrDict): return v elif isinstance(v, dict): return AttrDict(v) elif isinstance(v, (list, tuple)): r = list(map(AttrDict.converted, v)) return tuple(r) if isinstance(v, tuple) else r else: return v def merge(self, arg): if hasattr(arg, "items"): self.merge(arg.items()) else: for k, v in arg: self[k] = AttrDict.converted(v) def asdict(self): return json.loads(json.dumps(self)) def __init__(self, *args, **kwargs): super(AttrDict, self).__init__(AttrDict) if len(args) == 1: self.merge(args[0]) elif len(args) > 1: raise TypeError( "AttrDict expected at most 1 argument that is a map, got %i" % len(args) ) self.merge(kwargs) def __setitem__(self, k, v): return super(AttrDict, self).__setitem__(k, AttrDict.converted(v)) __getattr__ = defaultdict.__getitem__ __setattr__ = __setitem__ variety-0.8.3/variety/CalibrateDominantColors.py000066400000000000000000000017241362063646600220240ustar00rootroot00000000000000import os import sys from .DominantColors import DominantColors dir = sys.argv[1] m = {} for f in sorted(os.listdir(dir)): if f.lower().endswith(".jpg") or f.lower().endswith(".jpg"): try: d = DominantColors(os.path.join(dir, f)) calc = d.get_dominant_colors() print(f, "light:", calc[2]) continue for fuzzy in range(20): if DominantColors.contains_color(calc, (255, 217, 100), fuzzy): m[f] = fuzzy print(f, fuzzy) break else: m[f] = -1 print(f, "no match") except Exception: print("oops for " + f) raise # pass # print "\n----results----" # for fuzzy in xrange(10): # print fuzzy # for k, v in m.items(): # if v == fuzzy: # print k # # print "no match:" # for k, v in m.items(): # if v == -1: # print k variety-0.8.3/variety/DominantColors.py000066400000000000000000000117331362063646600202160ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import sys from PIL import Image, ImageFilter class DominantColors: def __init__(self, image_name, only_size_needed=True): self.imageName = image_name self.original = Image.open(image_name) if not only_size_needed: self.resized = self.original.resize((50, 50)) # self.resized = self.resized.filter(ImageFilter.BLUR) # load image data self.img_data = self.resized.load() def get_width(self): return self.original.size[0] def get_height(self): return self.original.size[1] def get_lightness(self): count = 0 pixel_sum = 0 for x in range(0, self.resized.size[0]): for y in range(0, self.resized.size[1]): count += 1 pixel = self.img_data[x, y] if not tuple == type(pixel): pixel_sum += pixel else: pixel_sum += sum(pixel) / 3 return pixel_sum // count def get_dominant_colors(self): colors = [ (0, 0, 0), (128, 128, 128), (192, 192, 192), (255, 255, 255), (128, 0, 0), (255, 0, 0), (128, 128, 0), (255, 255, 0), (0, 128, 0), (0, 255, 0), (0, 128, 128), (0, 255, 255), (0, 0, 128), (0, 0, 255), (128, 0, 128), (255, 0, 255), ] total = 0 pixel_sum = 0 iterations = 1 for counter in range( iterations ): # perform only X iterations of clustering, that should be enough sums = {} counts = {} for c in colors: sums[c] = [0, 0, 0] counts[c] = 0 total = 0 pixel_sum = 0 for x in range(0, self.resized.size[0], 2): for y in range(0, self.resized.size[1], 2): total += 4 pixel = self.img_data[x, y] if not tuple == type(pixel): pixel = (pixel, pixel, pixel) pixel_sum += sum(pixel) / 3 color1 = min((DominantColors.diff(c, pixel), c) for c in colors)[1] if len(colors) > 1: color2 = min( (DominantColors.diff(c, pixel), c) for c in colors if c != color1 )[1] else: color2 = color1 for i in [0, 1, 2]: sums[color1][i] += 3 * pixel[i] sums[color2][i] += 1 * pixel[i] counts[color1] += 3 counts[color2] += 1 colors = [c for c in colors if counts[c] > 0] if counter == iterations - 1: colors = [ ( counts[c], (sums[c][0] // counts[c], sums[c][1] // counts[c], sums[c][2] // counts[c]), ) for c in colors ] else: colors = [ (sums[c][0] // counts[c], sums[c][1] // counts[c], sums[c][2] // counts[c]) for c in colors ] s = sorted(colors, key=lambda x: x[0], reverse=True) return total, s, pixel_sum * 4 // total, self.get_width(), self.get_height() @staticmethod def contains_color(dominant_colors, color, fuzziness): total, colors, _, _, _ = dominant_colors # colors = [x for x in colors if x[0] > total / (40 + fuzziness * 40)] for position, c in enumerate(colors[:3]): if ( DominantColors.diff(c[1], color) < 1000 + (fuzziness * 1000) + max(0, 5 - position) * 300 ): return True return False @staticmethod def close_colors(c1, c2, fuzziness): return DominantColors.diff(c1, c2) < 2000 + (fuzziness * 1000) @staticmethod def diff(c1, c2): return sum((c1[i] - c2[i]) ** 2 for i in [0, 1, 2]) if __name__ == "__main__": pc = DominantColors(sys.argv[1]) print(pc.get_dominant_colors()) variety-0.8.3/variety/EditFavoriteOperationsDialog.py000066400000000000000000000050241362063646600230300ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE from gi.repository import Gtk # pylint: disable=E0611 from variety_lib.helpers import get_builder class EditFavoriteOperationsDialog(Gtk.Dialog): __gtype_name__ = "EditFavoriteOperationsDialog" def __new__(cls): """Special static method that's automatically called by Python when constructing a new instance of this class. Returns a fully instantiated EditFavoriteOperationsDialog object. """ builder = get_builder("EditFavoriteOperationsDialog") new_object = builder.get_object("edit_favorite_operations_dialog") new_object.finish_initializing(builder) return new_object def finish_initializing(self, builder): """Called when we're finished initializing. finish_initalizing should be called after parsing the ui definition and creating a EditFavoriteOperationsDialog object with it in order to finish initializing the start of the new EditFavoriteOperationsDialog instance. """ # Get a reference to the builder and set up the signals. self.builder = builder self.ui = builder.get_ui(self) def on_btn_ok_clicked(self, widget, data=None): """The user has elected to save the changes. Called before the dialog returns Gtk.ResponseType.OK from run(). """ pass def on_btn_cancel_clicked(self, widget, data=None): """The user has elected cancel changes. Called before the dialog returns Gtk.ResponseType.CANCEL for run() """ pass def on_reset_clicked(self, widget): self.ui.textbuffer.set_text("Downloaded:Copy\nFetched:Move\nOthers:Copy") return True if __name__ == "__main__": dialog = EditFavoriteOperationsDialog() dialog.show() Gtk.main() variety-0.8.3/variety/FlickrDownloader.py000066400000000000000000000250121362063646600205070ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random import urllib.parse from variety.plugins.downloaders.DefaultDownloader import DefaultDownloader from variety.plugins.downloaders.ImageSource import ImageSource, Throttling from variety.Util import Util logger = logging.getLogger("variety") random.seed() API_KEY = "0553a848c09bcfd21d3a984d9408c04e" class FlickrDownloader(ImageSource, DefaultDownloader): def __init__(self, parent, location): ImageSource.__init__(self) DefaultDownloader.__init__(self, source=self, config=location) self.set_variety(parent) self.parse_location() @classmethod def get_info(cls): raise Exception("Not yet implemented as a plugin") def get_description(self): return _("Images from Flickr") def get_source_name(self): return "Flickr" def get_source_type(self): return "flickr" def get_default_throttling(self): return Throttling(max_downloads_per_hour=120, max_queue_fills_per_hour=20) def parse_location(self): s = self.config.split(";") self.params = {} for x in s: if len(x) and x.find(":") > 0: k, v = x.split(":") if k.lower() in ["text", "tags", "user_id", "group_id"]: self.params[k.lower()] = v.replace(" ", "+") # slight validation: for k in ["text", "tags", "user_id", "group_id"]: if k in self.params and len(self.params[k]) > 0: return raise Exception("Missing at least one of text, tags, user_id and group_id") @staticmethod def fetch(call): logger.info(lambda: "Making flickr API call: " + call) return Util.fetch_json(call) @staticmethod def obtain_userid(url): try: logger.info(lambda: "Fetching flickr user_id from URL: " + url) call = ( "https://api.flickr.com/services/rest/?method=flickr.urls.lookupUser&api_key=%s&url=%s&format=json&nojsoncallback=1" % (API_KEY, urllib.parse.quote_plus(url)) ) resp = FlickrDownloader.fetch(call) if resp["stat"] == "ok": logger.info(lambda: "Found " + resp["user"]["id"]) return True, "ok", resp["user"]["id"] else: logger.info(lambda: "Oops " + resp["message"]) return False, resp["message"], None except Exception as e: logger.exception(lambda: "Exception while checking Flickr user") return (False, "Exception while checking user. Please run with -v and check log.", None) @staticmethod def obtain_groupid(url): try: logger.info(lambda: "Fetching flickr group_id from URL: " + url) call = ( "https://api.flickr.com/services/rest/?method=flickr.urls.lookupGroup&api_key=%s&url=%s&format=json&nojsoncallback=1" % (API_KEY, urllib.parse.quote_plus(url)) ) resp = FlickrDownloader.fetch(call) if resp["stat"] == "ok": logger.info(lambda: "Found " + resp["group"]["id"]) return True, "ok", resp["group"]["id"] else: logger.info(lambda: "Oops " + resp["message"]) return False, resp["message"], None except Exception as e: logger.exception(lambda: "Exception while checking Flickr group") return ( False, "Exception while checking group. Please run with -v and check log.", None, ) @staticmethod def count_search_results(search): try: dl = FlickrDownloader(None, search) return dl.count_results() except Exception: logger.exception(lambda: "Exception while counting Flickr results") return 0 def count_results(self): call = ( "https://api.flickr.com/services/rest/?method=flickr.photos.search" "&api_key=%s&per_page=20&tag_mode=all&format=json&nojsoncallback=1" % API_KEY ) for k, v in self.params.items(): call = call + "&" + k + "=" + v resp = FlickrDownloader.fetch(call) if resp["stat"] != "ok": raise Exception("Flickr returned error message: " + resp["message"]) return int(resp["photos"]["total"]) def fill_queue(self): queue = [] call = ( "https://api.flickr.com/services/rest/?method=flickr.photos.search" "&api_key=%s&per_page=500&tag_mode=all&format=json&nojsoncallback=1" % API_KEY ) for k, v in self.params.items(): call = call + "&" + k + "=" + v resp = FlickrDownloader.fetch(call) if resp["stat"] != "ok": raise Exception("Flickr returned error message: " + resp["message"]) pages = int(resp["photos"]["pages"]) if pages < 1: return page = random.randint(1, pages) logger.info(lambda: "%d pages in the search results, using page %d" % (pages, page)) call = ( call + "&extras=owner_name,description,tags,o_dims,url_o,url_k,url_h,url_l&page=" + str(page) ) resp = FlickrDownloader.fetch(call) if resp["stat"] != "ok": raise Exception("Flickr returned error message: " + resp["message"]) used = set(x[0] for x in queue) size_suffixes = ["o", "k", "h", "l"] for s in size_suffixes: self.process_photos_in_response(queue, resp, s, used) if len(queue) > 20: break random.shuffle(queue) if len(queue) >= 20: queue = queue[: len(queue) // 2] # only use randomly half the images from the page - # if we ever hit that same page again, we'll still have what to download return queue def process_photos_in_response(self, queue, resp, size_suffix, used): logger.info( lambda: "Queue size is %d, populating with images for size suffix %s" % (len(queue), size_suffix) ) for ph in resp["photos"]["photo"]: try: photo_url = "https://www.flickr.com/photos/%s/%s" % (ph["owner"], ph["id"]) logger.debug(lambda: "Checking photo_url " + photo_url) if self.is_in_banned(photo_url): logger.debug(lambda: "In banned, skipping") continue if photo_url in used: logger.debug(lambda: "Already added or checked, skipping") continue if "url_" + size_suffix in ph: width = int(ph["width_" + size_suffix]) height = int(ph["height_" + size_suffix]) image_file_url = ph["url_" + size_suffix] logger.debug(lambda: "Image url: " + image_file_url) else: logger.debug(lambda: "Missing size " + size_suffix) continue # add to used now - if one of the checks below fails, we don't want the lower resolutions either used.add(photo_url) if self.is_in_downloaded(image_file_url): logger.debug(lambda: "Already in downloaded") continue if self.is_in_favorites(image_file_url): logger.debug(lambda: "Already in favorites") continue if self.is_size_inadequate(width, height): logger.debug(lambda: "Small or non-landscape size/resolution") continue try: extra_metadata = { "author": ph["ownername"], "authorURL": "https://www.flickr.com/photos/%s" % ph["owner"], "headline": ph["title"], "keywords": ph["tags"].split(" ")[ :200 ], # Flickr metadata can be excessive and hit Exif limits "description": ph["description"]["_content"][:10000], } except: extra_metadata = {} logger.debug(lambda: "Appending to queue %s, %s" % (photo_url, image_file_url)) queue.append((photo_url, image_file_url, extra_metadata)) except Exception: logger.exception(lambda: "Error parsing single flickr photo info:") @staticmethod def get_photo_id(origin_url): if origin_url[-1] == "/": origin_url = origin_url[:-1] return origin_url.split("/")[-1] @staticmethod def get_image_url(origin_url): photo_id = FlickrDownloader.get_photo_id(origin_url) call = ( "https://api.flickr.com/services/rest/?method=flickr.photos.getSizes&api_key=%s&photo_id=%s&format=json&nojsoncallback=1" % (API_KEY, photo_id) ) resp = Util.fetch_json(call) s = max(resp["sizes"]["size"], key=lambda size: int(size["width"])) return s["source"] @staticmethod def get_extra_metadata(origin_url): photo_id = FlickrDownloader.get_photo_id(origin_url) call = ( "https://api.flickr.com/services/rest/?method=flickr.photos.getInfo&api_key=%s&photo_id=%s&format=json&nojsoncallback=1" % (API_KEY, photo_id) ) resp = Util.fetch_json(call) ph = resp["photo"] extra_meta = { "headline": ph["title"]["_content"], "description": ph["description"]["_content"], "author": ph["owner"]["realname"], "authorURL": "https://www.flickr.com/photos/%s" % ph["owner"]["nsid"], "keywords": [x["_content"] for x in ph["tags"]["tag"]], } return extra_meta variety-0.8.3/variety/FolderChooser.py000066400000000000000000000064661362063646600200300ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import os.path from gi.repository import Gtk from variety.Util import Util, _ logger = logging.getLogger("variety") class FolderChooser: def __init__(self, button, on_change=None): self.button = button self.on_change = on_change self.folder = None self.chooser = None self.box = Gtk.Box(Gtk.Orientation.HORIZONTAL) self.label = Gtk.Label() self.image = Gtk.Image() self.image.set_margin_left(2) self.image.set_margin_right(5) self.image.set_from_icon_name("folder", Gtk.IconSize.MENU) self.box.add(self.image) self.box.add(self.label) self.box.set_margin_right(2) if self.button.get_child(): self.button.get_child().destroy() self.button.add(self.box) self.button.show_all() self.button.connect("clicked", self.browse) def destroy(self): if self.chooser: self.chooser.destroy() def get_folder(self): return self.folder def set_folder(self, folder): self.folder = os.path.normpath(folder) self.image.set_from_icon_name(Util.get_file_icon_name(self.folder), Gtk.IconSize.MENU) self.label.set_text(Util.collapseuser(self.folder)) self.button.set_tooltip_text(self.folder) def set_sensitive(self, sensitive): self.button.set_sensitive(sensitive) def browse(self, widget=None): try: self.chooser = Gtk.FileChooserDialog( _("Choose a folder"), parent=self.button.get_toplevel(), action=Gtk.FileChooserAction.SELECT_FOLDER, buttons=[_("Cancel"), Gtk.ResponseType.CANCEL, _("OK"), Gtk.ResponseType.OK], ) self.chooser.set_filename(self.folder) self.chooser.set_select_multiple(False) self.chooser.set_local_only(False) if self.chooser.run() == Gtk.ResponseType.OK: self.set_folder(self.chooser.get_filename()) try: if self.on_change: self.on_change() except Exception: logger.exception(lambda: "Exception during FolderChooser on_change:") finally: if self.chooser: try: self.chooser.destroy() self.chooser = None except Exception: logger.exception(lambda: "Exception during FolderChooser destroying:") variety-0.8.3/variety/ImageFetcher.py000066400000000000000000000146011362063646600176030ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import os import urllib.parse from PIL import Image from requests.exceptions import HTTPError from variety.Util import Util, _ logger = logging.getLogger("variety") class ImageFetcher: @staticmethod def url_ok(url, use_whitelist, hosts_whitelist): try: p = urllib.parse.urlparse(url) if p.scheme in ["http", "https"]: if use_whitelist: for host in hosts_whitelist: h = host.strip().lower() if h and p.netloc.lower().find(h) >= 0: return True else: return p.path.lower().endswith((".jpg", ".jpeg", ".png", ".tiff")) # skip gif - they are usually small images return False except Exception: return False @staticmethod def fetch( url, to_folder, origin_url=None, source_type=None, source_location=None, source_name=None, extra_metadata=None, progress_reporter=lambda a, b: None, verbose=True, ): reported = verbose try: logger.info(lambda: "Trying to fetch URL %s to %s " % (url, to_folder)) if verbose: progress_reporter(_("Fetching"), url) if url.startswith("javascript:"): if verbose: progress_reporter(_("Not an image"), url) return None if url.find("://") < 0: url = "file://" + url r = Util.request(url, stream=True) if not "content-type" in r.headers: logger.info(lambda: "Unknown content-type for url " + url) if verbose: progress_reporter(_("Not an image"), url) return None ct = r.headers["content-type"] if not ct.startswith("image/"): logger.info(lambda: "Unsupported content-type for url " + url + ": " + ct) if verbose: progress_reporter(_("Not an image"), url) return None local_name = Util.get_local_name(r.url) if "content-disposition" in r.headers: cd = r.headers["content-disposition"] cd_name = ImageFetcher.extract_filename_from_content_disposition(cd) if cd_name: local_name = cd_name filename = os.path.join(to_folder, local_name) if os.path.exists(filename): m = Util.read_metadata(filename) if m and m.get("imageURL") == url: logger.info(lambda: "Local file already exists (%s)" % filename) return filename else: logger.info( lambda: "File with same name already exists, but from different imageURL; renaming new download" ) filename = Util.find_unique_name(filename) logger.info(lambda: "Fetching to " + filename) if not reported: reported = True progress_reporter(_("Fetching"), url) local_filepath_partial = filename + ".partial" with open(local_filepath_partial, "wb") as f: Util.request_write_to(r, f) try: img = Image.open(local_filepath_partial) except Exception: progress_reporter(_("Not an image"), url) Util.safe_unlink(local_filepath_partial) return None if img.size[0] < 400 or img.size[1] < 400: # too small - delete and do not use progress_reporter(_("Image too small, ignoring it"), url) Util.safe_unlink(local_filepath_partial) return None metadata = { "sourceType": source_type or "fetched", "sourceName": source_name or "Fetched", "sourceURL": origin_url or url, "imageURL": url, } if source_location: metadata["sourceLocation"] = source_location metadata.update(extra_metadata or {}) Util.write_metadata(local_filepath_partial, metadata) os.rename(local_filepath_partial, filename) logger.info(lambda: "Fetched %s to %s." % (url, filename)) return filename except Exception as e: # pylint: disable=no-member logger.exception(lambda: "Fetch failed for URL " + url) if reported: if isinstance(e, HTTPError) and e.response.status_code in (403, 404): progress_reporter( _("Sorry, got %s error...") % str(e.response.status_code), _("This means the link is no longer valid"), ) else: progress_reporter( _("Fetch failed for some reason"), _( "To get more information, please run Variety from terminal with -v option and retry the action" ), ) return None @staticmethod def extract_filename_from_content_disposition(cd): parts = cd.split(";") for p in parts: p = p.strip() if p.startswith("filename="): name = p[p.find("=") + 1 :] if name[0] in ['"', "'"]: name = name[1:] if name[-1] in ['"', "'"]: name = name[:-1] return name return None variety-0.8.3/variety/Options.py000066400000000000000000000737451362063646600167310ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import hashlib import logging import os from configobj import ConfigObj, DuplicateError from variety.profile import get_profile_path from variety.Util import Util from variety_lib import varietyconfig logger = logging.getLogger("variety") TRUTH_VALUES = ["enabled", "1", "true", "on", "yes"] class Options: OUTDATED_HASHES = {"clock_filter": ["dca6bd2dfa2b8c4e2db8801e39208f7f"]} SIMPLE_DOWNLOADERS = [] # set by VarietyWindow at start IMAGE_SOURCES = [] # set by VarietyWindow at start CONFIGURABLE_IMAGE_SOURCES = [] # set by VarietyWindow at start CONFIGURABLE_IMAGE_SOURCES_MAP = {} # set by VarietyWindow at start class SourceType: # local files and folders IMAGE = "image" FOLDER = "folder" ALBUM_FILENAME = "album (by filename)" ALBUM_DATE = "album (by date)" # special local folders FAVORITES = "favorites" FETCHED = "fetched" # predefined configurable sources FLICKR = "flickr" BUILTIN_SOURCE_TYPES = { IMAGE, FOLDER, ALBUM_FILENAME, ALBUM_DATE, FAVORITES, FETCHED, FLICKR, } LOCAL_PATH_TYPES = {IMAGE, FOLDER, ALBUM_FILENAME, ALBUM_DATE} LOCAL_TYPES = {IMAGE, FOLDER, ALBUM_FILENAME, ALBUM_DATE, FAVORITES, FETCHED} DL_TYPES = {FLICKR} EDITABLE_DL_TYPES = {FLICKR} REMOVABLE_TYPES = {FOLDER, IMAGE, ALBUM_FILENAME, ALBUM_DATE} | EDITABLE_DL_TYPES class LightnessMode: DARK = 0 LIGHT = 1 def __init__(self): self.configfile = os.path.join(get_profile_path(), "variety.conf") def read(self): self.set_defaults() try: config = self.read_config() needs_writing = self.fix_outdated(config) try: self.change_enabled = config["change_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.change_on_start = config["change_on_start"].lower() in TRUTH_VALUES except Exception: pass try: self.change_interval = int(config["change_interval"]) if self.change_interval < 5: self.change_interval = 5 except Exception: pass try: self.safe_mode = config["safe_mode"].lower() in TRUTH_VALUES except Exception: pass try: self.download_folder = os.path.expanduser(config["download_folder"]) except Exception: pass try: self.download_preference_ratio = max( 0, min(1, float(config["download_preference_ratio"])) ) except Exception: pass try: self.quota_enabled = config["quota_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.quota_size = max(50, int(config["quota_size"])) except Exception: pass try: self.favorites_folder = os.path.expanduser(config["favorites_folder"]) except Exception: pass try: favorites_ops_text = config["favorites_operations"] self.favorites_operations = list( [x.strip().split(":") for x in favorites_ops_text.split(";") if x] ) except Exception: pass try: self.fetched_folder = os.path.expanduser(config["fetched_folder"]) except Exception: pass try: self.clipboard_enabled = config["clipboard_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.clipboard_use_whitelist = ( config["clipboard_use_whitelist"].lower() in TRUTH_VALUES ) except Exception: pass try: self.clipboard_hosts = config["clipboard_hosts"].lower().split(",") except Exception: pass try: icon = config["icon"] if icon in ["Light", "Dark", "Current", "1", "2", "3", "4", "None"] or ( os.access(icon, os.R_OK) and Util.is_image(icon) ): self.icon = icon except Exception: pass try: self.desired_color_enabled = config["desired_color_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.desired_color = list(map(int, config["desired_color"].split())) for i, x in enumerate(self.desired_color): self.desired_color[i] = max(0, min(255, x)) except Exception: self.desired_color = None try: self.min_size_enabled = config["min_size_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.min_size = int(config["min_size"]) self.min_size = max(0, min(100, self.min_size)) except Exception: pass try: self.use_landscape_enabled = config["use_landscape_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.lightness_enabled = config["lightness_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.lightness_mode = int(config["lightness_mode"]) self.lightness_mode = max(0, min(1, self.lightness_mode)) except Exception: pass try: self.min_rating_enabled = config["min_rating_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.min_rating = int(config["min_rating"]) self.min_rating = max(1, min(5, self.min_rating)) except Exception: pass try: self.smart_notice_shown = config["smart_notice_shown"].lower() in TRUTH_VALUES except Exception: pass try: self.smart_register_shown = config["smart_register_shown"].lower() in TRUTH_VALUES except Exception: pass try: self.stats_notice_shown = config["stats_notice_shown"].lower() in TRUTH_VALUES except Exception: pass try: self.smart_enabled = config["smart_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.sync_enabled = config["sync_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.stats_enabled = config["stats_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.copyto_enabled = config["copyto_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.copyto_folder = os.path.expanduser(config["copyto_folder"]) except Exception: pass try: self.clock_enabled = config["clock_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.clock_filter = config["clock_filter"].strip() except Exception: pass try: self.clock_font = config["clock_font"] except Exception: pass try: self.clock_date_font = config["clock_date_font"] except Exception: pass try: self.quotes_enabled = config["quotes_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.quotes_font = config["quotes_font"] except Exception: pass try: self.quotes_text_color = list(map(int, config["quotes_text_color"].split())) for i, x in enumerate(self.quotes_text_color): self.quotes_text_color[i] = max(0, min(255, x)) except Exception: pass try: self.quotes_bg_color = list(map(int, config["quotes_bg_color"].split())) for i, x in enumerate(self.quotes_bg_color): self.quotes_bg_color[i] = max(0, min(255, x)) except Exception: pass try: self.quotes_bg_opacity = int(float(config["quotes_bg_opacity"])) self.quotes_bg_opacity = max(0, min(100, self.quotes_bg_opacity)) except Exception: pass try: self.quotes_text_shadow = config["quotes_text_shadow"].lower() in TRUTH_VALUES except Exception: pass try: self.quotes_text_color = list(map(int, config["quotes_text_color"].split())) for i, x in enumerate(self.quotes_text_color): self.quotes_text_color[i] = max(0, min(255, x)) except Exception: pass try: self.quotes_disabled_sources = config["quotes_disabled_sources"].strip().split("|") except Exception: pass try: self.quotes_tags = config["quotes_tags"] except Exception: pass try: self.quotes_authors = config["quotes_authors"] except Exception: pass try: self.quotes_change_enabled = config["quotes_change_enabled"].lower() in TRUTH_VALUES except Exception: pass try: self.quotes_change_interval = int(config["quotes_change_interval"]) if self.quotes_change_interval < 10: self.quotes_change_interval = 10 except Exception: pass try: self.quotes_width = int(float(config["quotes_width"])) self.quotes_width = max(0, min(100, self.quotes_width)) except Exception: pass try: self.quotes_hpos = int(float(config["quotes_hpos"])) self.quotes_hpos = max(0, min(100, self.quotes_hpos)) except Exception: pass try: self.quotes_vpos = int(float(config["quotes_vpos"])) self.quotes_vpos = max(0, min(100, self.quotes_vpos)) except Exception: pass try: self.quotes_max_length = int(config["quotes_max_length"]) self.quotes_max_length = max(0, self.quotes_max_length) except Exception: pass try: self.quotes_favorites_file = os.path.expanduser(config["quotes_favorites_file"]) except Exception: pass try: self.slideshow_sources_enabled = ( config["slideshow_sources_enabled"].lower() in TRUTH_VALUES ) except Exception: pass try: self.slideshow_favorites_enabled = ( config["slideshow_favorites_enabled"].lower() in TRUTH_VALUES ) except Exception: pass try: self.slideshow_downloads_enabled = ( config["slideshow_downloads_enabled"].lower() in TRUTH_VALUES ) except Exception: pass try: self.slideshow_custom_enabled = ( config["slideshow_custom_enabled"].lower() in TRUTH_VALUES ) except Exception: pass try: custom_path = config["slideshow_custom_folder"] if custom_path in ("None", "Default") or not os.path.isdir(custom_path): self.slideshow_custom_folder = Util.get_xdg_pictures_folder() else: self.slideshow_custom_folder = custom_path except Exception: pass try: slideshow_sort_order = config["slideshow_sort_order"] if slideshow_sort_order in [ "Random", "Name, asc", "Name, desc", "Date, asc", "Date, desc", ]: self.slideshow_sort_order = slideshow_sort_order except Exception: pass try: self.slideshow_monitor = config["slideshow_monitor"] except Exception: pass try: slideshow_mode = config["slideshow_mode"] if slideshow_mode in ["Fullscreen", "Desktop", "Maximized", "Window"]: self.slideshow_mode = slideshow_mode except Exception: pass try: self.slideshow_seconds = float(config["slideshow_seconds"]) self.slideshow_seconds = max(0.5, self.slideshow_seconds) except Exception: pass try: self.slideshow_fade = float(config["slideshow_fade"]) self.slideshow_fade = max(0, min(1, self.slideshow_fade)) except Exception: pass try: self.slideshow_zoom = float(config["slideshow_zoom"]) self.slideshow_zoom = max(0, min(1, self.slideshow_zoom)) except Exception: pass try: self.slideshow_pan = float(config["slideshow_pan"]) self.slideshow_pan = max(0, min(0.20, self.slideshow_pan)) except Exception: pass self.sources = [] if "sources" in config: sources = config["sources"] for v in sources.values(): try: self.sources.append(Options.parse_source(v)) except Exception: logger.debug(lambda: "Cannot parse source: " + v, exc_info=True) logger.info("Ignoring no longer supported source %s", v) # automatically append sources for all simple downloaders we have source_types = set(s[1] for s in self.sources) for downloader in sorted(self.SIMPLE_DOWNLOADERS, key=lambda dl: dl.get_source_type()): if downloader.get_source_type() not in source_types: self.sources.append( [True, downloader.get_source_type(), downloader.get_description()] ) self.parse_autosources() if "filters" in config: self.filters = [] filters = config["filters"] for v in filters.values(): try: self.filters.append(Options.parse_filter(v)) except Exception: logger.exception(lambda: "Cannot parse filter: " + str(v)) self.parse_autofilters() if needs_writing: logger.info(lambda: "Some outdated settings were updated, writing the changes") self.write() except Exception: logger.exception(lambda: "Could not read configuration:") def fix_outdated(self, config): changed = False for key, outdated_hashes in Options.OUTDATED_HASHES.items(): if key in config: current_hash = hashlib.md5(config[key].encode()).hexdigest() if current_hash in outdated_hashes: # entry is outdated: delete it and use the default logger.warning( lambda: "Option " + key + " has an outdated value, using the new default" ) changed = True del config[key] return changed def parse_autosources(self): try: with open(varietyconfig.get_data_file("config", "sources.txt"), encoding="utf8") as f: for line in f: if not line.strip() or line.strip().startswith("#"): continue try: s = Options.parse_source(line.strip()) if s[1] in [src[1] for src in self.sources]: continue self.sources.append(s) except Exception: logger.exception(lambda: "Cannot parse source in sources.txt: " + line) except Exception: logger.exception(lambda: "Cannot open sources.txt") def parse_autofilters(self): try: with open(varietyconfig.get_data_file("config", "filters.txt"), encoding="utf8") as f: for line in f: if not line.strip() or line.strip().startswith("#"): continue try: s = Options.parse_filter(line.strip()) if not s[1].lower() in [f[1].lower() for f in self.filters]: self.filters.append(s) except Exception: logger.exception(lambda: "Cannot parse filter in filters.txt: " + line) except Exception: logger.exception(lambda: "Cannot open filters.txt") @staticmethod def parse_source(v): s = v.strip().split("|") enabled = s[0].lower() in TRUTH_VALUES return [enabled, s[1], s[2]] @staticmethod def parse_filter(v): s = v.strip().split("|") enabled = s[0].lower() in TRUTH_VALUES return [enabled, s[1], s[2]] @staticmethod def get_all_supported_source_types(): return Options.SourceType.BUILTIN_SOURCE_TYPES | Options.get_plugin_source_types() @staticmethod def get_downloader_source_types(): return Options.SourceType.DL_TYPES | Options.get_plugin_source_types() @staticmethod def get_editable_source_types(): return Options.SourceType.EDITABLE_DL_TYPES | Options.get_configurable_plugin_source_types() @staticmethod def get_removable_source_types(): return Options.SourceType.REMOVABLE_TYPES | Options.get_editable_source_types() @staticmethod def get_plugin_source_types(): return set(dl.get_source_type() for dl in Options.IMAGE_SOURCES) @staticmethod def get_configurable_plugin_source_types(): return set(dl.get_source_type() for dl in Options.CONFIGURABLE_IMAGE_SOURCES) def set_defaults(self): self.change_enabled = True self.change_on_start = False self.change_interval = 300 self.safe_mode = False self.download_folder = os.path.join(get_profile_path(), "Downloaded") self.download_preference_ratio = 0.9 self.quota_enabled = True self.quota_size = 1000 self.favorites_folder = os.path.join(get_profile_path(), "Favorites") self.favorites_operations = [ ["Downloaded", "Copy"], ["Fetched", "Move"], ["Others", "Copy"], ] self.fetched_folder = os.path.join(get_profile_path(), "Fetched") self.clipboard_enabled = False self.clipboard_use_whitelist = True self.clipboard_hosts = "wallhaven.cc,ns223506.ovh.net,wallpapers.net,flickr.com,imgur.com,deviantart.com,interfacelift.com,vladstudio.com".split( "," ) self.icon = "Light" self.desired_color_enabled = False self.desired_color = None self.min_size_enabled = False self.min_size = 80 self.use_landscape_enabled = True self.lightness_enabled = False self.lightness_mode = Options.LightnessMode.DARK self.min_rating_enabled = False self.min_rating = 4 self.smart_notice_shown = False self.smart_register_shown = False self.stats_notice_shown = False self.smart_enabled = False self.sync_enabled = False self.stats_enabled = False self.copyto_enabled = False self.copyto_folder = "Default" self.clock_enabled = False self.clock_font = "Ubuntu Condensed, 70" self.clock_date_font = "Ubuntu Condensed, 30" self.clock_filter = "-density 100 -font `fc-match -f '%{file[0]}' '%CLOCK_FONT_NAME'` -pointsize %CLOCK_FONT_SIZE -gravity SouthEast -fill '#00000044' -annotate 0x0+[%HOFFSET+58]+[%VOFFSET+108] '%H:%M' -fill white -annotate 0x0+[%HOFFSET+60]+[%VOFFSET+110] '%H:%M' -font `fc-match -f '%{file[0]}' '%DATE_FONT_NAME'` -pointsize %DATE_FONT_SIZE -fill '#00000044' -annotate 0x0+[%HOFFSET+58]+[%VOFFSET+58] '%A, %B %d' -fill white -annotate 0x0+[%HOFFSET+60]+[%VOFFSET+60] '%A, %B %d'" self.quotes_enabled = False self.quotes_font = "Bitstream Charter 30" self.quotes_text_color = (255, 255, 255) self.quotes_bg_color = (80, 80, 80) self.quotes_bg_opacity = 55 self.quotes_text_shadow = False self.quotes_disabled_sources = [] self.quotes_tags = "" self.quotes_authors = "" self.quotes_change_enabled = False self.quotes_change_interval = 300 self.quotes_width = 70 self.quotes_hpos = 100 self.quotes_vpos = 40 self.quotes_max_length = 250 self.quotes_favorites_file = os.path.join(get_profile_path(), "favorite_quotes.txt") self.slideshow_sources_enabled = True self.slideshow_favorites_enabled = True self.slideshow_downloads_enabled = False self.slideshow_custom_enabled = False self.slideshow_custom_folder = Util.get_xdg_pictures_folder() self.slideshow_sort_order = "Random" self.slideshow_monitor = "All" self.slideshow_mode = "Fullscreen" self.slideshow_seconds = 6 self.slideshow_fade = 0.4 self.slideshow_zoom = 0.2 self.slideshow_pan = 0.05 self.sources = [ [True, Options.SourceType.FAVORITES, "The Favorites folder"], [True, Options.SourceType.FETCHED, "The Fetched folder"], [True, Options.SourceType.FOLDER, "/usr/share/backgrounds/"], [ True, Options.SourceType.FLICKR, "user:www.flickr.com/photos/peter-levi/;user_id:93647178@N00;", ], ] self.filters = [ [False, "Keep original", ""], [False, "Grayscale", "-type Grayscale"], [False, "Heavy blur", "-blur 120x40"], [False, "Oil painting", "-paint 6"], [False, "Charcoal painting", "-charcoal 3"], [False, "Pointilism", "-spread 10 -noise 3"], [False, "Pixellate", "-scale 3% -scale 3333%"], ] def write(self): try: config = ConfigObj(self.configfile, encoding="utf8", default_encoding="utf8") except Exception: config = ConfigObj(encoding="utf8", default_encoding="utf8") config.filename = self.configfile try: config["change_enabled"] = str(self.change_enabled) config["change_on_start"] = str(self.change_on_start) config["change_interval"] = str(self.change_interval) config["safe_mode"] = str(self.safe_mode) config["download_folder"] = Util.collapseuser(self.download_folder) config["download_preference_ratio"] = str(self.download_preference_ratio) config["quota_enabled"] = str(self.quota_enabled) config["quota_size"] = str(self.quota_size) config["favorites_folder"] = Util.collapseuser(self.favorites_folder) config["favorites_operations"] = ";".join( ":".join(x) for x in self.favorites_operations ) config["fetched_folder"] = Util.collapseuser(self.fetched_folder) config["clipboard_enabled"] = str(self.clipboard_enabled) config["clipboard_use_whitelist"] = str(self.clipboard_use_whitelist) config["clipboard_hosts"] = ",".join(self.clipboard_hosts) config["icon"] = self.icon config["desired_color_enabled"] = str(self.desired_color_enabled) config["desired_color"] = ( " ".join(map(str, self.desired_color)) if self.desired_color else "None" ) config["min_size_enabled"] = str(self.min_size_enabled) config["min_size"] = str(self.min_size) config["use_landscape_enabled"] = str(self.use_landscape_enabled) config["lightness_enabled"] = str(self.lightness_enabled) config["lightness_mode"] = str(self.lightness_mode) config["min_rating_enabled"] = str(self.min_rating_enabled) config["min_rating"] = str(self.min_rating) config["smart_notice_shown"] = str(self.smart_notice_shown) config["smart_register_shown"] = str(self.smart_register_shown) config["stats_notice_shown"] = str(self.stats_notice_shown) config["smart_enabled"] = str(self.smart_enabled) config["sync_enabled"] = str(self.sync_enabled) config["stats_enabled"] = str(self.stats_enabled) config["copyto_enabled"] = str(self.copyto_enabled) config["copyto_folder"] = Util.collapseuser(self.copyto_folder) config["clock_enabled"] = str(self.clock_enabled) config["clock_filter"] = self.clock_filter config["clock_font"] = self.clock_font config["clock_date_font"] = self.clock_date_font config["quotes_enabled"] = str(self.quotes_enabled) config["quotes_font"] = self.quotes_font config["quotes_text_color"] = " ".join(map(str, self.quotes_text_color)) config["quotes_bg_color"] = " ".join(map(str, self.quotes_bg_color)) config["quotes_bg_opacity"] = str(self.quotes_bg_opacity) config["quotes_text_shadow"] = str(self.quotes_text_shadow) config["quotes_disabled_sources"] = "|".join(self.quotes_disabled_sources) config["quotes_tags"] = self.quotes_tags config["quotes_authors"] = self.quotes_authors config["quotes_change_enabled"] = str(self.quotes_change_enabled) config["quotes_change_interval"] = str(self.quotes_change_interval) config["quotes_width"] = str(self.quotes_width) config["quotes_hpos"] = str(self.quotes_hpos) config["quotes_vpos"] = str(self.quotes_vpos) config["quotes_max_length"] = str(self.quotes_max_length) config["quotes_favorites_file"] = Util.collapseuser(self.quotes_favorites_file) config["slideshow_sources_enabled"] = str(self.slideshow_sources_enabled) config["slideshow_favorites_enabled"] = str(self.slideshow_favorites_enabled) config["slideshow_downloads_enabled"] = str(self.slideshow_downloads_enabled) config["slideshow_custom_enabled"] = str(self.slideshow_custom_enabled) config["slideshow_custom_folder"] = Util.collapseuser(self.slideshow_custom_folder) config["slideshow_sort_order"] = self.slideshow_sort_order config["slideshow_monitor"] = self.slideshow_monitor config["slideshow_mode"] = self.slideshow_mode config["slideshow_seconds"] = str(self.slideshow_seconds) config["slideshow_fade"] = str(self.slideshow_fade) config["slideshow_zoom"] = str(self.slideshow_zoom) config["slideshow_pan"] = str(self.slideshow_pan) config["sources"] = {} for i, s in enumerate(self.sources): config["sources"]["src" + str(i + 1)] = str(s[0]) + "|" + str(s[1]) + "|" + s[2] config["filters"] = {} for i, f in enumerate(self.filters): config["filters"]["filter" + str(i + 1)] = str(f[0]) + "|" + f[1] + "|" + f[2] config.write() except Exception: logger.exception(lambda: "Could not write configuration:") @staticmethod def set_options(opts): config = Options().read_config() for key, value in opts: config[key] = value config.write() def read_config(self): config = ConfigObj(raise_errors=False, encoding="utf8", default_encoding="utf8") config.filename = self.configfile try: config.reload() except DuplicateError: logger.warning(lambda: "Duplicate keys in config file, please fix this") return config if __name__ == "__main__": formatter = logging.Formatter("%(levelname)s:%(name)s: %(funcName)s() '%(message)s'") logger = logging.getLogger("variety") logger_sh = logging.StreamHandler() logger_sh.setFormatter(formatter) logger.addHandler(logger_sh) o = Options() o.read() print(o.sources) print(o.filters) o.write() variety-0.8.3/variety/PreferencesVarietyDialog.py000066400000000000000000001512251362063646600222110ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE # This is the preferences dialog. import logging import os import random import stat import subprocess import threading from gi.repository import Gdk, GdkPixbuf, GObject, Gtk # pylint: disable=E0611 from variety import Texts from variety.AddConfigurableDialog import AddConfigurableDialog from variety.AddFlickrDialog import AddFlickrDialog from variety.EditFavoriteOperationsDialog import EditFavoriteOperationsDialog from variety.FolderChooser import FolderChooser from variety.Options import Options from variety.plugins.IQuoteSource import IQuoteSource from variety.profile import ( get_autostart_file_path, get_profile_path, get_profile_short_name, get_profile_wm_class, is_default_profile, ) from variety.Util import Util, _, on_gtk from variety_lib import varietyconfig from variety_lib.PreferencesDialog import PreferencesDialog from variety_lib.varietyconfig import get_data_file random.seed() logger = logging.getLogger("variety") class PreferencesVarietyDialog(PreferencesDialog): __gtype_name__ = "PreferencesVarietyDialog" def finish_initializing(self, builder, parent): # pylint: disable=E1002 """Set up the preferences dialog""" super(PreferencesVarietyDialog, self).finish_initializing(builder, parent) # Bind each preference widget to gsettings # widget = self.builder.get_object('example_entry') # settings.bind("example", widget, "text", Gio.SettingsBindFlags.DEFAULT) if Gdk.Screen.get_default().get_height() < 750: self.ui.sources_scrolled_window.set_size_request(0, 0) self.ui.hosts_scrolled_window.set_size_request(0, 0) self.ui.tips_scrolled_window.set_size_request(0, 0) PreferencesVarietyDialog.add_image_preview(self.ui.icon_chooser, 64) self.loading = False self.fav_chooser = FolderChooser( self.ui.favorites_folder_chooser, self.on_favorites_changed ) self.fetched_chooser = FolderChooser( self.ui.fetched_folder_chooser, self.on_fetched_changed ) self.copyto_chooser = FolderChooser(self.ui.copyto_folder_chooser, self.on_copyto_changed) self.slideshow_custom_chooser = FolderChooser( self.ui.slideshow_custom_chooser, self.delayed_apply ) if not Util.check_variety_slideshow_present(): self.ui.notebook.remove_page(2) profile_suffix = ( "" if is_default_profile() else _(" (Profile: {})").format(get_profile_short_name()) ) self.set_title(_("Variety Preferences") + profile_suffix) self.set_wmclass(get_profile_wm_class(), get_profile_wm_class()) self.reload() def fill_smart_profile_url(self, msg): if "%SMART_PROFILE_URL%" in msg: profile_url = self.parent.smart.get_profile_url() msg = msg.replace("%SMART_PROFILE_URL%", profile_url) if profile_url else "" return msg def update_status_message(self): msg = "" if self.parent.server_options: try: msg_dict = self.parent.server_options.get("status_message", {}) ver = varietyconfig.get_version() if ver in msg_dict: msg = msg_dict[ver].strip() elif "*" in msg_dict: msg = msg_dict["*"].strip() msg = self.fill_smart_profile_url(msg) except Exception: logger.exception(lambda: "Could not parse status message") msg = "" self.set_status_message(msg) @on_gtk def set_status_message(self, msg): self.ui.status_message.set_visible(msg) self.ui.status_message.set_markup(msg) def reload(self): try: logger.info(lambda: "Reloading preferences dialog") self.loading = True self.options = Options() self.options.read() self.ui.autostart.set_active(os.path.isfile(get_autostart_file_path())) self.ui.change_enabled.set_active(self.options.change_enabled) self.set_change_interval(self.options.change_interval) self.ui.change_on_start.set_active(self.options.change_on_start) self.fav_chooser.set_folder(os.path.expanduser(self.options.favorites_folder)) self.fetched_chooser.set_folder(os.path.expanduser(self.options.fetched_folder)) self.ui.clipboard_enabled.set_active(self.options.clipboard_enabled) self.ui.clipboard_use_whitelist.set_active(self.options.clipboard_use_whitelist) self.ui.clipboard_hosts.get_buffer().set_text("\n".join(self.options.clipboard_hosts)) if self.options.icon == "Light": self.ui.icon.set_active(0) elif self.options.icon == "Dark": self.ui.icon.set_active(1) elif self.options.icon == "1": self.ui.icon.set_active(2) elif self.options.icon == "2": self.ui.icon.set_active(3) elif self.options.icon == "3": self.ui.icon.set_active(4) elif self.options.icon == "4": self.ui.icon.set_active(5) elif self.options.icon == "Current": self.ui.icon.set_active(6) elif self.options.icon == "None": self.ui.icon.set_active(8) else: self.ui.icon.set_active(7) self.ui.icon_chooser.set_filename(self.options.icon) if self.options.favorites_operations == [["/", "Copy"]]: self.ui.favorites_operations.set_active(0) elif self.options.favorites_operations == [["/", "Move"]]: self.ui.favorites_operations.set_active(1) elif self.options.favorites_operations == [["/", "Both"]]: self.ui.favorites_operations.set_active(2) else: self.ui.favorites_operations.set_active(3) self.favorites_operations = self.options.favorites_operations self.ui.copyto_enabled.set_active(self.options.copyto_enabled) self.copyto_chooser.set_folder(self.parent.get_actual_copyto_folder()) self.ui.desired_color_enabled.set_active(self.options.desired_color_enabled) self.ui.desired_color.set_color( Gdk.Color(red=160 * 256, green=160 * 256, blue=160 * 256) ) c = self.options.desired_color if c: self.ui.desired_color.set_color( Gdk.Color(red=c[0] * 256, green=c[1] * 256, blue=c[2] * 256) ) self.ui.min_size_enabled.set_active(self.options.min_size_enabled) min_sizes = [50, 80, 100] index = 0 while min_sizes[index] < self.options.min_size and index < len(min_sizes) - 1: index += 1 self.ui.min_size.set_active(index) self.ui.landscape_enabled.set_active(self.options.use_landscape_enabled) self.ui.lightness_enabled.set_active(self.options.lightness_enabled) self.ui.lightness.set_active( 0 if self.options.lightness_mode == Options.LightnessMode.DARK else 1 ) self.ui.min_rating_enabled.set_active(self.options.min_rating_enabled) self.ui.min_rating.set_active(self.options.min_rating - 1) self.ui.clock_enabled.set_active(self.options.clock_enabled) self.ui.clock_font.set_font_name(self.options.clock_font) self.ui.clock_date_font.set_font_name(self.options.clock_date_font) self.ui.quotes_enabled.set_active(self.options.quotes_enabled) self.ui.quotes_font.set_font_name(self.options.quotes_font) c = self.options.quotes_text_color self.ui.quotes_text_color.set_color( Gdk.Color(red=c[0] * 256, green=c[1] * 256, blue=c[2] * 256) ) c = self.options.quotes_bg_color self.ui.quotes_bg_color.set_color( Gdk.Color(red=c[0] * 256, green=c[1] * 256, blue=c[2] * 256) ) self.ui.quotes_bg_opacity.set_value(self.options.quotes_bg_opacity) self.ui.quotes_text_shadow.set_active(self.options.quotes_text_shadow) self.ui.quotes_tags.set_text(self.options.quotes_tags) self.ui.quotes_authors.set_text(self.options.quotes_authors) self.ui.quotes_change_enabled.set_active(self.options.quotes_change_enabled) self.set_quotes_change_interval(self.options.quotes_change_interval) self.ui.quotes_width.set_value(self.options.quotes_width) self.ui.quotes_hpos.set_value(self.options.quotes_hpos) self.ui.quotes_vpos.set_value(self.options.quotes_vpos) self.ui.slideshow_sources_enabled.set_active(self.options.slideshow_sources_enabled) self.ui.slideshow_favorites_enabled.set_active(self.options.slideshow_favorites_enabled) self.ui.slideshow_downloads_enabled.set_active(self.options.slideshow_downloads_enabled) self.ui.slideshow_custom_enabled.set_active(self.options.slideshow_custom_enabled) self.slideshow_custom_chooser.set_folder( os.path.expanduser(self.options.slideshow_custom_folder) ) if self.options.slideshow_sort_order == "Random": self.ui.slideshow_sort_order.set_active(0) elif self.options.slideshow_sort_order == "Name, asc": self.ui.slideshow_sort_order.set_active(1) elif self.options.slideshow_sort_order == "Name, desc": self.ui.slideshow_sort_order.set_active(2) elif self.options.slideshow_sort_order == "Date, asc": self.ui.slideshow_sort_order.set_active(3) elif self.options.slideshow_sort_order == "Date, desc": self.ui.slideshow_sort_order.set_active(4) else: self.ui.slideshow_sort_order.set_active(0) self.ui.slideshow_monitor.remove_all() self.ui.slideshow_monitor.append_text(_("All")) screen = Gdk.Screen.get_default() for i in range(0, screen.get_n_monitors()): geo = screen.get_monitor_geometry(i) self.ui.slideshow_monitor.append_text( "%d - %s, %dx%d" % (i + 1, screen.get_monitor_plug_name(i), geo.width, geo.height) ) self.ui.slideshow_monitor.set_active(0) try: self.ui.slideshow_monitor.set_active(int(self.options.slideshow_monitor)) except: self.ui.slideshow_monitor.set_active(0) if self.options.slideshow_mode == "Fullscreen": self.ui.slideshow_mode.set_active(0) elif self.options.slideshow_mode == "Desktop": self.ui.slideshow_mode.set_active(1) elif self.options.slideshow_mode == "Maximized": self.ui.slideshow_mode.set_active(2) elif self.options.slideshow_mode == "Window": self.ui.slideshow_mode.set_active(3) else: self.ui.slideshow_mode.set_active(0) self.ui.slideshow_seconds.set_value(self.options.slideshow_seconds) self.ui.slideshow_fade.set_value(self.options.slideshow_fade) self.ui.slideshow_zoom.set_value(self.options.slideshow_zoom) self.ui.slideshow_pan.set_value(self.options.slideshow_pan) self.ui.sources.get_model().clear() for s in self.options.sources: self.ui.sources.get_model().append(self.source_to_model_row(s)) if not hasattr(self, "enabled_toggled_handler_id"): self.enabled_toggled_handler_id = self.ui.sources_enabled_checkbox_renderer.connect( "toggled", self.source_enabled_toggled, self.ui.sources.get_model() ) # self.ui.sources.get_selection().connect("changed", self.on_sources_selection_changed) if hasattr(self, "filter_checkboxes"): for cb in self.filter_checkboxes: # pylint: disable=access-member-before-definition self.ui.filters_grid.remove(cb) cb.destroy() self.filter_checkboxes = [] self.filter_name_to_checkbox = {} for i, f in enumerate(self.options.filters): cb = Gtk.CheckButton(Texts.FILTERS.get(f[1], f[1])) self.filter_name_to_checkbox[f[1]] = cb cb.connect("toggled", self.delayed_apply) cb.set_visible(True) cb.set_active(f[0]) cb.set_margin_right(20) self.ui.filters_grid.attach(cb, i % 4, i // 4, 1, 1) self.filter_checkboxes.append(cb) # pylint: disable=access-member-before-definition if hasattr(self, "quotes_sources_checkboxes"): for cb in self.quotes_sources_checkboxes: self.ui.quotes_sources_grid.remove(cb) cb.destroy() self.quotes_sources_checkboxes = [] for i, p in enumerate(self.parent.jumble.get_plugins(IQuoteSource)): cb = Gtk.CheckButton(p["info"]["name"]) cb.connect("toggled", self.delayed_apply) cb.set_visible(True) cb.set_tooltip_text(p["info"]["description"]) cb.set_active(p["info"]["name"] not in self.options.quotes_disabled_sources) cb.set_margin_right(20) self.ui.quotes_sources_grid.attach(cb, i % 4, i // 4, 1, 1) self.quotes_sources_checkboxes.append(cb) self.ui.tips_buffer.set_text( "\n\n".join( [ tip.replace("{PROFILE_PATH}", get_profile_path(expanded=False)) for tip in Texts.TIPS ] ) ) try: with open(get_data_file("ui/changes.txt")) as f: self.ui.changes_buffer.set_text(f.read()) except Exception: logger.warning(lambda: "Missing ui/changes.txt file") self.on_change_enabled_toggled() self.on_sources_selection_changed() self.on_desired_color_enabled_toggled() self.on_min_size_enabled_toggled() self.on_lightness_enabled_toggled() self.on_min_rating_enabled_toggled() self.on_copyto_enabled_toggled() self.on_quotes_change_enabled_toggled() self.on_icon_changed() self.on_favorites_operations_changed() self.update_clipboard_state() self.build_add_button_menu() self.update_status_message() finally: # To be sure we are completely loaded, pass via two hops: first delay, then idle_add: def _finish_loading(): self.loading = False def _idle_finish_loading(): Util.add_mainloop_task(_finish_loading) timer = threading.Timer(1, _idle_finish_loading) timer.start() def on_add_button_clicked(self, widget=None): def position(*args, **kwargs): button_alloc = self.ui.add_button.get_allocation() window_pos = self.ui.add_button.get_window().get_position() return ( button_alloc.x + window_pos[0], button_alloc.y + button_alloc.height + window_pos[1], True, ) self.add_menu.popup( None, self.ui.add_button, position, None, 0, Gtk.get_current_event_time() ) def on_remove_sources_clicked(self, widget=None): def position(*args, **kwargs): button_alloc = self.ui.remove_sources.get_allocation() window_pos = self.ui.remove_sources.get_window().get_position() return ( button_alloc.x + window_pos[0], button_alloc.y + button_alloc.height + window_pos[1], True, ) self.build_remove_button_menu().popup( None, self.ui.remove_sources, position, None, 0, Gtk.get_current_event_time() ) def build_add_button_menu(self): self.add_menu = Gtk.Menu() items = [ (_("Images"), _("Add individual wallpaper images"), self.on_add_images_clicked), ( _("Folders"), _("Searched recursively for up to 10000 images, shown in random order"), lambda widget: self.on_add_folders_clicked( widget, source_type=Options.SourceType.FOLDER ), ), ( _("Sequential Albums (order by filename)"), _("Searched recursively for images, shown in sequence (by filename)"), lambda widget: self.on_add_folders_clicked( widget, source_type=Options.SourceType.ALBUM_FILENAME ), ), ( _("Sequential Albums (order by date)"), _("Searched recursively for images, shown in sequence (by file date)"), lambda widget: self.on_add_folders_clicked( widget, source_type=Options.SourceType.ALBUM_DATE ), ), "-", (_("Flickr"), _("Fetch images from Flickr"), self.on_add_flickr_clicked), ] for source in sorted( self.options.CONFIGURABLE_IMAGE_SOURCES, key=lambda s: s.get_source_name() ): def _click(widget, source=source): self.on_add_configurable(source) items.append((source.get_source_name(), source.get_ui_short_description(), _click)) for x in items: if x == "-": item = Gtk.SeparatorMenuItem.new() item.set_margin_top(15) item.set_margin_bottom(15) else: item = Gtk.MenuItem() label = Gtk.Label("{}\n{}".format(x[0], x[1])) label.set_margin_top(6) label.set_margin_bottom(6) label.set_xalign(0) label.set_use_markup(True) item.add(label) item.connect("activate", x[2]) self.add_menu.append(item) self.add_menu.show_all() def build_remove_button_menu(self): model, rows = self.ui.sources.get_selection().get_selected_rows() has_downloaders = False for row in rows: type = model[row][1] if type in Options.get_editable_source_types(): has_downloaders = True self.remove_menu = Gtk.Menu() item1 = Gtk.MenuItem() item1.set_label( _("Remove the source, keep the files") if len(rows) == 1 else _("Remove the sources, keep the files") ) item1.connect("activate", self.remove_sources) self.remove_menu.append(item1) item2 = Gtk.MenuItem() def _remove_with_files(widget=None): self.remove_sources(delete_files=True) item2.set_label( _("Remove the source and delete the downloaded files") if len(rows) == 1 else _("Remove the sources and delete the downloaded files") ) item2.connect("activate", _remove_with_files) item2.set_sensitive(has_downloaders) self.remove_menu.append(item2) self.remove_menu.show_all() return self.remove_menu def source_enabled_toggled(self, widget, path, model): row = model[path] row[0] = not row[0] self.on_row_enabled_state_changed(row) def on_row_enabled_state_changed(self, row): # Special case when enabling refresher downloaders: refresher_dls = [ dl for dl in Options.SIMPLE_DOWNLOADERS # TODO: this will break if we have non-simple refresher downloaders if dl.get_source_type() == row[1] and dl.is_refresher() ] if row[0] and len(refresher_dls) > 0: refresh_time = refresher_dls[0].get_refresh_interval_seconds() updated = False if not self.ui.change_enabled.get_active(): self.ui.change_enabled.set_active(True) updated = True if self.get_change_interval() > refresh_time: self.set_change_interval(refresh_time) updated = True if updated: self.parent.show_notification( refresher_dls[0].get_description(), _( "Using this source requires wallpaper changing " "enabled at intervals of %d minutes or less. " "Settings were adjusted automatically." ) % int(refresh_time / 60), ) def set_time(self, interval, text, time_unit, times=(1, 60, 60 * 60, 24 * 60 * 60)): if interval < 5: interval = 5 x = len(times) - 1 while times[x] > interval: x -= 1 text.set_text(str(interval // times[x])) time_unit.set_active(x) return def set_change_interval(self, seconds): self.set_time(seconds, self.ui.change_interval_text, self.ui.change_interval_time_unit) def set_quotes_change_interval(self, seconds): self.set_time( seconds, self.ui.quotes_change_interval_text, self.ui.quotes_change_interval_time_unit ) def read_time(self, text_entry, time_unit_combo, minimum, default): result = default try: interval = int(text_entry.get_text()) tree_iter = time_unit_combo.get_active_iter() if tree_iter: model = time_unit_combo.get_model() time_unit_seconds = model[tree_iter][1] result = interval * time_unit_seconds if result < minimum: result = minimum except Exception: logger.exception(lambda: "Could not understand interval") return result def get_change_interval(self): return self.read_time( self.ui.change_interval_text, self.ui.change_interval_time_unit, 5, self.options.change_interval, ) def get_quotes_change_interval(self): return self.read_time( self.ui.quotes_change_interval_text, self.ui.quotes_change_interval_time_unit, 10, self.options.quotes_change_interval, ) @staticmethod def add_image_preview(chooser, size=250): preview = Gtk.Image() chooser.set_preview_widget(preview) def update_preview(c): try: file = chooser.get_preview_filename() pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(file, size, size) preview.set_from_pixbuf(pixbuf) chooser.set_preview_widget_active(True) except Exception: chooser.set_preview_widget_active(False) chooser.connect("update-preview", update_preview) def on_add_images_clicked(self, widget=None): chooser = Gtk.FileChooserDialog( _("Add Images"), parent=self, action=Gtk.FileChooserAction.OPEN, buttons=[_("Cancel"), Gtk.ResponseType.CANCEL, _("Add"), Gtk.ResponseType.OK], ) self.dialog = chooser PreferencesVarietyDialog.add_image_preview(chooser) chooser.set_select_multiple(True) chooser.set_local_only(True) filter = Gtk.FileFilter() filter.set_name(_("Images")) for s in ["jpg", "jpeg", "png", "bmp", "tiff", "svg"]: filter.add_pattern("*." + s) filter.add_pattern("*." + s.upper()) chooser.add_filter(filter) response = chooser.run() if response == Gtk.ResponseType.OK: images = list(chooser.get_filenames()) images = [f for f in images if Util.is_image(f) and os.path.isfile(f)] self.add_sources(Options.SourceType.IMAGE, images) self.dialog = None chooser.destroy() def on_add_folders_clicked(self, widget=None, source_type=Options.SourceType.FOLDER): if source_type == Options.SourceType.FOLDER: title = _( "Add Folders - Only add the root folders, subfolders are searched recursively" ) elif source_type == Options.SourceType.ALBUM_FILENAME: title = _( "Add Sequential Albums (ordered by filename). Subfolders are searched recursively." ) elif source_type == Options.SourceType.ALBUM_DATE: title = _( "Add Sequential Albums (ordered by date). Subfolders are searched recursively." ) else: raise Exception("Unsuppoted source_type {}".format(source_type)) chooser = Gtk.FileChooserDialog( title, parent=self, action=Gtk.FileChooserAction.SELECT_FOLDER, buttons=[_("Cancel"), Gtk.ResponseType.CANCEL, _("Add"), Gtk.ResponseType.OK], ) self.dialog = chooser chooser.set_select_multiple(True) chooser.set_local_only(True) response = chooser.run() if response == Gtk.ResponseType.OK: folders = list(chooser.get_filenames()) folders = [f for f in folders if os.path.isdir(f)] self.add_sources(source_type, folders) self.dialog = None chooser.destroy() def add_sources(self, type, locations): self.ui.sources.get_selection().unselect_all() existing = {} for i, r in enumerate(self.ui.sources.get_model()): if r[1] == type: if type in ( Options.SourceType.FOLDER, Options.SourceType.ALBUM_FILENAME, Options.SourceType.ALBUM_DATE, ): existing[os.path.normpath(r[2])] = r, i else: existing[self.model_row_to_source(r)[2]] = r, i newly_added = 0 for f in locations: if type in Options.SourceType.LOCAL_PATH_TYPES: f = os.path.normpath(f) elif type not in Options.get_editable_source_types(): f = ( list(existing.keys())[0] if existing else None ) # reuse the already existing location, do not add another one if not f in existing: self.ui.sources.get_model().append(self.source_to_model_row([True, type, f])) self.ui.sources.get_selection().select_path(len(self.ui.sources.get_model()) - 1) self.ui.sources.scroll_to_cell( len(self.ui.sources.get_model()) - 1, None, False, 0, 0 ) newly_added += 1 else: logger.info(lambda: "Source already exists, activating it: " + f) existing[f][0][0] = True self.ui.sources.get_selection().select_path(existing[f][1]) self.ui.sources.scroll_to_cell(existing[f][1], None, False, 0, 0) return newly_added def focus_source_and_image(self, source, image): self.ui.notebook.set_current_page(0) self.ui.sources.get_selection().unselect_all() for i, r in enumerate(self.ui.sources.get_model()): if self.model_row_to_source(r)[1:] == source[1:]: self.focused_image = image self.ui.sources.get_selection().select_path(i) self.ui.sources.scroll_to_cell(i, None, False, 0, 0) return def remove_sources(self, widget=None, delete_files=False): model, rows = self.ui.sources.get_selection().get_selected_rows() if delete_files: for row in rows: type = model[row][1] if type in Options.get_editable_source_types(): source = self.model_row_to_source(model[row]) self.parent.delete_files_of_source(source) # store the treeiters from paths iters = [] for row in rows: if model[row][1] in Options.get_removable_source_types(): iters.append(model.get_iter(row)) # remove the rows (treeiters) for i in iters: if i is not None: model.remove(i) def on_source_doubleclicked(self, tree_view, row_index, arg4=None): self.edit_source(self.ui.sources.get_model()[row_index]) def on_edit_source_clicked(self, widget=None): model, rows = self.ui.sources.get_selection().get_selected_rows() if len(rows) == 1: self.edit_source(model[rows[0]]) def on_open_folder_clicked(self, widget=None): model, rows = self.ui.sources.get_selection().get_selected_rows() if len(rows) != 1: return row = model[rows[0]] type = row[1] if type in Options.SourceType.LOCAL_PATH_TYPES: subprocess.Popen(["xdg-open", os.path.realpath(row[2])]) elif type == Options.SourceType.FAVORITES: subprocess.Popen(["xdg-open", self.parent.options.favorites_folder]) elif type == Options.SourceType.FETCHED: subprocess.Popen(["xdg-open", self.parent.options.fetched_folder]) else: subprocess.Popen( ["xdg-open", self.parent.get_folder_of_source(self.model_row_to_source(row))] ) def on_use_clicked(self, widget=None): model, rows = self.ui.sources.get_selection().get_selected_rows() for row in model: row[0] = False for path in rows: model[path][0] = True for row in model: # TODO we trigger for all rows, though some of them don't actually change state - but no problem for now self.on_row_enabled_state_changed(row) self.on_sources_selection_changed() def edit_source(self, edited_row): type = edited_row[1] if type in Options.get_editable_source_types(): if type == Options.SourceType.FLICKR: self.dialog = AddFlickrDialog() elif type in Options.CONFIGURABLE_IMAGE_SOURCES_MAP: self.dialog = AddConfigurableDialog() self.dialog.set_source(Options.CONFIGURABLE_IMAGE_SOURCES_MAP[type]) self.dialog.set_edited_row(edited_row) self.show_dialog(self.dialog) def on_sources_selection_changed(self, widget=None): model, rows = self.ui.sources.get_selection().get_selected_rows() enabled = set(i for i, row in enumerate(model) if row[0]) selected = set(row.get_indices()[0] for row in rows) self.ui.use_button.set_sensitive(selected and enabled != selected) # pylint: disable=access-member-before-definition if hasattr(self, "previous_selection") and rows == self.previous_selection: return self.previous_selection = rows self.ui.edit_source.set_sensitive(False) self.ui.edit_source.set_label(_("Edit...")) self.ui.open_folder.set_sensitive(len(rows) == 1) self.ui.open_folder.set_label(_("Open Folder")) if len(rows) == 1: source = model[rows[0]] type = source[1] if type == Options.SourceType.IMAGE: self.ui.open_folder.set_label(_("View Image")) elif type in Options.get_editable_source_types(): self.ui.edit_source.set_sensitive(True) def timer_func(): self.show_thumbs(list(model[row] for row in rows)) # pylint: disable=access-member-before-definition if hasattr(self, "show_timer") and self.show_timer: self.show_timer.cancel() self.show_timer = threading.Timer(0.3, timer_func) self.show_timer.start() for row in rows: if model[row][1] not in Options.get_removable_source_types(): self.ui.remove_sources.set_sensitive(False) return self.ui.remove_sources.set_sensitive(len(rows) > 0) def model_row_to_source(self, row): return [row[0], row[1], Texts.SOURCES[row[1]][0] if row[1] in Texts.SOURCES else row[2]] def source_to_model_row(self, s): srctype = s[1] return [s[0], srctype, s[2] if not srctype in Texts.SOURCES else Texts.SOURCES[srctype][1]] def show_thumbs(self, source_rows, pin=False, thumbs_type=None): try: if not source_rows: return self.parent.thumbs_manager.hide(force=True) images = [] folders = [] image_count = 0 for row in source_rows: if not row: continue type = row[1] if type == Options.SourceType.IMAGE: image_count += 1 images.append(row[2]) else: folder = self.parent.get_folder_of_source(self.model_row_to_source(row)) image_count += sum( 1 for f in Util.list_files( folders=(folder,), filter_func=Util.is_image, max_files=1, randomize=False, ) ) folders.append(folder) if image_count > -1: folder_images = list( Util.list_files(folders=folders, filter_func=Util.is_image, max_files=1000) ) if len(source_rows) == 1 and source_rows[0][1] == Options.SourceType.ALBUM_FILENAME: folder_images = sorted(folder_images) elif len(source_rows) == 1 and source_rows[0][1] == Options.SourceType.ALBUM_DATE: folder_images = sorted(folder_images, key=os.path.getmtime) else: random.shuffle(folder_images) to_show = images + folder_images if hasattr(self, "focused_image") and self.focused_image is not None: try: to_show.remove(self.focused_image) except Exception: pass to_show.insert(0, self.focused_image) self.focused_image = None self.parent.thumbs_manager.show( to_show, screen=self.get_screen(), folders=folders, type=thumbs_type ) if pin: self.parent.thumbs_manager.pin() if thumbs_type: self.parent.update_indicator(auto_changed=False) except Exception: logger.exception(lambda: "Could not create thumbs window:") def on_add_flickr_clicked(self, widget=None): self.show_dialog(AddFlickrDialog()) def on_add_configurable(self, source): dialog = AddConfigurableDialog() dialog.set_source(source) self.show_dialog(dialog) def show_dialog(self, dialog): self.dialog = dialog self.dialog.parent = self self.dialog.set_transient_for(self) response = self.dialog.run() if response != Gtk.ResponseType.OK: if self.dialog: self.dialog.destroy() self.dialog = None def on_add_dialog_okay(self, source_type, location, edited_row): if edited_row: edited_row[2] = location else: self.add_sources(source_type, [location]) self.dialog = None def close(self): self.ui.error_favorites.set_label("") self.ui.error_fetched.set_label("") self.hide() self.parent.trigger_download() self.on_destroy() def on_save_clicked(self, widget): self.delayed_apply() self.close() def delayed_apply(self, widget=None, *arg): if not self.loading: self.delayed_apply_with_interval(0.1) def delayed_apply_slow(self, widget=None, *arg): if not self.loading: self.delayed_apply_with_interval(1) def delayed_apply_with_interval(self, interval): # pylint: disable=access-member-before-definition if not self.loading: if hasattr(self, "apply_timer") and self.apply_timer: self.apply_timer.cancel() self.apply_timer = None self.apply_timer = threading.Timer(interval, self.apply) self.apply_timer.start() def apply(self): try: logger.info(lambda: "Applying preferences") self.options = Options() self.options.read() self.options.change_enabled = self.ui.change_enabled.get_active() self.options.change_on_start = self.ui.change_on_start.get_active() self.options.change_interval = self.get_change_interval() if os.access(self.fav_chooser.get_folder(), os.W_OK): self.options.favorites_folder = self.fav_chooser.get_folder() self.options.favorites_operations = self.favorites_operations self.options.sources = [] for r in self.ui.sources.get_model(): self.options.sources.append(self.model_row_to_source(r)) if os.access(self.fetched_chooser.get_folder(), os.W_OK): self.options.fetched_folder = self.fetched_chooser.get_folder() self.options.clipboard_enabled = self.ui.clipboard_enabled.get_active() self.options.clipboard_use_whitelist = self.ui.clipboard_use_whitelist.get_active() buf = self.ui.clipboard_hosts.get_buffer() self.options.clipboard_hosts = Util.split( buf.get_text(buf.get_start_iter(), buf.get_end_iter(), False) ) if self.ui.icon.get_active() == 0: self.options.icon = "Light" elif self.ui.icon.get_active() == 1: self.options.icon = "Dark" elif self.ui.icon.get_active() == 2: self.options.icon = "1" elif self.ui.icon.get_active() == 3: self.options.icon = "2" elif self.ui.icon.get_active() == 4: self.options.icon = "3" elif self.ui.icon.get_active() == 5: self.options.icon = "4" elif self.ui.icon.get_active() == 6: self.options.icon = "Current" elif self.ui.icon.get_active() == 8: self.options.icon = "None" elif self.ui.icon.get_active() == 7: file = self.ui.icon_chooser.get_filename() if file and os.access(file, os.R_OK): self.options.icon = file else: self.options.icon = "Light" if self.ui.favorites_operations.get_active() == 0: self.options.favorites_operations = [["/", "Copy"]] elif self.ui.favorites_operations.get_active() == 1: self.options.favorites_operations = [["/", "Move"]] elif self.ui.favorites_operations.get_active() == 2: self.options.favorites_operations = [["/", "Both"]] elif self.ui.favorites_operations.get_active() == 3: # will be set in the favops editor dialog pass self.options.copyto_enabled = self.ui.copyto_enabled.get_active() copyto = os.path.normpath(self.copyto_chooser.get_folder()) if copyto == os.path.normpath(self.parent.get_actual_copyto_folder("Default")): self.options.copyto_folder = "Default" else: self.options.copyto_folder = copyto self.options.desired_color_enabled = self.ui.desired_color_enabled.get_active() c = self.ui.desired_color.get_color() self.options.desired_color = (c.red // 256, c.green // 256, c.blue // 256) self.options.min_size_enabled = self.ui.min_size_enabled.get_active() try: self.options.min_size = int(self.ui.min_size.get_active_text()) except Exception: pass self.options.use_landscape_enabled = self.ui.landscape_enabled.get_active() self.options.lightness_enabled = self.ui.lightness_enabled.get_active() self.options.lightness_mode = ( Options.LightnessMode.DARK if self.ui.lightness.get_active() == 0 else Options.LightnessMode.LIGHT ) self.options.min_rating_enabled = self.ui.min_rating_enabled.get_active() try: self.options.min_rating = int(self.ui.min_rating.get_active_text()) except Exception: pass self.options.clock_enabled = self.ui.clock_enabled.get_active() self.options.clock_font = self.ui.clock_font.get_font_name() self.options.clock_date_font = self.ui.clock_date_font.get_font_name() self.options.quotes_enabled = self.ui.quotes_enabled.get_active() self.options.quotes_font = self.ui.quotes_font.get_font_name() c = self.ui.quotes_text_color.get_color() self.options.quotes_text_color = (c.red // 256, c.green // 256, c.blue // 256) c = self.ui.quotes_bg_color.get_color() self.options.quotes_bg_color = (c.red // 256, c.green // 256, c.blue // 256) self.options.quotes_bg_opacity = max( 0, min(100, int(self.ui.quotes_bg_opacity.get_value())) ) self.options.quotes_text_shadow = self.ui.quotes_text_shadow.get_active() self.options.quotes_tags = self.ui.quotes_tags.get_text() self.options.quotes_authors = self.ui.quotes_authors.get_text() self.options.quotes_change_enabled = self.ui.quotes_change_enabled.get_active() self.options.quotes_change_interval = self.get_quotes_change_interval() self.options.quotes_width = max(0, min(100, int(self.ui.quotes_width.get_value()))) self.options.quotes_hpos = max(0, min(100, int(self.ui.quotes_hpos.get_value()))) self.options.quotes_vpos = max(0, min(100, int(self.ui.quotes_vpos.get_value()))) self.options.quotes_disabled_sources = [ cb.get_label() for cb in self.quotes_sources_checkboxes if not cb.get_active() ] for f in self.options.filters: f[0] = self.filter_name_to_checkbox[f[1]].get_active() self.options.slideshow_sources_enabled = self.ui.slideshow_sources_enabled.get_active() self.options.slideshow_favorites_enabled = ( self.ui.slideshow_favorites_enabled.get_active() ) self.options.slideshow_downloads_enabled = ( self.ui.slideshow_downloads_enabled.get_active() ) self.options.slideshow_custom_enabled = self.ui.slideshow_custom_enabled.get_active() if os.access(self.slideshow_custom_chooser.get_folder(), os.R_OK): self.options.slideshow_custom_folder = self.slideshow_custom_chooser.get_folder() if self.ui.slideshow_sort_order.get_active() == 0: self.options.slideshow_sort_order = "Random" elif self.ui.slideshow_sort_order.get_active() == 1: self.options.slideshow_sort_order = "Name, asc" elif self.ui.slideshow_sort_order.get_active() == 2: self.options.slideshow_sort_order = "Name, desc" elif self.ui.slideshow_sort_order.get_active() == 3: self.options.slideshow_sort_order = "Date, asc" elif self.ui.slideshow_sort_order.get_active() == 4: self.options.slideshow_sort_order = "Date, desc" if self.ui.slideshow_monitor.get_active() == 0: self.options.slideshow_monitor = "All" else: self.options.slideshow_monitor = self.ui.slideshow_monitor.get_active() if self.ui.slideshow_mode.get_active() == 0: self.options.slideshow_mode = "Fullscreen" elif self.ui.slideshow_mode.get_active() == 1: self.options.slideshow_mode = "Desktop" elif self.ui.slideshow_mode.get_active() == 2: self.options.slideshow_mode = "Maximized" elif self.ui.slideshow_mode.get_active() == 3: self.options.slideshow_mode = "Window" self.options.slideshow_seconds = max(0.5, float(self.ui.slideshow_seconds.get_value())) self.options.slideshow_fade = max(0, min(1, float(self.ui.slideshow_fade.get_value()))) self.options.slideshow_zoom = max(0, min(1, float(self.ui.slideshow_zoom.get_value()))) self.options.slideshow_pan = max(0, min(0.2, float(self.ui.slideshow_pan.get_value()))) self.options.write() if not self.parent.running: return self.parent.reload_config() self.update_autostart() except Exception: if self.parent.running: logger.exception(lambda: "Error while applying preferences") dialog = Gtk.MessageDialog( self, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, "An error occurred while saving preferences.\n" "Please run from a terminal with the -v flag and try again.", ) dialog.set_title("Oops") dialog.run() dialog.destroy() def update_autostart(self): file = get_autostart_file_path() if not self.ui.autostart.get_active(): if os.path.exists(file): logger.info(lambda: "Removing autostart entry") Util.safe_unlink(file) else: if not os.path.exists(file): self.parent.create_autostart_entry() def on_change_enabled_toggled(self, widget=None): self.ui.change_interval_text.set_sensitive(self.ui.change_enabled.get_active()) self.ui.change_interval_time_unit.set_sensitive(self.ui.change_enabled.get_active()) def on_quotes_change_enabled_toggled(self, widget=None): self.ui.quotes_change_interval_text.set_sensitive( self.ui.quotes_change_enabled.get_active() ) self.ui.quotes_change_interval_time_unit.set_sensitive( self.ui.quotes_change_enabled.get_active() ) def on_desired_color_enabled_toggled(self, widget=None): self.ui.desired_color.set_sensitive(self.ui.desired_color_enabled.get_active()) def on_min_size_enabled_toggled(self, widget=None): self.ui.min_size.set_sensitive(self.ui.min_size_enabled.get_active()) self.ui.min_size_label.set_sensitive(self.ui.min_size_enabled.get_active()) def on_min_rating_enabled_toggled(self, widget=None): self.ui.min_rating.set_sensitive(self.ui.min_rating_enabled.get_active()) def on_lightness_enabled_toggled(self, widget=None): self.ui.lightness.set_sensitive(self.ui.lightness_enabled.get_active()) def on_destroy(self, widget=None): if hasattr(self, "dialog") and self.dialog: try: self.dialog.destroy() except Exception: pass for chooser in (self.fav_chooser, self.fetched_chooser): try: chooser.destroy() except Exception: pass self.parent.thumbs_manager.hide(force=False) def on_favorites_changed(self, widget=None): self.delayed_apply() if not os.access(self.fav_chooser.get_folder(), os.W_OK): self.ui.error_favorites.set_label(_("No write permissions")) else: self.ui.error_favorites.set_label("") def on_fetched_changed(self, widget=None): self.delayed_apply() if not os.access(self.fetched_chooser.get_folder(), os.W_OK): self.ui.error_fetched.set_label(_("No write permissions")) else: self.ui.error_fetched.set_label("") def update_clipboard_state(self, widget=None): self.ui.clipboard_use_whitelist.set_sensitive(self.ui.clipboard_enabled.get_active()) # keep the hosts list always enabled - user can wish to add hosts even when monitoring is not enabled - if undesired, uncomment below: # self.ui.clipboard_hosts.set_sensitive(self.ui.clipboard_enabled.get_active() and self.ui.clipboard_use_whitelist.get_active()) def on_edit_favorites_operations_clicked(self, widget=None): self.dialog = EditFavoriteOperationsDialog() self.dialog.set_transient_for(self) buf = self.dialog.ui.textbuffer buf.set_text("\n".join(":".join(x) for x in self.favorites_operations)) if self.dialog.run() == Gtk.ResponseType.OK: text = buf.get_text(buf.get_start_iter(), buf.get_end_iter(), False) self.favorites_operations = list([x.strip().split(":") for x in text.split("\n") if x]) self.delayed_apply() self.dialog.destroy() self.dialog = None def on_icon_changed(self, widget=None): self.ui.icon_chooser.set_visible(self.ui.icon.get_active() == 7) def on_favorites_operations_changed(self, widget=None): self.ui.edit_favorites_operations.set_visible( self.ui.favorites_operations.get_active() == 3 ) def on_copyto_enabled_toggled(self, widget=None): self.copyto_chooser.set_sensitive(self.ui.copyto_enabled.get_active()) self.ui.copyto_use_default.set_sensitive(self.ui.copyto_enabled.get_active()) self.on_copyto_changed() def on_copyto_changed(self): self.ui.copyto_faq_link.set_sensitive(self.ui.copyto_enabled.get_active()) if self.ui.copyto_enabled.get_active() and self.copyto_chooser.get_folder(): folder = self.copyto_chooser.get_folder() self.ui.copyto_use_default.set_sensitive( folder != self.parent.get_actual_copyto_folder("Default") ) under_encrypted = Util.is_home_encrypted() and folder.startswith( os.path.expanduser("~") + "/" ) self.ui.copyto_encrypted_note.set_visible(under_encrypted) can_write = os.access(self.parent.get_actual_copyto_folder(folder), os.W_OK) can_read = os.stat(folder).st_mode | stat.S_IROTH self.ui.copyto_faq_link.set_visible(can_write and can_read and not under_encrypted) self.ui.copyto_permissions_box.set_visible(not can_write or not can_read) self.ui.copyto_write_permissions_warning.set_visible(not can_write) self.ui.copyto_read_permissions_warning.set_visible(not can_read) else: self.ui.copyto_faq_link.set_visible(True) self.ui.copyto_encrypted_note.set_visible(False) self.ui.copyto_permissions_box.set_visible(False) self.delayed_apply() def on_copyto_use_default_clicked(self, widget=None): self.copyto_chooser.set_folder(self.parent.get_actual_copyto_folder("Default")) self.on_copyto_changed() def on_copyto_fix_permissions_clicked(self, widget=None): folder = self.copyto_chooser.get_folder() can_write = os.access(self.parent.get_actual_copyto_folder(folder), os.W_OK) can_read = os.stat(folder).st_mode | stat.S_IROTH mode = "a+" if not can_read: mode += "r" if not can_write: mode += "w" try: Util.superuser_exec("chmod", mode, folder) except Exception: logger.exception(lambda: "Could not adjust copyto folder permissions") self.parent.show_notification( _("Could not adjust permissions"), _('You may try manually running this command:\nsudo chmod %s "%s"') % (mode, folder), ) self.on_copyto_changed() def on_btn_slideshow_reset_clicked(self, widget=None): self.ui.slideshow_seconds.set_value(6) self.ui.slideshow_fade.set_value(0.4) self.ui.slideshow_zoom.set_value(0.2) self.ui.slideshow_pan.set_value(0.05) def on_btn_slideshow_start_clicked(self, widget=None): self.apply() self.parent.on_start_slideshow() variety-0.8.3/variety/PrivacyNoticeDialog.py000066400000000000000000000036241362063646600211620ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE from gi.repository import Gtk # pylint: disable=E0611 from variety_lib.helpers import get_builder class PrivacyNoticeDialog(Gtk.Dialog): __gtype_name__ = "PrivacyNoticeDialog" def __new__(cls): """Special static method that's automatically called by Python when constructing a new instance of this class. Returns a fully instantiated PrivacyNoticeDialog object. """ builder = get_builder('PrivacyNoticeDialog') new_object = builder.get_object('PrivacyNoticeDialog') new_object.finish_initializing(builder) return new_object def finish_initializing(self, builder): """Called when we're finished initializing. finish_initalizing should be called after parsing the ui definition and creating a PrivacyNoticeDialog object with it in order to finish initializing the start of the new PrivacyNoticeDialog instance. """ # Get a reference to the builder and set up the signals. self.builder = builder self.ui = builder.get_ui(self) if __name__ == "__main__": dialog = PrivacyNoticeDialog() dialog.show() Gtk.main() variety-0.8.3/variety/QuoteWriter.py000066400000000000000000000142531362063646600175550ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import threading import cairo from PIL import Image from variety.Util import Util # fmt: off import gi # isort:skip gi.require_version("PangoCairo", "1.0") from gi.repository import Gdk, GdkPixbuf, GObject, Pango, PangoCairo # isort:skip # fmt: on class QuoteWriter: @staticmethod def write_quote(quote, author, infile, outfile, options=None): done_event = threading.Event() exception = [None] def go(): try: w, h = Util.get_scaled_size(infile) surface = QuoteWriter.load_cairo_surface(infile, w, h) QuoteWriter.write_quote_on_surface(surface, quote, author, options) QuoteWriter.save_cairo_surface(surface, outfile) except Exception as e: exception[0] = e finally: done_event.set() Util.add_mainloop_task(go) done_event.wait() if exception[0]: raise exception[0] # pylint: disable=raising-bad-type @staticmethod def load_cairo_surface(filename, w, h): # pylint: disable=no-member pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(filename, w, h, False) surface = cairo.ImageSurface(0, pixbuf.get_width(), pixbuf.get_height()) context = cairo.Context(surface) Gdk.cairo_set_source_pixbuf(context, pixbuf, 0, 0) context.paint() return surface @staticmethod def save_cairo_surface(surface, filename): try: # attempt faster method first # the get_data() call will fail with Cairo version < 1.15.4-1 (e.g. on 16.04) # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=809479 data = surface.get_data() size = surface.get_width(), surface.get_height() image = Image.frombuffer("RGBA", size, data.tobytes(), "raw", "BGRA", 0, 1).convert( "RGB" ) image.save(filename, quality=100) except: # fallback to slower method, but which works on 16.04 surface.write_to_png(filename) @staticmethod def write_quote_on_surface(surface, quote, author=None, options=None, margin=30): qcontext = cairo.Context(surface) # pylint: disable=no-member acontext = cairo.Context(surface) # pylint: disable=no-member iw = surface.get_width() ih = surface.get_height() sw = Gdk.Screen.get_default().get_width() sh = Gdk.Screen.get_default().get_height() trimw, trimh = Util.compute_trimmed_offsets((iw, ih), (sw, sh)) width = max( 200, sw * options.quotes_width // 100 ) # use quotes_width percent of the visible width qlayout = PangoCairo.create_layout(qcontext) qlayout.set_width((width - 4 * margin) * Pango.SCALE) qlayout.set_alignment(Pango.Alignment.LEFT) qlayout.set_wrap(Pango.WrapMode.WORD) font = options.quotes_font if options else "Bitstream Charter 30" qlayout.set_font_description(Pango.FontDescription(font)) qlayout.set_text(quote, -1) qheight = qlayout.get_pixel_size()[1] qwidth = qlayout.get_pixel_size()[0] if options.quotes_width < 98: width = qwidth + 4 * margin else: width = sw alayout = PangoCairo.create_layout(acontext) aheight = 0 if author: alayout.set_width(qwidth * Pango.SCALE) alayout.set_alignment(Pango.Alignment.RIGHT) alayout.set_wrap(Pango.WrapMode.WORD) alayout.set_font_description(Pango.FontDescription(font)) alayout.set_text(author, -1) aheight = alayout.get_pixel_size()[1] height = qheight + aheight + 2.5 * margin bgc = options.quotes_bg_color qcontext.set_source_rgba( bgc[0] / 255.0, bgc[1] / 255.0, bgc[2] / 255.0, options.quotes_bg_opacity / 100.0 ) # gray semi-transparent background hpos = trimw + (sw - width) * options.quotes_hpos // 100 vpos = trimh + (sh - height) * options.quotes_vpos // 100 qcontext.rectangle(hpos, vpos, width, height) qcontext.fill() qcontext.translate(hpos + (width - qwidth) / 2, vpos + margin) if options.quotes_text_shadow: qcontext.set_source_rgba(0, 0, 0, 0.2) PangoCairo.update_layout(qcontext, qlayout) PangoCairo.show_layout(qcontext, qlayout) qcontext.translate(-2, -2) tc = options.quotes_text_color qcontext.set_source_rgb(tc[0] / 255.0, tc[1] / 255.0, tc[2] / 255.0) PangoCairo.update_layout(qcontext, qlayout) PangoCairo.show_layout(qcontext, qlayout) acontext.translate(hpos + (width - qwidth) / 2, vpos + margin + qheight + margin / 2) if options.quotes_text_shadow: acontext.set_source_rgba(0, 0, 0, 0.2) PangoCairo.update_layout(acontext, alayout) PangoCairo.show_layout(acontext, alayout) acontext.translate(-2, -2) acontext.set_source_rgb(tc[0] / 255.0, tc[1] / 255.0, tc[2] / 255.0) PangoCairo.update_layout(acontext, alayout) PangoCairo.show_layout(acontext, alayout) qcontext.show_page() acontext.show_page() if __name__ == "__main__": QuoteWriter.write_quote( '"I may be drunk, Miss, but in the morning I will be sober and you will still be ugly."', "Winston Churchill", "test.jpg", "test_result.png", ) variety-0.8.3/variety/QuotesEngine.py000066400000000000000000000264031362063646600176710ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random import threading import time from variety.plugins.IQuoteSource import IQuoteSource from variety.Util import _ logger = logging.getLogger("variety") class QuotesEngine: def __init__(self, parent=None): self.parent = parent self.quote = None self.started = False self.running = False self.used = [] def update_plugins(self): for p in self.parent.jumble.get_plugins(IQuoteSource): name = p["info"]["name"] if name in self.parent.options.quotes_disabled_sources: try: p["plugin"].deactivate() except Exception: logger.exception(lambda: "Error deactivating %s" % name) else: try: p["plugin"].activate() except Exception: logger.exception(lambda: "Error activating %s" % name) self.plugins = self.parent.jumble.get_plugins(IQuoteSource, active=True) def stop(self): self.running = False self.started = False self.update_plugins() def start(self): if self.started or not self.parent.options.quotes_enabled: return logger.info(lambda: "Starting QuotesEngine") self.update_plugins() self.prepared = [] self.position = 0 self.prepared_lock = threading.Lock() self.prepare_event = threading.Event() self.change_event = threading.Event() self.cache = {} self.started = True self.running = True self.last_change_time = time.time() self.last_error_notification_time = 0 prep_thread = threading.Thread(target=self.prepare_thread) prep_thread.daemon = True prep_thread.start() change_thread = threading.Thread(target=self.regular_change_thread) change_thread.daemon = True change_thread.start() def quit(self): self.running = False self.prepare_event.set() def get_quote(self): return self.quote def has_previous(self): return self.position < len(self.used) - 1 def prev_quote(self): self.last_change_time = time.time() self.position += 1 if self.position >= len(self.used): if self.used: self.quote = self.choose_some_quote() self.used.append(self.quote) else: self.quote = self.used[self.position] return self.quote def bypass_history(self): self.position = 0 def next_quote(self, bypass_history=False): self.last_change_time = time.time() if self.position > 0 and not bypass_history: self.position -= 1 if self.position < len(self.used) - 1: self.quote = self.used[self.position] return self.quote else: if bypass_history: self.bypass_history() return self.change_quote() def choose_some_quote(self): with self.prepared_lock: if [x for x in self.prepared if x != self.quote]: self.quote = random.choice([x for x in self.prepared if x != self.quote]) elif [x for x in self.used if x != self.quote]: self.quote = random.choice([x for x in self.used if x != self.quote]) elif self.prepared: self.quote = random.choice(self.prepared) elif self.used: self.quote = random.choice(self.used) if self.quote in self.prepared: self.prepared.remove(self.quote) self.prepare_event.set() return self.quote def change_quote(self): self.last_change_time = time.time() self.choose_some_quote() self.used = self.used[self.position :] self.position = 0 if self.quote: self.used.insert(0, self.quote) if len(self.used) > 200: self.used = self.used[:200] return self.quote def on_options_updated(self, clear_prepared=True): if clear_prepared: logger.info(lambda: "Quotes: clearing prepared and updating plugins") with self.prepared_lock: self.prepared = [] self.update_plugins() self.prepare_event.set() self.change_event.set() def regular_change_thread(self): logger.info(lambda: "Quotes regular change thread running") while self.running: try: while ( not self.parent.options.quotes_change_enabled or (time.time() - self.last_change_time) < self.parent.options.quotes_change_interval ): if not self.running: return now = time.time() wait_more = self.parent.options.quotes_change_interval - max( 0, (now - self.last_change_time) ) if self.parent.options.quotes_change_enabled: self.change_event.wait(max(0, wait_more)) else: self.change_event.wait() self.change_event.clear() if not self.running: return if not self.parent.options.quotes_change_enabled: continue logger.info(lambda: "Quotes regular_change changes quote") self.last_change_time = time.time() self.parent.quote = self.change_quote() self.parent.refresh_texts() except Exception: logger.exception(lambda: "Exception in regular_change_thread") def prepare_thread(self): logger.info(lambda: "Quotes prepare thread running") while self.running: try: while ( self.running and self.parent.options.quotes_enabled and len(self.prepared) < 10 ): logger.info( lambda: "Quotes prepared buffer contains %s quotes, fetching a quote" % len(self.prepared) ) quote = self.get_one_quote() if quote: with self.prepared_lock: self.prepared.append(quote) if self.parent.options.quotes_enabled and self.parent.quote is None: self.parent.quote = self.change_quote() self.parent.refresh_texts() time.sleep(2) if not self.running: return except Exception: logger.exception(lambda: "Error in quotes prepare thread:") self.prepare_event.wait() self.prepare_event.clear() def get_one_quote(self): keywords = [] if self.parent.options.quotes_tags.strip(): keywords = self.parent.options.quotes_tags.split(",") authors = [] if self.parent.options.quotes_authors.strip(): authors = self.parent.options.quotes_authors.split(",") category, search = ("random", "") if keywords or authors: category, search = random.choice( [("keyword", k) for k in keywords] + [("author", a) for a in authors] ) plugins = list(self.plugins) if not plugins: self.parent.show_notification( _("No quote plugins"), _("There are no quote plugins installed") ) raise Exception("No quote plugins") if keywords or authors: plugins = [p for p in self.plugins if p["plugin"].supports_search()] if not plugins: self.parent.show_notification( _("No suitable quote plugins"), _("You have no quote plugins which support searching by keywords and authors"), ) raise Exception("No quote plugins") error_plugins = [] count_plugins = len(plugins) while self.running and self.parent.options.quotes_enabled: if not plugins: if ( time.time() - self.last_error_notification_time > 3600 and len(self.prepared) + len(self.used) < 5 ): self.last_error_notification_time = time.time() if len(error_plugins) == count_plugins: self.parent.show_notification( _("Could not fetch quotes"), _("Quotes services may be down, we will continue trying"), ) else: self.parent.show_notification( _("Could not find quotes"), _("Maybe you are searching for something very obscure?"), ) return None plugin = random.choice(plugins) plugin_name = plugin["info"]["name"] self.cache.setdefault(plugin_name, {"random": {}, "keyword": {}, "author": {}}) self.cache[plugin_name][category].setdefault(search, {}) cached = self.cache[plugin_name][category][search] if not cached: try: if category == "random": quotes = plugin["plugin"].get_random() elif category == "keyword": quotes = plugin["plugin"].get_for_keyword(search) elif category == "author": quotes = plugin["plugin"].get_for_author(search) else: raise RuntimeError("Unknown category") if quotes: for q in quotes: if len(q["quote"]) < self.parent.options.quotes_max_length: cached[q["quote"]] = q except Exception: logger.exception(lambda: "Exception in quote plugin") plugins.remove(plugin) error_plugins.append(plugin) continue if not cached: logger.warning(lambda: "No quotes for '%s' for plugin %s" % (search, plugin_name)) plugins.remove(plugin) continue quote = random.choice(list(cached.values())) del cached[quote["quote"]] if not cached: del cached return quote variety-0.8.3/variety/Texts.py000066400000000000000000000110061362063646600163630ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE from variety.profile import get_profile_path from variety.Util import _ FILTERS = { "Keep original": _("Keep original"), "Grayscale": _("Grayscale"), "Heavy blur": _("Heavy blur"), "Soft blur": _("Soft blur"), "Oil painting": _("Oil painting"), "Pointilism": _("Pointilism"), "Pixellate": _("Pixellate"), } SOURCES = { "favorites": ("The Favorites folder", _("The Favorites folder")), "fetched": ("The Fetched folder", _("The Fetched folder")), "recommended": ( "Recommended by Variety. Adapts to your taste as you mark images as favorite or trash.", _("Recommended by Variety. Adapts to your taste as you mark images as favorite or trash."), ), "latest": ( "Latest favorites by the other users of Variety. [May contain NSFW images]", _("Latest favorites by the other users of Variety. [May contain NSFW images]"), ), "desktoppr": ("Random wallpapers from Desktoppr.co", _("Random wallpapers from Desktoppr.co")), "apod": ("NASA's Astronomy Picture of the Day", _("NASA's Astronomy Picture of the Day")), "bing": ("Bing Photo of the Day", _("Bing Photo of the Day")), "unsplash": ( "High-resolution photos from Unsplash.com", _("High-resolution photos from Unsplash.com"), ), } profile_path = get_profile_path(expanded=False) TIPS = [ _( "You can change the wallpaper back and forth by scrolling the mouse wheel on top of the indicator icon." ), _( "If you want to run custom commands every time the wallpaper changes or if you use an alternative desktop environment, please edit the scripts in {PROFILE_PATH}scripts. There are examples there for various desktop environments." ), _( 'Variety can be controlled from the command line and you can use this to define keyboard shortcuts for the operations you use most often. Run "variety --help" to see all available commands.' ), _( 'You can drop image links or files on the launcher icon to download them and use them as wallpapers. For quicker downloading from a specific site, you can also use clipboard monitoring (see "Manual downloading" tab).' ), _( "Applying a heavy blurring filter is a great way to get abstract-looking and unobtrusive, yet colorful wallpapers, similar in spirit to the default one in Ubuntu." ), _( "Adding your own custom filters is quite easy: open {PROFILE_PATH}variety.conf in an editor and use the existing filters as an example. Every filter is just a line of options to be passed to ImageMagick's convert command." ), _( 'When you select an image source, its images are displayed in a window at the bottom of the screen. Click an image there to set is as wallpaper. Right-click to close the window, to modify its appearance or to perform file operations. You can select multiple image sources to create a "merged" thumbnail view of all of them. Please mind that thumbnail view is limited to several hundred randomly selected images.' ), _( "To enable desktop notifications when the wallpaper changes, uncomment the two lines at the bottom of {PROFILE_PATH}scripts/set_wallpaper." ), _( 'Variety\'s indicator icon is themeable - if you you choose the "Light" option for the icon, Variety will first check if the current GTK theme has an icon named "variety-indicator" and will use it instead of the bundled light icon.' ), _( "When you choose to save quotes to Favorites, these are by default saved to {PROFILE_PATH}favorite_quotes.txt. This file is compatible with Variety's local files quote source. If you want to use it - copy it to ~/.config/variety/pluginconfig/quotes/ and enable the Local Files quote source. This file is also compatible with the Unix fortune utility." ), ] variety-0.8.3/variety/ThumbsManager.py000066400000000000000000000375341362063646600200270ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import os import threading import webbrowser from gi.repository import Gdk, GdkPixbuf, GObject, Gtk from configobj import ConfigObj from variety.ThumbsWindow import ThumbsWindow from variety.Util import Util, _ from variety_lib import varietyconfig logger = logging.getLogger("variety") class ThumbsManager: POSITIONS = { "bottom": ThumbsWindow.BOTTOM, "top": ThumbsWindow.TOP, "left": ThumbsWindow.LEFT, "right": ThumbsWindow.RIGHT, } POSITION_NAMES = { "bottom": _("Bottom"), "top": _("Top"), "left": _("Left"), "right": _("Right"), } R_POSITIONS = {v: k for (k, v) in POSITIONS.items()} SIZES = [x * 30 for x in range(2, 11)] UNLIMITED = "Unlimited" LIMITS = [10, 50, 100, 200, 500, 1000, 2000, UNLIMITED] class Options: def __init__(self): self.position = ThumbsWindow.BOTTOM self.breadth = 120 self.limit = 200 def __init__(self, parent): self.parent = parent self.thumbs_window = None self.show_thumbs_lock = threading.Lock() self.pinned = False self.images = [] self.screen = None self.type = None self.folders = None self.active_file = None self.active_position = None def create_menu(self, file): options = self.load_options() menu = Gtk.Menu() position_menu = Gtk.Menu() for p, v in ThumbsManager.POSITIONS.items(): item = Gtk.CheckMenuItem(ThumbsManager.POSITION_NAMES[p]) item.set_draw_as_radio(True) item.set_active(options.position == v) def _set_position(widget, pos=p): self.set_position(pos) item.connect("activate", _set_position) position_menu.append(item) size_menu = Gtk.Menu() for size in ThumbsManager.SIZES: item = Gtk.CheckMenuItem(str(size)) item.set_draw_as_radio(True) item.set_active(options.breadth == size) def _set_size(widget, size=size): self.set_size(size) item.connect("activate", _set_size) size_menu.append(item) limit_menu = Gtk.Menu() for limit in ThumbsManager.LIMITS: item = Gtk.CheckMenuItem(str(limit)) item.set_draw_as_radio(True) item.set_active(options.limit == limit) def _set_limit(widget, limit=limit): self.set_limit(limit) item.connect("activate", _set_limit) limit_menu.append(item) position_item = Gtk.MenuItem(_("Position")) position_item.set_submenu(position_menu) menu.append(position_item) size_item = Gtk.MenuItem(_("Size")) size_item.set_submenu(size_menu) menu.append(size_item) limit_item = Gtk.MenuItem(_("Maximum Shown Images")) limit_item.set_submenu(limit_menu) menu.append(limit_item) menu.append(Gtk.SeparatorMenuItem.new()) open_file = Gtk.MenuItem(os.path.basename(file).replace("_", "__")) def _open_file(widget): self.parent.open_file(widget, file) open_file.connect("activate", _open_file) menu.append(open_file) open_folder = Gtk.MenuItem(_("Show Containing Folder")) def _open_folder(widget): self.parent.open_folder(widget, file) open_folder.connect("activate", _open_folder) menu.append(open_folder) info = Util.read_metadata(file) if info and "sourceURL" in info and "sourceName" in info: url = info["sourceURL"] source_name = info["sourceName"] if "Fetched" in source_name: label = _("Fetched: Show Origin") else: label = _("View at %s") % source_name if len(label) > 50: label = label[:50] + "..." show_origin = Gtk.MenuItem(label) def _show_origin(widget=None): logger.info(lambda: "Opening url: " + url) webbrowser.open_new_tab(url) show_origin.connect("activate", _show_origin) menu.append(show_origin) menu.append(Gtk.SeparatorMenuItem.new()) rating_item = Gtk.MenuItem(_("Set EXIF Rating")) rating_item.set_submenu(ThumbsManager.create_rating_menu(file, self.parent)) if not os.access(file, os.W_OK): rating_item.set_sensitive(False) menu.append(rating_item) menu.append(Gtk.SeparatorMenuItem.new()) self.copy_to_favorites = Gtk.MenuItem(_("Copy to _Favorites")) self.copy_to_favorites.set_use_underline(True) def _copy_to_favorites(widget): self.parent.copy_to_favorites(widget, file) self.copy_to_favorites.connect("activate", _copy_to_favorites) menu.append(self.copy_to_favorites) self.move_to_favorites = Gtk.MenuItem(_("Move to _Favorites")) self.move_to_favorites.set_use_underline(True) def _move_to_favorites(widget): self.parent.move_to_favorites(widget, file) self.remove_image(file) self.move_to_favorites.connect("activate", _move_to_favorites) self.move_to_favorites.set_visible(False) menu.append(self.move_to_favorites) trash_item = Gtk.MenuItem(_("Delete to _Trash")) trash_item.set_use_underline(True) def _trash(widget): self.parent.move_to_trash(widget, file) trash_item.connect("activate", _trash) menu.append(trash_item) focus = Gtk.MenuItem(_("Where is it from?")) focus.set_sensitive(self.parent.get_source(file) is not None) def _focus(widget): self.parent.focus_in_preferences(widget, file) focus.connect("activate", _focus) menu.append(focus) menu.append(Gtk.SeparatorMenuItem.new()) def close(widget): self.hide(force=True) close_item = Gtk.MenuItem(_("Close")) close_item.connect("activate", close) menu.append(close_item) menu.show_all() favs_op = self.parent.determine_favorites_operation(file) self.parent.update_favorites_menuitems(self, False, favs_op) return menu @staticmethod def create_rating_menu(file, main_window): def _set_rating_maker(rating): def _set_rating(widget, rating=rating): try: Util.set_rating(file, rating) main_window.on_rating_changed(file) except Exception: logger.exception(lambda: "Could not set EXIF rating") main_window.show_notification(_("Could not set EXIF rating")) return _set_rating try: actual_rating = Util.get_rating(file) except Exception: actual_rating = None rating_menu = Gtk.Menu() for rating in range(5, 0, -1): item = Gtk.CheckMenuItem("\u2605" * rating) item.set_draw_as_radio(True) item.set_active(actual_rating == rating) item.set_sensitive(not item.get_active()) item.connect("activate", _set_rating_maker(rating)) rating_menu.append(item) rating_menu.append(Gtk.SeparatorMenuItem.new()) unrated_item = Gtk.CheckMenuItem(_("Unrated")) unrated_item.set_draw_as_radio(True) unrated_item.set_active(actual_rating is None or actual_rating == 0) unrated_item.set_sensitive(not unrated_item.get_active()) unrated_item.connect("activate", _set_rating_maker(None)) rating_menu.append(unrated_item) rejected_item = Gtk.CheckMenuItem(_("Rejected")) rejected_item.set_draw_as_radio(True) rejected_item.set_active(actual_rating is not None and actual_rating < 0) rejected_item.set_sensitive(not rejected_item.get_active()) rejected_item.connect("activate", _set_rating_maker(-1)) rating_menu.append(rejected_item) rating_menu.show_all() return rating_menu def repaint(self): self.hide(keep_settings=True) if self.images: self.show( self.unlimited_images, screen=self.screen, type=self.type, folders=self.folders ) def set_position(self, position): logger.info(lambda: "Setting thumbs position " + str(position)) options = self.load_options() options.position = ThumbsManager.POSITIONS[position] self.save_options(options) self.repaint() def set_size(self, size): logger.info(lambda: "Setting thumbs size " + str(size)) options = self.load_options() options.breadth = size self.save_options(options) self.repaint() def set_limit(self, limit): logger.info(lambda: "Setting thumbs limit " + str(limit)) options = self.load_options() options.limit = limit self.save_options(options) self.repaint() def pin(self, widget=None): self.pinned = True def on_click(self, thumbs_window, file, widget, event): file = file self.pin() def _resume_scrolling(menu=None): thumbs_window.resume_scrolling() thumbs_window.pause_scrolling() if event.button == 1: if self.is_showing("history"): index = [info["eventbox"] for info in thumbs_window.all].index(widget) self.parent.move_to_history_position(index) else: self.parent.set_wallpaper(file) _resume_scrolling() else: menu = self.create_menu(file) def _compute_position(*args, **kwargs): x, y = event.get_root_coords()[0], event.get_root_coords()[1] h = menu.get_preferred_height()[1] return x, y - h if y - h >= 40 else y, True menu.connect("deactivate", _resume_scrolling) menu.popup(None, None, _compute_position, None, 0, event.time) def mark_active(self, file=None, position=None): self.active_file = file self.active_position = position if self.thumbs_window: if self.is_showing("history"): self.thumbs_window.mark_active(position=position) else: self.thumbs_window.mark_active(file=file) def show(self, images, screen=None, type=None, folders=None): options = self.load_options() with self.show_thumbs_lock: self.unlimited_images = images self.type = type limit = len(self.unlimited_images) if options.limit == self.UNLIMITED else options.limit self.images = self.unlimited_images[:limit] self.screen = screen self.folders = folders def _go(): try: if self.thumbs_window: self.thumbs_window.destroy() self.thumbs_window = None if len(self.images) > 0: self.initialize_thumbs_window() except Exception: logger.exception(lambda: "Could not create thumbs window:") Util.add_mainloop_task(_go) def initialize_thumbs_window(self): options = self.load_options() def _go(): self.thumbs_window = ThumbsWindow( screen=self.screen, position=options.position, breadth=options.breadth ) try: icon = varietyconfig.get_data_file("media", "variety.svg") self.thumbs_window.set_icon_from_file(icon) except Exception: logger.exception(lambda: "Could not set thumbs window icon") if self.type == "history": title = _("Variety History") elif self.type == "downloads": title = _("Variety Recent Downloads") else: title = _("Variety Images") self.thumbs_window.set_title(title) self.thumbs_window.connect("clicked", self.on_click) def _on_close(window, event): self.hide(force=True) self.thumbs_window.connect("delete-event", _on_close) self.mark_active(self.active_file, self.active_position) self.thumbs_window.start(self.images) Util.add_mainloop_task(_go) def load_options(self): options = ThumbsManager.Options() try: config = ConfigObj(os.path.join(self.parent.config_folder, "ui.conf")) try: s = config["thumbs_position"].lower() options.position = ThumbsManager.POSITIONS[s] except Exception: logger.exception(lambda: "Missing or bad thumbs_position option in ui.conf") try: options.breadth = int(config["thumbs_size"]) except Exception: logger.exception(lambda: "Missing or bad thumbs_size option in ui.conf") try: options.limit = ( int(config["thumbs_limit"]) if config["thumbs_limit"] != self.UNLIMITED else self.UNLIMITED ) except Exception: logger.exception(lambda: "Missing or bad thumbs_limit option in ui.conf") except Exception: logger.exception(lambda: "Could not read ui.conf") self.save_options(options) return options def save_options(self, options): try: config = ConfigObj(os.path.join(self.parent.config_folder, "ui.conf")) try: config["thumbs_position"] = ThumbsManager.R_POSITIONS[options.position] config["thumbs_size"] = options.breadth config["thumbs_limit"] = str(options.limit) config.write() except Exception: logger.exception(lambda: "Missing or bad thumbs_position option in ui.conf") except Exception: logger.exception(lambda: "Could not save ui.conf") def hide(self, force=True, keep_settings=False): if force: self.pinned = False if self.pinned: return if not keep_settings: self.type = None self.images = [] self.screen = None self.folders = None if self.thumbs_window: def _go(): self.thumbs_window.destroy() self.thumbs_window = None Util.add_mainloop_task(_go) self.parent.update_indicator(auto_changed=False) def remove_image(self, file): self.images = [f for f in self.images if f != file] if self.thumbs_window: if self.thumbs_window.fits_in_screen(+1000): self.repaint() else: self.thumbs_window.remove_image(file) def add_image(self, file): self.images.insert(0, file) if not self.thumbs_window: self.initialize_thumbs_window() else: self.thumbs_window.add_image(file, at_front=True) def is_showing(self, type): return self.type == type def get_folders(self): return self.folders variety-0.8.3/variety/ThumbsWindow.py000066400000000000000000000364571362063646600177270ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import os import threading import time from gi.repository import Gdk, GdkPixbuf, GObject, Gtk from variety.profile import get_profile_wm_class from variety.Util import Util, on_gtk logger = logging.getLogger("variety") class ThumbsWindow(Gtk.Window): __gsignals__ = {"clicked": (GObject.SIGNAL_RUN_FIRST, None, (str, Gtk.Widget, object))} LEFT = 1 RIGHT = 2 BOTTOM = 3 TOP = 4 def __init__(self, screen=None, position=BOTTOM, breadth=120): logger.debug(lambda: "Creating thumb window %s, %d" % (str(self), time.time())) super(ThumbsWindow, self).__init__() self.set_wmclass(get_profile_wm_class(), get_profile_wm_class()) self.running = True self.set_decorated(False) self.set_accept_focus(False) self.screen = screen if screen else Gdk.Screen.get_default() self.screen_width = self.screen.get_width() self.screen_height = self.screen.get_height() self.position = position self.breadth = int( breadth * (1 if self.is_horizontal() else float(self.screen_width) / self.screen_height) ) self.box = Gtk.HBox(False, 0) if self.is_horizontal() else Gtk.VBox(False, 0) self.scroll = Gtk.ScrolledWindow() self.scroll.add_with_viewport(self.box) if self.is_horizontal(): self.scroll.set_min_content_height(self.breadth) self.scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER) else: self.scroll.set_min_content_width(self.breadth) self.scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self.mouse_in = False self.mouse_position = None self.autoscroll_event = threading.Event() self.scrolling_paused = False self.scrolling_locked = False def mouse_enter(widget, event, data=None): self.mouse_in = True self.previous_speed = 0 self.autoscroll_event.set() def mouse_motion(widget, event, data=None): self.mouse_position = (event.x, event.y) if not self.scrolling_locked: self.scrolling_paused = False def mouse_leave(widget, event, data=None): self.mouse_in = False self.mouse_position = None self.previous_speed = 0 self.autoscroll_event.clear() eventbox = Gtk.EventBox() eventbox.set_visible(True) eventbox.add(self.scroll) eventbox.set_events( Gdk.EventMask.ENTER_NOTIFY_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK | Gdk.EventMask.POINTER_MOTION_MASK ) eventbox.connect("enter-notify-event", mouse_enter) eventbox.connect("leave-notify-event", mouse_leave) eventbox.connect("motion-notify-event", mouse_motion) self.add(eventbox) self.image_count = 0 self.active_file = None self.active_position = None self.mark = None self.marked_info = None self.all = [] def pause_scrolling(self): self.previous_speed = 0 self.scrolling_paused = True self.scrolling_locked = True def resume_scrolling(self): self.scrolling_locked = False def is_horizontal(self): return self.position == ThumbsWindow.TOP or self.position == ThumbsWindow.BOTTOM def pin(self, widget=None): self.pinned = True @on_gtk def start(self, images): self.images = images self._show() thumbs_thread = threading.Thread(target=self._thumbs_thread) thumbs_thread.daemon = True thumbs_thread.start() autoscroll_thread = threading.Thread(target=self._autoscroll_thread) autoscroll_thread.daemon = True autoscroll_thread.start() def _show(self): self.set_default_size(1, 1) logger.debug(lambda: "Showing thumb window %s, %d" % (str(self), time.time())) if self.position == ThumbsWindow.BOTTOM: self.move(self.screen_width // 2, self.screen_height - self.breadth) elif self.position == ThumbsWindow.TOP: self.move(self.screen_width // 2, 0) elif self.position == ThumbsWindow.LEFT: self.move(0, self.screen_height // 2) elif self.position == ThumbsWindow.RIGHT: self.move(self.screen_width - self.screen_height, self.screen_height // 2) else: raise Exception("Unsupported thumbs position: " + str(self.position)) self.show_all() def _thumbs_thread(self): logger.debug(lambda: "Starting thumb thread %s, %d" % (str(self), time.time())) try: self.total_width = 0 for i, file in enumerate(self.images): if not self.running: Util.add_mainloop_task(self.destroy) return self.add_image(file, at_front=False) self.image_count = i except Exception: logger.exception(lambda: "Error while creating thumbs:") def add_image(self, file, at_front=False): try: if self.is_horizontal(): pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(file, 10000, self.breadth) else: pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(file, self.breadth, 10000) except Exception: logger.warning( lambda: "Could not create thumbnail for file %s. File may be missing or invalid." % file ) pixbuf = None def _go(): image_size = ( 0 if not pixbuf else pixbuf.get_width() if self.is_horizontal() else pixbuf.get_height() ) thumb = Gtk.Image() if pixbuf: thumb.set_from_pixbuf(pixbuf) thumb.set_visible(True) overlay = Gtk.Overlay() overlay.add(thumb) overlay.set_visible(True) eventbox = Gtk.EventBox() eventbox.set_visible(True) def click(widget, event, file=file): self.emit("clicked", file, widget, event) eventbox.connect("button-release-event", click) eventbox.add(overlay) image_info = { "file": file, "eventbox": eventbox, "thumb": thumb, "size": image_size, "overlay": overlay, } if at_front: image_info["start"] = 0 for info in self.all: info["start"] += image_size self.all.insert(0, image_info) position = 0 else: image_info["start"] = self.total_width self.all.append(image_info) position = len(self.all) - 1 self.total_width += image_size adj = ( self.scroll.get_hadjustment() if self.is_horizontal() else self.scroll.get_vadjustment() ) scrollbar_at_start = not adj or adj.get_value() <= adj.get_lower() + 20 self.box.pack_start(eventbox, False, False, 0) if at_front: self.box.reorder_child(eventbox, 0) # get adj again - we just added at front, scrollbar might have appeared adj = ( self.scroll.get_hadjustment() if self.is_horizontal() else self.scroll.get_vadjustment() ) if adj: if scrollbar_at_start: adj.set_value(adj.get_lower()) else: adj.set_value(adj.get_value() + image_size) self.update_size() if file == self.active_file or position == self.active_position: self.mark_active(self.active_file, self.active_position) Util.add_mainloop_task(_go) def update_size(self): if ( self.total_width < (self.screen_width if self.is_horizontal() else self.screen_height) + 1000 ): if self.position == ThumbsWindow.BOTTOM: self.move( max(0, (self.screen_width - self.total_width) // 2), self.screen_height - self.breadth, ) self.scroll.set_min_content_width(min(self.total_width, self.screen_width)) elif self.position == ThumbsWindow.TOP: self.move(max(0, (self.screen_width - self.total_width) // 2), 0) self.scroll.set_min_content_width(min(self.total_width, self.screen_width)) elif self.position == ThumbsWindow.LEFT: self.move(0, max(0, (self.screen_height - self.total_width) // 2)) self.scroll.set_min_content_height(min(self.total_width, self.screen_height)) elif self.position == ThumbsWindow.RIGHT: self.move( self.screen_width - self.breadth, max(0, (self.screen_height - self.total_width) // 2), ) self.scroll.set_min_content_height(min(self.total_width, self.screen_height)) # TODO this method is buggy when width < screen and scrollbar not shown - a blank space remains @on_gtk def remove_image(self, image): for info in self.all: if info["file"] == image: eventbox = info["eventbox"] thumb = info["thumb"] self.box.remove(eventbox) eventbox.destroy() thumb.destroy() self.total_width -= info["size"] self.update_size() self.all = [info for info in self.all if info["file"] != image] def mark_active(self, file=None, position=None): def _mark(): logger.debug(lambda: "Marking file %s, position %s" % (file, str(position))) self.active_file = file self.active_position = position pos = position if self.active_file: try: pos = [info["file"] for info in self.all].index(self.active_file) except Exception: pass if self.mark: if self.marked_info: self.marked_info["overlay"].remove(self.mark) self.marked_info = None self.mark.destroy() self.mark = None if pos is not None and len(self.all) > pos: self.marked_info = self.all[pos] image_size = self.marked_info["size"] self.mark = Gtk.DrawingArea() if self.is_horizontal(): self.mark.set_size_request(image_size, 5) self.mark.set_valign(Gtk.Align.START) self.mark.set_halign(Gtk.Align.CENTER) else: self.mark.set_size_request(5, image_size) self.mark.set_valign(Gtk.Align.CENTER) self.mark.set_halign(Gtk.Align.START) def _draw_callback(widget, cr): if self.is_horizontal(): cr.rectangle(0, 0, image_size, 5) else: cr.rectangle(0, 0, 5, image_size) cr.set_source_rgba(255.0 / 255, 105.0 / 255, 44.0 / 255) cr.fill() return False self.mark.connect("draw", _draw_callback) self.mark.set_visible(True) self.marked_info["overlay"].add_overlay(self.mark) GObject.idle_add(_mark) def fits_in_screen(self, with_reserve=0): if self.is_horizontal(): return self.total_width < self.screen_width + with_reserve def destroy(self, widget=False): logger.debug(lambda: "Destroying thumb window %s, %d" % (str(self), time.time())) self.running = False self.autoscroll_event.set() super(ThumbsWindow, self).destroy() def autoscroll_step(self, adj, total_size, current): if not adj: return if not hasattr(self, "previous_speed"): self.previous_speed = 0 left_limit = total_size / 5 right_limit = 4 * total_size / 5 if current <= left_limit and adj.get_value() > adj.get_lower(): speed = 30 * (left_limit - current) ** 3 / left_limit ** 3 if adj.get_value() < adj.get_lower() + 800: speed = speed * (adj.get_value() - adj.get_lower()) / 800 speed = min(speed, self.previous_speed + 0.1) self.previous_speed = speed adj.set_value(max(adj.get_lower(), adj.get_value() - speed)) elif current >= right_limit and adj.get_value() < adj.get_upper(): speed = 30 * (current - right_limit) ** 3 / (total_size - right_limit) ** 3 if adj.get_value() > adj.get_upper() - adj.get_page_size() - 800: speed = speed * (adj.get_upper() - adj.get_page_size() - adj.get_value()) / 800 speed = min(speed, self.previous_speed + 0.1) self.previous_speed = speed adj.set_value(min(adj.get_upper(), adj.get_value() + speed)) def _autoscroll_thread(self): last_update = time.time() while self.running: while not self.mouse_in: if not self.running: return self.autoscroll_event.wait(10) time.sleep(max(0, last_update + 0.005 - time.time())) if not self.mouse_position or self.scrolling_paused: continue x = self.mouse_position[0] y = self.mouse_position[1] def _go(): if self.is_horizontal() and y > 0: self.autoscroll_step( self.scroll.get_hadjustment(), self.scroll.get_min_content_width(), x ) elif not self.is_horizontal() and x > 0: self.autoscroll_step( self.scroll.get_vadjustment(), self.scroll.get_min_content_height(), y ) Util.add_mainloop_task(_go) last_update = time.time() if __name__ == "__main__": images = [] dir = "/usr/share/backgrounds" for f in os.listdir(dir): file = os.path.join(dir, f) if os.path.isfile(file) and file.endswith(".jpg"): images.append(file) print(images) win = ThumbsWindow() win.connect("delete-event", Gtk.main_quit) print("starting") win.start(images) print("gtk main") Gtk.main() variety-0.8.3/variety/Util.py000066400000000000000000000755151362063646600162100ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import codecs import datetime import functools import gettext import hashlib import json import logging import os import random import re import shutil import string import subprocess import sys import threading import time import urllib.parse import bs4 import requests from PIL import Image from variety_lib import get_version # fmt: off import gi # isort:skip gi.require_version("GExiv2", "0.10") gi.require_version("PangoCairo", "1.0") gi.require_version('Gdk', '3.0') from gi.repository import Gdk, GdkPixbuf, GExiv2, Gio, GLib, Pango # isort:skip # fmt: on USER_AGENT = "Variety Wallpaper Changer " + get_version() random.seed() logger = logging.getLogger("variety") gettext.textdomain("variety") def _(text): """Returns the translated form of text.""" if not text or not text.strip(): return text return gettext.gettext(text) def debounce(seconds): """ Decorator that will postpone a functions execution until after wait seconds have elapsed since the last time it was invoked. """ def decorator(fn): def debounced(*args, **kwargs): def call_it(): fn(*args, **kwargs) try: debounced.t.cancel() except (AttributeError): pass debounced.t = threading.Timer(seconds, call_it) debounced.t.start() return debounced return decorator class throttle(object): """ Decorator that prevents a function from being called more than once every time period. Allows for a trailing call. To create a function that cannot be called more than once a minute: @throttle(seconds=1) def my_fun(): pass """ def __init__(self, seconds=0, trailing_call=False): """ seconds - throttle interval in seconds trailing - if True, there will always be a call seconds after the last call """ self.seconds = seconds self.trailing_call = trailing_call self.time_of_last_call = 0 self.timer = None def __call__(self, fn): @functools.wraps(fn) def wrapper(*args, **kwargs): try: self.timer.cancel() except: pass def call_it(): self.time_of_last_call = time.time() return fn(*args, **kwargs) seconds_since_last_call = time.time() - self.time_of_last_call if seconds_since_last_call >= self.seconds: return call_it() elif self.trailing_call: self.timer = threading.Timer(self.seconds - seconds_since_last_call, call_it) self.timer.start() return wrapper def cache(ttl_seconds=100 * 365 * 24 * 3600, debug=False): """ caching decorator with TTL. Keep in mind the cache is per-process. TODO: There is no process for cache invalidation now. Introduce memcached and use it instead. :param ttl_seconds: TTL in seconds before the cache entry expires :param debug: use True to log cache hits (with DEBUG level) """ def decorate(f): _cache = {} @functools.wraps(f) def decorated(*args): cached = _cache.get(args) if not cached or cached["timestamp"] < datetime.datetime.now() - datetime.timedelta( seconds=ttl_seconds ): cached = {"timestamp": datetime.datetime.now(), "result": f(*args)} _cache[args] = cached elif debug: logger.debug(lambda: "@cache hit for %s" % str(args)) return cached["result"] return decorated return decorate class VarietyMetadata(GExiv2.Metadata): MULTIPLES = { "Iptc.Application2.Headline", "Iptc.Application2.Keywords", "Xmp.dc.creator", "Xmp.dc.subject", } NUMBERS = { "Xmp.variety.sfwRating", "Xmp.xmp.Rating", "Exif.Image.Rating", "Exif.Image.RatingPercent", } def __init__(self, path): super(VarietyMetadata, self).__init__(path=path) self.register_xmp_namespace("https://launchpad.net/variety/", "variety") def __getitem__(self, key): if self.has_tag(key): if key in self.MULTIPLES: return self.get_tag_multiple(key) elif key in self.NUMBERS: return self.get_tag_long(key) else: return self.get_tag_string(key) else: raise KeyError("%s: Unknown tag" % key) def __setitem__(self, key, value): if key in self.MULTIPLES: self.set_tag_multiple(key, value) elif key in self.NUMBERS: self.set_tag_long(key, value) else: self.set_tag_string(key, value) class ModuleProfiler: # How deep in other modules' code we should profile MAX_NONTARGET_DEPTH = 1 def __init__(self): """ Initializes the module profiler. """ self.target_paths = [] # Track how far deep we are in functions outside our target packages # The intent is to only log the first call to outside methods without following them further self.nontarget_depths = {} def log_class(self, cls): """ Adds the given class' module to the list of modules to be profiled. """ modulename = cls.__module__ if modulename not in sys.modules: logger.error( "ModuleProfiler: Could not add module %r (class %s) to the list of modules to trace - " "has it been imported entirely?", modulename, cls, ) return module = sys.modules[modulename] self.log_module(module, request=cls) def log_module(self, module, request=None): """ Adds the given module to the list of modules to be profiled. """ self.log_path(module.__file__, request=request) def log_path(self, path, request=None): """ Adds the given module path to the list of profile targets. """ self.target_paths.append(path) logger.info( "ModuleProfiler: added path %s to list of profile targets (request=%s)", path, request ) @functools.lru_cache(maxsize=2048) def is_target_path(self, path): """ Returns whether the given path matches one of our modules to be profiled. """ for target in self.target_paths: if os.path.isdir(target) and path.startswith(target + os.path.sep): return True elif path == target: return True return False def start(self): """ Starts the module profiler for all future threads. """ threading.setprofile(self.profiler) def stop(self): """ Removes the module profiler globally and from future threads. """ if sys.getprofile() != self.profiler: logger.warning( "ModuleProfiler: The currently enabled profile function was not ours - unbinding anyways" ) threading.setprofile(None) sys.setprofile(None) def profiler(self, frame, event, arg): filename = frame.f_code.co_filename tid = threading.get_ident() if not self.is_target_path(filename): if tid not in self.nontarget_depths: # Pick up where the main thread left off self.nontarget_depths[tid] = self.nontarget_depths.get( threading.main_thread().ident, 1 ) else: self.nontarget_depths[tid] += 1 else: self.nontarget_depths[tid] = 0 tname = threading.current_thread().name if event == "call": if self.nontarget_depths[tid] > self.MAX_NONTARGET_DEPTH: # Don't log past our max depth for packages that we're not tracking return else: # In order: function name, line number, filename s = "[%s] -> Entering function: %s\t(line %s in %s)" % ( tname, frame.f_code.co_name, frame.f_lineno, filename, ) if self.nontarget_depths[tid] == self.MAX_NONTARGET_DEPTH: s += ( " - not tracing further because MAX_NONTARGET_DEPTH=%s" % self.MAX_NONTARGET_DEPTH ) logger.debug(s) elif event == "return": if self.nontarget_depths[tid] > self.MAX_NONTARGET_DEPTH: return logger.debug( "[%s] -> Leaving function: %s\t(line %s in %s)" % (tname, frame.f_code.co_name, frame.f_lineno, filename) ) class Util: @staticmethod def sanitize_filename(filename): valid_chars = " ,.!-+@()_%s%s" % (string.ascii_letters, string.digits) return "".join(c if c in valid_chars else "_" for c in filename) @staticmethod def get_local_name(url, ensure_image=True): filename = url[url.rfind("/") + 1 :] index = filename.find("?") if index > 0: filename = filename[:index] index = filename.find("#") if index > 0: filename = filename[:index] filename = urllib.parse.unquote_plus(filename) filename = Util.sanitize_filename(filename) if len(filename) > 200: filename = filename[:190] + filename[-10:] if ensure_image and not Util.is_image(filename): filename += ".jpg" return filename @staticmethod def split(s, seps=(",", " ")): result = s.split() for sep in seps: result = [x.strip() for y in result for x in y.split(sep) if x.strip()] return result @staticmethod def makedirs(path): try: if not os.path.isdir(path): logger.info(lambda: "Creating folder %s" % path) os.makedirs(path) except OSError: logger.exception(lambda: "Could not makedirs for %s" % path) @staticmethod def is_image(filename, check_contents=False): if Util.is_animated_gif(filename): return False if not check_contents: return filename.lower().endswith( (".jpg", ".jpeg", ".gif", ".png", ".tiff", ".svg", ".bmp") ) else: format, image_width, image_height = GdkPixbuf.Pixbuf.get_file_info(filename) return bool(format) @staticmethod def is_animated_gif(filename): if not filename.lower().endswith(".gif"): return False gif = Image.open(filename) try: gif.seek(1) except EOFError: return False else: return True @staticmethod def list_files( files=(), folders=(), filter_func=(lambda f: True), max_files=10000, randomize=True ): count = 0 for filepath in files: logger.debug( lambda: "checking file %s against filter_func %s" % (filepath, filter_func) ) if filter_func(filepath) and os.access(filepath, os.R_OK): count += 1 yield filepath folders = list(folders) if randomize: random.shuffle(folders) for folder in folders: if os.path.isdir(folder): try: for root, subFolders, files in os.walk(folder, followlinks=True): if randomize: random.shuffle(files) random.shuffle(subFolders) for filename in files: logger.debug( lambda: "checking file %s against filter_func %s (root=%s)" % (filename, filter_func, root) ) path = os.path.join(root, filename) if filter_func(path): count += 1 if count > max_files: logger.info( lambda: "More than %d files in the folders, stop listing" % max_files ) return yield path except Exception: logger.exception(lambda: "Could not walk folder " + folder) @staticmethod def start_force_exit_thread(delay): def force_exit(): time.sleep(delay) print("Exiting takes too long. Calling os.kill.") os.kill(os.getpid(), 9) force_exit_thread = threading.Thread(target=force_exit) force_exit_thread.daemon = True force_exit_thread.start() @staticmethod def write_metadata(filename, info): try: m = VarietyMetadata(filename) for k, v in sorted(info.items()): if k == "author": m["Xmp.variety." + k] = v if not "Xmp.dc.creator" in m: m["Xmp.dc.creator"] = [v] if k == "headline": m["Iptc.Application2.Headline"] = [v] elif k == "description": if v is not None: m.set_comment(v) else: m.clear_comment() elif k == "keywords": if not isinstance(v, (list, tuple)): v = [v] m["Iptc.Application2.Keywords"] = v m["Xmp.dc.subject"] = v elif k == "sfwRating": m["Xmp.variety." + k] = int(v) elif k == "extraData": m["Xmp.variety." + k] = json.dumps(v, sort_keys=True) else: m["Xmp.variety." + k] = v m.save_file() return True except Exception as ex: # could not write metadata inside file, use json instead logger.exception( lambda: "Could not write metadata directly in file, trying json metadata: " + filename ) try: with open(filename + ".metadata.json", "w", encoding="utf8") as f: f.write(json.dumps(info, indent=4, ensure_ascii=False, sort_keys=True)) return True except Exception as e: logger.exception(lambda: "Could not write metadata for file " + filename) return False @staticmethod def read_metadata(filename): try: m = VarietyMetadata(filename) info = {} for k in [ "sourceName", "sourceLocation", "sourceURL", "sourceType", "imageURL", "author", "authorURL", "noOriginPage", ]: if "Xmp.variety." + k in m: info[k] = m["Xmp.variety." + k] try: info["sfwRating"] = int(m["Xmp.variety.sfwRating"]) except: pass try: info["author"] = m["Xmp.dc.creator"][0] except: pass try: info["headline"] = m["Iptc.Application2.Headline"][0] except: pass try: info["description"] = m.get_comment() except: pass try: info["extraData"] = json.loads(m["Xmp.variety.extraData"]) except: pass try: info["keywords"] = m["Iptc.Application2.Keywords"] except: try: info["keywords"] = m["Xmp.dc.subject"] except: pass return info except Exception as e: # could not read metadata inside file, try reading json metadata instead try: with open(filename + ".metadata.json", encoding="utf8") as f: return json.loads(f.read()) except Exception: return None @staticmethod def set_rating(filename, rating): if rating is not None and (rating < -1 or rating > 5): raise ValueError("Rating should be between -1 and 5, or None") m = VarietyMetadata(filename) if rating is None: for key in ["Xmp.xmp.Rating", "Exif.Image.Rating", "Exif.Image.RatingPercent"]: if key in m: del m[key] # pylint: disable=unsupported-delete-operation else: m["Xmp.xmp.Rating"] = rating m["Exif.Image.Rating"] = max(0, rating) if rating >= 1: m["Exif.Image.RatingPercent"] = (rating - 1) * 25 elif "Exif.Image.RatingPercent" in m: del m["Exif.Image.RatingPercent"] # pylint: disable=unsupported-delete-operation m.save_file() @staticmethod def get_rating(filename): m = VarietyMetadata(filename) rating = None if "Xmp.xmp.Rating" in m: rating = m["Xmp.xmp.Rating"] elif "Exif.Image.Rating" in m: rating = m["Exif.Image.Rating"] elif "Exif.Image.RatingPercent" in m: rating = m["Exif.Image.RatingPercent"] // 25 + 1 if rating is not None: rating = max(-1, min(5, rating)) return rating @staticmethod def get_size(image): format, image_width, image_height = GdkPixbuf.Pixbuf.get_file_info(image) if not format: raise Exception("Not an image or unsupported image format") else: return image_width, image_height @staticmethod def find_unique_name(filename): index = filename.rfind(".") if index < 0: index = len(filename) before_extension = filename[:index] extension = filename[index:] i = 1 f = filename while os.path.exists(f): f = before_extension + "_" + str(i) + extension i += 1 return f @staticmethod def request(url, data=None, stream=False, method=None, timeout=5, headers=None, verify=True): if url.startswith("//"): url = "http:" + url headers = headers or {} headers = {"User-Agent": USER_AGENT, "Cache-Control": "max-age=0", **headers} method = method if method else "POST" if data else "GET" try: r = requests.request( method=method, url=url, data=data, headers=headers, stream=stream, allow_redirects=True, timeout=timeout, verify=verify, ) r.raise_for_status() return r except requests.exceptions.SSLError: logger.exception("SSL Error for url %s:" % url) raise @staticmethod def request_write_to(r, f): for chunk in r.iter_content(1024): f.write(chunk) @staticmethod def fetch(url, data=None, **request_kwargs): return Util.request(url, data, **request_kwargs).text @staticmethod def fetch_bytes(url, data=None, **request_kwargs): return Util.request(url, data, **request_kwargs).content @staticmethod def fetch_json(url, data=None, **request_kwargs): return Util.request(url, data, **request_kwargs).json() @staticmethod def html_soup(url, data=None, **request_kwargs): return bs4.BeautifulSoup(Util.fetch(url, data, **request_kwargs), "lxml") @staticmethod def xml_soup(url, data=None, **request_kwargs): return bs4.BeautifulSoup(Util.fetch(url, data, **request_kwargs), "xml") @staticmethod def folderpath(folder): p = os.path.normpath(folder) if not p.endswith("/"): p += "/" return p @staticmethod def compute_trimmed_offsets(image_size, screen_size): """Computes what width or height of the wallpaper image will be trimmed on each side, as it is zoomed in to fill the whole screen. Returns a tuple (h, v, scale_ratio) in which h or v will be zero. The other one is the pixel width or height that will be trimmed on each one of the sides of the image (top and down or left and right).""" iw, ih = image_size screen_w, screen_h = screen_size screen_ratio = float(screen_w) / screen_h hoffset = voffset = 0 if ( screen_ratio > float(iw) / ih ): # image is "taller" than the screen ratio - need to offset vertically scaledw = float(screen_w) scaledh = ih * scaledw / iw voffset = int((scaledh - float(scaledw) / screen_ratio) / 2) else: # image is "wider" than the screen ratio - need to offset horizontally scaledh = float(screen_h) scaledw = iw * scaledh / ih hoffset = int((scaledw - float(scaledh) * screen_ratio) / 2) logger.info( lambda: "Trimmed offsets debug info: w:%d, h:%d, ratio:%f, iw:%d, ih:%d, scw:%d, sch:%d, ho:%d, vo:%d" % (screen_w, screen_h, screen_ratio, iw, ih, scaledw, scaledh, hoffset, voffset) ) return hoffset, voffset @staticmethod def get_scaled_size(image): """Computes the size to which the image is scaled to fit the screen: original_size * scale_ratio = scaled_size""" iw, ih = Util.get_size(image) screen_w, screen_h = ( Gdk.Screen.get_default().get_width(), Gdk.Screen.get_default().get_height(), ) screen_ratio = float(screen_w) / screen_h if ( screen_ratio > float(iw) / ih ): # image is "taller" than the screen ratio - need to offset vertically return screen_w, int(round(ih * float(screen_w) / iw)) else: # image is "wider" than the screen ratio - need to offset horizontally return int(round(iw * float(screen_h) / ih)), screen_h @staticmethod def get_scale_to_screen_ratio(image): """Computes the ratio by which the image is scaled to fit the screen: original_size * scale_ratio = scaled_size""" iw, ih = Util.get_size(image) screen_w, screen_h = ( Gdk.Screen.get_default().get_width(), Gdk.Screen.get_default().get_height(), ) screen_ratio = float(screen_w) / screen_h if ( screen_ratio > float(iw) / ih ): # image is "taller" than the screen ratio - need to offset vertically return int(float(screen_w) / iw) else: # image is "wider" than the screen ratio - need to offset horizontally return int(float(screen_h) / ih) @staticmethod def gtk_to_fcmatch_font(gtk_font_name): fd = Pango.FontDescription(gtk_font_name) family = fd.get_family() size = gtk_font_name[gtk_font_name.rindex(" ") :].strip() rest = gtk_font_name.replace(family, "").strip().replace(" ", ":") return family + ":" + rest, size @staticmethod def file_in(file, folder): return os.path.normpath(file).startswith(os.path.normpath(folder)) @staticmethod def same_file_paths(f1, f2): return os.path.normpath(f1) == os.path.normpath(f2) @staticmethod def collapseuser(path): home = os.path.expanduser("~") + "/" return re.sub("^" + home, "~/", path) @staticmethod def compare_versions(v1, v2): from pkg_resources import parse_version pv1 = parse_version(v1) pv2 = parse_version(v2) if pv1 == pv2: return 0 else: return -1 if pv1 < pv2 else 1 @staticmethod def md5(s): if isinstance(s, str): s = s.encode("utf-8") return hashlib.md5(s).hexdigest() @staticmethod def md5file(file): with open(file, mode="rb") as f: return Util.md5(f.read()) @staticmethod def random_hash(): try: return codecs.encode(os.urandom(16), "hex_codec").decode("utf8") except Exception: return "".join(random.choice(string.hexdigits) for _ in range(32)).lower() @staticmethod def get_file_icon_name(path): try: f = Gio.File.new_for_path(os.path.normpath(os.path.expanduser(path))) query_info = f.query_info("standard::icon", Gio.FileQueryInfoFlags.NONE, None) return query_info.get_attribute_object("standard::icon").get_names()[0] except Exception: logger.exception(lambda: "Exception while obtaining folder icon for %s:" % path) return "folder" @staticmethod def is_home_encrypted(): return os.path.isdir(os.path.expanduser("~").replace("/home/", "/home/.ecryptfs/")) @staticmethod def get_xdg_pictures_folder(): try: pics_folder = GLib.get_user_special_dir(GLib.USER_DIRECTORY_PICTURES) if not pics_folder: raise Exception("Could not get path to Pictures folder. Defaulting to ~/Pictures.") return pics_folder except: logger.exception( lambda: "Could not get path to Pictures folder. Defaulting to ~/Pictures." ) return os.path.expanduser("~/Pictures") @staticmethod def superuser_exec(*command_args): logger.warning(lambda: "Executing as superuser: %s" % command_args) subprocess.check_call(["pkexec"] + list(command_args)) @staticmethod def safe_map(f, l): for element in l: try: yield f(element) except Exception: continue @staticmethod def get_thumbnail_data(image, width, height): pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(image, width, height) return pixbuf.save_to_bufferv("jpeg", [], [])[1] @staticmethod def is_alive_and_image(url): try: r = Util.request(url, method="head") return r.headers.get("content-type", "").startswith("image/") except Exception: return False @staticmethod def is_dead_or_not_image(url): if not url: return True try: host = urllib.parse.urlparse(url).netloc if host.startswith("interfacelift.com"): return False if "wallbase.cc" in host or "ns223506.ovh.net" in host: return True except: return True try: r = Util.request(url, method="head") return not r.headers.get("content-type", "").startswith("image/") except requests.exceptions.RequestException: return True except: return False # makes the Gtk thread execute the given callback. @staticmethod def add_mainloop_task(callback, *args): def cb(args): args[0](*args[1:]) return False args = [callback] + list(args) Gdk.threads_add_idle(GLib.PRIORITY_DEFAULT, cb, args) @staticmethod def is_unity(): return os.getenv("XDG_CURRENT_DESKTOP", "").lower() == "unity" @staticmethod def start_daemon(target): daemon_thread = threading.Thread(target=target) daemon_thread.daemon = True daemon_thread.start() return daemon_thread @staticmethod def check_variety_slideshow_present(): return bool(shutil.which("variety-slideshow")) @staticmethod def convert_to_filename(url): url = re.sub(r"http://", "", url) url = re.sub(r"https://", "", url) valid_chars = "_%s%s" % (string.ascii_letters, string.digits) return "".join(c if c in valid_chars else "_" for c in url) @staticmethod def safe_unlink(filepath): try: os.unlink(filepath) except Exception: logger.exception(lambda: "Could not delete {}, ignoring".format(filepath)) @staticmethod def copy_with_replace(from_path, to_path, search_replace_map): with open(from_path, "r") as file: data = file.read() for search, replace in search_replace_map.items(): data = data.replace(search, replace) with open(to_path + ".partial", "w") as file: file.write(data) file.flush() os.rename(to_path + ".partial", to_path) @staticmethod def get_exec_path(): return os.path.abspath(sys.argv[0]) @staticmethod def get_folder_size(start_path): total_size = 0 for dirpath, dirnames, filenames in os.walk(start_path): for f in filenames: fp = os.path.join(dirpath, f) if not os.path.islink(fp): total_size += os.path.getsize(fp) return total_size @staticmethod def get_screen_width(): return Gdk.Screen.get_default().get_width() def on_gtk(f): @functools.wraps(f) def wrapped(*args): Util.add_mainloop_task(f, *args) return wrapped def safe_print(text, ascii_text=None, file=sys.stdout): """ Python's print throws UnicodeEncodeError if the terminal encoding is borked. This version tries print, then logging, then printing the ascii text when one is present. If does not throw exceptions even if it fails. :param text: Text to print, str or unicode, possibly with non-ascii symbols in it :param ascii_text: optional. Original untranslated ascii version of the text when present. """ try: print(text, file=file) except: # UnicodeEncodeError can happen here if the terminal is strangely configured, but we are playing safe and catching everything try: logging.getLogger("variety").error( "Error printing non-ascii text, terminal encoding is %s" % sys.stdout.encoding ) if ascii_text: try: print(ascii_text) return except: pass logging.getLogger("variety").warning(text) except: pass variety-0.8.3/variety/VarietyOptionParser.py000066400000000000000000000207221362063646600212520ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import optparse from variety.Util import _, safe_print from variety_lib import varietyconfig class VarietyOptionParser(optparse.OptionParser): """Override optparse.OptionParser to allow for errors in options without exiting""" def __init__(self, usage, version, report_errors=True): optparse.OptionParser.__init__(self, usage=usage, version=version) self.report_errors = report_errors def print_help(self, file=None): """print_help(file : file = stdout) Print an extended help message, listing all options and any help text provided with them, to 'file' (default stdout). """ if file is None: safe_print(self.format_help()) else: file.write(self.format_help().encode()) def error(self, msg): if self.report_errors: optparse.OptionParser.error(self, msg) else: raise ValueError(msg) def parse_options(arguments, report_errors=True): """Support for command line options""" usage = _( """%prog [options] [files or urls] Passing local files will add them to Variety's queue. Passing remote URLs will make Variety fetch them to Fetched folder and place them in the queue. To set a specific wallpaper: %prog --set /some/local/image.jpg """ ) parser = VarietyOptionParser( usage=usage, version="%%prog %s" % varietyconfig.get_version(), report_errors=report_errors ) parser.add_option( "--profile", action="store", dest="profile", help=_( "Profile name or full path to the configuration folder Variety should use. " "If not specified, this is ~/.config/variety/. " "If just a name is used instead of a full path, the profile folder will be " "~/.config/variety-profiles/. " "Use only when initially starting Variety - changing the profile path requires " "restart. Several instances of Variety can be started when using different profiles, " "each with its own separate configuration. This can be used for example to control " "several different screens or workspaces under desktop environments like XFCE which " "allow this. To pass commands to a running instance, pass the same --profile " "argument as the one it was started with in subsequent commands." ), default=None, ) parser.add_option( "-v", "--verbose", action="count", dest="verbose", default=0, help=_( "Show logging messages (-vv to -vvvvv will profile various parts of Variety with increasing detail" ), ) parser.add_option( "-q", "--quit", action="store_true", dest="quit", help=_("Make the running instance quit") ) parser.add_option( "--get", "--get-wallpaper", "--current", "--show-current", action="store_true", dest="show_current", help=_( "Print the current wallpaper location. Used only when the application is already running." ), ) parser.add_option( "--set", "--set-wallpaper", action="store", dest="set_wallpaper", help=_("Set the given file as wallpaper, absolute path required"), ) parser.add_option( "-n", "--next", action="store_true", dest="next", help=_("Show Next wallpaper") ) parser.add_option( "-p", "--previous", action="store_true", dest="previous", help=_("Show Previous wallpaper") ) parser.add_option( "--fast-forward", action="store_true", dest="fast_forward", help=_("Show Next wallpaper, skipping the forward history"), ) parser.add_option( "-t", "--trash", action="store_true", dest="trash", help=_( "Move current wallpaper to Trash. Used only when the application is already running." ), ) parser.add_option( "-f", "--favorite", action="store_true", dest="favorite", help=_( "Copy current wallpaper to Favorites. Used only when the application is already running." ), ) parser.add_option( "--move-to-favorites", action="store_true", dest="movefavorite", help=_( "Move current wallpaper to Favorites. Used only when the application is already running." ), ) parser.add_option( "--pause", action="store_true", dest="pause", help=_("Pause on current image") ) parser.add_option( "--resume", action="store_true", dest="resume", help=_("Resume regular image changes") ) parser.add_option( "--toggle-pause", action="store_true", dest="toggle_pause", help=_("Toggle Pause/Resume state"), ) parser.add_option( "--quotes-next", action="store_true", dest="quotes_next", help=_("Show Next quote") ) parser.add_option( "--quotes-previous", action="store_true", dest="quotes_previous", help=_("Show Previous quote"), ) parser.add_option( "--quotes-fast-forward", action="store_true", dest="quotes_fast_forward", help=_("Show Next quote, skipping the forward history"), ) parser.add_option( "--quotes-toggle-pause", action="store_true", dest="quotes_toggle_pause", help=_("Toggle Quotes Pause/Resume state"), ) parser.add_option( "--quotes-save-favorite", action="store_true", dest="quotes_save_favorite", help=_("Save the current quote to Favorites"), ) parser.add_option( "--history", action="store_true", dest="history", help=_("Toggle History display") ) parser.add_option( "--downloads", action="store_true", dest="downloads", help=_("Toggle Recent Downloads display"), ) parser.add_option( "--preferences", "--show-preferences", action="store_true", dest="preferences", help=_("Show Preferences dialog"), ) parser.add_option( "--selector", "--show-selector", action="store_true", dest="selector", help=_( "Show manual wallpaper selector - the thumbnail bar filled with images from the active image sources" ), ) parser.add_option( "--set-option", action="append", dest="set_options", nargs=2, help=_( "Sets and applies an option. " "The option names are the same that are used in Variety's config file " "~/.config/variety/variety.conf. " "Multiple options can be set in a single command. " "Example: 'variety --set-option icon Dark --set-option clock_enabled True'. " "USE WITH CAUTION: You are changing the settings file directly in an unguarded way." ), ) options, args = parser.parse_args(arguments) if report_errors: if (options.next or options.fast_forward) and options.previous: parser.error(_("options --next/--fast-forward and --previous are mutually exclusive")) if options.trash and options.favorite: parser.error(_("options --trash and --favorite are mutually exclusive")) if options.pause and options.resume: parser.error(_("options --pause and --resume are mutually exclusive")) if (options.quotes_next or options.quotes_fast_forward) and options.quotes_previous: parser.error( _( "options --quotes-next/--quotes-fast-forward and --quotes-previous are mutually exclusive" ) ) return options, args variety-0.8.3/variety/VarietyWindow.py000066400000000000000000003664331362063646600201100ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012-2019, Peter Levi # Copyright (c) 2017-2019, James Lu # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import os import random import re import shlex import shutil import stat import subprocess import sys import threading import time import urllib.parse import webbrowser from PIL import Image as PILImage from jumble.Jumble import Jumble from variety import indicator from variety.AboutVarietyDialog import AboutVarietyDialog from variety.DominantColors import DominantColors from variety.FlickrDownloader import FlickrDownloader from variety.ImageFetcher import ImageFetcher from variety.Options import Options from variety.plugins.downloaders.ConfigurableImageSource import ConfigurableImageSource from variety.plugins.downloaders.DefaultDownloader import SAFE_MODE_BLACKLIST from variety.plugins.downloaders.ImageSource import ImageSource from variety.plugins.downloaders.SimpleDownloader import SimpleDownloader from variety.plugins.IVarietyPlugin import IVarietyPlugin from variety.PreferencesVarietyDialog import PreferencesVarietyDialog from variety.PrivacyNoticeDialog import PrivacyNoticeDialog from variety.profile import ( DEFAULT_PROFILE_PATH, get_autostart_file_path, get_desktop_file_name, get_profile_path, get_profile_short_name, get_profile_wm_class, is_default_profile, ) from variety.QuotesEngine import QuotesEngine from variety.QuoteWriter import QuoteWriter from variety.ThumbsManager import ThumbsManager from variety.Util import Util, _, debounce, on_gtk, throttle from variety.VarietyOptionParser import parse_options from variety.WelcomeDialog import WelcomeDialog from variety_lib import varietyconfig # fmt: off import gi # isort:skip gi.require_version("Notify", "0.7") from gi.repository import Gdk, GdkPixbuf, Gio, GObject, Gtk, Notify # isort:skip Notify.init("Variety") # fmt: on random.seed() logger = logging.getLogger("variety") DL_FOLDER_FILE = ".variety_download_folder" DONATE_URL = ( "https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=DHQUELMQRQW46&lc=BG&item_name=" "Variety%20Wallpaper%20Changer¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHosted" ) OUTDATED_MSG = "This version of Variety is outdated and unsupported. Please upgrade. Quitting." class VarietyWindow(Gtk.Window): __gtype_name__ = "VarietyWindow" SERVERSIDE_OPTIONS_URL = "http://tiny.cc/variety-options-063" OUTDATED_SET_WP_SCRIPTS = { "b8ff9cb65e3bb7375c4e2a6e9611c7f8", "3729d3e1f57aa1159988ba2c8f929389", "feafa658d9686ecfabdbcf236c32fd0f", "83d8ebeec3676474bdd90c55417e8640", "1562cb289319aa39ac1b37a8ee4c0103", "6c54123e87e98b15d87f0341d3e36fc5", "3f9fcc524bfee8fb146d1901613d3181", "40db8163e22fbe8a505bfd1280190f0d", # 0.4.14, 0.4.15 "59a037428784caeb0834a8dd7897a88b", # 0.4.16, 0.4.17 "e4510e39fd6829ef550e128a1a4a036b", # 0.4.18 "d8d6a6c407a3d02ee242e9ce9ceaf293", # 0.4.19 "fdb69a2b16c62594c0fc12318ec58023", # 0.4.20 "236fa00c42af82904eaaecf2d460d21f", # 0.5.5 "6005ee48fc9cb48050af6e0e9572e660", # 0.6.6 (unary operator expected bug; LP: #1722433) } OUTDATED_GET_WP_SCRIPTS = { "d8df22bf24baa87d5231e31027e79ee5", "822aee143c6b3f1166e5d0a9c637dd16", # 0.4.16, 0.4.17 "367f629e2f24ad8040e46226b18fdc81", # 0.4.18, 0.4.19 } # How many unseen_downloads max to for every downloader. MAX_UNSEEN_PER_DOWNLOADER = 10 @classmethod def get_instance(cls): return VarietyWindow.instance def __init__(self): VarietyWindow.instance = self def start(self, cmdoptions): self.running = True self.about = None self.preferences_dialog = None self.ind = None try: if Gio.SettingsSchemaSource.get_default().lookup("org.gnome.desktop.background", True): self.gsettings = Gio.Settings.new("org.gnome.desktop.background") else: self.gsettings = None except Exception: self.gsettings = None self.prepare_config_folder() self.dialogs = [] fr_file = os.path.join(self.config_folder, ".firstrun") first_run = not os.path.exists(fr_file) if first_run: # Make setup dialogs block so that privacy notice appears self.show_welcome_dialog() self.show_privacy_dialog() self.thumbs_manager = ThumbsManager(self) self.quotes_engine = None self.quote = None self.quote_favorites_contents = "" self.clock_thread = None self.perform_upgrade() self.events = [] self.prepared = [] self.prepared_cleared = False self.prepared_lock = threading.Lock() self.register_clipboard() self.do_set_wp_lock = threading.Lock() self.auto_changed = True self.process_command(cmdoptions, initial_run=True) # load config self.options = None self.server_options = {} self.load_banned() self.load_history() self.post_filter_filename = None if self.position < len(self.used): self.thumbs_manager.mark_active(file=self.used[self.position], position=self.position) logger.info(lambda: "Using data_path %s" % varietyconfig.get_data_path()) self.jumble = Jumble( [os.path.join(os.path.dirname(__file__), "plugins", "builtin"), self.plugins_folder] ) setattr(self.jumble, "parent", self) self.jumble.load() self.image_count = -1 self.image_colors_cache = {} self.load_downloader_plugins() self.create_downloaders_cache() self.reload_config() self.load_last_change_time() self.update_indicator(auto_changed=False) self.start_threads() if first_run: self.first_run(fr_file) def _delayed(): self.create_preferences_dialog() for plugin in self.jumble.get_plugins(clazz=IVarietyPlugin): threading.Timer(0, plugin["plugin"].on_variety_start_complete).start() GObject.timeout_add(1000, _delayed) def on_mnu_about_activate(self, widget, data=None): """Display the about box for variety.""" if self.about is not None: logger.debug(lambda: "show existing about_dialog") self.about.set_keep_above(True) self.about.present() self.about.set_keep_above(False) self.about.present() else: logger.debug(lambda: "create new about dialog") self.about = AboutVarietyDialog() # pylint: disable=E1102 # Set the version on runtime. Gtk.AboutDialog.set_version(self.about, varietyconfig.get_version()) self.about.run() self.about.destroy() self.about = None def on_mnu_donate_activate(self, widget, data=None): self.preferences_dialog.ui.notebook.set_current_page(8) self.on_mnu_preferences_activate() webbrowser.open_new_tab(DONATE_URL) def get_preferences_dialog(self): if not self.preferences_dialog: self.create_preferences_dialog() return self.preferences_dialog def create_preferences_dialog(self): if not self.preferences_dialog: logger.debug(lambda: "create new preferences_dialog") self.preferences_dialog = PreferencesVarietyDialog(parent=self) # pylint: disable=E1102 def _on_preferences_dialog_destroyed(widget, data=None): logger.debug(lambda: "on_preferences_dialog_destroyed") self.preferences_dialog = None self.preferences_dialog.connect("destroy", _on_preferences_dialog_destroyed) def _on_preferences_close_button(arg1, arg2): self.preferences_dialog.close() return True self.preferences_dialog.connect("delete_event", _on_preferences_close_button) def on_mnu_preferences_activate(self, widget=None, data=None): """Display the preferences window for variety.""" if self.preferences_dialog is not None: if self.preferences_dialog.get_visible(): logger.debug(lambda: "bring to front existing and visible preferences_dialog") self.preferences_dialog.set_keep_above(True) self.preferences_dialog.present() self.preferences_dialog.set_keep_above(False) else: logger.debug(lambda: "reload and show existing but non-visible preferences_dialog") self.preferences_dialog.reload() self.preferences_dialog.show() else: self.create_preferences_dialog() self.preferences_dialog.show() # destroy command moved into dialog to allow for a help button self.preferences_dialog.present() def prepare_config_folder(self): self.config_folder = get_profile_path() Util.makedirs(self.config_folder) Util.copy_with_replace( varietyconfig.get_data_file("config", "variety.conf"), os.path.join(self.config_folder, "variety_latest_default.conf"), {DEFAULT_PROFILE_PATH: get_profile_path(expanded=False)}, ) if not os.path.exists(os.path.join(self.config_folder, "variety.conf")): logger.info( lambda: "Missing config file, copying it from " + varietyconfig.get_data_file("config", "variety.conf") ) Util.copy_with_replace( varietyconfig.get_data_file("config", "variety.conf"), os.path.join(self.config_folder, "variety.conf"), {DEFAULT_PROFILE_PATH: get_profile_path(expanded=False)}, ) if not os.path.exists(os.path.join(self.config_folder, "ui.conf")): logger.info( lambda: "Missing ui.conf file, copying it from " + varietyconfig.get_data_file("config", "ui.conf") ) shutil.copy(varietyconfig.get_data_file("config", "ui.conf"), self.config_folder) self.plugins_folder = os.path.join(self.config_folder, "plugins") Util.makedirs(self.plugins_folder) self.scripts_folder = os.path.join(self.config_folder, "scripts") Util.makedirs(self.scripts_folder) if not os.path.exists(os.path.join(self.scripts_folder, "set_wallpaper")): logger.info( lambda: "Missing set_wallpaper file, copying it from " + varietyconfig.get_data_file("scripts", "set_wallpaper") ) Util.copy_with_replace( varietyconfig.get_data_file("scripts", "set_wallpaper"), os.path.join(self.scripts_folder, "set_wallpaper"), {DEFAULT_PROFILE_PATH.replace("~", "$HOME"): get_profile_path(expanded=True)}, ) if not os.path.exists(os.path.join(self.scripts_folder, "get_wallpaper")): logger.info( lambda: "Missing get_wallpaper file, copying it from " + varietyconfig.get_data_file("scripts", "get_wallpaper") ) Util.copy_with_replace( varietyconfig.get_data_file("scripts", "get_wallpaper"), os.path.join(self.scripts_folder, "get_wallpaper"), {DEFAULT_PROFILE_PATH.replace("~", "$HOME"): get_profile_path(expanded=True)}, ) # make all scripts executable: for f in os.listdir(self.scripts_folder): path = os.path.join(self.scripts_folder, f) os.chmod(path, os.stat(path).st_mode | stat.S_IEXEC) self.wallpaper_folder = os.path.join(self.config_folder, "wallpaper") Util.makedirs(self.wallpaper_folder) self.create_desktop_entry() def register_clipboard(self): def clipboard_changed(clipboard, event): try: if not self.options.clipboard_enabled: return text = clipboard.wait_for_text() logger.debug(lambda: "Clipboard: %s" % text) if not text: return valid = [ url for url in text.split("\n") if ImageFetcher.url_ok( url, self.options.clipboard_use_whitelist, self.options.clipboard_hosts ) ] if valid: logger.info(lambda: "Received clipboard URLs: " + str(valid)) self.process_urls(valid, verbose=False) except Exception: logger.exception(lambda: "Exception when processing clipboard:") self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) self.clipboard.connect("owner-change", clipboard_changed) def log_options(self): logger.info(lambda: "Loaded options:") for k, v in sorted(self.options.__dict__.items()): logger.info(lambda: "%s = %s" % (k, v)) def get_real_download_folder(self): subfolder = "Downloaded by Variety" dl = self.options.download_folder # If chosen folder is within Variety's config folder, or folder's name is "Downloaded by Variety", # or folder is missing or it is empty or it has already been used as a download folder, then use it: if ( Util.file_in(dl, self.config_folder) or dl.endswith("/%s" % subfolder) or dl.endswith("/%s/" % subfolder) or not os.path.exists(dl) or not os.listdir(dl) or os.path.exists(os.path.join(dl, DL_FOLDER_FILE)) ): return dl else: # In all other cases (i.e. it is an existing user folder with files in it), use a subfolder inside it return os.path.join(dl, subfolder) def prepare_download_folder(self): self.real_download_folder = self.get_real_download_folder() Util.makedirs(self.real_download_folder) dl_folder_file = os.path.join(self.real_download_folder, DL_FOLDER_FILE) if not os.path.exists(dl_folder_file): with open(dl_folder_file, "w") as f: f.write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) def load_downloader_plugins(self): Options.IMAGE_SOURCES = [p["plugin"] for p in self.jumble.get_plugins(ImageSource)] Options.CONFIGURABLE_IMAGE_SOURCES = [ p for p in Options.IMAGE_SOURCES if isinstance(p, ConfigurableImageSource) ] Options.CONFIGURABLE_IMAGE_SOURCES_MAP = { s.get_source_type(): s for s in Options.CONFIGURABLE_IMAGE_SOURCES } Options.SIMPLE_DOWNLOADERS = [ p for p in Options.IMAGE_SOURCES if isinstance(p, SimpleDownloader) ] for image_source in Options.IMAGE_SOURCES: image_source.activate() image_source.set_variety(self) def reload_config(self): self.previous_options = self.options self.options = Options() self.options.read() self.update_indicator_icon() self.prepare_download_folder() Util.makedirs(self.options.favorites_folder) Util.makedirs(self.options.fetched_folder) self.individual_images = [ os.path.expanduser(s[2]) for s in self.options.sources if s[0] and s[1] == Options.SourceType.IMAGE ] self.folders = [ os.path.expanduser(s[2]) for s in self.options.sources if s[0] and s[1] == Options.SourceType.FOLDER ] if Options.SourceType.FAVORITES in [s[1] for s in self.options.sources if s[0]]: self.folders.append(self.options.favorites_folder) if Options.SourceType.FETCHED in [s[1] for s in self.options.sources if s[0]]: self.folders.append(self.options.fetched_folder) self.downloaders = [] self.download_folder_size = -1 self.albums = [] if self.size_options_changed(): logger.info(lambda: "Size/landscape settings changed - purging downloaders cache") self.create_downloaders_cache() for s in self.options.sources: enabled, type, location = s if not enabled: continue # prepare a cache for albums to avoid walking those folders on every change if type in (Options.SourceType.ALBUM_FILENAME, Options.SourceType.ALBUM_DATE): images = Util.list_files(folders=(location,), filter_func=Util.is_image) if type == Options.SourceType.ALBUM_FILENAME: images = sorted(images) elif type == Options.SourceType.ALBUM_DATE: images = sorted(images, key=os.path.getmtime) else: raise Exception("Unsupported album type") if images: self.albums.append({"path": os.path.normpath(location), "images": images}) continue if type not in self.options.get_downloader_source_types(): continue if location in self.downloaders_cache[type]: self.downloaders.append(self.downloaders_cache[type][location]) else: try: logger.info( lambda: "Creating new downloader for type %s, location %s" % (type, location) ) dlr = self.create_downloader(type, location) self.downloaders_cache[type][location] = dlr self.downloaders.append(dlr) except Exception: logger.exception( lambda: "Could not create Downloader for type %s, location %s" % (type, location) ) for downloader in Options.SIMPLE_DOWNLOADERS: downloader.update_download_folder(self.real_download_folder) for downloader in self.downloaders: downloader.update_download_folder(self.real_download_folder) Util.makedirs(downloader.target_folder) self.folders.append(downloader.target_folder) self.filters = [f[2] for f in self.options.filters if f[0]] self.min_width = 0 self.min_height = 0 if self.options.min_size_enabled: self.min_width = Gdk.Screen.get_default().get_width() * self.options.min_size // 100 self.min_height = Gdk.Screen.get_default().get_height() * self.options.min_size // 100 self.log_options() # clean prepared - they are outdated if self.should_clear_prepared(): self.clear_prepared_queue() else: logger.info(lambda: "No need to clear prepared queue") self.start_clock_thread() if self.options.quotes_enabled: if not self.quotes_engine: self.quotes_engine = QuotesEngine(self) self.quotes_engine.start() else: if self.quotes_engine: self.quotes_engine.stop() if self.quotes_engine: self.reload_quote_favorites_contents() clear_prepared = ( self.previous_options is None or self.options.quotes_disabled_sources != self.previous_options.quotes_disabled_sources or self.options.quotes_tags != self.previous_options.quotes_tags or self.options.quotes_authors != self.previous_options.quotes_authors ) self.quotes_engine.on_options_updated(clear_prepared=clear_prepared) if self.previous_options and ( self.options.filters != self.previous_options.filters or self.options.quotes_enabled != self.previous_options.quotes_enabled or self.options.clock_enabled != self.previous_options.clock_enabled ): self.no_effects_on = None self.update_indicator(auto_changed=False) if self.previous_options is None or self.options.filters != self.previous_options.filters: threading.Timer(0.1, self.refresh_wallpaper).start() else: threading.Timer(0.1, self.refresh_texts).start() if self.events: for e in self.events: e.set() def clear_prepared_queue(self): self.filters_warning_shown = False logger.info(lambda: "Clearing prepared queue") with self.prepared_lock: self.prepared_cleared = True self.prepared = [] self.prepare_event.set() self.image_count = -1 def should_clear_prepared(self): return self.previous_options and ( [s for s in self.previous_options.sources if s[0]] != [s for s in self.options.sources if s[0]] or self.filtering_options_changed() ) def filtering_options_changed(self): if not self.previous_options: return False if self.size_options_changed(): return True if self.previous_options.safe_mode != self.options.safe_mode: return True if ( self.previous_options.desired_color_enabled != self.options.desired_color_enabled or self.previous_options.desired_color != self.options.desired_color ): return True if ( self.previous_options.lightness_enabled != self.options.lightness_enabled or self.previous_options.lightness_mode != self.options.lightness_mode ): return True if ( self.previous_options.min_rating_enabled != self.options.min_rating_enabled or self.previous_options.min_rating != self.options.min_rating ): return True return False def size_options_changed(self): return self.previous_options and ( self.previous_options.min_size_enabled != self.options.min_size_enabled or self.previous_options.min_size != self.options.min_size or self.previous_options.use_landscape_enabled != self.options.use_landscape_enabled ) def create_downloaders_cache(self): self.downloaders_cache = {} for type in Options.get_downloader_source_types(): self.downloaders_cache[type] = {} def create_downloader(self, type, location): if type == Options.SourceType.FLICKR: return FlickrDownloader(self, location) else: for dl in Options.SIMPLE_DOWNLOADERS: if dl.get_source_type() == type: return dl for source in Options.CONFIGURABLE_IMAGE_SOURCES: if source.get_source_type() == type: return source.create_downloader(location) raise Exception("Unknown downloader type") def get_folder_of_source(self, source): type = source[1] location = source[2] if type == Options.SourceType.IMAGE: return None elif type in Options.SourceType.LOCAL_PATH_TYPES: return location elif type == Options.SourceType.FAVORITES: return self.options.favorites_folder elif type == Options.SourceType.FETCHED: return self.options.fetched_folder else: dlr = self.create_downloader(type, location) dlr.update_download_folder(self.real_download_folder) return dlr.target_folder def delete_files_of_source(self, source): folder = self.get_folder_of_source(source) if Util.file_in(folder, self.real_download_folder): self.remove_folder_from_queues(folder) should_repaint = ( self.thumbs_manager.is_showing("history") or self.thumbs_manager.is_showing("downloads") or ( self.thumbs_manager.get_folders() is not None and folder in self.thumbs_manager.get_folders() ) ) if should_repaint: self.thumbs_manager.repaint() try: logger.info(lambda: "Deleting recursively folder " + folder) shutil.rmtree(folder) except Exception: logger.exception(lambda: "Could not delete download folder contents " + folder) if self.current and Util.file_in(self.current, folder): change_timer = threading.Timer(0, self.next_wallpaper) change_timer.start() def load_banned(self): self.banned = set() try: partial = os.path.join(self.config_folder, "banned.txt.partial") with open(partial, encoding="utf8") as f: for line in f: self.banned.add(line.strip()) os.rename(partial, os.path.join(self.config_folder, "banned.txt")) except Exception: logger.info(lambda: "Missing or invalid banned URLs list, no URLs will be banned") def start_clock_thread(self): if not self.clock_thread and self.options.clock_enabled: self.clock_event = threading.Event() self.events.append(self.clock_event) self.clock_thread = threading.Thread(target=self.clock_thread_method) self.clock_thread.daemon = True self.clock_thread.start() def start_threads(self): self.change_event = threading.Event() change_thread = threading.Thread(target=self.regular_change_thread) change_thread.daemon = True change_thread.start() self.prepare_event = threading.Event() prep_thread = threading.Thread(target=self.prepare_thread) prep_thread.daemon = True prep_thread.start() self.dl_event = threading.Event() dl_thread = threading.Thread(target=self.download_thread) dl_thread.daemon = True dl_thread.start() self.events.extend([self.change_event, self.prepare_event, self.dl_event]) server_options_thread = threading.Thread(target=self.server_options_thread) server_options_thread.daemon = True server_options_thread.start() def is_in_favorites(self, file): filename = os.path.basename(file) return os.path.exists(os.path.join(self.options.favorites_folder, filename)) def is_current_refreshable(self): return "--refreshable" in self.current def update_favorites_menuitems(self, holder, auto_changed, favs_op): if auto_changed: # delay enabling Move/Copy operations in this case - see comment below holder.copy_to_favorites.set_sensitive(False) holder.move_to_favorites.set_sensitive(False) else: holder.copy_to_favorites.set_sensitive(favs_op in ("copy", "both")) holder.move_to_favorites.set_sensitive(favs_op in ("move", "both")) if favs_op is None: holder.copy_to_favorites.set_visible(False) holder.move_to_favorites.set_visible(False) elif favs_op is "favorite": holder.copy_to_favorites.set_label(_("Already in Favorites")) holder.copy_to_favorites.set_visible(True) holder.move_to_favorites.set_visible(False) else: holder.copy_to_favorites.set_label(_("Copy to _Favorites")) holder.move_to_favorites.set_label(_("Move to _Favorites")) if favs_op == "copy": holder.copy_to_favorites.set_visible(True) holder.move_to_favorites.set_visible(False) elif favs_op == "move": holder.copy_to_favorites.set_visible(False) holder.move_to_favorites.set_visible(True) else: # both holder.move_to_favorites.set_label(_("Move to Favorites")) holder.copy_to_favorites.set_visible(True) holder.move_to_favorites.set_visible(True) def update_indicator(self, file=None, auto_changed=None): if not file: file = self.current if auto_changed is None: auto_changed = self.auto_changed logger.info(lambda: "Setting file info to: %s" % file) try: self.url = None self.image_url = None self.source_name = None label = os.path.dirname(file).replace("_", "__") if file else None info = Util.read_metadata(file) if file else None if info and "sourceURL" in info and "sourceName" in info: self.source_name = info["sourceName"] if "Fetched" in self.source_name: self.source_name = None label = _("Fetched: Show Origin") elif "noOriginPage" in info: label = _("Source: %s") % self.source_name else: label = _("View at %s") % self.source_name self.url = info["sourceURL"] if self.url.startswith("//"): self.url = "https:" + self.url if "imageURL" in info: self.image_url = info["imageURL"] if self.image_url.startswith("//"): self.image_url = self.url.split("//")[0] + self.image_url if label and len(label) > 50: label = label[:50] + "..." author = None if info and "author" in info and "authorURL" in info: author = info["author"] if len(author) > 50: author = author[:50] + "..." self.author_url = info["authorURL"] else: self.author_url = None if not self.ind: return deleteable = ( bool(file) and os.access(file, os.W_OK) and not self.is_current_refreshable() ) favs_op = self.determine_favorites_operation(file) image_source = self.get_source(file) downloaded = list( Util.list_files( files=[], folders=[self.real_download_folder], filter_func=Util.is_image, max_files=1, randomize=False, ) ) def _gtk_update(): rating_menu = None if deleteable: rating_menu = ThumbsManager.create_rating_menu(file, self) quote_not_fav = True if self.options.quotes_enabled and self.quote is not None: quote_not_fav = ( self.quote is not None and self.quote_favorites_contents.find(self.current_quote_to_text()) == -1 ) for i in range(3): # if only done once, the menu is not always updated for some reason self.ind.prev.set_sensitive(self.position < len(self.used) - 1) if getattr(self.ind, "prev_main", None): self.ind.prev_main.set_sensitive(self.position < len(self.used) - 1) self.ind.fast_forward.set_sensitive(self.position > 0) self.ind.file_label.set_visible(bool(file)) self.ind.file_label.set_sensitive(bool(file)) self.ind.file_label.set_label( os.path.basename(file).replace("_", "__") if file else _("Unknown") ) self.ind.focus.set_sensitive(image_source is not None) # delay enabling Trash if auto_changed self.ind.trash.set_visible(bool(file)) self.ind.trash.set_sensitive(deleteable and not auto_changed) self.update_favorites_menuitems(self.ind, auto_changed, favs_op) self.ind.show_origin.set_visible(bool(label)) self.ind.show_origin.set_sensitive("noOriginPage" not in info) if label: self.ind.show_origin.set_label(label) if not author: self.ind.show_author.set_visible(False) self.ind.show_author.set_sensitive(False) else: self.ind.show_author.set_visible(True) self.ind.show_author.set_sensitive(True) self.ind.show_author.set_label(_("Author: %s") % author) self.ind.rating.set_sensitive(rating_menu is not None) if rating_menu: self.ind.rating.set_submenu(rating_menu) self.ind.history.handler_block(self.ind.history_handler_id) self.ind.history.set_active(self.thumbs_manager.is_showing("history")) self.ind.history.handler_unblock(self.ind.history_handler_id) self.ind.downloads.set_visible(len(self.downloaders) > 0) self.ind.downloads.set_sensitive(len(downloaded) > 0) self.ind.downloads.handler_block(self.ind.downloads_handler_id) self.ind.downloads.set_active(self.thumbs_manager.is_showing("downloads")) self.ind.downloads.handler_unblock(self.ind.downloads_handler_id) self.ind.selector.handler_block(self.ind.selector_handler_id) self.ind.selector.set_active(self.thumbs_manager.is_showing("selector")) self.ind.selector.handler_unblock(self.ind.selector_handler_id) self.ind.google_image.set_sensitive(self.image_url is not None) self.ind.pause_resume.set_label( _("Pause on current") if self.options.change_enabled else _("Resume regular changes") ) if self.options.quotes_enabled and self.quote is not None: self.ind.quotes.set_visible(True) self.ind.google_quote_author.set_visible( self.quote.get("author", None) is not None ) if "sourceName" in self.quote and "link" in self.quote: self.ind.view_quote.set_visible(True) self.ind.view_quote.set_label( _("View at %s") % self.quote["sourceName"] ) else: self.ind.view_quote.set_visible(False) if self.quotes_engine: self.ind.prev_quote.set_sensitive(self.quotes_engine.has_previous()) self.ind.quotes_pause_resume.set_label( _("Pause on current") if self.options.quotes_change_enabled else _("Resume regular changes") ) self.ind.quote_favorite.set_sensitive(quote_not_fav) self.ind.quote_favorite.set_label( _("Save to Favorites") if quote_not_fav else _("Already in Favorites") ) self.ind.quote_view_favs.set_sensitive( os.path.isfile(self.options.quotes_favorites_file) ) self.ind.quote_clipboard.set_sensitive(self.quote is not None) else: self.ind.quotes.set_visible(False) no_effects_visible = ( self.filters or self.options.quotes_enabled or self.options.clock_enabled ) self.ind.no_effects.set_visible(no_effects_visible) self.ind.no_effects.handler_block(self.ind.no_effects_handler_id) self.ind.no_effects.set_active(self.no_effects_on == file) self.ind.no_effects.handler_unblock(self.ind.no_effects_handler_id) Util.add_mainloop_task(_gtk_update) # delay enabling Move/Copy operations after automatic changes - protect from inadvertent clicks if auto_changed: def update_file_operations(): for i in range(5): self.ind.trash.set_sensitive(deleteable) self.ind.copy_to_favorites.set_sensitive(favs_op in ("copy", "both")) self.ind.move_to_favorites.set_sensitive(favs_op in ("move", "both")) GObject.timeout_add(2000, update_file_operations) except Exception: logger.exception(lambda: "Error updating file info") def regular_change_thread(self): logger.info(lambda: "regular_change thread running") if self.options.change_on_start: self.change_event.wait(5) # wait for prepare thread to prepare some images first self.auto_changed = True self.change_wallpaper() while self.running: try: while ( not self.options.change_enabled or (time.time() - self.last_change_time) < self.options.change_interval ): if not self.running: return now = time.time() wait_more = self.options.change_interval - max(0, (now - self.last_change_time)) if self.options.change_enabled: self.change_event.wait(max(0, wait_more)) else: logger.info(lambda: "regular_change: waiting till user resumes") self.change_event.wait() self.change_event.clear() if not self.running: return if not self.options.change_enabled: continue logger.info(lambda: "regular_change changes wallpaper") self.auto_changed = True self.last_change_time = time.time() self.change_wallpaper() except Exception: logger.exception(lambda: "Exception in regular_change_thread") def clock_thread_method(self): logger.info(lambda: "clock thread running") last_minute = -1 while self.running: try: while not self.options.clock_enabled: self.clock_event.wait() self.clock_event.clear() if not self.running: return if not self.options.clock_enabled: continue time.sleep(1) minute = int(time.strftime("%M", time.localtime())) if minute != last_minute: logger.info(lambda: "clock_thread updates wallpaper") self.auto_changed = False self.refresh_clock() last_minute = minute except Exception: logger.exception(lambda: "Exception in clock_thread") def find_images(self): self.prepared_cleared = False images = self.select_random_images(100 if not self.options.safe_mode else 30) found = set() for fuzziness in range(0, 5): if len(found) > 10 or len(found) >= len(images): break for img in images: if not self.running or self.prepared_cleared: # abandon this search return try: if not img in found and self.image_ok(img, fuzziness): # print "OK at fz %d: %s" % (fuzziness, img) found.add(img) if len(self.prepared) < 3 and not self.prepared_cleared: with self.prepared_lock: self.prepared.append(img) except Exception: logger.exception(lambda: "Excepion while testing image_ok on file " + img) with self.prepared_lock: if self.prepared_cleared: # abandon this search return self.prepared.extend(found) if not self.prepared and images: logger.info( lambda: "Prepared buffer still empty after search, appending some non-ok image" ) self.prepared.append(images[random.randint(0, len(images) - 1)]) # remove duplicates self.prepared = list(set(self.prepared)) random.shuffle(self.prepared) if len(images) < 3 and self.has_real_downloaders(): self.trigger_download() if ( len(found) <= 5 and len(images) >= max(20, 10 * len(found)) and found.issubset(set(self.used[:10])) ): logger.warning(lambda: "Too few images found: %d out of %d" % (len(found), len(images))) if not hasattr(self, "filters_warning_shown") or not self.filters_warning_shown: self.filters_warning_shown = True self.show_notification( _("Filtering too strict?"), _("Variety is finding too few images that match your image filtering criteria"), ) def prepare_thread(self): logger.info(lambda: "Prepare thread running") while self.running: try: logger.info(lambda: "Prepared buffer contains %s images" % len(self.prepared)) if self.image_count < 0 or len(self.prepared) <= min(10, self.image_count // 2): logger.info(lambda: "Preparing some images") self.find_images() if not self.running: return logger.info( lambda: "After search prepared buffer contains %s images" % len(self.prepared) ) # trigger download after some interval to reduce resource usage while the wallpaper changes delay_dl_timer = threading.Timer(2, self.trigger_download) delay_dl_timer.daemon = True delay_dl_timer.start() except Exception: logger.exception(lambda: "Error in prepare thread:") self.prepare_event.wait() self.prepare_event.clear() def server_options_thread(self): time.sleep(20) attempts = 0 while self.running: try: attempts += 1 logger.info( lambda: "Fetching server options from %s" % VarietyWindow.SERVERSIDE_OPTIONS_URL ) self.server_options = Util.fetch_json(VarietyWindow.SERVERSIDE_OPTIONS_URL) logger.info(lambda: "Fetched server options: %s" % str(self.server_options)) if self.preferences_dialog: self.preferences_dialog.update_status_message() if varietyconfig.get_version() in self.server_options.get("outdated_versions", []): self.show_notification("Version unsupported", OUTDATED_MSG) self.on_quit() except Exception: logger.exception(lambda: "Could not fetch Variety serverside options") if attempts < 5: # the first several attempts may easily fail if Variety is run on startup, try again soon: time.sleep(30) continue time.sleep(3600 * 24) # Update once daily def has_real_downloaders(self): return sum(1 for d in self.downloaders if not d.is_refresher()) > 0 def download_thread(self): while self.running: try: available_downloaders = self._available_downloaders() if not available_downloaders: self.dl_event.wait(180) self.dl_event.clear() continue if random.random() < 0.05: self.purge_downloaded() # download from the downloader with the smallest unseen queue downloader = sorted( available_downloaders, key=lambda dl: len(dl.state.get("unseen_downloads", [])) )[0] self.download_one_from(downloader) # Also refresh the images for all refreshers that haven't downloaded recently - # these need to be updated regularly for dl in available_downloaders: if dl.is_refresher() and dl != downloader: dl.download_one() # give some breathing room between downloads time.sleep(1) except Exception: logger.exception(lambda: "Exception in download_thread:") def _available_downloaders(self): now = time.time() return [ dl for dl in self.downloaders if dl.state.get("last_download_failure", 0) < now - 60 and (not dl.is_refresher() or dl.state.get("last_download_success", 0) < now - 60) and len(dl.state.get("unseen_downloads", [])) <= VarietyWindow.MAX_UNSEEN_PER_DOWNLOADER ] def trigger_download(self): logger.info(lambda: "Triggering download thread to check if download needed") if getattr(self, "dl_event"): self.dl_event.set() def register_downloaded_file(self, file): self.refresh_thumbs_downloads(file) if file.startswith(self.options.download_folder): self.download_folder_size += os.path.getsize(file) def download_one_from(self, downloader): try: file = downloader.download_one() except: logger.exception(lambda: "Could not download wallpaper:") file = None if file: self.register_downloaded_file(file) downloader.state["last_download_success"] = time.time() if downloader.is_refresher() or self.image_ok(file, 0): # give priority to newly-downloaded images - unseen_downloads are later # used with priority over self.prepared logger.info(lambda: "Adding downloaded file %s to unseen_downloads" % file) with self.prepared_lock: unseen = set(downloader.state.get("unseen_downloads", [])) unseen.add(file) downloader.state["unseen_downloads"] = [f for f in unseen if os.path.exists(f)] else: # image is not ok, but still notify prepare thread that there is a new image - # it might be "desperate" self.prepare_event.set() else: # register as download failure for this downloader downloader.state["last_download_failure"] = time.time() downloader.save_state() def purge_downloaded(self): if not self.options.quota_enabled: return if self.download_folder_size <= 0 or random.randint(0, 20) == 0: self.download_folder_size = Util.get_folder_size(self.real_download_folder) logger.info( lambda: "Refreshed download folder size: {} mb".format( self.download_folder_size / (1024.0 * 1024.0) ) ) mb_quota = self.options.quota_size * 1024 * 1024 if self.download_folder_size > 0.95 * mb_quota: logger.info( lambda: "Purging oldest files from download folder {}, current size: {} mb".format( self.real_download_folder, int(self.download_folder_size / (1024.0 * 1024.0)) ) ) files = [] for dirpath, dirnames, filenames in os.walk(self.real_download_folder): for f in filenames: if Util.is_image(f) or f.endswith(".partial"): fp = os.path.join(dirpath, f) files.append((fp, os.path.getsize(fp), os.path.getctime(fp))) files = sorted(files, key=lambda x: x[2]) i = 0 while i < len(files) and self.download_folder_size > 0.80 * mb_quota: file = files[i][0] if file != self.current: try: logger.debug(lambda: "Deleting old file in downloaded: {}".format(file)) self.remove_from_queues(file) Util.safe_unlink(file) self.download_folder_size -= files[i][1] Util.safe_unlink(file + ".metadata.json") except Exception: logger.exception( lambda: "Could not delete some file while purging download folder: {}".format( file ) ) i += 1 self.prepare_event.set() class RefreshLevel: ALL = 0 FILTERS_AND_TEXTS = 1 TEXTS = 2 CLOCK_ONLY = 3 def set_wp_throttled(self, filename, refresh_level=RefreshLevel.ALL): if not filename: logger.warning(lambda: "set_wp_throttled: No wallpaper to set") return self.thumbs_manager.mark_active(file=filename, position=self.position) def _do_set_wp(): self.do_set_wp(filename, refresh_level) threading.Timer(0, _do_set_wp).start() def build_imagemagick_filter_cmd(self, filename, target_file): if not self.filters: return None filter = random.choice(self.filters).strip() if not filter: return None w = Gdk.Screen.get_default().get_width() h = Gdk.Screen.get_default().get_height() cmd = "convert %s -scale %dx%d^ " % (shlex.quote(filename), w, h) logger.info(lambda: "Applying filter: " + filter) cmd += filter + " " cmd += shlex.quote(target_file) cmd = cmd.replace("%FILEPATH%", shlex.quote(filename)) cmd = cmd.replace("%FILENAME%", shlex.quote(os.path.basename(filename))) logger.info(lambda: "ImageMagick filter cmd: " + cmd) return cmd.encode("utf-8") def build_imagemagick_clock_cmd(self, filename, target_file): if not (self.options.clock_enabled and self.options.clock_filter.strip()): return None w = Gdk.Screen.get_default().get_width() h = Gdk.Screen.get_default().get_height() cmd = "convert %s -scale %dx%d^ " % (shlex.quote(filename), w, h) hoffset, voffset = Util.compute_trimmed_offsets(Util.get_size(filename), (w, h)) clock_filter = self.options.clock_filter clock_filter = VarietyWindow.replace_clock_filter_offsets(clock_filter, hoffset, voffset) clock_filter = self.replace_clock_filter_fonts(clock_filter) clock_filter = time.strftime( clock_filter, time.localtime() ) # this should always be called last logger.info(lambda: "Applying clock filter: " + clock_filter) cmd += clock_filter cmd += " " cmd += shlex.quote(target_file) logger.info(lambda: "ImageMagick clock cmd: " + cmd) return cmd.encode("utf-8") def replace_clock_filter_fonts(self, clock_filter): clock_font_name, clock_font_size = Util.gtk_to_fcmatch_font(self.options.clock_font) date_font_name, date_font_size = Util.gtk_to_fcmatch_font(self.options.clock_date_font) clock_filter = clock_filter.replace("%CLOCK_FONT_NAME", clock_font_name) clock_filter = clock_filter.replace("%CLOCK_FONT_SIZE", clock_font_size) clock_filter = clock_filter.replace("%DATE_FONT_NAME", date_font_name) clock_filter = clock_filter.replace("%DATE_FONT_SIZE", date_font_size) return clock_filter @staticmethod def replace_clock_filter_offsets(filter, hoffset, voffset): def hrepl(m): return str(hoffset + int(m.group(1))) def vrepl(m): return str(voffset + int(m.group(1))) filter = re.sub(r"\[\%HOFFSET\+(\d+)\]", hrepl, filter) filter = re.sub(r"\[\%VOFFSET\+(\d+)\]", vrepl, filter) return filter def refresh_wallpaper(self): self.set_wp_throttled( self.current, refresh_level=VarietyWindow.RefreshLevel.FILTERS_AND_TEXTS ) def refresh_clock(self): self.set_wp_throttled(self.current, refresh_level=VarietyWindow.RefreshLevel.CLOCK_ONLY) def refresh_texts(self): self.set_wp_throttled(self.current, refresh_level=VarietyWindow.RefreshLevel.TEXTS) def write_filtered_wallpaper_origin(self, filename): if not filename: return try: with open( os.path.join(self.wallpaper_folder, "wallpaper.jpg.txt"), "w", encoding="utf8" ) as f: f.write(filename) except Exception: logger.exception(lambda: "Cannot write wallpaper.jpg.txt") def apply_filters(self, to_set, refresh_level): try: if self.filters: # don't run the filter command when the refresh level is clock or quotes only, # use the previous filtered image otherwise if ( refresh_level in [ VarietyWindow.RefreshLevel.ALL, VarietyWindow.RefreshLevel.FILTERS_AND_TEXTS, ] or not self.post_filter_filename ): self.post_filter_filename = to_set target_file = os.path.join( self.wallpaper_folder, "wallpaper-filter-%s.jpg" % Util.random_hash() ) cmd = self.build_imagemagick_filter_cmd(to_set, target_file) if cmd: result = os.system(cmd) if result == 0: # success to_set = target_file self.post_filter_filename = to_set else: logger.warning( lambda: "Could not execute filter convert command. " "Missing ImageMagick or bad filter defined? Resultcode: %d" % result ) else: to_set = self.post_filter_filename return to_set except Exception: logger.exception(lambda: "Could not apply filters:") return to_set def apply_quote(self, to_set): try: if self.options.quotes_enabled and self.quote: quote_outfile = os.path.join( self.wallpaper_folder, "wallpaper-quote-%s.jpg" % Util.random_hash() ) QuoteWriter.write_quote( self.quote["quote"], self.quote.get("author", None), to_set, quote_outfile, self.options, ) to_set = quote_outfile return to_set except Exception: logger.exception(lambda: "Could not apply quote:") return to_set def apply_clock(self, to_set): try: if self.options.clock_enabled: target_file = os.path.join( self.wallpaper_folder, "wallpaper-clock-%s.jpg" % Util.random_hash() ) cmd = self.build_imagemagick_clock_cmd(to_set, target_file) result = os.system(cmd) if result == 0: # success to_set = target_file else: logger.warning( lambda: "Could not execute clock convert command. " "Missing ImageMagick or bad filter defined? Resultcode: %d" % result ) return to_set except Exception: logger.exception(lambda: "Could not apply clock:") return to_set def apply_copyto_operation(self, to_set): if self.options.copyto_enabled: folder = self.get_actual_copyto_folder() target_file = os.path.join( folder, "variety-copied-wallpaper-%s.jpg" % Util.random_hash() ) self.cleanup_old_wallpapers(folder, "variety-copied-wallpaper") try: shutil.copy(to_set, target_file) os.chmod( target_file, 0o644 ) # Read permissions for everyone, write - for the current user to_set = target_file except Exception: logger.exception( lambda: "Could not copy file %s to copyto folder %s. " "Using it from original locations, so LightDM might not be able to use it." % (to_set, folder) ) return to_set def get_actual_copyto_folder(self, option=None): option = option or self.options.copyto_folder if option == "Default": return ( Util.get_xdg_pictures_folder() if not Util.is_home_encrypted() else "/usr/share/backgrounds" ) else: return os.path.normpath(option) @throttle(seconds=1, trailing_call=True) def do_set_wp(self, filename, refresh_level=RefreshLevel.ALL): logger.info(lambda: "Calling do_set_wp with %s, time: %s" % (filename, time.time())) with self.do_set_wp_lock: try: if not os.access(filename, os.R_OK): logger.info( lambda: "Missing file or bad permissions, will not use it: " + filename ) return self.write_filtered_wallpaper_origin(filename) to_set = filename if filename != self.no_effects_on: self.no_effects_on = None to_set = self.apply_filters(to_set, refresh_level) to_set = self.apply_quote(to_set) to_set = self.apply_clock(to_set) to_set = self.apply_copyto_operation(to_set) self.cleanup_old_wallpapers(self.wallpaper_folder, "wallpaper-", to_set) self.update_indicator(filename) self.set_desktop_wallpaper(to_set, filename, refresh_level) self.current = filename if self.options.icon == "Current" and self.current: def _set_icon_to_current(): if self.ind: self.ind.set_icon(self.current) Util.add_mainloop_task(_set_icon_to_current) if refresh_level == VarietyWindow.RefreshLevel.ALL: self.last_change_time = time.time() self.save_last_change_time() self.save_history() except Exception: logger.exception(lambda: "Error while setting wallpaper") def list_images(self): return Util.list_files(self.individual_images, self.folders, Util.is_image, max_files=10000) def select_random_images(self, count): all_images = list(self.list_images()) self.image_count = len(all_images) # add just the first image of each album to the selection, # otherwise albums will get an enormous part of the screentime, as they act as # "black holes" - once we start them, we stay there until done for album in self.albums: all_images.append(album["images"][0]) random.shuffle(all_images) return all_images[:count] def on_indicator_scroll(self, indicator, steps, direction): if direction in (Gdk.ScrollDirection.DOWN, Gdk.ScrollDirection.UP): self.recent_scroll_actions = getattr(self, "recent_scroll_actions", []) self.recent_scroll_actions = [ a for a in self.recent_scroll_actions if a[0] > time.time() - 0.3 ] self.recent_scroll_actions.append((time.time(), steps, direction)) count_up = sum( a[1] for a in self.recent_scroll_actions if a[2] == Gdk.ScrollDirection.UP ) count_down = sum( a[1] for a in self.recent_scroll_actions if a[2] == Gdk.ScrollDirection.DOWN ) self.on_indicator_scroll_throttled( Gdk.ScrollDirection.UP if count_up > count_down else Gdk.ScrollDirection.DOWN ) @debounce(seconds=0.3) def on_indicator_scroll_throttled(self, direction): if direction == Gdk.ScrollDirection.DOWN: self.next_wallpaper(widget=self) else: self.prev_wallpaper(widget=self) def prev_wallpaper(self, widget=None): self.auto_changed = widget is None if self.quotes_engine and self.options.quotes_enabled: self.quote = self.quotes_engine.prev_quote() if self.position >= len(self.used) - 1: return else: self.position += 1 self.set_wp_throttled(self.used[self.position]) def next_wallpaper(self, widget=None, bypass_history=False): self.auto_changed = widget is None if self.position > 0 and not bypass_history: if self.quotes_engine and self.options.quotes_enabled: self.quote = self.quotes_engine.next_quote() self.position -= 1 self.set_wp_throttled(self.used[self.position]) else: if bypass_history: self.position = 0 if self.quotes_engine and self.options.quotes_enabled: self.quotes_engine.bypass_history() self.change_wallpaper() def move_to_history_position(self, position): if 0 <= position < len(self.used): self.auto_changed = False self.position = position self.set_wp_throttled(self.used[self.position]) else: logger.warning( lambda: "Invalid position passed to move_to_history_position, %d, used len is %d" % (position, len(self.used)) ) def show_notification(self, title, message="", icon=None, important=False): if not icon: icon = varietyconfig.get_data_file("media", "variety.svg") if not important: try: self.notification.update(title, message, icon) except AttributeError: self.notification = Notify.Notification.new(title, message, icon) self.notification.set_urgency(Notify.Urgency.LOW) self.notification.show() else: # use a separate notification that will not be updated with a non-important message notification = Notify.Notification.new(title, message, icon) notification.set_urgency(Notify.Urgency.NORMAL) notification.show() def _has_local_sources(self): return ( sum(1 for s in self.options.sources if s[0] and s[1] in Options.SourceType.LOCAL_TYPES) > 0 ) def change_wallpaper(self, widget=None): try: img = None # check if current is part of an album, and show next image in the album if self.current: for album in self.albums: if os.path.normpath(self.current).startswith(album["path"]): index = album["images"].index(self.current) if 0 <= index < len(album["images"]) - 1: img = album["images"][index + 1] break if not img: with self.prepared_lock: # with some big probability, use one of the unseen_downloads if ( random.random() < self.options.download_preference_ratio or not self._has_local_sources() ): enabled_unseen_downloads = self._enabled_unseen_downloads() if enabled_unseen_downloads: unseen = random.choice(list(enabled_unseen_downloads)) self.prepared.insert(0, unseen) for prep in self.prepared: if prep != self.current and os.access(prep, os.R_OK): img = prep try: self.prepared.remove(img) except ValueError: pass self.prepare_event.set() break if not img: logger.info(lambda: "No images yet in prepared buffer, using some random image") self.prepare_event.set() rnd_images = self.select_random_images(3) rnd_images = [ f for f in rnd_images if f != self.current or self.is_current_refreshable() ] img = rnd_images[0] if rnd_images else None if not img: logger.info(lambda: "No images found") if not self.auto_changed: if self.has_real_downloaders(): msg = _("Please add more image sources or wait for some downloads") else: msg = _("Please add more image sources") self.show_notification(_("No more wallpapers"), msg) return if self.quotes_engine and self.options.quotes_enabled: self.quote = self.quotes_engine.change_quote() self.set_wallpaper(img, auto_changed=self.auto_changed) except Exception: logger.exception(lambda: "Could not change wallpaper") def _enabled_unseen_downloads(self): # collect the unseen_downloads from the currently enabled downloaders: enabled_unseen_downloads = set() for dl in self.downloaders: for file in dl.state.get("unseen_downloads", []): if os.path.exists(file): enabled_unseen_downloads.add(file) return enabled_unseen_downloads def _remove_from_unseen(self, file): for dl in self.downloaders: unseen = set(dl.state.get("unseen_downloads", [])) if file in unseen: unseen.remove(file) dl.state["unseen_downloads"] = [f for f in unseen if os.path.exists(f)] dl.save_state() # trigger download after some interval to reduce resource usage while the wallpaper changes delay_dl_timer = threading.Timer(2, self.trigger_download) delay_dl_timer.daemon = True delay_dl_timer.start() def set_wallpaper(self, img, auto_changed=False): logger.info(lambda: "Calling set_wallpaper with " + img) if img == self.current and not self.is_current_refreshable(): return if os.access(img, os.R_OK): at_front = self.position == 0 self.used = self.used[self.position :] if len(self.used) == 0 or self.used[0] != img: self.used.insert(0, img) self.refresh_thumbs_history(img, at_front) self.position = 0 if len(self.used) > 1000: self.used = self.used[:1000] self._remove_from_unseen(img) self.auto_changed = auto_changed self.last_change_time = time.time() self.set_wp_throttled(img) # Unsplash API requires that we call their download endpoint # when setting the wallpaper, not when queueing it: meta = Util.read_metadata(img) if meta and "sourceType" in meta: for image_source in Options.IMAGE_SOURCES: if image_source.get_source_type() == meta["sourceType"]: def _do_hook(): image_source.on_image_set_as_wallpaper(img, meta) threading.Timer(0, _do_hook).start() else: logger.warning(lambda: "set_wallpaper called with unaccessible image " + img) def refresh_thumbs_history(self, added_image, at_front=False): if self.thumbs_manager.is_showing("history"): def _add(): if at_front: self.thumbs_manager.add_image(added_image) else: self.thumbs_manager.show(self.used, type="history") self.thumbs_manager.pin() add_timer = threading.Timer(0, _add) add_timer.start() def refresh_thumbs_downloads(self, added_image): self.update_indicator(auto_changed=False) should_show = added_image not in self.thumbs_manager.images and ( self.thumbs_manager.is_showing("downloads") or ( self.thumbs_manager.get_folders() is not None and sum( 1 for f in self.thumbs_manager.get_folders() if Util.file_in(added_image, f) ) > 0 ) ) if should_show: def _add(): self.thumbs_manager.add_image(added_image) add_timer = threading.Timer(0, _add) add_timer.start() def on_rating_changed(self, file): with self.prepared_lock: self.prepared = [f for f in self.prepared if f != file] self.prepare_event.set() self.update_indicator(auto_changed=False) def image_ok(self, img, fuzziness): try: if Util.is_animated_gif(img): return False if self.options.min_rating_enabled: rating = Util.get_rating(img) if rating is None or rating <= 0 or rating < self.options.min_rating: return False if self.options.use_landscape_enabled or self.options.min_size_enabled: if img in self.image_colors_cache: width = self.image_colors_cache[img][3] height = self.image_colors_cache[img][4] else: i = PILImage.open(img) width = i.size[0] height = i.size[1] if not self.size_ok(width, height, fuzziness): return False if self.options.desired_color_enabled or self.options.lightness_enabled: if not img in self.image_colors_cache: dom = DominantColors(img, False) self.image_colors_cache[img] = dom.get_dominant_colors() colors = self.image_colors_cache[img] if self.options.lightness_enabled: lightness = colors[2] if self.options.lightness_mode == Options.LightnessMode.DARK: if lightness >= 75 + fuzziness * 6: return False elif self.options.lightness_mode == Options.LightnessMode.LIGHT: if lightness <= 180 - fuzziness * 6: return False else: logger.warning( lambda: "Unknown lightness mode: %d", self.options.lightness_mode ) if ( self.options.desired_color_enabled and self.options.desired_color and not DominantColors.contains_color( colors, self.options.desired_color, fuzziness + 2 ) ): return False if self.options.safe_mode: try: info = Util.read_metadata(img) if info.get("sfwRating", 100) < 100: return False blacklisted = ( set(k.lower() for k in info.get("keywords", [])) & SAFE_MODE_BLACKLIST ) if len(blacklisted) > 0: return False except Exception: pass return True except Exception: logger.exception(lambda: "Error in image_ok for file %s" % img) return False def size_ok(self, width, height, fuzziness=0): ok = True if self.options.min_size_enabled: ok = ok and width >= self.min_width - fuzziness * 100 ok = ok and height >= self.min_height - fuzziness * 70 if self.options.use_landscape_enabled: ok = ok and width > height return ok def open_folder(self, widget=None, file=None): if not file: file = self.current if file: subprocess.Popen(["xdg-open", os.path.dirname(file)]) def open_file(self, widget=None, file=None): if not file: file = self.current if file: subprocess.Popen(["xdg-open", os.path.realpath(file)]) def on_show_origin(self, widget=None): if self.url: logger.info(lambda: "Opening url: " + self.url) webbrowser.open_new_tab(self.url) else: self.open_folder() def on_show_author(self, widget=None): if hasattr(self, "author_url") and self.author_url: logger.info(lambda: "Opening url: " + self.author_url) webbrowser.open_new_tab(self.author_url) def get_source(self, file=None): if not file: file = self.current if not file: return None prioritized_sources = [] prioritized_sources.extend( s for s in self.options.sources if s[0] and s[1] == Options.SourceType.IMAGE ) prioritized_sources.extend( s for s in self.options.sources if s[0] and s[1] == Options.SourceType.FOLDER ) prioritized_sources.extend( s for s in self.options.sources if s[0] and s[1] in Options.get_downloader_source_types() ) prioritized_sources.extend( s for s in self.options.sources if s[0] and s[1] == Options.SourceType.FETCHED ) prioritized_sources.extend( s for s in self.options.sources if s[0] and s[1] == Options.SourceType.FAVORITES ) prioritized_sources.extend(s for s in self.options.sources if s not in prioritized_sources) if len(prioritized_sources) != len(self.options.sources): logger.error( lambda: "len(prioritized_sources) != len(self.options.sources): %d, %d, %s, %s" % ( len(prioritized_sources), len(self.options.sources), prioritized_sources, self.options.sources, ) ) file_normpath = os.path.normpath(file) for s in prioritized_sources: try: if s[1] == Options.SourceType.IMAGE: if os.path.normpath(s[2]) == file_normpath: return s elif file_normpath.startswith(Util.folderpath(self.get_folder_of_source(s))): return s except Exception: # probably exception while creating the downloader, ignore, continue searching pass return None def focus_in_preferences(self, widget=None, file=None): if not file: file = self.current source = self.get_source(file) if source is None: self.show_notification(_("Current wallpaper is not in the image sources")) else: self.on_mnu_preferences_activate() self.get_preferences_dialog().focus_source_and_image(source, file) def move_or_copy_file(self, file, to, to_name, operation): is_move = operation == shutil.move try: if file != to: operation(file, to) try: operation(file + ".metadata.json", to) except Exception: pass logger.info(lambda: ("Moved %s to %s" if is_move else "Copied %s to %s") % (file, to)) # self.show_notification(("Moved %s to %s" if is_move else "Copied %s to %s") % (os.path.basename(file), to_name)) return True except Exception as err: if str(err).find("already exists") > 0: if operation == shutil.move: try: os.unlink(file) # self.show_notification(op, op + " " + os.path.basename(file) + " to " + to_name) return True except Exception: logger.exception(lambda: "Cannot unlink " + file) else: return True logger.exception(lambda: "Could not move/copy to " + to) if is_move: msg = ( _( "Could not move to %s. You probably don't have permissions to move this file." ) % to ) else: msg = ( _( "Could not copy to %s. You probably don't have permissions to copy this file." ) % to ) dialog = Gtk.MessageDialog( self, Gtk.DialogFlags.MODAL, Gtk.MessageType.WARNING, Gtk.ButtonsType.OK, msg ) self.dialogs.append(dialog) dialog.set_title("Move failed" if is_move else "Copy failed") dialog.run() dialog.destroy() self.dialogs.remove(dialog) return False def move_to_trash(self, widget=None, file=None): try: if not file: file = self.current if not file: return if self.url: self.ban_url(self.url) if not os.access(file, os.W_OK): self.show_notification( _("Cannot delete"), _("You don't have permissions to delete %s to Trash.") % file, ) else: if self.current == file: self.next_wallpaper(widget) self.remove_from_queues(file) self.prepare_event.set() self.thumbs_manager.remove_image(file) def _go(): try: gio_file = Gio.File.new_for_path(file) ok = gio_file.trash() except: logger.exception("Gio.File.trash failed with exception") ok = False if not ok: logger.error("Gio.File.trash failed") self.show_notification( _("Cannot delete"), _("Deleting to trash failed, check variety.log for more information."), ) Util.add_mainloop_task(_go) except Exception: logger.exception(lambda: "Exception in move_to_trash") def ban_url(self, url): try: self.banned.add(url) with open(os.path.join(self.config_folder, "banned.txt"), "a", encoding="utf8") as f: f.write(url + "\n") except Exception: logger.exception(lambda: "Could not ban URL") def remove_from_queues(self, file): self.position = max( 0, self.position - sum(1 for f in self.used[: self.position] if f == file) ) self.used = [f for f in self.used if f != file] self._remove_from_unseen(file) with self.prepared_lock: self.prepared = [f for f in self.prepared if f != file] def remove_folder_from_queues(self, folder): self.position = max( 0, self.position - sum(1 for f in self.used[: self.position] if Util.file_in(f, folder)) ) self.used = [f for f in self.used if not Util.file_in(f, folder)] with self.prepared_lock: self.prepared = [f for f in self.prepared if not Util.file_in(f, folder)] def copy_to_favorites(self, widget=None, file=None): try: if not file: file = self.current if not file: return if os.access(file, os.R_OK) and not self.is_in_favorites(file): self.move_or_copy_file( file, self.options.favorites_folder, "favorites", shutil.copy ) self.update_indicator(auto_changed=False) self.report_image_favorited(file) except Exception: logger.exception(lambda: "Exception in copy_to_favorites") def move_to_favorites(self, widget=None, file=None): try: if not file: file = self.current if not file: return if os.access(file, os.R_OK) and not self.is_in_favorites(file): operation = shutil.move if os.access(file, os.W_OK) else shutil.copy ok = self.move_or_copy_file( file, self.options.favorites_folder, "favorites", operation ) if ok: new_file = os.path.join(self.options.favorites_folder, os.path.basename(file)) self.used = [(new_file if f == file else f) for f in self.used] with self.prepared_lock: self.prepared = [(new_file if f == file else f) for f in self.prepared] self.prepare_event.set() if self.current == file: self.current = new_file if self.no_effects_on == file: self.no_effects_on = new_file self.set_wp_throttled(new_file) self.report_image_favorited(new_file) except Exception: logger.exception(lambda: "Exception in move_to_favorites") def report_image_favorited(self, img): meta = Util.read_metadata(img) if meta and "sourceType" in meta: for image_source in Options.IMAGE_SOURCES: if image_source.get_source_type() == meta["sourceType"]: def _do_hook(): image_source.on_image_favorited(img, meta) threading.Timer(0, _do_hook).start() def determine_favorites_operation(self, file=None): if not file: file = self.current if not file: return None if self.is_in_favorites(file): return "favorite" if not os.access(file, os.W_OK): return "copy" file_normpath = os.path.normpath(file) for pair in self.options.favorites_operations: folder = pair[0] folder_lower = folder.lower().strip() if folder_lower == "downloaded": folder = self.real_download_folder elif folder_lower == "fetched": folder = self.options.fetched_folder elif folder_lower == "others": folder = "/" folder = Util.folderpath(folder) if file_normpath.startswith(folder): op = pair[1].lower().strip() return op if op in ("copy", "move", "both") else "copy" return "copy" @on_gtk def on_quit(self, widget=None): logger.info(lambda: "Quitting") if self.running: self.running = False logger.debug(lambda: "Trying to destroy all dialogs") for d in self.dialogs + [self.preferences_dialog, self.about]: logger.debug(lambda: "Trying to destroy dialog %s" % d) try: if d: d.destroy() except Exception: logger.exception(lambda: "Could not destroy dialog") for e in self.events: e.set() try: if self.quotes_engine: logger.debug(lambda: "Trying to stop quotes engine") self.quotes_engine.quit() except Exception: logger.exception(lambda: "Could not stop quotes engine") if self.options.clock_enabled or self.options.quotes_enabled: self.options.clock_enabled = False self.options.quotes_enabled = False if self.current: logger.debug(lambda: "Cleaning up clock & quotes") Util.add_mainloop_task( lambda: self.do_set_wp(self.current, VarietyWindow.RefreshLevel.TEXTS) ) Util.start_force_exit_thread(15) logger.debug(lambda: "OK, waiting for other loops to finish") logger.debug(lambda: "Remaining threads: ") for t in threading.enumerate(): logger.debug(lambda: "%s, %s" % (t.name, getattr(t, "_Thread__target", None))) Util.add_mainloop_task(Gtk.main_quit) @on_gtk def first_run(self, fr_file): if not self.running: return with open(fr_file, "w") as f: f.write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) self.create_autostart_entry() self.on_mnu_preferences_activate() def write_current_version(self): current_version = varietyconfig.get_version() logger.info(lambda: "Writing current version %s to .version" % current_version) with open(os.path.join(self.config_folder, ".version"), "w") as f: f.write(current_version) def perform_upgrade(self): try: current_version = varietyconfig.get_version() if not os.path.exists(os.path.join(self.config_folder, ".firstrun")): # running for the first time last_version = current_version self.write_current_version() else: try: with open(os.path.join(self.config_folder, ".version")) as f: last_version = f.read().strip() except Exception: last_version = ( "0.4.12" ) # this is the last release that did not have the .version file logger.info( lambda: "Last run version was %s or earlier, current version is %s" % (last_version, current_version) ) if Util.compare_versions(last_version, "0.4.13") < 0: logger.info(lambda: "Performing upgrade to 0.4.13") try: # mark the current download folder as a valid download folder options = Options() options.read() logger.info( lambda: "Writing %s to current download folder %s" % (DL_FOLDER_FILE, options.download_folder) ) Util.makedirs(options.download_folder) dl_folder_file = os.path.join(options.download_folder, DL_FOLDER_FILE) if not os.path.exists(dl_folder_file): with open(dl_folder_file, "w") as f: f.write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) except Exception: logger.exception( lambda: "Could not create %s in download folder" % DL_FOLDER_FILE ) if Util.compare_versions(last_version, "0.4.14") < 0: logger.info(lambda: "Performing upgrade to 0.4.14") # Current wallpaper is now stored in wallpaper subfolder, remove old artefacts: walltxt = os.path.join(self.config_folder, "wallpaper.jpg.txt") if os.path.exists(walltxt): try: logger.info(lambda: "Moving %s to %s" % (walltxt, self.wallpaper_folder)) shutil.move(walltxt, self.wallpaper_folder) except Exception: logger.exception(lambda: "Could not move wallpaper.jpg.txt") for suffix in ("filter", "clock", "quote"): file = os.path.join(self.config_folder, "wallpaper-%s.jpg" % suffix) if os.path.exists(file): logger.info(lambda: "Deleting unneeded file " + file) Util.safe_unlink(file) if Util.compare_versions(last_version, "0.8.0") < 0: logger.info(lambda: "Performing upgrade to 0.8.0") options = Options() options.read() for source in options.sources: source[2] = source[2].replace("alpha.wallhaven.cc", "wallhaven.cc") options.write() if Util.compare_versions(last_version, "0.8.2") < 0: logger.info(lambda: "Performing upgrade to 0.8.2") options = Options() options.read() if not "Urban Dictionary" in options.quotes_disabled_sources: options.quotes_disabled_sources.append("Urban Dictionary") options.write() if Util.compare_versions(last_version, "0.8.3") < 0: logger.info(lambda: "Performing upgrade to 0.8.3") options = Options() options.read() options.sources = [source for source in options.sources if source[1] != "earth"] options.write() # Perform on every upgrade to an newer version: if Util.compare_versions(last_version, current_version) < 0: self.write_current_version() # Upgrade set and get_wallpaper scripts def upgrade_script(script, outdated_md5): try: script_file = os.path.join(self.scripts_folder, script) if ( not os.path.exists(script_file) or Util.md5file(script_file) in outdated_md5 ): logger.info( lambda: "Outdated %s file, copying it from %s" % (script, varietyconfig.get_data_file("scripts", script)) ) shutil.copy( varietyconfig.get_data_file("scripts", script), self.scripts_folder ) except Exception: logger.exception(lambda: "Could not upgrade script " + script) upgrade_script("set_wallpaper", VarietyWindow.OUTDATED_SET_WP_SCRIPTS) upgrade_script("get_wallpaper", VarietyWindow.OUTDATED_GET_WP_SCRIPTS) # Upgrade the autostart entry, if there is one if os.path.exists(get_autostart_file_path()): logger.info(lambda: "Updating Variety autostart desktop entry") self.create_autostart_entry() except Exception: logger.exception(lambda: "Error during version upgrade. Continuing.") def show_welcome_dialog(self): dialog = WelcomeDialog() def _on_continue(button): dialog.destroy() self.dialogs.remove(dialog) dialog.ui.continue_button.connect("clicked", _on_continue) self.dialogs.append(dialog) dialog.run() dialog.destroy() def show_privacy_dialog(self): dialog = PrivacyNoticeDialog() def _on_accept(*args): dialog.destroy() self.dialogs.remove(dialog) def _on_close(*args): # At this point we shouldn't have much to clean up yet! sys.exit(1) dialog.ui.accept_button.connect("clicked", _on_accept) dialog.ui.reject_button.connect("clicked", _on_close) dialog.connect("delete-event", _on_close) dialog.ui.accept_button.grab_focus() self.dialogs.append(dialog) dialog.run() def edit_prefs_file(self, widget=None): dialog = Gtk.MessageDialog( self, Gtk.DialogFlags.DESTROY_WITH_PARENT, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, _( "I will open an editor with the config file and apply the changes after you save and close the editor." ), ) self.dialogs.append(dialog) dialog.set_title("Edit config file") dialog.run() dialog.destroy() self.dialogs.remove(dialog) subprocess.call(["gedit", os.path.join(self.config_folder, "variety.conf")]) self.reload_config() def on_pause_resume(self, widget=None, change_enabled=None): if change_enabled is None: self.options.change_enabled = not self.options.change_enabled else: self.options.change_enabled = change_enabled if self.preferences_dialog: self.preferences_dialog.ui.change_enabled.set_active(self.options.change_enabled) self.options.write() self.update_indicator(auto_changed=False) self.change_event.set() def on_safe_mode_toggled(self, widget=None, safe_mode=None): if safe_mode is None: self.options.safe_mode = not self.options.safe_mode else: self.options.safe_mode = safe_mode if self.preferences_dialog: self.preferences_dialog.ui.safe_mode.set_active(self.options.safe_mode) self.options.write() self.update_indicator(auto_changed=False) self.clear_prepared_queue() def process_command(self, arguments, initial_run): try: arguments = [str(arg) for arg in arguments] logger.info(lambda: "Received command: " + str(arguments)) options, args = parse_options(arguments, report_errors=False) if options.quit: self.on_quit() return if args: logger.info(lambda: "Treating free arguments as urls: " + str(args)) if not initial_run: self.process_urls(args) else: def _process_urls(): self.process_urls(args) GObject.timeout_add(5000, _process_urls) if options.set_options: try: Options.set_options(options.set_options) if not initial_run: self.reload_config() except Exception: logger.exception(lambda: "Could not read/write configuration:") def _process_command(): if not initial_run: if options.trash: self.move_to_trash() elif options.favorite: self.copy_to_favorites() elif options.movefavorite: self.move_to_favorites() if options.set_wallpaper: self.set_wallpaper(options.set_wallpaper) elif options.fast_forward: self.next_wallpaper(bypass_history=True) elif options.next: self.next_wallpaper() elif options.previous: self.prev_wallpaper() if options.pause: self.on_pause_resume(change_enabled=False) elif options.resume: self.on_pause_resume(change_enabled=True) elif options.toggle_pause: self.on_pause_resume() if options.history: self.show_hide_history() if options.downloads: self.show_hide_downloads() if options.selector: self.show_hide_wallpaper_selector() if options.preferences: self.on_mnu_preferences_activate() if options.quotes_fast_forward: self.next_quote(bypass_history=True) elif options.quotes_next: self.next_quote() elif options.quotes_previous: self.prev_quote() if options.quotes_toggle_pause: self.on_quotes_pause_resume() if options.quotes_save_favorite: self.quote_save_to_favorites() GObject.timeout_add(3000 if initial_run else 1, _process_command) return self.current if options.show_current else "" except Exception: logger.exception(lambda: "Could not process passed command") @on_gtk def update_indicator_icon(self): if self.options.icon != "None": if self.ind is None: logger.info(lambda: "Creating indicator") self.ind, self.indicator, self.status_icon = indicator.new_application_indicator( self ) else: self.ind.set_visible(True) if self.options.icon == "Current": self.ind.set_icon(self.current) else: self.ind.set_icon(self.options.icon) else: if self.ind is not None: self.ind.set_visible(False) def process_urls(self, urls, verbose=True): def fetch(): try: Util.makedirs(self.options.fetched_folder) for url in urls: if not self.running: return if url.startswith(("variety://", "vrty://")): self.process_variety_url(url) continue is_local = os.path.exists(url) if is_local: if not (os.path.isfile(url) and Util.is_image(url)): self.show_notification(_("Not an image"), url) continue file = url local_name = os.path.basename(file) self.show_notification( _("Added to queue"), local_name + "\n" + _("Press Next to see it"), icon=file, ) else: file = ImageFetcher.fetch( url, self.options.fetched_folder, progress_reporter=self.show_notification, verbose=verbose, ) if file: self.show_notification( _("Fetched"), os.path.basename(file) + "\n" + _("Press Next to see it"), icon=file, ) if file: self.register_downloaded_file(file) with self.prepared_lock: logger.info( lambda: "Adding fetched file %s to used queue immediately after current file" % file ) try: if self.used[self.position] != file and ( self.position <= 0 or self.used[self.position - 1] != file ): at_front = self.position == 0 self.used.insert(self.position, file) self.position += 1 self.thumbs_manager.mark_active( file=self.used[self.position], position=self.position ) self.refresh_thumbs_history(file, at_front) except IndexError: self.used.insert(self.position, file) self.position += 1 except Exception: logger.exception(lambda: "Exception in process_urls") fetch_thread = threading.Thread(target=fetch) fetch_thread.daemon = True fetch_thread.start() def process_variety_url(self, url): try: logger.info(lambda: "Processing variety url %s" % url) # make the url urlparse-friendly: url = url.replace("variety://", "http://") url = url.replace("vrty://", "http://") parts = urllib.parse.urlparse(url) command = parts.netloc args = urllib.parse.parse_qs(parts.query) if command == "add-source": source_type = args["type"][0].lower() if not source_type in Options.get_all_supported_source_types(): self.show_notification( _("Unsupported source type"), _("Are you running the most recent version of Variety?"), ) return def _add(): newly_added = self.preferences_dialog.add_sources( source_type, [args["location"][0]] ) self.preferences_dialog.delayed_apply() if newly_added == 1: self.show_notification(_("New image source added")) else: self.show_notification(_("Image source already exists, enabling it")) Util.add_mainloop_task(_add) elif command == "set-wallpaper": image_url = args["image_url"][0] origin_url = args["origin_url"][0] source_type = args.get("source_type", [None])[0] source_location = args.get("source_location", [None])[0] source_name = args.get("source_name", [None])[0] extra_metadata = {} image = ImageFetcher.fetch( image_url, self.options.fetched_folder, origin_url=origin_url, source_type=source_type, source_location=source_location, source_name=source_name, extra_metadata=extra_metadata, progress_reporter=self.show_notification, verbose=True, ) if image: self.register_downloaded_file(image) self.show_notification( _("Fetched and applied"), os.path.basename(image), icon=image ) self.set_wallpaper(image, False) elif command == "test-variety-link": self.show_notification(_("It works!"), _("Yay, Variety links work. Great!")) else: self.show_notification( _("Unsupported command"), _("Are you running the most recent version of Variety?"), ) except: self.show_notification( _("Could not process the given variety:// URL"), _("Run with logging enabled to see details"), ) logger.exception(lambda: "Exception in process_variety_url") def get_desktop_wallpaper(self): try: script = os.path.join(self.scripts_folder, "get_wallpaper") file = None if os.access(script, os.X_OK): logger.debug(lambda: "Running get_wallpaper script") try: output = subprocess.check_output(script).decode().strip() if output: file = output except subprocess.CalledProcessError: logger.exception(lambda: "Exception when calling get_wallpaper script") else: logger.warning( lambda: "get_wallpaper script is missing or not executable: " + script ) if not file and self.gsettings: file = self.gsettings.get_string("picture-uri") if not file: return None if file[0] == file[-1] == "'" or file[0] == file[-1] == '"': file = file[1:-1] file = file.replace("file://", "") return file except Exception: logger.exception(lambda: "Could not get current wallpaper") return None def cleanup_old_wallpapers(self, folder, prefix, new_wallpaper=None): try: current_wallpaper = self.get_desktop_wallpaper() for name in os.listdir(folder): file = os.path.join(folder, name) if ( file != current_wallpaper and file != new_wallpaper and file != self.post_filter_filename and name.startswith(prefix) and name.endswith(".jpg") ): logger.debug(lambda: "Removing old wallpaper %s" % file) Util.safe_unlink(file) except Exception: logger.exception(lambda: "Cannot remove all old wallpaper files from %s:" % folder) def set_desktop_wallpaper(self, wallpaper, original_file, refresh_level): script = os.path.join(self.scripts_folder, "set_wallpaper") if os.access(script, os.X_OK): auto = ( "manual" if not self.auto_changed else ("auto" if refresh_level == VarietyWindow.RefreshLevel.ALL else "refresh") ) logger.debug( lambda: "Running set_wallpaper script with parameters: %s, %s, %s" % (wallpaper, auto, original_file) ) try: subprocess.check_call( ["timeout", "--kill-after=5", "10", script, wallpaper, auto, original_file] ) except subprocess.CalledProcessError as e: if e.returncode == 124: logger.error(lambda: "Timeout while running set_wallpaper script, killed") logger.exception( lambda: "Exception when calling set_wallpaper script: %d" % e.returncode ) else: logger.error(lambda: "set_wallpaper script is missing or not executable: " + script) if self.gsettings: self.gsettings.set_string("picture-uri", "file://" + wallpaper) self.gsettings.apply() def show_hide_history(self, widget=None): if self.thumbs_manager.is_showing("history"): self.thumbs_manager.hide(force=True) else: self.thumbs_manager.show(self.used, type="history") self.thumbs_manager.pin() self.update_indicator(auto_changed=False) def show_hide_downloads(self, widget=None): if self.thumbs_manager.is_showing("downloads"): self.thumbs_manager.hide(force=True) else: downloaded = list( Util.list_files( files=[], folders=[self.real_download_folder], filter_func=Util.is_image, randomize=False, ) ) downloaded = sorted(downloaded, key=lambda f: os.stat(f).st_mtime, reverse=True) self.thumbs_manager.show(downloaded, type="downloads") self.thumbs_manager.pin() self.update_indicator(auto_changed=False) def show_hide_wallpaper_selector(self, widget=None): pref_dialog = self.get_preferences_dialog() if self.thumbs_manager.is_showing("selector"): self.thumbs_manager.hide(force=True) else: rows = [r for r in pref_dialog.ui.sources.get_model() if r[0]] def _go(): pref_dialog.show_thumbs(rows, pin=True, thumbs_type="selector") threading.Timer(0, _go).start() def save_last_change_time(self): with open(os.path.join(self.config_folder, ".last_change_time"), "w") as f: f.write(str(self.last_change_time)) def load_last_change_time(self): now = time.time() self.last_change_time = now # take persisted last_change_time into consideration only if the change interval is more than 6 hours: # thus users who change often won't have the wallpaper changed practically on every start, # and users who change rarely will still have their wallpaper changed sometimes even if Variety or the computer # does not run all the time if self.options.change_interval >= 6 * 60 * 60: try: with open(os.path.join(self.config_folder, ".last_change_time")) as f: self.last_change_time = float(f.read().strip()) if self.last_change_time > now: logger.warning( lambda: "Persisted last_change_time after current time, setting to current time" ) self.last_change_time = now logger.info( lambda: "Change interval >= 6 hours, using persisted last_change_time " + str(self.last_change_time) ) logger.info( lambda: "Still to wait: %d seconds" % max(0, self.options.change_interval - (time.time() - self.last_change_time)) ) except Exception: logger.info(lambda: "Could not read last change time, setting it to current time") self.last_change_time = now else: logger.info( lambda: "Change interval < 6 hours, ignore persisted last_change_time, " "wait initially the whole interval: " + str(self.options.change_interval) ) def save_history(self): try: start = max(0, self.position - 100) # TODO do we want to remember forward history? end = min(self.position + 100, len(self.used)) to_save = self.used[start:end] with open(os.path.join(self.config_folder, "history.txt"), "w", encoding="utf8") as f: f.write("%d\n" % (self.position - start)) for file in to_save: f.write(file + "\n") except Exception: logger.exception(lambda: "Could not save history") def load_history(self): self.used = [] self.position = 0 self.no_effects_on = None try: with open(os.path.join(self.config_folder, "history.txt"), "r", encoding="utf8") as f: lines = list(f) self.position = int(lines[0].strip()) for i, line in enumerate(lines[1:]): if os.access(line.strip(), os.R_OK): self.used.append(line.strip()) elif i <= self.position: self.position = max(0, self.position - 1) except Exception: logger.warning(lambda: "Could not load history file, continuing without it, no worries") current = self.get_desktop_wallpaper() if current: if os.path.normpath(os.path.dirname(current)) == os.path.normpath( self.wallpaper_folder ) or os.path.basename(current).startswith("variety-copied-wallpaper-"): try: with open( os.path.join(self.wallpaper_folder, "wallpaper.jpg.txt"), encoding="utf8" ) as f: current = f.read().strip() except Exception: logger.exception(lambda: "Cannot read wallpaper.jpg.txt") self.current = current if self.current and ( self.position >= len(self.used) or current != self.used[self.position] ): self.used.insert(0, self.current) self.position = 0 def disable_quotes(self, widget=None): self.options.quotes_enabled = False self.quote = None if self.preferences_dialog: self.preferences_dialog.ui.quotes_enabled.set_active(False) self.options.write() self.update_indicator(auto_changed=False) if self.quotes_engine: self.quotes_engine.stop() def prev_quote(self, widget=None): if self.quotes_engine and self.options.quotes_enabled: self.quote = self.quotes_engine.prev_quote() self.update_indicator() self.refresh_texts() def next_quote(self, widget=None, bypass_history=False): if self.quotes_engine and self.options.quotes_enabled: self.quote = self.quotes_engine.next_quote(bypass_history) self.update_indicator() self.refresh_texts() def quote_copy_to_clipboard(self, widget=None): if self.quote: text = self.quote["quote"] + " - " + self.quote["author"] clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) clipboard.set_text(text, -1) clipboard.store() def reload_quote_favorites_contents(self): self.quote_favorites_contents = "" try: if os.path.isfile(self.options.quotes_favorites_file): with open(self.options.quotes_favorites_file, encoding="utf8") as f: self.quote_favorites_contents = f.read() except Exception: logger.exception( lambda: "Could not load favorite quotes file %s" % self.options.quotes_favorites_file ) self.quote_favorites_contents = "" def current_quote_to_text(self): return ( self.quote["quote"] + ("\n-- " + self.quote["author"] if self.quote["author"] else "") + "\n%\n" if self.quote else "" ) def quote_save_to_favorites(self, widget=None): if self.quote: try: self.reload_quote_favorites_contents() if self.quote_favorites_contents.find(self.current_quote_to_text()) == -1: with open(self.options.quotes_favorites_file, "a") as f: text = self.current_quote_to_text() f.write(text) self.reload_quote_favorites_contents() self.update_indicator() self.show_notification( "Saved", "Saved to %s" % self.options.quotes_favorites_file ) else: self.show_notification(_("Already in Favorites")) except Exception: logger.exception(lambda: "Could not save quote to favorites") self.show_notification( "Oops, something went wrong when trying to save the quote to the favorites file" ) def quote_view_favorites(self, widget=None): if os.path.isfile(self.options.quotes_favorites_file): subprocess.Popen(["xdg-open", self.options.quotes_favorites_file]) def on_quotes_pause_resume(self, widget=None, change_enabled=None): if change_enabled is None: self.options.quotes_change_enabled = not self.options.quotes_change_enabled else: self.options.quotes_change_enabled = change_enabled if self.preferences_dialog: self.preferences_dialog.ui.quotes_change_enabled.set_active( self.options.quotes_change_enabled ) self.options.write() self.update_indicator(auto_changed=False) if self.quotes_engine: self.quotes_engine.on_options_updated(False) def view_quote(self, widget=None): if self.quote and self.quote.get("link", None): webbrowser.open_new_tab(self.quote["link"]) def google_quote_text(self, widget=None): if self.quote and self.quote["quote"]: url = "https://google.com/search?q=" + urllib.parse.quote_plus( self.quote["quote"].encode("utf8") ) webbrowser.open_new_tab(url) def google_quote_author(self, widget=None): if self.quote and self.quote["author"]: url = "https://google.com/search?q=" + urllib.parse.quote_plus( self.quote["author"].encode("utf8") ) webbrowser.open_new_tab(url) def google_image_search(self, widget=None): if self.image_url: url = ( "https://www.google.com/searchbyimage?safe=off&image_url=" + urllib.parse.quote_plus(self.image_url.encode("utf8")) ) webbrowser.open_new_tab(url) def toggle_no_effects(self, no_effects): self.no_effects_on = self.current if no_effects else None self.refresh_wallpaper() def create_desktop_entry(self): """ Creates a profile-specific desktop entry in ~/.local/share/applications This ensures Variety's icon context menu is for the correct profile, and also that application's windows will be correctly grouped by profile. """ if is_default_profile(): return try: desktop_file_folder = os.path.expanduser("~/.local/share/applications") profile_name = get_profile_short_name() desktop_file_path = os.path.join(desktop_file_folder, get_desktop_file_name()) should_notify = not os.path.exists(desktop_file_path) Util.makedirs(desktop_file_folder) Util.copy_with_replace( varietyconfig.get_data_file("variety-profile.desktop.template"), desktop_file_path, { "{PROFILE_PATH}": get_profile_path(expanded=True), "{PROFILE_NAME}": (profile_name), "{VARIETY_PATH}": Util.get_exec_path(), "{WM_CLASS}": get_profile_wm_class(), }, ) if should_notify: self.show_notification( _("Variety: New desktop entry"), _( "We created a new desktop entry in ~/.local/share/applications " 'to run Variety with profile "{}". Find it in the application launcher.' ).format(profile_name), ) except Exception: logger.exception(lambda: "Could not create desktop entry for a run with --profile") def create_autostart_entry(self): try: autostart_file_path = get_autostart_file_path() Util.makedirs(os.path.dirname(autostart_file_path)) should_notify = not os.path.exists(autostart_file_path) Util.copy_with_replace( varietyconfig.get_data_file("variety-autostart.desktop.template"), autostart_file_path, { "{PROFILE_PATH}": get_profile_path(expanded=True), "{VARIETY_PATH}": Util.get_exec_path(), "{WM_CLASS}": get_profile_wm_class(), }, ) if should_notify: self.show_notification( _("Variety: Created autostart desktop entry"), _( "We created a new desktop entry in ~/.config/autostart. " "Variety should start automatically on next login." ), ) except Exception: logger.exception(lambda: "Error while creating autostart desktop entry") self.show_notification( _("Could not create autostart entry"), _( "An error occurred while creating the autostart desktop entry\n" "Please run from a terminal with the -v flag and try again." ), ) def on_start_slideshow(self, widget=None): def _go(): try: if self.options.slideshow_mode.lower() != "window": subprocess.call(["killall", "-9", "variety-slideshow"]) args = ["variety-slideshow"] args += ["--seconds", str(self.options.slideshow_seconds)] args += ["--fade", str(self.options.slideshow_fade)] args += ["--zoom", str(self.options.slideshow_zoom)] args += ["--pan", str(self.options.slideshow_pan)] if "," in self.options.slideshow_sort_order.lower(): sort = self.options.slideshow_sort_order.lower().split(",")[0] order = self.options.slideshow_sort_order.lower().split(",")[1] else: sort = self.options.slideshow_sort_order.lower() order = "asc" args += ["--sort", sort] args += ["--order", order] args += ["--mode", self.options.slideshow_mode.lower()] images = [] folders = [] if self.options.slideshow_sources_enabled: for source in self.options.sources: if source[0]: type = source[1] location = source[2] if type == Options.SourceType.IMAGE: images.append(location) else: folder = self.get_folder_of_source(source) if folder: folders.append(folder) if self.options.slideshow_favorites_enabled: folders.append(self.options.favorites_folder) if self.options.slideshow_downloads_enabled: folders.append(self.options.download_folder) if self.options.slideshow_custom_enabled and os.path.isdir( self.options.slideshow_custom_folder ): folders.append(self.options.slideshow_custom_folder) if not images and not folders: folders.append(self.options.favorites_folder) if not list( Util.list_files( files=images, folders=folders, filter_func=Util.is_image, max_files=1, randomize=False, ) ): self.show_notification( _("No images"), _("There are no images in the slideshow folders") ) return args += images args += folders if self.options.slideshow_monitor.lower() != "all": try: args += ["--monitor", str(int(self.options.slideshow_monitor))] except: pass subprocess.Popen(args) else: screen = Gdk.Screen.get_default() for i in range(0, screen.get_n_monitors()): new_args = list(args) new_args += ["--monitor", str(i + 1)] subprocess.Popen(new_args) except: logger.exception("Could not start slideshow:") threading.Thread(target=_go).start() variety-0.8.3/variety/WelcomeDialog.py000066400000000000000000000035601362063646600177750ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE from gi.repository import Gtk # pylint: disable=E0611 from variety_lib.helpers import get_builder class WelcomeDialog(Gtk.Dialog): __gtype_name__ = "WelcomeDialog" def __new__(cls): """Special static method that's automatically called by Python when constructing a new instance of this class. Returns a fully instantiated WelcomeDialog object. """ builder = get_builder("WelcomeDialog") new_object = builder.get_object("welcome_dialog") new_object.finish_initializing(builder) return new_object def finish_initializing(self, builder): """Called when we're finished initializing. finish_initalizing should be called after parsing the ui definition and creating a WelcomeDialog object with it in order to finish initializing the start of the new WelcomeDialog instance. """ # Get a reference to the builder and set up the signals. self.builder = builder self.ui = builder.get_ui(self) if __name__ == "__main__": dialog = WelcomeDialog() dialog.show() Gtk.main() variety-0.8.3/variety/__init__.py000066400000000000000000000201501362063646600170130ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012-2018, Peter Levi # Copyright (c) 2017-2018, James Lu # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import dbus, dbus.service, dbus.glib import logging import os import signal import sys import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GObject # pylint: disable=E0611 class SafeLogger(logging.Logger): """ Fixes UnicodeDecodeErrors errors in logging calls: Accepts lambda as well string messages. Catches errors when evaluating the passed lambda. """ def makeRecord(self, name, level, fn, lno, msg, *args, **kwargs): try: new_msg = msg if isinstance(msg, str) else msg() except: locale_info = "Unknown" try: locale_info = "Terminal encoding=%s, LANG=%s, LANGUAGE=%s" % ( sys.stdout.encoding, os.getenv("LANG"), os.getenv("LANGUAGE"), ) logging.getLogger("variety").exception( "Errors while logging. Locale info: %s" % locale_info ) # TODO gather and log more info here except: pass new_msg = "Errors while logging. Locale info: %s" % locale_info return super().makeRecord(name, level, fn, lno, new_msg, *args, **kwargs) logging.setLoggerClass(SafeLogger) # these must be after the setLoggerClass call, as they obtain the variety logger from variety import VarietyWindow, ThumbsManager, ThumbsWindow from variety.profile import set_profile_path, get_profile_path, is_default_profile, get_profile_id from variety.Util import Util, _, ModuleProfiler, safe_print # # Change default encoding from ascii to UTF8 - works OK on Linux and prevents various UnicodeEncodeErrors/UnicodeDecodeErrors # Still, generally considerd bad practice, may cause some deep hidden errors, as various Python stuff depends on it # reload(sys) # sys.setdefaultencoding('UTF8') def _get_dbus_key(): """ DBus key for Variety. Variety uses a different key per profile, so several instances can run simultaneously if running with different profiles. Command any instance from the terminal by passing explicitly the same --profile options as it was started with. :return: the dbus key """ if is_default_profile(): return "com.peterlevi.Variety" else: return "com.peterlevi.Variety_{}".format(get_profile_id()) DBUS_PATH = "/com/peterlevi/Variety" class VarietyService(dbus.service.Object): def __init__(self, variety_window): self.variety_window = variety_window bus_name = dbus.service.BusName(_get_dbus_key(), bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus_name, DBUS_PATH) @dbus.service.method(dbus_interface=_get_dbus_key(), in_signature="as", out_signature="s") def process_command(self, arguments): result = self.variety_window.process_command(arguments, initial_run=False) return "" if result is None else result VARIETY_WINDOW = None terminate = False def _sigint_handler(*args): global terminate terminate = True def _check_quit(): global terminate if not terminate: GObject.timeout_add(1000, _check_quit) return logging.getLogger("variety").info("Terminating signal received, quitting...") safe_print( _("Terminating signal received, quitting..."), "Terminating signal received, quitting...", file=sys.stderr, ) global VARIETY_WINDOW if VARIETY_WINDOW: VARIETY_WINDOW.on_quit() Util.start_force_exit_thread(10) def _set_up_logging(verbose): # add a handler to prevent basicConfig root = logging.getLogger() null_handler = logging.NullHandler() root.addHandler(null_handler) formatter = logging.Formatter("%(levelname)s: %(asctime)s: %(funcName)s() '%(message)s'") logger = logging.getLogger("variety") logger_sh = logging.StreamHandler() logger_sh.setFormatter(formatter) logger.addHandler(logger_sh) try: logger_file = logging.FileHandler(os.path.join(get_profile_path(), "variety.log"), "w") logger_file.setFormatter(formatter) logger.addHandler(logger_file) except Exception: logger.exception("Could not create file logger") lib_logger = logging.getLogger("variety_lib") lib_logger_sh = logging.StreamHandler() lib_logger_sh.setFormatter(formatter) lib_logger.addHandler(lib_logger_sh) logger.setLevel(logging.INFO) # Set the logging level to show debug messages. if verbose >= 2: logger.setLevel(logging.DEBUG) elif not verbose: # If we're not in verbose mode, only log these messages to file. This prevents # flooding syslog and/or ~/.xsession-errors depending on how variety was started: # (https://bugs.launchpad.net/variety/+bug/1685003) # XXX: We should /really/ make the internal debug logging use logging.debug, # this is really just a bandaid patch. logger_sh.setLevel(logging.WARNING) if verbose >= 3: lib_logger.setLevel(logging.DEBUG) def main(): # Ctrl-C signal.signal(signal.SIGINT, _sigint_handler) signal.signal(signal.SIGTERM, _sigint_handler) signal.signal(signal.SIGQUIT, _sigint_handler) arguments = sys.argv[1:] # validate arguments from variety import VarietyOptionParser options, args = VarietyOptionParser.parse_options(arguments) set_profile_path(options.profile) Util.makedirs(get_profile_path()) # ensure singleton per profile bus = dbus.SessionBus() dbus_key = _get_dbus_key() if bus.request_name(dbus_key) != dbus.bus.REQUEST_NAME_REPLY_PRIMARY_OWNER: if not arguments or (options.profile and len(arguments) <= 2): arguments = ["--preferences"] safe_print( _("Variety is already running. Sending the command to the running instance."), "Variety is already running. Sending the command to the running instance.", file=sys.stderr, ) method = bus.get_object(dbus_key, DBUS_PATH).get_dbus_method("process_command") result = method(arguments) if result: safe_print(result) return # set up logging # set_up_logging must be called after the DBus checks, only by one running instance, # or the log file can be corrupted _set_up_logging(options.verbose) logging.getLogger("variety").info(lambda: "Using profile folder {}".format(get_profile_path())) if options.verbose >= 3: profiler = ModuleProfiler() if options.verbose >= 5: # The main variety package pkgname = os.path.dirname(__file__) profiler.log_path(pkgname) if options.verbose >= 6: # Track variety_lib profiler.log_path(pkgname + "_lib") else: # Cherry-picked log items carried over from variety 0.6.x profiler.log_class(VarietyWindow.VarietyWindow) if options.verbose >= 4: profiler.log_class(ThumbsManager.ThumbsManager) profiler.log_class(ThumbsWindow.ThumbsWindow) profiler.start() # Run the application. window = VarietyWindow.VarietyWindow() global VARIETY_WINDOW VARIETY_WINDOW = window service = VarietyService(window) bus.call_on_disconnection(window.on_quit) window.start(arguments) GObject.timeout_add(2000, _check_quit) Gtk.main() variety-0.8.3/variety/indicator.py000066400000000000000000000410641362063646600172370ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE """Code to add AppIndicator.""" import logging import os from gi.repository import Gtk # pylint: disable=E0611 from variety.Util import Util, _ from variety_lib import varietyconfig THEME_ICON_NAME = "variety-indicator" THEME_ICON_NAME_DARK = "variety-indicator-dark" THEME_ICON_NAME_NUM = "variety-indicator-num{}" try: import gi try: gi.require_version("AyatanaAppIndicator3", "0.1") from gi.repository import AyatanaAppIndicator3 as AppIndicator3 # pylint: disable=E0611 _indicator_backend = "AyatanaAppIndicator3" # Just a dummy value we use for logging except (ValueError, ImportError): gi.require_version("AppIndicator3", "0.1") from gi.repository import AppIndicator3 # pylint: disable=E0611 _indicator_backend = "AppIndicator3" use_appindicator = True except (ValueError, ImportError): _indicator_backend = "fallback tray" use_appindicator = False logger = logging.getLogger("variety") class Indicator: def __init__(self, window): self.parent = window self.create_menu(window) self.create_indicator(window) def create_menu(self, window): self.menu = Gtk.Menu() if not Util.is_unity(): self.next_main = Gtk.MenuItem(_("_Next")) self.next_main.set_use_underline(True) self.next_main.connect("activate", window.next_wallpaper) self.menu.append(self.next_main) self.prev_main = Gtk.MenuItem(_("_Previous")) self.prev_main.set_use_underline(True) self.prev_main.connect("activate", window.prev_wallpaper) self.menu.append(self.prev_main) self.menu.append(Gtk.SeparatorMenuItem.new()) self.file_label = Gtk.MenuItem(_("Current desktop wallpaper")) self.file_label.connect("activate", window.open_file) self.menu.append(self.file_label) self.show_origin = Gtk.MenuItem(_("Show origin")) self.show_origin.connect("activate", window.on_show_origin) self.show_origin.set_sensitive(False) self.menu.append(self.show_origin) self.show_author = Gtk.MenuItem("Show author") self.show_author.connect("activate", window.on_show_author) self.show_author.set_sensitive(False) self.show_author.set_visible(False) self.menu.append(self.show_author) self.copy_to_favorites = Gtk.MenuItem(_("Copy to _Favorites")) self.copy_to_favorites.set_use_underline(True) self.copy_to_favorites.connect("activate", window.copy_to_favorites) self.menu.append(self.copy_to_favorites) self.move_to_favorites = Gtk.MenuItem(_("Move to Favorites")) self.move_to_favorites.set_use_underline(True) self.move_to_favorites.connect("activate", window.move_to_favorites) self.move_to_favorites.set_visible(False) self.menu.append(self.move_to_favorites) self.trash = Gtk.MenuItem(_("Delete to _Trash")) self.trash.set_use_underline(True) self.trash.connect("activate", window.move_to_trash) self.menu.append(self.trash) self.menu.append(Gtk.SeparatorMenuItem.new()) self.image_menu = Gtk.Menu() self.next = Gtk.MenuItem(_("_Next")) self.next.set_use_underline(True) self.next.connect("activate", window.next_wallpaper) self.image_menu.append(self.next) self.prev = Gtk.MenuItem(_("_Previous")) self.prev.set_use_underline(True) self.prev.connect("activate", window.prev_wallpaper) self.image_menu.append(self.prev) self.fast_forward = Gtk.MenuItem(_("_Next, skipping forward history")) self.fast_forward.set_use_underline(True) def _fast_forward(widget): window.next_wallpaper(widget, bypass_history=True) self.fast_forward.connect("activate", _fast_forward) self.image_menu.append(self.fast_forward) self.image_menu.append(Gtk.SeparatorMenuItem.new()) self.scroll_tip = Gtk.MenuItem(_("Tip: Scroll wheel over icon\nfor Next and Previous")) self.scroll_tip.set_sensitive(False) self.image_menu.append(self.scroll_tip) self.image_menu.append(Gtk.SeparatorMenuItem.new()) self.pause_resume = Gtk.MenuItem(_("Pause on current")) self.pause_resume.connect("activate", window.on_pause_resume) self.image_menu.append(self.pause_resume) self.image_item = Gtk.MenuItem(_("_Image")) self.image_item.set_use_underline(True) self.image_item.set_submenu(self.image_menu) self.menu.append(self.image_item) self.image_menu.append(Gtk.SeparatorMenuItem.new()) self.focus = Gtk.MenuItem(_("Where is it from?")) self.focus.connect("activate", window.focus_in_preferences) self.image_menu.append(self.focus) self.no_effects = Gtk.CheckMenuItem(_("Show without effects")) self.no_effects.set_active(False) self.no_effects.set_use_underline(True) def _toggle_no_effects(widget=None): window.toggle_no_effects(self.no_effects.get_active()) self.no_effects_handler_id = self.no_effects.connect("toggled", _toggle_no_effects) self.image_menu.append(self.no_effects) self.google_image = Gtk.MenuItem(_("Google Image Search")) self.google_image.connect("activate", window.google_image_search) self.image_menu.append(self.google_image) self.rating_separator = Gtk.SeparatorMenuItem.new() self.image_menu.append(self.rating_separator) self.rating = Gtk.MenuItem(_("Set EXIF Rating")) self.image_menu.append(self.rating) # self.image_item = Gtk.MenuItem(_("_Image")) # self.image_item.set_use_underline(True) # self.image_item.set_submenu(self.image_menu) # self.menu.append(self.image_item) # self.quotes_menu = Gtk.Menu() self.next_quote = Gtk.MenuItem(_("_Next")) self.next_quote.set_use_underline(True) self.next_quote.connect("activate", window.next_quote) self.quotes_menu.append(self.next_quote) self.prev_quote = Gtk.MenuItem(_("_Previous")) self.prev_quote.set_use_underline(True) self.prev_quote.connect("activate", window.prev_quote) self.quotes_menu.append(self.prev_quote) self.fast_forward_quote = Gtk.MenuItem(_("_Next, skipping forward history")) self.fast_forward_quote.set_use_underline(True) def _fast_forward_quote(widget): window.next_quote(widget, bypass_history=True) self.fast_forward_quote.connect("activate", _fast_forward_quote) self.quotes_menu.append(self.fast_forward_quote) self.quotes_menu.append(Gtk.SeparatorMenuItem.new()) self.quotes_pause_resume = Gtk.MenuItem(_("Pause on current")) self.quotes_pause_resume.connect("activate", window.on_quotes_pause_resume) self.quotes_menu.append(self.quotes_pause_resume) self.quotes_menu.append(Gtk.SeparatorMenuItem.new()) self.quote_favorite = Gtk.MenuItem(_("Save to Favorites")) self.quote_favorite.set_use_underline(True) self.quote_favorite.connect("activate", window.quote_save_to_favorites) self.quotes_menu.append(self.quote_favorite) self.quote_view_favs = Gtk.MenuItem(_("View Favorites...")) self.quote_view_favs.set_use_underline(True) self.quote_view_favs.connect("activate", window.quote_view_favorites) self.quotes_menu.append(self.quote_view_favs) self.quotes_menu.append(Gtk.SeparatorMenuItem.new()) self.quote_clipboard = Gtk.MenuItem(_("Copy to Clipboard")) self.quote_clipboard.set_use_underline(True) self.quote_clipboard.connect("activate", window.quote_copy_to_clipboard) self.quotes_menu.append(self.quote_clipboard) self.view_quote = Gtk.MenuItem() self.view_quote.set_use_underline(True) self.view_quote.connect("activate", window.view_quote) self.quotes_menu.append(self.view_quote) self.google_quote_text = Gtk.MenuItem(_("Google Quote")) self.google_quote_text.set_use_underline(True) self.google_quote_text.connect("activate", window.google_quote_text) self.quotes_menu.append(self.google_quote_text) self.google_quote_author = Gtk.MenuItem(_("Google Author")) self.google_quote_author.set_use_underline(True) self.google_quote_author.connect("activate", window.google_quote_author) self.quotes_menu.append(self.google_quote_author) self.quotes_menu.append(Gtk.SeparatorMenuItem.new()) self.quotes_preferences = Gtk.MenuItem(_("Preferences...")) self.quotes_preferences.set_use_underline(True) def _quotes_prefs(widget=None): window.preferences_dialog.ui.notebook.set_current_page(1) window.on_mnu_preferences_activate() self.quotes_preferences.connect("activate", _quotes_prefs) self.quotes_menu.append(self.quotes_preferences) self.quotes_disable = Gtk.MenuItem(_("Turn off")) self.quotes_disable.set_use_underline(True) self.quotes_disable.connect("activate", window.disable_quotes) self.quotes_menu.append(self.quotes_disable) self.quotes = Gtk.MenuItem(_("_Quote")) self.quotes.set_use_underline(True) self.quotes.set_submenu(self.quotes_menu) self.menu.append(self.quotes) self.menu.append(Gtk.SeparatorMenuItem.new()) self.history = Gtk.CheckMenuItem(_("_History")) self.history.set_active(False) self.history.set_use_underline(True) self.history_handler_id = self.history.connect("toggled", window.show_hide_history) self.menu.append(self.history) self.selector = Gtk.CheckMenuItem(_("_Wallpaper Selector")) self.selector.set_active(False) self.selector.set_use_underline(True) self.selector_handler_id = self.selector.connect( "toggled", window.show_hide_wallpaper_selector ) self.menu.append(self.selector) self.downloads = Gtk.CheckMenuItem(_("Recent _Downloads")) self.downloads.set_active(False) self.downloads.set_use_underline(True) self.downloads_handler_id = self.downloads.connect("toggled", window.show_hide_downloads) self.menu.append(self.downloads) if Util.check_variety_slideshow_present(): self.menu.append(Gtk.SeparatorMenuItem.new()) self.slideshow = Gtk.MenuItem(_("Start Slideshow")) self.slideshow.connect("activate", window.on_start_slideshow) self.menu.append(self.slideshow) else: logger.warning( "Variety Slideshow is not installed. This is an optional extension " "adding pan-and-zoom slideshows to Variety: see " "https://github.com/peterlevi/variety-slideshow for details" ) self.menu.append(Gtk.SeparatorMenuItem.new()) self.preferences = Gtk.MenuItem(_("Preferences...")) self.preferences.connect("activate", window.on_mnu_preferences_activate) self.menu.append(self.preferences) self.about = Gtk.MenuItem(_("About")) self.about.connect("activate", window.on_mnu_about_activate) self.menu.append(self.about) self.donate = Gtk.MenuItem(_("Donate")) self.donate.connect("activate", window.on_mnu_donate_activate) self.menu.append(self.donate) self.quit = Gtk.MenuItem(_("Quit")) self.quit.connect("activate", window.on_quit) self.menu.append(self.quit) self.menu.show_all() def create_indicator(self, window): logger.info("indicator backend: %s", _indicator_backend) self.indicator = None self.status_icon = None self.visible = True def right_click_event(icon, button, time): self.menu.popup(None, None, Gtk.StatusIcon.position_menu, self.status_icon, 0, time) def left_click_event(data): self.menu.popup( None, None, Gtk.StatusIcon.position_menu, self.status_icon, 0, Gtk.get_current_event_time(), ) def on_indicator_scroll_status_icon(status_icon, event): window.on_indicator_scroll(None, 1, event.direction) icon_path = varietyconfig.get_data_file("media", "variety-indicator.png") if use_appindicator: self.indicator = AppIndicator3.Indicator.new( "variety", "", AppIndicator3.IndicatorCategory.APPLICATION_STATUS ) self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE) self.indicator.set_icon(icon_path) self.indicator.connect("scroll-event", window.on_indicator_scroll) self.indicator.set_menu(self.menu) else: self.status_icon = Gtk.StatusIcon.new_from_file(icon_path) self.status_icon.set_visible(True) self.status_icon.connect("activate", left_click_event) self.status_icon.connect("popup-menu", right_click_event) self.status_icon.connect("scroll-event", on_indicator_scroll_status_icon) def set_visible(self, visible): self.visible = visible if visible: if self.indicator: logger.info(lambda: "Showing indicator icon") self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE) if self.status_icon: logger.info(lambda: "Showing status icon") self.status_icon.set_visible(True) else: if self.indicator: logger.info(lambda: "Hiding indicator icon") self.indicator.set_status(AppIndicator3.IndicatorStatus.PASSIVE) if self.status_icon: logger.info(lambda: "Hiding status icon") self.status_icon.set_visible(False) def set_icon(self, icon): def set_from_theme_icon(name): if self.indicator: logger.info(lambda: "Showing indicator icon %s from GTK theme" % name) self.indicator.set_icon(name) if self.status_icon: logger.info(lambda: "Showing status icon %s from GTK theme" % name) self.status_icon.set_from_icon_name(name) if icon == "Light": if Gtk.IconTheme.get_default().has_icon(THEME_ICON_NAME): set_from_theme_icon(THEME_ICON_NAME) return else: icon_path = varietyconfig.get_data_file("media", "variety-indicator.png") elif icon == "Dark": if Gtk.IconTheme.get_default().has_icon(THEME_ICON_NAME_DARK): set_from_theme_icon(THEME_ICON_NAME_DARK) return else: icon_path = varietyconfig.get_data_file("media", "variety-indicator-dark.png") elif icon in ["1", "2", "3", "4"]: if Gtk.IconTheme.get_default().has_icon(THEME_ICON_NAME_NUM.format(icon)): set_from_theme_icon(THEME_ICON_NAME_NUM.format(icon)) return else: icon_path = varietyconfig.get_data_file( "media", "variety-indicator-num{}.png".format(icon) ) elif icon and os.access(icon, os.R_OK) and Util.is_image(icon): icon_path = icon else: icon_path = varietyconfig.get_data_file("media", "variety-indicator.png") if self.indicator: logger.info(lambda: "Showing indicator icon image: " + icon_path) self.indicator.set_icon(icon_path) if self.status_icon: logger.info(lambda: "Showing status icon image: " + icon_path) self.status_icon.set_from_file(icon_path) def get_visible(self): return self.visible def new_application_indicator(window): ind = Indicator(window) return ind, ind.indicator, ind.status_icon variety-0.8.3/variety/plugins/000077500000000000000000000000001362063646600163655ustar00rootroot00000000000000variety-0.8.3/variety/plugins/IQuoteSource.py000066400000000000000000000037511362063646600213340ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE from .IVarietyPlugin import IVarietyPlugin class IQuoteSource(IVarietyPlugin): def supports_search(self): """ False means that this plugins does not support searching by keyword or author (only get_random will ever be called) and this plugin will be used only if the user has not specified search criteria. True means get_for_keyword and get_for_author should also be implemented. :return: True or False """ return False def get_random(self): """ Returns some quotes. Individual quotes are hashes like the one below. Only quote should be non-null, the others can be None. """ return [ { "quote": "Quote", "author": "Author", "sourceName": "My Quote Site", "link": "http://example.com", } ] def get_for_keyword(self, keyword): """ Returns some quotes matching the given keyword. Returns [] if it cannot find matches. """ return [] def get_for_author(self, author): """ Returns some quotes matching the given author. Returns [] if it cannot find matches. """ return [] variety-0.8.3/variety/plugins/IVarietyPlugin.py000066400000000000000000000014771362063646600216630ustar00rootroot00000000000000import abc import os from jumble.IPlugin import IPlugin from variety.Util import Util class IVarietyPlugin(IPlugin, metaclass=abc.ABCMeta): """ Variety-specific plugin interface """ def activate(self): super(IVarietyPlugin, self).activate() self.config_folder = os.path.join( self.jumble.parent.config_folder, "pluginconfig/" + os.path.basename(self.folder) ) Util.makedirs(self.config_folder) def get_config_folder(self): """ :return: The config directory which the plugin can use to store config or cache files """ return self.config_folder def on_variety_start_complete(self): """ Called towards the end of VarietyWindow.start, when options are loaded and caches - created """ pass variety-0.8.3/variety/plugins/__init__.py000066400000000000000000000000001362063646600204640ustar00rootroot00000000000000variety-0.8.3/variety/plugins/builtin/000077500000000000000000000000001362063646600200335ustar00rootroot00000000000000variety-0.8.3/variety/plugins/builtin/__init__.py000066400000000000000000000000001362063646600221320ustar00rootroot00000000000000variety-0.8.3/variety/plugins/builtin/downloaders/000077500000000000000000000000001362063646600223545ustar00rootroot00000000000000variety-0.8.3/variety/plugins/builtin/downloaders/APODDownloader.py000066400000000000000000000056071362063646600255000ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random from variety.plugins.downloaders.SimpleDownloader import SimpleDownloader from variety.Util import Util, _ logger = logging.getLogger("variety") random.seed() class APODDownloader(SimpleDownloader): DESCRIPTION = _("NASA Astro Pic of the Day") ROOT_URL = "http://apod.nasa.gov/apod/" @classmethod def get_info(cls): return { "name": "APODDownloader", "description": APODDownloader.DESCRIPTION, "author": "Peter Levi", "version": "0.1", } def get_description(self): return APODDownloader.DESCRIPTION def get_source_type(self): return "apod" def get_source_name(self): return "NASA Astro Pic of the Day" def get_folder_name(self): return "nasa_apod" def get_source_location(self): return self.ROOT_URL def fill_queue(self): logger.info(lambda: "Filling APOD queue from Archive") s = Util.html_soup(self.ROOT_URL + "archivepix.html") urls = [ self.ROOT_URL + x["href"] for x in s.findAll("a") if x["href"].startswith("ap") and x["href"].endswith(".html") ] urls = urls[:730] # leave only last 2 years' pics urls = [url for url in urls if not self.is_in_banned(url)] queue = urls[:3] # always put the latest 3 first urls = urls[3:] random.shuffle(urls) # shuffle the rest queue.extend(urls) return queue def download_queue_item(self, queue_item): origin_url = queue_item logger.info(lambda: "APOD URL: " + origin_url) s = Util.html_soup(origin_url) img_url = None try: link = s.find("img").parent["href"] if link.startswith("image/"): img_url = self.ROOT_URL + link logger.info(lambda: "Image URL: " + img_url) except Exception: pass if img_url: return self.save_locally(origin_url, img_url, source_location=self.ROOT_URL) else: logger.info(lambda: "No image url found for this APOD URL") return None variety-0.8.3/variety/plugins/builtin/downloaders/BingDownloader.py000066400000000000000000000062641362063646600256340ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random from datetime import datetime from urllib.parse import parse_qs, urlparse from variety.plugins.downloaders.SimpleDownloader import SimpleDownloader from variety.Util import Util, _ logger = logging.getLogger("variety") random.seed() class BingDownloader(SimpleDownloader): DESCRIPTION = _("Bing Photo of the Day") BING_JSON_URL = ( "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=100&mkt=en-US" ) # n=100, but max 8 images are actually returned... Pity. @classmethod def get_info(cls): return { "name": "BingDownloader", "description": BingDownloader.DESCRIPTION, "author": "Peter Levi", "version": "0.1", } def get_source_type(self): return "bing" def get_description(self): return BingDownloader.DESCRIPTION def get_source_name(self): return "Bing" def get_source_location(self): return "https://www.bing.com/gallery/" def get_local_filename(self, url): return parse_qs(urlparse(url).query)["id"][0] def fill_queue(self): queue = [] s = Util.fetch_json(BingDownloader.BING_JSON_URL) for item in s["images"]: try: if not item["wp"]: # not marked as a wallpaper continue image_url = "https://www.bing.com" + item["url"] copyrightlink = item["copyrightlink"] if not "javascript:" in copyrightlink: src_url = copyrightlink else: filename = item["url"].split("/")[-1] name = filename[0 : filename.find("_EN")] src_url = "https://www.bing.com/gallery/#images/%s" % name try: date = datetime.strptime(item["startdate"], "%Y%m%d").strftime("%Y-%m-%d") except: date = item["startdate"] extra_metadata = { "sourceType": "bing", "sfwRating": 100, "headline": "Bing Photo of the Day, %s" % date, "description": item["copyright"], } queue.append((src_url, image_url, extra_metadata)) except: logger.exception(lambda: "Could not process an item in the Bing json result") random.shuffle(queue) return queue variety-0.8.3/variety/plugins/builtin/downloaders/ChromeOSWallpapersDownloader.py000066400000000000000000000047471362063646600304730ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random from variety.plugins.downloaders.SimpleDownloader import SimpleDownloader from variety.Util import Util, _ MANIFEST_URL = "https://storage.googleapis.com/chromeos-wallpaper-public/manifest_en.json" logger = logging.getLogger("variety") random.seed() class ChromeOSWallpapersDownloader(SimpleDownloader): DESCRIPTION = _("Chrome OS Wallpapers") @classmethod def get_info(cls): return { "name": "ChromeOsWallpapersDownloader", "description": ChromeOSWallpapersDownloader.DESCRIPTION, "author": "Peter Levi", "version": "0.1", } def get_description(self): return ChromeOSWallpapersDownloader.DESCRIPTION def get_source_type(self): return "chromeos" def get_source_name(self): return "Chrome OS Wallpapers" def get_source_location(self): return self.get_source_name() def fill_queue(self): manifest = Util.fetch_json(MANIFEST_URL) queue = manifest["wallpaper_list"] self.tags = manifest["tags"] random.shuffle(queue) return queue def download_queue_item(self, item): image_url = item["base_url"] + "_high_resolution.jpg" origin_url = item["dynamic_url"] extra_metadata = {"noOriginPage": "yes"} if "tags" in item: extra_metadata["keywords"] = [ self.tags[str(tag)] for tag in item["tags"] if str(tag) in self.tags ] if "author" in item: extra_metadata["author"] = item["author"] if "author_website" in item: extra_metadata["authorURL"] = item["author_website"] return self.save_locally(origin_url, image_url, extra_metadata=extra_metadata) variety-0.8.3/variety/plugins/builtin/downloaders/DesktopprDownloader.py000066400000000000000000000043721362063646600267260ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging from variety.plugins.downloaders.DefaultDownloader import QueueItem from variety.plugins.downloaders.SimpleDownloader import SimpleDownloader from variety.Util import Util, _ logger = logging.getLogger("variety") class DesktopprDownloader(SimpleDownloader): DESCRIPTION = _("Random wallpapers from Desktoppr.co") @classmethod def get_info(cls): return { "name": "DesktopprDownloader", "description": DesktopprDownloader.DESCRIPTION, "author": "Peter Levi", "version": "0.1", } def get_source_type(self): return "desktoppr" def get_description(self): return DesktopprDownloader.DESCRIPTION def get_source_name(self): return "Desktoppr.co" def get_folder_name(self): return "Desktoppr" def download_queue_item(self, queue_item): origin_url, image_url, extra_metadata = queue_item return self.save_locally( origin_url, image_url, extra_metadata=extra_metadata, request_kwargs={"verify": False} ) def fill_queue(self): response = Util.fetch_json("https://api.desktoppr.co/1/wallpapers/random", verify=False) if response["response"]["review_state"] != "safe": logger.info(lambda: "Non-safe image returned by Desktoppr, skipping") return None origin_url = response["response"]["url"] image_url = response["response"]["image"]["url"] return [QueueItem(origin_url, image_url, {})] variety-0.8.3/variety/plugins/builtin/downloaders/EarthviewDownloader.py000066400000000000000000000054041362063646600267060ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random from variety.plugins.downloaders.ImageSource import Throttling from variety.plugins.downloaders.SimpleDownloader import SimpleDownloader from variety.Util import Util, _ # Credits: Using the data prepared by limhenry @ https://github.com/limhenry/earthview DATA_URL = "https://raw.githubusercontent.com/limhenry/earthview/3cd868a932cd652c4373c0f6ea8618a96b08be4e/wallpaper%20changer/data.json" logger = logging.getLogger("variety") random.seed() class EarthviewDownloader(SimpleDownloader): DESCRIPTION = _("Google Earth View Wallpapers") ROOT_URL = "https://earthview.withgoogle.com/" @classmethod def get_info(cls): return { "name": "EarthviewDownloader", "description": EarthviewDownloader.DESCRIPTION, "author": "Peter Levi", "version": "0.1", } def get_description(self): return EarthviewDownloader.DESCRIPTION def get_source_type(self): return "earthview" def get_source_name(self): return "Earth View" def get_source_location(self): return self.ROOT_URL def fill_queue(self): queue = Util.fetch_json(DATA_URL) random.shuffle(queue) return queue def get_default_throttling(self): # throttle this source, as otherwise maps "overpower" all other types of images # with Variety's default settings, and we have no other way to control source "weights" return Throttling(max_downloads_per_hour=20, max_queue_fills_per_hour=None) def download_queue_item(self, item): region = item["Region"] filename = "{}{} (ID-{}).jpg".format( region + ", " if region and region != "-" else "", item["Country"], item["ID"] ) origin_url = EarthviewDownloader.ROOT_URL + str(item["ID"]) image_url = item["Image URL"] if not image_url.startswith("http"): image_url = "https://" + image_url return self.save_locally(origin_url, image_url, local_filename=filename) variety-0.8.3/variety/plugins/builtin/downloaders/MediaRSSDownloader.py000066400000000000000000000212711362063646600263570ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random import urllib.parse import xml.etree.ElementTree as ET from variety.plugins.downloaders.DefaultDownloader import DefaultDownloader from variety.Util import Util logger = logging.getLogger("variety") random.seed() MEDIA_NS = "{http://search.yahoo.com/mrss/}" VARIETY_NS = "{http://vrty.org/}" class MediaRSSDownloader(DefaultDownloader): def __init__(self, source, url): DefaultDownloader.__init__(self, source=source, config=url) @staticmethod def fetch(url): content = Util.fetch_bytes(url) return ET.fromstring(content) @staticmethod def is_valid_content(x): return ( x is not None and "url" in x.attrib and ( Util.is_image(x.attrib["url"]) or ("medium" in x.attrib and x.attrib["medium"].lower() == "image") or ("type" in x.attrib and x.attrib["type"].lower().startswith("image/")) ) ) @staticmethod def validate(url): logger.info(lambda: "Validating MediaRSS url " + url) try: if not url.startswith("http://") and not url.startswith("https://"): url = "https://" + url s = MediaRSSDownloader.fetch(url) walls = [ x.attrib["url"] for x in s.findall(".//{0}content".format(MEDIA_NS)) if MediaRSSDownloader.is_valid_content(x) ] return len(walls) > 0 except Exception: logger.exception(lambda: "Error while validating URL, probably not a MediaRSS feed") return False def download_queue_item(self, queue_item): origin_url, image_url, source_type, source_location, source_name, extra_metadata = ( queue_item ) parse = urllib.parse.urlparse(origin_url) host = parse.netloc if hasattr(parse, "netloc") else "origin" return self.save_locally( origin_url, image_url, source_type or "mediarss", source_location, source_name or host, extra_metadata=extra_metadata, ) def fill_queue(self): queue = [] logger.info(lambda: "MediaRSS URL: " + self.config) s = self.fetch(self.config) for item in s.findall(".//item"): try: origin_url = item.find("link").text group = item.find("{0}group".format(MEDIA_NS)) content = None width = -1 if group is not None: # find the largest image in the group for c in group.findall("{0}content".format(MEDIA_NS)): try: if MediaRSSDownloader.is_valid_content(c): if content is None: content = ( c ) # use the first one, in case we don't find any width info if "width" in c.attrib and int(c.attrib["width"]) > width: content = c width = int(c.attrib["width"]) except Exception: pass else: content = item.find("{0}content".format(MEDIA_NS)) if not MediaRSSDownloader.is_valid_content(content): continue source_name = None source_location = None source_type = None variety_source = item.find("{0}source".format(VARIETY_NS)) if variety_source is not None: source_name = variety_source.attrib.get("name", None) source_location = variety_source.attrib.get("location", None) source_type = variety_source.attrib.get("type", None) extra_metadata = {} try: extra_metadata["headline"] = item.find("{0}title".format(MEDIA_NS)).text except: try: extra_metadata["headline"] = item.find("title").text except: pass try: extra_metadata["description"] = item.find( "{0}description".format(MEDIA_NS) ).text except: pass try: author = item.find("{0}author".format(VARIETY_NS)) if author is not None: extra_metadata["author"] = author.attrib.get("name", None) extra_metadata["authorURL"] = author.attrib.get("url", None) else: extra_metadata["author"] = item.find("{0}credit".format(MEDIA_NS)).text except: pass try: sfw = item.find("{0}sfw_info".format(VARIETY_NS)) if sfw is not None: rating = int(sfw.attrib.get("rating", None)) extra_metadata["sfwRating"] = rating if self.is_safe_mode_enabled() and rating < 100: logger.info( lambda: "Skipping non-safe download from VRTY MediaRss feed. " "Is the source %s suitable for Safe mode?" % self.config ) continue except: pass try: extra_metadata["keywords"] = [ k.strip() for k in item.find("{0}keywords".format(MEDIA_NS)).text.split(",") ] except: pass self.process_content( queue, origin_url, content, source_type, source_location, source_name, extra_metadata, ) except Exception: logger.exception(lambda: "Could not process an item in the Media RSS feed") random.shuffle(queue) return queue def process_content( self, queue, origin_url, content, source_type=None, source_location=None, source_name=None, extra_metadata={}, ): try: logger.debug(lambda: "Checking origin_url " + origin_url) if self.is_in_banned(origin_url): logger.debug(lambda: "In banned, skipping") return image_file_url = content.attrib["url"] if self.is_in_downloaded(image_file_url): logger.debug(lambda: "Already in downloaded") return if self.is_in_favorites(image_file_url): logger.debug(lambda: "Already in favorites") return width = None height = None try: width = int(content.attrib["width"]) height = int(content.attrib["height"]) except Exception: pass if self.is_size_inadequate(width, height): logger.debug(lambda: "Small or non-landscape size/resolution") return logger.debug( lambda: "Appending to queue %s, %s, %s, %s, %s" % (origin_url, image_file_url, source_type, source_location, source_name) ) queue.append( ( origin_url, image_file_url, source_type, source_location, source_name, extra_metadata, ) ) except Exception: logger.exception(lambda: "Error parsing single MediaRSS image info:") variety-0.8.3/variety/plugins/builtin/downloaders/MediaRSSSource.py000066400000000000000000000054471362063646600255300ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random from variety.plugins.builtin.downloaders.MediaRSSDownloader import MediaRSSDownloader from variety.plugins.downloaders.ConfigurableImageSource import ConfigurableImageSource from variety.Util import _ logger = logging.getLogger("variety") random.seed() class MediaRSSSource(ConfigurableImageSource): @classmethod def get_info(cls): return { "name": "MediaRSSSource", "description": _("Configurable source for fetching images from MediaRSS feeds"), "author": "Peter Levi", "version": "0.1", } def get_source_name(self): return "MediaRSS" def get_source_type(self): return "mediarss" def get_ui_instruction(self): return _( "Please paste the URL of the Media RSS feed below. Please note that only Media RSS " "feeds are supported, not arbitrary RSS feeds. Media RSS feeds contain media:content " "tags linking directly to the actual image content. " "Some examples of sites that provide Media RSS feeds are: " "Picasa, " "deviantART, " "SmugMug, " "Flickr, " "InterfaceLIFT." ) def get_ui_short_instruction(self): return _("Paste the URL of the Media RSS feed here: ") def get_ui_short_description(self): return _("Fetch images from a MediaRSS feed") def validate(self, url): if not url.startswith("http://") and not url.startswith("https://"): url = "https://" + url valid = MediaRSSDownloader.validate(url) error = _( "This does not seem to be a valid Media RSS feed URL or there is no content there." ) return url, None if valid else error def create_downloader(self, config): return MediaRSSDownloader(self, config) variety-0.8.3/variety/plugins/builtin/downloaders/RedditDownloader.py000066400000000000000000000050321362063646600261600ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random import re import urllib.parse from variety.plugins.downloaders.DefaultDownloader import DefaultDownloader from variety.Util import Util logger = logging.getLogger("variety") class RedditDownloader(DefaultDownloader): def __init__(self, source, url): DefaultDownloader.__init__(self, source=source, config=url) @staticmethod def build_json_url(url): p = urllib.parse.urlparse(url) return ( p.scheme + "://" + p.netloc + p.path + ".json" + "?" + p.query + ("&" if p.query else "") + "limit=100" ) def fill_queue(self): logger.info(lambda: "Reddit URL: " + self.config) queue = [] json_url = RedditDownloader.build_json_url(self.config) s = Util.fetch_json(json_url) for item in s["data"]["children"]: try: data = item["data"] image_url = data["url"] if re.match(r"^http(s)?://imgur\.com/\w+$", image_url): image_url = image_url.replace("://", "://i.") + ".jpg" if image_url.lower().endswith((".jpg", ".jpeg", ".png")): src_url = "https://www.reddit.com" + data["permalink"] extra_metadata = {"sourceType": "reddit"} if data["over_18"]: extra_metadata["sfwRating"] = 0 if self.is_safe_mode_enabled(): continue queue.append((src_url, image_url, extra_metadata)) except Exception: logger.exception(lambda: "Could not process an item in the Reddit json result") random.shuffle(queue) return queue variety-0.8.3/variety/plugins/builtin/downloaders/RedditSource.py000066400000000000000000000066011362063646600253250ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random from variety.plugins.builtin.downloaders.RedditDownloader import RedditDownloader from variety.plugins.downloaders.ConfigurableImageSource import ConfigurableImageSource from variety.Util import _ random.seed() logger = logging.getLogger("variety") class RedditSource(ConfigurableImageSource): @classmethod def get_info(cls): return { "name": "RedditSource", "description": _("Configurable source for fetching images from Reddit"), "author": "Peter Levi", "version": "0.1", } def get_source_type(self): return "reddit" def get_source_name(self): return "Reddit" def get_ui_instruction(self): return _( "Enter the name of a subreddit or paste the full URL of a subreddit or a " "Reddit user. You may specify sort order and time " "period if you wish. Variety will use posts to direct images or to Imgur pages " "within the first 100 submissions returned by Reddit.\n\n" "Example: You may specify simply 'comics' or " "http://www.reddit.com/r/comics\n" "Example: Top posts from the month: " "http://www.reddit.com/r/comics/top/?sort=top&t=month" ) def get_ui_short_instruction(self): return _("URL or name of a subreddit: ") def get_ui_short_description(self): return _("Fetch images from a given subreddit or user") def validate(self, query): logger.info(lambda: "Validating Reddit query " + query) if not "/" in query: query = "https://www.reddit.com/r/%s" % query try: if not query.startswith("http://") and not query.startswith("https://"): query = "http://" + query if not "//reddit.com" in query and not "//www.reddit.com" in query: return False, _("This does not seem to be a valid Reddit URL") dl = RedditDownloader(self, query) queue = dl.fill_queue() return ( query, None if len(queue) > 0 else _("We could not find any image submissions there."), ) except Exception: logger.exception( lambda: "Error while validating URL, probably no image posts for this URL" ) return query, _("We could not find any image submissions there.") def create_downloader(self, config): return RedditDownloader(self, config) variety-0.8.3/variety/plugins/builtin/downloaders/UnsplashConfigurableSource.py000066400000000000000000000125251362063646600302320ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random from requests import HTTPError from variety.plugins.builtin.downloaders.UnsplashDownloader import UnsplashDownloader from variety.plugins.downloaders.ConfigurableImageSource import ConfigurableImageSource from variety.plugins.downloaders.DefaultDownloader import DefaultDownloader from variety.plugins.downloaders.ImageSource import Throttling from variety.Util import Util, _ logger = logging.getLogger("variety") random.seed() class UnsupportedConfig(Exception): pass class UnsplashConfigurableSource(ConfigurableImageSource): class UnsplashConfigurableDownloader(UnsplashDownloader): def __init__(self, source, config): DefaultDownloader.__init__(self, source, config) self.set_variety(source.get_variety()) def get_source_type(self): return self.source.get_source_type() def get_description(self): return self.config def get_folder_name(self): return super(DefaultDownloader, self).get_folder_name() def get_unsplash_api_url(self): self.config = self.config.replace("http://", "https://") params = {} if self.config.startswith("https://"): if self.config.startswith("https://unsplash.com/s/photos/"): query = self.config.replace("https://unsplash.com/s/photos/", "").split("/")[0] params["query"] = query elif self.config.startswith("https://unsplash.com/@"): username = self.config.replace("https://unsplash.com/@", "").split("/")[0] params["username"] = username elif self.config.startswith("https://unsplash.com/collections/"): collections = self.config.replace( "https://unsplash.com/collections/", "" ).split("/")[0] params["collections"] = collections else: raise UnsupportedConfig() else: params["query"] = self.config return ( super().get_unsplash_api_url() + "&" + "&".join("{}={}".format(key, value) for key, value in params.items()) ) @classmethod def get_info(cls): return { "name": "UnsplashConfigurableSource", "description": _("Configurable source for fetching photos from Unsplash.com"), "author": "Peter Levi", "version": "0.1", } def get_source_type(self): return "unsplash-search" def validate(self, config): try: url = self.UnsplashConfigurableDownloader(self, config).get_unsplash_api_url() data = Util.fetch_json(url) valid = "errors" not in data return config, None if valid else _("No images found") except UnsupportedConfig: return config, _("We do not support this type of URL") except Exception as e: if isinstance(e, HTTPError) and e.response.status_code == 404: return config, _("No images found") else: return config, _("Oops, this didn't work. Is the remote service up?") def create_downloader(self, config): return self.UnsplashConfigurableDownloader(self, config) def get_ui_instruction(self): return _( "We use the Unsplash API to fetch random images " "that match the given search term or URL. The Unsplash API is rate-limited, so " "Variety fetches images from Unsplash sources as a reduced rate.\n" "\n" "Please specify either a search keyword, or the URL of a search result, user or " "collection.\n" "Example: https://unsplash.com/collections/3863203/desktop-wallpapers\n" "Example: https://unsplash.com/@pawel_czerwinski" ) def get_ui_short_instruction(self): return _("Search keyword or URL: ") def get_ui_short_description(self): return _("Fetches images from Unsplash.com for a given criteria") def get_source_name(self): return "Unsplash" def get_server_options_key(self): return "unsplash_v2" def get_default_throttling(self): return Throttling(max_downloads_per_hour=20, max_queue_fills_per_hour=3) def on_image_set_as_wallpaper(self, img, meta): return UnsplashDownloader().on_image_set_as_wallpaper(img, meta) variety-0.8.3/variety/plugins/builtin/downloaders/UnsplashDownloader.py000066400000000000000000000112141362063646600265410ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random import time from variety.plugins.downloaders.ImageSource import Throttling from variety.plugins.downloaders.SimpleDownloader import SimpleDownloader from variety.Util import Util, _ logger = logging.getLogger("variety") random.seed() class UnsplashDownloader(SimpleDownloader): DESCRIPTION = _("High-resolution photos from Unsplash.com") CLIENT_ID = "072e5048dfcb73a8d9ad59fcf402471518ff8df725df462b0c4fa665f466515a" UTM_PARAMS = "?utm_source=Variety+Wallpaper+Changer&utm_medium=referral" rate_limiting_started_time = 0 @classmethod def get_info(cls): return { "name": "UnsplashDownloader", "description": UnsplashDownloader.DESCRIPTION, "author": "Peter Levi", "version": "0.1", } def get_source_type(self): return "unsplash" def get_description(self): return UnsplashDownloader.DESCRIPTION def get_source_name(self): return "Unsplash.com" def get_source_location(self): return "https://unsplash.com" def get_folder_name(self): return "Unsplash" def get_server_options_key(self): return "unsplash_v2" def get_default_throttling(self): return Throttling(max_downloads_per_hour=20, max_queue_fills_per_hour=3) def get_unsplash_api_url(self): return "https://api.unsplash.com/photos/random?count=30&client_id={}{}".format( UnsplashDownloader.CLIENT_ID, "&orientation=landscape" if self.get_variety().options.use_landscape_enabled else "", ) def fill_queue(self): if time.time() - UnsplashDownloader.rate_limiting_started_time < 3600: logger.info( lambda: "Unsplash queue empty, but rate limit reached, will try again later" ) return [] url = self.get_unsplash_api_url() logger.info(lambda: "Filling Unsplash queue from " + url) r = Util.request(url) if int(r.headers.get("X-Ratelimit-Remaining", 1000000)) < 100: UnsplashDownloader.rate_limiting_started_time = time.time() queue = [] for item in r.json(): try: width = item["width"] height = item["height"] if self.is_size_inadequate(width, height): continue image_url = item["urls"]["full"] + "&w={}".format( max(1980, int(Util.get_screen_width() * 1.2)) ) origin_url = item["links"]["html"] + UnsplashDownloader.UTM_PARAMS extra_metadata = { "sourceType": "unsplash", "sfwRating": 100, "author": item["user"]["name"], "authorURL": item["user"]["links"]["html"] + UnsplashDownloader.UTM_PARAMS, "keywords": [cat["title"].lower().strip() for cat in item["categories"]], "extraData": { "unsplashDownloadLocation": item["links"]["download_location"], "unsplashDownloadReported": False, }, } queue.append((origin_url, image_url, extra_metadata)) except: logger.exception(lambda: "Could not process an item from Unsplash") raise random.shuffle(queue) return queue def on_image_set_as_wallpaper(self, img, meta): extraData = meta.get("extraData", None) if not extraData: return download_loc = extraData.get("unsplashDownloadLocation") reported = extraData.get("unsplashDownloadReported") if download_loc and not reported: url = "{}?client_id={}".format(download_loc, UnsplashDownloader.CLIENT_ID) Util.fetch(url) meta["extraData"]["unsplashDownloadReported"] = True Util.write_metadata(img, meta) variety-0.8.3/variety/plugins/builtin/downloaders/WallhavenDownloader.py000066400000000000000000000124611362063646600266720ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random import urllib.parse from variety.plugins.downloaders.DefaultDownloader import DefaultDownloader from variety.Util import Util, _ SEARCH_URL = ( "https://wallhaven.cc/search?q=%s&categories=111&purity=100&sorting=favorites&order=desc" ) logger = logging.getLogger("variety") random.seed() class WallhavenDownloader(DefaultDownloader): def __init__(self, source, location): DefaultDownloader.__init__(self, source=source, config=location) self.parse_location() def parse_location(self): if self.config.startswith(("http://", "https://")): # location is an URL, use it self.url = self.config.replace("http://", "https://") else: # interpret location as keywords self.url = SEARCH_URL % urllib.parse.quote(self.config) def search(self, page=None): url = self.url if page: url = url + ("&" if "?" in self.url else "?") + "page=" + str(page) logger.info(lambda: "Performing wallhaven search: url=%s" % url) soup = Util.html_soup(url) result_count = None try: result_count = int( soup.find("header", {"class": "listing-header"}) .find("h1") .text.split()[0] .replace(",", "") ) except: pass return soup, result_count @staticmethod def validate(location): logger.info(lambda: "Validating Wallhaven location " + location) try: s, count = WallhavenDownloader(None, location).search() wall = s.find("figure", {"class": "thumb"}) if not wall: return False link = wall.find("a", {"class": "preview"}) return link is not None except Exception: logger.exception(lambda: "Error while validating wallhaven search") return False def download_queue_item(self, queue_item): wallpaper_url = queue_item logger.info(lambda: "Wallpaper URL: " + wallpaper_url) s = Util.html_soup(wallpaper_url) src_url = s.find("img", id="wallpaper")["src"] logger.info(lambda: "Image src URL: " + src_url) extra_metadata = {} try: extra_metadata["keywords"] = [ el.text.strip() for el in s.find_all("a", {"class": "tagname"}) ] except: pass try: purity = s.find("div", "sidebar-content").find("label", "purity").text.lower() sfw_rating = {"sfw": 100, "sketchy": 50, "nsfw": 0}[purity] extra_metadata["sfwRating"] = sfw_rating if self.is_safe_mode_enabled() and sfw_rating < 100: logger.info( lambda: "Skipping non-safe download from Wallhaven. " "Is the source %s suitable for Safe mode?" % self.config ) return None except: pass return self.save_locally(wallpaper_url, src_url, extra_metadata=extra_metadata) def fill_queue(self): queue = [] not_random = not "sorting=random" in self.url if not_random: s, count = self.search() if not count: count = 300 pages = min(count, 300) // 24 + 1 page = random.randint(1, pages) logger.info(lambda: "%s wallpapers in result, using page %s" % (count, page)) s, count = self.search(page=page) else: s, count = self.search() thumbs = s.find_all("figure", {"class": "thumb"}) for thumb in thumbs: try: p = list(map(int, thumb.find("span", {"class": "wall-res"}).contents[0].split("x"))) width = p[0] height = p[1] if self.is_size_inadequate(width, height): continue except Exception: # missing or unparseable resolution - consider ok pass try: link = thumb.find("a", {"class": "preview"})["href"] if self.is_in_banned(link): continue queue.append(link) except Exception: logger.debug(lambda: "Missing link for thumbnail") random.shuffle(queue) if not_random and len(queue) >= 20: queue = queue[: len(queue) // 2] # only use randomly half the images from the page - # if we ever hit that same page again, we'll still have what to download return queue variety-0.8.3/variety/plugins/builtin/downloaders/WallhavenSource.py000066400000000000000000000061061362063646600260330ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random from variety.plugins.builtin.downloaders.WallhavenDownloader import WallhavenDownloader from variety.plugins.downloaders.ConfigurableImageSource import ConfigurableImageSource from variety.plugins.downloaders.ImageSource import Throttling from variety.Util import _ logger = logging.getLogger("variety") random.seed() class WallhavenSource(ConfigurableImageSource): @classmethod def get_info(cls): return { "name": "MediaRSSSource", "description": _("Configurable source for fetching images from Wallhaven.cc"), "author": "Peter Levi", "version": "0.1", } def get_source_name(self): return "Wallhaven.cc" def get_source_type(self): return "wallhaven" def get_default_throttling(self): return Throttling(max_downloads_per_hour=360, max_queue_fills_per_hour=40) def get_ui_instruction(self): return _( "Wallhaven.cc provides a variety of image search options. " "Below you can specify keywords to search for, or visit Wallhaven.cc, " "setup your search criteria there, ensure you like the results, and paste the full Wallhaven URL " "in the box.\n" "\n" "If you specify keywords, the most liked safe-for-work images that match all of the keywords will " "be used. \n" "\n" "If you specify a Wallhaven URL, please choose the sorting criteria carefully - Variety regularly " "requests images, but uses only images from the first several hundred returned. Random or Date will " "mean this image source will have a longer 'lifetime' till it is exhausted. Favorites will provide " "better images and Relevance will provide closer matches when searching for phrases or colors." ) def get_ui_short_instruction(self): return _("Enter keywords or paste URL here: ") def get_ui_short_description(self): return _("Fetch images from a MediaRSS feed") def validate(self, query): valid = WallhavenDownloader.validate(query) return query, None if valid else _("No images found") def create_downloader(self, config): return WallhavenDownloader(self, config) variety-0.8.3/variety/plugins/builtin/downloaders/__init__.py000066400000000000000000000000001362063646600244530ustar00rootroot00000000000000variety-0.8.3/variety/plugins/builtin/quotes/000077500000000000000000000000001362063646600213535ustar00rootroot00000000000000variety-0.8.3/variety/plugins/builtin/quotes/FortuneSource.py000066400000000000000000000033211362063646600245270ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2019, Dan Jones # Copyright (c) 2019, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE # # Based on gist: https://gist.github.com/goodevilgenius/3878ce0f3e232e3daf5c # import subprocess from locale import gettext as _ from variety.plugins.IQuoteSource import IQuoteSource class FortuneSource(IQuoteSource): @classmethod def get_info(cls): return { "name": "UNIX fortune program", "description": _( "Displays quotes using the UNIX fortune program. " "You may want to install additional fortune packs, e.g. fortunes-bofh-excuses." ), "author": "Dan Jones", "version": "0.1", } def get_random(self): fortune = subprocess.check_output(["fortune"]).decode().strip() q = fortune.split("--") quote = q[0].strip() author = q[1].strip() if len(q) > 1 else None return [ {"quote": quote, "author": author, "sourceName": "UNIX fortune program", "link": None} ] variety-0.8.3/variety/plugins/builtin/quotes/GoodreadsSource.py000066400000000000000000000127741362063646600250300ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random import re from httplib2 import iri2uri from variety.plugins.IQuoteSource import IQuoteSource from variety.Util import Util, _ logger = logging.getLogger("variety") KEYWORDS = [ "love", "humor", "inspirational", "life", "funny", "writing", "death", "romance", "truth", "poetry", "religion", "god", "philosophy", "wisdom", "books", "happiness", "humour", "art", "faith", "politics", "reading", "science", "relationships", "war", "inspiration", "friendship", "women", "music", "success", "hope", "spirituality", "freedom", "fear", "beauty", "christianity", "history", "inspirational-quotes", "time", "marriage", "fantasy", "dreams", "sex", "nature", "education", "life-lessons", "change", "literature", "children", "pain", "fiction", "money", "people", "knowledge", "motivational", "family", "humanity", "peace", "reality", "kindlehighlight", "self-help", "men", "courage", "society", "creativity", "power", "humorous", "future", "food", "heart", "quotes", "work", "words", "memory", "leadership", "passion", "spiritual", "soul", "loss", "grief", "language", "psychology", "friends", "paranormal-romance", "learning", "imagination", "world", "magic", "sadness", "feminism", "depression", ] class GoodreadsSource(IQuoteSource): def __init__(self): super(IQuoteSource, self).__init__() @classmethod def get_info(cls): return { "name": "Goodreads", "description": _("Fetches quotes from Goodreads.com"), "author": "Peter Levi", "version": "0.1", } def supports_search(self): return True def get_random(self): return self.get_for_keyword(random.choice(KEYWORDS))[:4] def get_for_author(self, author): logger.info(lambda: "Fetching quotes from Goodreads for author=%s" % author) url = iri2uri("https://www.goodreads.com/quotes/search?utf8=\u2713&q=%s" % author) soup = Util.html_soup(url) page_links = list( Util.safe_map( int, [ pagelink.contents[0] for pagelink in soup.find_all(href=re.compile("quotes/search.*page=")) ], ) ) if page_links: page = random.randint(1, max(page_links)) url = iri2uri( "https://www.goodreads.com/quotes/search?utf8=\u2713&q=%s&page=%d" % (author, page) ) soup = Util.html_soup(url) return self.get_from_soup(url, soup) def get_for_keyword(self, keyword): logger.info(lambda: "Fetching quotes from Goodreads for keyword=%s" % keyword) url = iri2uri("https://www.goodreads.com/quotes/tag?utf8=\u2713&id=%s" % keyword) soup = Util.html_soup(url) page_links = list( Util.safe_map( int, [ pagelink.contents[0] for pagelink in soup.find_all(href=re.compile("quotes/tag.*page=")) ], ) ) if page_links: page = random.randint(1, max(page_links)) url = iri2uri( "https://www.goodreads.com/quotes/tag?utf8=\u2713&id=%s&page=%d" % (keyword, page) ) soup = Util.html_soup(url) return self.get_from_soup(url, soup) def get_from_soup(self, url, soup): logger.info(lambda: "Used Goodreads url %s" % url) quotes = [] for div in soup.find_all("div", {"class": "quoteText"}): logger.debug(lambda: "Parsing quote for div\n%s" % div) try: quote_text = ( "\n".join(div.find_all(text=True, recursive=False)).replace("―", "").strip() ) author = ( div.find("span", attrs={"class": "authorOrTitle"}).string.strip().strip(",") ) first_a = div.find("a") if first_a: link = "https://www.goodreads.com" + first_a["href"] else: link = None # No link given quotes.append( {"quote": quote_text, "author": author, "sourceName": "Goodreads", "link": link} ) except Exception: logger.exception(lambda: "Could not extract Goodreads quote") if not quotes: logger.warning(lambda: "Goodreads: no quotes found at %s" % url) return quotes variety-0.8.3/variety/plugins/builtin/quotes/LocalFilesSource.py000066400000000000000000000076201362063646600251300ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import os import re from variety.plugins.IQuoteSource import IQuoteSource from variety.profile import get_profile_path from variety.Util import _ logger = logging.getLogger("variety") class LocalFilesSource(IQuoteSource): def __init__(self): super(IQuoteSource, self).__init__() self.quotes = [] @classmethod def get_info(cls): return { "name": "Local text files", "description": _( "Displays quotes, defined in local text files.\n" "Put your own txt files in: {}pluginconfig/quotes/.\n" "The file format is:\n\nquote -- author\n.\nsecond quote -- another author\n.\netc...\n\n" "Example: http://rvelthuis.de/zips/quotes.txt" ).format(get_profile_path(expanded=False)), "author": "Peter Levi", "version": "0.1", } def supports_search(self): return True def activate(self): if self.active: return super(LocalFilesSource, self).activate() self.quotes = [] # prefer files in the pluginconfig for f in os.listdir(self.get_config_folder()): if f.endswith(".txt"): self.load(os.path.join(self.get_config_folder(), f)) # use the defaults if nothing useful in pluginconfig if not self.quotes: for f in os.listdir(self.folder): if f.endswith(".txt"): self.load(os.path.join(self.folder, f)) def deactivate(self): self.quotes = [] def load(self, path): try: logger.info(lambda: "Loading quotes file %s" % path) with open(path, "r", encoding="utf-8", errors="ignore") as f: s = f.read() for q in re.split(r"(^\.$|^%$)", s, flags=re.MULTILINE): try: if q.strip() and len(q.strip()) > 5: parts = q.split("-- ") quote = parts[0] if quote[0] == quote[-1] == '"': quote = "\u201C%s\u201D" % quote[1:-1] author = parts[1].strip() if len(parts) > 1 else None self.quotes.append( { "quote": quote, "author": author, "sourceName": os.path.basename(path), } ) except Exception: logger.debug(lambda: "Could not process local quote %s" % q) except Exception: logger.exception(lambda: "Could not load quotes file %s" % path) def get_random(self): return self.quotes def get_for_author(self, author): return [ q for q in self.quotes if q["author"] and q["author"].lower().find(author.lower()) >= 0 ] def get_for_keyword(self, keyword): return self.get_for_author(keyword) + [ q for q in self.quotes if q["quote"].lower().find(keyword.lower()) >= 0 ] variety-0.8.3/variety/plugins/builtin/quotes/QuotationsPageSource.py000066400000000000000000000102211362063646600260450ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import logging import random import re import bs4 from httplib2 import iri2uri from variety.plugins.IQuoteSource import IQuoteSource from variety.Util import Util, _ logger = logging.getLogger("variety") class QuotationsPageSource(IQuoteSource): @classmethod def get_info(cls): return { "name": "TheQuotationsPage.com", "description": _("Fetches quotes from TheQuotationsPage.com"), "author": "Peter Levi", "version": "0.1", } def supports_search(self): return True def get_from_html(self, url, html): quotes = [] bs = bs4.BeautifulSoup(html, "lxml") fixmap = { "\u0091": "\u2018", "\u0092": "\u2019", "\u0093": "\u201C", "\u0094": "\u201D", "\u0085": "...", "\u0097": "\u2014", "\u0096": "-", } for item in bs.findAll("dt", "quote"): quote = None try: quote = item.find("a").contents[0] for k, v in fixmap.items(): quote = quote.replace(k, v) quote = "\u201C%s\u201D" % quote link = "http://www.quotationspage.com" + item.find("a")["href"] try: author = item.next_sibling.find("b").find("a").contents[0] except Exception: try: author = item.next_sibling.find("b").contents[0] except Exception: author = None quotes.append( { "quote": quote, "author": author, "sourceName": "TheQuotationsPage.com", "link": link, } ) except Exception: logger.warning(lambda: "Could not get or parse quote: %s" % quote) if not quotes: logger.warning(lambda: "QuotationsPage: no quotes found at %s" % url) return quotes def get_random(self): return self.get_for_search_url("http://www.quotationspage.com/random.php") def get_for_author(self, author): return self.get_for_search_url( iri2uri("http://www.quotationspage.com/search.php?Search=&Author=%s" % author) ) def get_for_keyword(self, keyword): return self.get_for_search_url( iri2uri("http://www.quotationspage.com/search.php?Search=%s&Author=" % keyword) ) def get_for_search_url(self, url): logger.info(lambda: "Fetching quotes from Goodreads for search url=%s" % url) html = Util.fetch(url) try: page = random.randint(1, int(re.findall("Page 1 of (\d+)", html)[0])) url += "&page=%d" % page html = Util.fetch(url) except Exception: pass # probably just one page logger.info(lambda: "Used QuotationsPage url %s" % url) r = r".*
(.*)
.*" if re.match(r, html, flags=re.M | re.S): html = re.sub(r, "\\1", html, flags=re.M | re.S) # without this BeautifulSoup gets confused by some scripts return self.get_from_html(url, html) if __name__ == "__main__": q = QuotationsPageSource() print(q.get_for_author("einstein")) print(q.get_for_keyword("funny")) print(q.get_random()) variety-0.8.3/variety/plugins/builtin/quotes/UrbanDictionarySource.py000066400000000000000000000040371362063646600262070ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2019, James Miller # Copyright (c) 2019, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE from locale import gettext as _ import requests from variety.plugins.IQuoteSource import IQuoteSource class UrbanDictionarySource(IQuoteSource): @classmethod def get_info(cls): return { "name": "Urban Dictionary", "description": _("Displays definitions from Urban Dictionary"), "author": "James Miller", "version": "0.1", } def get_random(self): dict_dict = requests.get("https://api.urbandictionary.com/v0/random").json() def _clean(s): return s.strip().replace("[", "").replace("]", "") result = [] for entry in dict_dict["list"]: word = entry["word"] definition = _clean(entry["definition"]) example = _clean(entry["example"]) quote = ( '"{}"'.format(word) + "\n\n" + definition + ("\n\nExample:\n{}".format(example) if example else "") ) result.append( { "quote": quote, "author": entry["author"], "sourceName": "Urban Dictionary", "link": entry["permalink"], } ) return result variety-0.8.3/variety/plugins/builtin/quotes/__init__.py000066400000000000000000000000001362063646600234520ustar00rootroot00000000000000variety-0.8.3/variety/plugins/builtin/quotes/quotes.txt000066400000000000000000007557521362063646600234610ustar00rootroot00000000000000Marge: Now, I know you haven't liked some of my past suggestions, like switching to the metric system -- Abe: The metric system is the tool of the devil! My car gets forty rods to the hogshead and that's the way I likes it. -- The Simpsons episode "A Star is Burns" . "Let's be very honest about what this is about. It's not about bashing Democrats, it's not about taxes, they have no idea what the Boston tea party was about, they don't know their history at all. This is about hating a black man in the White House. This is racism straight up." -- Janeane Garofalo . "If Barbie is so popular, why do you have to buy her friends?" -- Steven Wright . "We can repair anything. (Please knock hard on the door - the bell doesn't work.)" -- Sign on door of repair shop . "A verbal contract is not worth the paper it's written on." -- Samuel Goldwyn . "Facts are stupid things." -- Ronald Reagan, Former U.S. President . "I never comment on referees and I'm not going to break the habit of a lifetime for that prat." -- Ron Atkinson . "Solutions are not the answer." -- Richard Nixon, former U.S. President . "Reports are sketchy, but we have heard that in the first heart transplant operation in Belgium, both patient and donor are doing fine." -- Radio news announcer . "I knew I was an unwanted baby when I saw that my bath toys were a toaster and a radio." -- Joan Rivers . "I don't feel we did wrong in taking this great country away from them. There were great numbers of people who needed new land, and the Indians were selfishly trying to keep it for themselves." -- John Wayne, Actor . "Happiness is your dentist telling you it won't hurt and then having him catch his hand in the drill." -- Johnny Carson . "A dentist at work in his vocation always looks down in the mouth." -- George D. Prentice . "Every tooth in a man's head is more valuable than a diamond." -- Miguel de Cervantes, Don Quixote, 1605 . "If suffering brought wisdom, the dentist’s office would be full of luminous ideas." -- Mason Cooley . "You don't have to brush your teeth - just the ones you want to keep." -- Unknown . "Some tortures are physical And some are mental, But the one that is both Is dental." -- Ogden Nash . "Too many of today's children have straight teeth and crooked morals." -- Unknown high school principal . "The man with a toothache thinks everyone happy whose teeth are sound." -- George Bernard Shaw . "Dentist: a prestidigitator who, putting metal into your mouth, pulls coin out of your pocket." -- Ambrose Bierce . "I find that most men would rather have their bellies opened for five hundred dollars than have a tooth pulled for five." -- Martin H. Fischer . "For there was never yet philosopher That could endure the toothache patiently. -- William Shakespeare, Much Ado About Nothing . "We do have a zeal for laughter in most situations, give or take a dentist." -- Joseph Heller . "Even pearls are dark before the whiteness of his teeth." -- William R. Alger . "If a patient cannot clean his teeth, no dentist can clean them for him." -- Martin H. Fischer . "An aching tooth is better out than in. To lose a rotting member is a gain." -- Richard Baxter, Poetical Fragments . "My health plan doesn't cover dental, so I enrolled my teeth as 32 dependents, each needing a complete physical once a year." -- Robert Brault, www.robertbrault.com . "A man loses his illusions first, his teeth second, and his follies last." -- Helen Rowland . "There are two things in life that a sage must preserve at every sacrifice, the coats of his stomach and the enamel of his teeth. Some evils admit of consolations, but there are no comforters for dyspepsia and the toothache." -- Henry Lytton Bulwer . "You know, sometimes a man just can't satisfy all of a woman's desires. Which is why God invented dental floss." -- Author Unknown . "Adam and Eve had many advantages, but the principal one was that they escaped teething." -- Mark Twain . "The tongue is ever turning to the aching tooth." -- Thomas Fuller . "Some old women and men grow bitter with age; the more their teeth drop out, the more biting they get." -- George D. Prentice . "I had very good dentures once. Some magnificent gold work. It's the only form of jewelry a man can wear that women fully appreciate." -- Graham Greene . "I'm always amazed to hear of air crash victims so badly mutilated that they have to be identified by their dental records. What I can't understand is, if they don't know who you are, how do they know who your dentist is?" -- Paul Merton . "Tooth decay was a perennial national problem that meant a mouthful of silver for patients, and for dentists a pocketful of gold." -- Claudia Wallis . "Teeth extracted by the latest methodists." -- Hong Kong dental advertisement . "If it weren't for electricity we'd all be watching television by candlelight." -- George Gobel . "There is no housing shortage in Lincoln today - just a rumour that is put about by people who have nowhere to live." -- G.L. Murfin, Mayor of Lincoln . "You mean they've scheduled Yom Kippur opposite Charlie's Angels?" -- Fred Silverman, TV programmer, when told that Yom Kippur would fall on a Wednesday. . "Beyond its entertainment value, Baywatch has enriched and, in many cases, helped save lives. I'm looking forward to the opportunity to continue with a project which has has such a significance for so many." -- David Hasselhoff, Actor . "Many people would sooner die than think; in fact, they do so." -- Bertrand Russell . "Many a man will have the courage to die gallantly, but will not have the courage to say, or even to think, that the cause for which he is asked to die is an unworthy one." -- Bertrand Russell . "Liberty is the right to do what I like; license, the right to do what you like." -- Bertrand Russell . "It is preoccupation with possessions, more than anything else, that prevents us from living freely and nobly." -- Bertrand Russell . "In America everybody is of the opinion that he has no social superiors, since all men are equal, but he does not admit that he has no social inferiors, for, from the time of Jefferson onward, the doctrine that all men are equal applies only upwards, not downwards." -- Bertrand Russell . "If there were in the world today any large number of people who desired their own happiness more than they desired the unhappiness of others, we could have a paradise in a few years." -- Bertrand Russell . "I've made an odd discovery. Every time I talk to a savant I feel quite sure that happiness is no longer a possibility. Yet when I talk with my gardener, I'm convinced of the opposite." -- Bertrand Russell . "I think we ought always to entertain our opinions with some measure of doubt. I shouldn't wish people dogmatically to believe any philosophy, not even mine." -- Bertrand Russell . "I remain convinced that obstinate addiction to ordinary language in our private thoughts is one of the main obstacles to progress in philosophy." -- Bertrand Russell . "Freedom in general may be defined as the absence of obstacles to the realization of desires." -- Bertrand Russell . "Democracy is the process by which people choose the man who'll get the blame." -- Bertrand Russell . "A lot of these people who keep a gun at home for safety are the same ones who refuse to wear a seat belt." -- George Carlin . "New programmers are drawn to multithreading like moths to flame, with similar results." -- Tweet by Danny Thorpe . "Heck, I don't age in my mind - people around me just keep getting younger. :^)" -- Van Swofford in e.p.delphi.non-technical . "The clue train passed his station without stopping." -- John Simmons / outlaw programmer . "Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" -- Pete O'Hanlon . "Not only do you continue to babble nonsense, you can't even correctly remember the nonsense you babbled just minutes ago." -- Rob Graham . Acton's Law: Power tends to corrupt; absolute power corrupts absolutely. . Albrecht's Law: Social innovations tend to the level of minimum tolerable well-being. . Allen's (or Cann's) Axiom: When all else fails, read the instructions. . Boren's First Law: When in doubt, mumble. . Bo Diddeley's Observation On The Law: Always take a lawyer with you, and bring another lawyer to watch him. . Bove's Theorem: The remaining work to finish in order to reach your goal increases as the deadline approaches. . Bowie's Theorem: If an experiment works, you must be using the wrong equipment. . Brilliant's Observation On Modern Art: Not all our artists are playing a joke on the public. Some are genuinely mad. . Brilliant's Law Of Limited Ambition: If you can't learn how to do it well, learn how to enjoy doing it poorly. . Brook's Law: Adding manpower to a late software project makes it later. . Canada Bill Jones' Motto: It's morally wrong to allow naive end users to keep their money. . Cann's (or Allen's) Axiom: When all else fails, read the instructions. . Carlson's Consolation: Nothing is ever a complete failure; it can always serve as a bad example. . Clarke's Third Law: Any sufficiently advanced technology is indistinguishable from magic. . Cohn's Law: The more time you spend in reporting on what you are doing, the less time you have to do anything. Stability is achieved when you spend all your time reporting on the nothing you are doing. . Conway's Law: In any organization there will always be one person who knows what is going on. This person must be fired. . Law Of Continuity: Experiments should be reproducible. They should all fail in the same way. . Correspondence Corollary: An experiment may be considered a success if no more than half of your data must be discarded to obtain correspondence with your theory. . Cropp's Law: The amount of work done varies inversely with the amount of time spent in the office. . Cutler Webster's Law: There are two sides to every argument, unless a person is personally involved, in which case there is only one. . Deadline-Dan's Demo Demonstration: The higher the "higher-ups" are who've come to see your demo, the lower your chances are of giving a successful one. . Deadline-Dan's Demon: Every task takes twice as long as you think it will take. If you double the time you think it will take, it will actually take four times as long. . Demian's Observation: There is always one item on the screen menu that is mislabeled and should read "ABANDON HOPE ALL YE WHO ENTER HERE". . Denniston's Law: Virtue is its own punishment. . Dow's Law: In a hierarchical organization, the higher the level, the greater the confusion. . Dr. Caligari's Come-Back: A bad sector disk error occurs only after you've done several hours of work without performing a backup. . Estridge's Law: No matter how large and standardized the marketplace is, IBM can redefine it. . Finagle's Laws: 1. Once a job is fouled up, anything done to improve it makes it worse. 2. No matter what results are expected, someone is always willing to fake it. 3. No matter what the result, someone is always eager to misinterpret it. 4. No matter what occurs, someone believes it happened according to his pet theory. . Finagle's Rules: 1. To study an application best, understand it thoroughly before you start. 2. Always keep a record of data. It indicates you've been working. 3. Always draw your curves, then plot the reading. 4. In case of doubt, make it sound convincing. 5. Program results should always be reproducible. They should all fail in the same way. 6. Do not believe in miracles. Rely on them. . Finagle's Law Of Government Contracting: Dealing with the government is like kicking a 300-pound sponge. . Finagle's Law Of Military Superiority: The bigger they are The harder they hit. . Finster's Law: A closed mouth gathers no feet. . First Rule Of History: History doesn't repeat itself -- historians merely repeat each other. . Flo Capp's Observation: The next best thing to doing something smart is not doing something stupid. . Franklin's Rule: Blessed is the end user who expects nothing, for he/she will not be disappointed. . Gilb's Laws Of Unreliability: 1. At the source of every error which is blamed on the computer you will find at least two human errors, including the error of blaming it on the computer. 2. Any system which depends on human reliability is unreliable. 3. Undetectable errors are infinite in variety, in contrast to detectable errors, which by definition are limited. 4. Investment in reliability will increase until it exceeds the probable cost of errors, or until someone insists on getting some useful work done. . Ginsberg's Theorem: 1. You can't win. 2. You can't break even. 3. You can't even quit the game. . Glyme's Formula For Success: The secret of success is sincerity. Once you can fake that, you've got it made. . Goebel's Law Of Useless Difficulty: Just because it's hard Doesn't mean it's worth the effort. . Goebel's Second Law Of Useless Difficulty: The fastest way to get something done is to determine that it isn't worth doing. . Goebel's Law Of Computer Support: Troubleshooting a computer over the telephone is like having sex through a hole in a board fence. It can be done but it is neither EASY nor PLEASANT. . Goebel's Law Of Software Compatibility: A statement of absolute functional equivalence made in bold print followed by several pages of qualifications is fine. . Goebel's Theorem Of Software Schedules: Always multiply a software schedule by pi. This is because you think you're going in a straight line but always end up going full circle. . Goebel's Law Of Product Introductions: A future product release date does NOT say when a product will be introduced. All it says it that you don't have a chance in HELL of seeing it before that time. . Goebel's Observation On Utopia: If everyone believed in Peace they would immediately begin fighting over the best way to achieve it. . Goebel's Law Of Intellectual Obscurity: WHAT FUN IS IT TO BE AN EXPERT IF YOU MAKE YOURSELF EASY TO UNDERSTAND? . The Golden Rule Of Arts And Sciences: Whoever has the gold makes the rules. . Gold's Law: If the shoe fits, it's ugly. . Gordon's First Law: If a research project is not worth doing at all, it is not worth doing well. . Government's Law: There is an exception to all laws. . Green's Law Of Debate: Anything is possible if you don't know what you're talking about. . Gummidges's Law: The amount of expertise varies in inverse proportion to the number of statements understood by the general public. . Gumperson's Law: The probability of a given event occurring is inversely proportional to its desirability. . Hanlon's Razor: Never attribute to malice that which is adequately explained by stupidity. . Harp's Corollary To Estridge's Law: Your "IBM PC-compatible" computer grows more incompatible with every passing moment. . Harrison's Postulate: For every action, there is an equal and opposite criticism. . Heller's Law: The first myth of management is that it exists. . Hind's Law of Computer Programming: 1. Any given program, when running, is obsolete. 2. If a program is useful, it will have to be changed. 3. If a program is useless, it will have to be documented. 4. Any given program will expand to fill all available memory. 5. The value of a program is proportional to the weight of its output. 6. Program complexity grows until it exceeds the capability of the programmer who must maintain it. 7. Make it possible for programmers to write programs in English, and you will find that programmers cannot write in English. . Hoare's Law Of Large Programs: Inside every large program is a small program struggling to get out. . Hubbard's Law: Don't take life too seriously; you won't get out of it alive. . Jenkinson's Law: It won't work. . Johnson-Laird's Law: Toothache tends to start on Saturday night. . Larkinson's Law: All laws are basically false. . The Last One's Law Of Program Generators: A program generator creates programs that are more "buggy" than the program generator. . Lieberman's Law: Everybody lies; but it doesn't matter, since nobody listens. . Lynch's Law: When the going gets tough, everyone leaves. . Mason's First Law Of Synergism: The one day you'd sell you soul for something, souls are a glut. . May's Law: The quality of correlation is inverely proportional to the density of control. (The fewer the data points, the smoother the curves.) . Mencken's Law: There is always an easy answer to every human problem -- neat, plausible, and wrong. . Meskimen's Law: There's never time to do it right, but always time to do it over. . Muir's Law: When we try to pick out anything by itself, we find it hitched to everything else in the universe. . Murphy's Laws: 1. If anything can go wrong, it will (and at the worst possible moment). 2. Nothing is as easy as it looks. 3. Everything takes longer than you think it will. . Murphy's Fourth Law: If there is a possibility of several things going wrong, the one that will cause the most damage will be the one to go wrong. . Murphy's Law Of Thermodynamics: Things get worse under pressure. . Ninety-ninety Rule Of Project Schedules: The first ninety percent of the task takes ninety percent of the time, and the last ten percent takes the other ninety percent. . Nixon's Theorem: The man who can smile when things go wrong has thought of someone he can blame it on. . Nolan's Placebo: An ounce of image is worth a pound of performance. . Oliver's Law Of Location: No matter where you are, there you are. . O'Reilly's Law Of The Kitchen: Cleanliness is next to impossible. . Osborn's Law: Variables won't, constants aren't. . O'Toole's Commentary On Murphy's Law: Murphy was an optimist. . Parkinson's Law: Work expands to fill the time available for its completion. . Parkinson's Law, Modified: The components you have will expand to fill the available space. . Peer's Law: The solution to a problem changes the problem. . Peter's Principle: In every hierarchy, each employee tends to rise to the level of his incompetence. . The Law Of The Perversity Of Nature: You cannot determine beforehand which side of the bread to butter. . Pudder's Law: Anything that begins well will end badly. (Note: The converse of Pudder's law is not true.) . Rhode's Corollary To Hoare's Law: Inside every complex and unworkable program is a useful routine struggling to be free. . Robert E. Lee's Truce: Judgement comes from experience; experience comes from poor judgement. . Rudin's Law: In a crisis that forces a choice to be made among alternative courses of action, people tend to choose the worst possible course. . Rule Of Accuracy: When working toward the solution of a problem it always helps you to know the answer. . Ryan's Law: Make three correct guesses consecutively and you will establish yourself as an expert. . Sattinger's Law: It works better if you plug it in. . Sausage Principle: People who love sausage and respect the law should never watch either one being made. . Shaw's Principle: Build a system that even a fool can use, and only a fool will want to use it. . SNAFU Equations: 1. Given any problem containing N equations, there will be N+1 unknowns. 2. An object or bit of information most needed will be least available. 3. Any device requiring service or adjustment will be least accessible. 4. Interchangeable devices won't. 5. In any human endeavor, once you have exhausted all possibilities and fail, there will be one solution, simple and obvious, highly visible to everyone else. 6. Badness comes in waves. . Stewart's Law Of Retroaction: It is easier to get forgiveness than permission. . Thoreau's Theories Of Adaptation: 1. After months of training and you finally understand all of a program's commands, a revised version of the program arrives with an all-new command structure. 2. After designing a useful routine that gets around a familiar "bug" in the system, the system is revised, the "bug" taken away, and you're left with a useless routine. 3. Efforts in improving a program's "user friendliness" invariable lead to work in improving user's "computer literacy". 4. That's not a "bug", that's a feature! . Thyme's Law: Everything goes wrong at once. . The Law Of The Too Solid Goof: In any collection of data, the figures that are obviously correct beyond all need of checking contain the errors. Corollary 1: No one you ask for help will see the error either. Corollary 2: Any nagging intruder, who stops by with unsought advice, will spot it immediately. . Unnamed Law: If it happens, it must be possible. . Weiler's Law: Nothing is impossible for the man who doesn't have to do the work. . Weinberg's Corollary: An expert is a person who avoids the small errors while sweeping on to the grand fallacy. . Weinberg's Law: If builders built buildings the way programmers write programs, then the first woodpecker that came along would destroy civilization. . Whitehead's Law: The obvious answer is always overlooked. . Wilcox's Law: A pat on the back is only a few centimeters from a kick in the pants. . Wood's Axiom: As soon as a still-to-be-finished computer task becomes a life-or-death situation, the power fails. . Woodward's Law: A theory is better than its explanation. . Zymurgy's First Law Of Evolving System Dynamics: Once you open a can of worms, the only way to recan them is to use a larger can. . Laws Of Project Management: 1. No major project is ever installed on time, within budgets, with the staff that started it. Yours will not be the first. 2. Projects progress quickly until they become 90 percent complete, then they remain at 90 percent complete forever. 3. One advantage of fuzzy project objectives is that they let you avoid the embarrassment of estimating the corresponding costs. 4. When things are going well, something will go wrong. When things just can't get any worse, they will. When things appear to be going better you have overlooked something. 5. If project content is allowed to change freely, the rate of change will exceed the rate of progress. 6. No system is ever completely debugged. Attempts to debug a system inevitably introduce new bugs that are even harder to find. 7. A carelessly planned project will take three times longer to complete than expected; a carefully planned project will take only twice as long. 8. Project teams detest progress reporting because it vividly manifests their lack of progress. . "You can't rush good cooking, you can't rush babies out, and you can't rush software development". -- Unknown . "To eat well in England, you should have breakfast three times a day." -- W. Somerset Maugham, 1925 . "Maybe her popularity stems from the fact that watching her is sometimes like watching a train wreck." -- John McCain's daughter Meghan about Ann Coulter . "Do you ever wake up in the middle of the night and just think to yourself, 'I am just full of hot gas?'" -- David Letterman to Rush Limbaugh . "I told my wife that I had a living will: I do not wish to be fed liquids from a bottle and hooked to a machine. So she turned off the TV and threw away the beer." -- Bob Hipsley . "The only function of economic forecasting is to make astrology look respectable." -- John Kenneth Galbraith . "The government of the United States is in no sense founded on the Christian Religion." -- George Washington "I do not find in Christianity one redeeming feature." -- Thomas Jefferson "The Bible is not my book, nor Christianity my religion." -- Abraham Lincoln "A just government has no need for the clergy or the church." -- James Madison "I believe in an America where religious intolerance will someday end... where every man has the same right to attend or not attend the church of his choice." -- John F. Kennedy "We are a nation of Christians and Muslims, Jews and Hindus -- and nonbelievers." -- Barack Obama . "If you can't be a good example, then you'll just have to serve as a horrible warning." -- Catherine Aird . "And the users exclaimed with a laugh and a taunt: 'It's just what we asked for but not what we want.'" . "I really hate this damned machine I wish that they would sell it. It never does quite what I want But only what I tell it." . "If the lessons of history teach us anything it is that nobody learns the lessons that history teaches us." . "Real computer scientists despise the idea of actual hardware. Hardware has limitations, software doesn't. It's a real shame that Turing machines are so poor at I/O." . "Sufficiently advanced incompetence is indistinguishable from malice." . "The Six Phases of a Project:" o Enthusiasm o Disillusionment o Panic o Search for the Guilty o Punishment of the Innocent o Praise for non-participants" . "Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why." . "If there's one thing worse than a program that doesn't work when it should, it's a program that does work when it shouldn't." -- Bob Archer . "There's a fine line between being on the leading edge and being in the lunatic fringe." -- Frank Armstrong . "Once a new technology starts rolling, if you're not part of the steamroller, you're part of the road." -- Stewart Brand . "Einstein argued that there must be simplified explanations of nature, because God is not capricious or arbitrary. No such faith comforts the software engineer." -- Fred Brooks . "Good judgement comes from experience, and experience comes from bad judgement." -- Fred Brooks . "Plan to throw one away, you will anyhow." -- Fred Brooks . "...well over half of the time you spend working on a project (on the order of 70 percent) is spent thinking, and no tool, no matter how advanced, can think for you. Consequently, even if a tool did everything except the thinking for you -- if it wrote 100 percent of the code, wrote 100 percent of the documentation, did 100 percent of the testing, burned the CD-ROMs, put them in boxes, and mailed them to your customers -- the best you could hope for would be a 30 percent improvement in productivity. In order to do better than that, you have to change the way you think." -- Fred Brooks [paraphrased] as quoted from Allen Holub's http://www.javaworld.com/javaworld/jw-07-1999/jw-07-toolbox.html . "The act of focusing our mightiest intellectual resources on the elusive goal of goto-less programs has helped us get our minds off all those really tough and possibly unresolvable problems and issues with which today's professional programmer would otherwise have to grapple." -- John Brown . "The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time." -- Tom Cargill . "... the cost of adding a feature isn't just the time it takes to code it. The cost also includes the addition of an obstacle to future expansion. ... The trick is to pick the features that don't fight each other." -- John Carmack . "Trying to get into the details seems to be a religious issue -- nearly everybody is convinced that every style but their own is ugly and unreadable. Leave out the "but their own" and they're probably right..." -- Jerry Coffin on indentation . "The behavior of any bureaucratic organization can best be understood by assuming that it is controlled by a secret cabal of its enemies." -- Robert Conquest's Second Law of Politics . "C++ tries to guard against Murphy, not Machiavelli." -- Damian Conway . "Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. (For example, if you have four groups working on a compiler, you'll get a 4-pass compiler)" -- Conway's Law . "Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots. So far the Universe is winning." -- Rich Cook . "It has been said that the great scientific disciplines are examples of giants standing on the shoulders of other giants. It has also been said that the software industry is an example of midgets standing on the toes of other midgets." -- Alan Cooper About Face . "Style distinguishes excellence from accomplishment." -- James Coplien . "Learning is not compulsory. Neither is survival." -- W. Edwards Deming . "To iterate is human, to recurse divine." -- L. Peter Deutsch . "Just because the standard provides a cliff in front of you, you are not necessarily required to jump off it." -- Norman Diamond . "A most important, but also most elusive, aspect of any tool is its influence on the habits of those who train themselves in its use. If the tool is a programming language this influence is, whether we like it or not, an influence on our thinking habits." -- Edsger Dijkstra . "It is practically impossible to teach good programming style to students that have had prior exposure to Basic; as potential programmers they are mentally mutilated beyond hope of regeneration." -- Edsger Dijkstra . "Simplicity is prerequisite for reliability" -- Edsger W. Dijkstra . "The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague." -- Edsger Dijkstra . "Any code of your own that you haven't looked at for six or more months might as well have been written by someone else." -- Eagleson's law . "Do not worry about your difficulties in mathematics. I can assure you that mine are still greater." -- Albert Einstein . "Make everything as simple as possible, but not simpler." -- Albert Einstein . "Two things are infinite: the universe and human stupidity; and I'm not sure about the universe." -- Albert Einstein . "I have always found that plans are useless, but planning is indispensable." -- Dwight Eisenhower . "A foolish consistency is the hobgoblin of little minds, adored by little statesmen and philosophers and divines." -- Ralph Waldo Emerson . "For a sucessful technology, honesty must take precedence over public relations for nature cannot be fooled." -- Richard Feynman . "The first principle is that you must not fool yourself - and you are the easiest person to fool." -- Richard Feynman . "The inside of a computer is as dumb as hell but it goes like mad!" -- Richard Feynman . "You can know the name of a bird in all the languages of the world, but when you're finished, you'll know absolutely nothing whatever about the bird... So let's look at the bird and see what it's doing -- that's what counts. I learned very early the difference between knowing the name of something and knowing something." -- Richard Feynman . "One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs." -- Robert Firth . "There is not now, nor has there ever been, nor will there ever be, any programming language in which it is the least bit difficult to write bad code." -- Flon's Law . "Comparing to another activity is useful if it helps you formulate questions, it's dangerous when you use it to justify answers." -- Martin Fowler . "Simplicity carried to the extreme becomes elegance." -- Jon Franklin . "If you want a girlfriend, avoid working in the computer games industry like the plague. If you work seven days a week, 15 hours a day for almost two years, with barely enough time for a pint, you have no time whatsoever for relationships. Plus computer-games makers are regarded as being about as hip and cool as abattoir workers." -- Toby Gard, creator of Lara Croft. . "Measuring programming progress by lines of code is like measuring aircraft building progress by weight." -- Bill Gates . "Good programmers use their brains, but good guidelines save us having to think out every case." -- Francis Glassborow . "Software obeys the law of gaseous expansion - it continues to grow until memory is completely filled." -- Larry Gleason . "An API that isn't comprehensible isn't usable." -- James Gosling . "How the teacher reacts when something goes wrong tells the class what's important." -- Bruce Hamilton . "Never attribute to malice that which is adequately explained by stupidity." -- Hanlon's razor . "The road to wisdom?" Well its plain and simple to express: Err and err and err again, but less and less and less." -- Piet Hein . "Moving parts in rubbing contact require lubrication to avoid excessive wear. Honorifics and formal politeness provide the lubrication where people rub together. Often the very young, the untraveled, the naive, the unsophisticated deplore these formalities as "empty," "meaningless," or "dishonest," and scorn to use them. No matter how "pure" their motives, they thereby throw sand into machinery that does not work too well at best." -- Robert A. Heinlein . "There are perhaps 5% of the population that simply *can't* think. There are another 5% who *can*, and *do*. The remaining 90% *can* think, but *don't*." -- Robert A. Heinlein . "The open secrets of good design practice include the importance of knowing what to keep whole, what to combine, what to separate, and what to throw away." -- Kevlin Henny . "We are apt to shut our eyes against a painful truth.... For my part, I am willing to know the whole truth; to know the worst; and to provide for it." -- Patrick Henry . "There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies." -- C.A.R. Hoare . "The unavoidable price of reliability is simplicity." -- C.A.R. Hoare . "The ability to simplify means to eliminate the unnecessary so that the necessary may speak." -- Hans Hoffmann . "It always takes longer than you expect, even when you take into account Hofstadter's Law." -- Hofstadter's Law . "It's not at all important to get it right the first time. It's vitally important to get it right the last time." -- Andrew Hunt and David Thomas . "Rules of Optimization:" Rule 1: Don't do it. Rule 2 (for experts only): Don't do it yet." -- M.A. Jackson . "Before software can be reusable it first has to be usable." -- Ralph Johnson . "First, solve the problem. Then, write the code." -- John Johnson . "It's so easy to become mesmerized by the immediacy of a result that you don't question its validity." -- Naomi Karten . "Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves." -- Alan Kay . "Perl is another example of filling a tiny, short-term need, and then being a real problem in the longer term." -- Alan Kay . "We are faced with an insurmountable opportunity." -- W. Kelley . "As we said in the preface to the first edition, C 'wears well as one's experience with it grows.' With a decade more experience, we still feel that way." -- Brian Kernighan and Dennis Ritchie . "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." -- Brian W. Kernighan . "Trying to outsmart a compiler defeats much of the purpose of using one." -- Kernighan and Plauger, The Elements of Programming Style. . "A charlatan makes obscure what is clear; a thinker makes clear what is obscure." -- Hugh Kingsmill . "... the designer of a new system must not only be the implementor and the first large-scale user; the designer should also write the first user manual. ... If I had not participated fully in all these activities, literally hundreds of improvements would never have been made, because I would never have thought of them or perceived why they were important." -- Donald Knuth . "Any inaccuracies in this index may be explained by the fact that it has been sorted with the help of a computer." -- Donald Knuth Sorting and Searching . "Beware of bugs in the above code; I have only proved it correct, not tried it." -- Donald Knuth . "Computers are good at following instructions, but not at reading your mind." -- Donald Knuth . "Let us change our traditional attitude to the construction of programs. Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do." -- Donald Knuth . "TeX has found at least one bug in every Pascal compiler it's been run on, I think, and at least two in every C compiler." -- Donald Knuth . "The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it can be an aesthetic experience much like composing poetry or music." -- Donald Knuth . "These machines have no common sense; they have not yet learned to 'think', and they do exactly as they are told, no more and no less. This fact is the hardest concept to grasp when one first tries to use a computer." -- Donald Knuth . "You're bound to be unhappy if you optimize everything." -- Donald Knuth . "Programming can be fun, so can cryptography; however they should not be combined." -- Kreitzberg and Shneiderman . "The perfect project plan is possible if one first documents a list of all the unknowns." -- Bill Langley . "Without stress nothing would move." -- Bill Langley . "But in our enthusiasm, we could not resist a radical overhaul of the system, in which all of its major weaknesses have been exposed, analyzed, and replaced with new weaknesses." -- Bruce Leverett, Register Allocation in Optimizing Compilers . "There is nothing more difficult to carry out, nor more doubtful of success, nor more dangerous to handle, than to initiate a new order of things. For the reformer has enemies in all those who profit by the old order, and only lukewarm defenders in all those who would profit by the new..." -- Niccolo Macchiavelli, The Prince . "If you want a product with certain characteristics, you must ensure that the team has those characteristics before the product's development." -- Jim McCarthy and Michele McCarthy - Software for your Head . "You can't have great software without a great team, and most software teams behave like dysfunctional families." -- Jim McCarthy . "Good code is its own best documentation. As you're about to add a comment, ask yourself, 'How can I improve the code so that this comment isn't needed?' Improve the code and then document it to make it even clearer." -- Steve McConnell Code Complete . "It's hard enough to find an error in your code when you're looking for it; it's even harder when you've assumed your code is error-free." -- Steve McConnell Code Complete . "Testing by itself does not improve software quality. Test results are an indicator of quality, but in and of themselves, they don't improve it. Trying to improve software quality by increasing the amount of testing is like trying to lose weight by weighing yourself more often. What you eat before you step onto the scale determines how much you will weigh, and the software development techniques you use determine how many errors testing will find. If you want to lose weight, don't buy a new scale; change your diet. If you want to improve your software, don't test more; develop better." -- Steve McConnell Code Complete . "Incompetents invariably make trouble for people other than themselves." -- Larry McMurtry . "For every complex problem there is an answer that is clear, simple, and wrong." -- H L Mencken . "Haste is of the devil. Slowness is of God." -- H L Mencken . "Say what you will about the Ten Commandments, you must always come back to the pleasant fact that there are only ten of them." -- H. L. Mencken . "Correctness is clearly the prime quality. If a system does not do what it is supposed to do, then everything else about it matters little." -- Bertrand Meyer . "Incorrect documentation is often worse than no documentation." -- Bertrand Meyer . "A non-virtual function says, you have to do this and you must do it this way. A virtual function says you have to do this, but you don't have to do it this way. That's their fundamental difference." -- Scott Meyers . "Debugging a Direct3D application can be challenging." -- Microsoft's Direct3D Immediate Mode overview. . "Unformed people delight in the gaudy and in novelty. Cooked people delight in the ordinary." -- Erik Naggum . "Any fool can use a computer. Many do." -- Ted Nelson . "Anyone who considers arithmetical methods of producing random numbers is, of course, in a state of sin." -- John von Neumann . "There's no sense being exact about something if you don't even know what you're talking about." -- John von Neumann . "That's the thing about people who think they hate computers. What they really hate is lousy programmers." -- Larry Niven and Jerry Pournelle Oath of Fealty . "The truth does not change according to our ability to stomach it." -- Flannery O'Connor . "Elegance is not optional" -- Richard O'Keefe . "The best performance improvement is the transition from the nonworking state to the working state" -- John Ousterhout . "Complexity kills. It sucks the life out of developers, it makes products difficult to plan, build and test, it introduces security challenges and it causes end-user and administrator frustration." -- Ray Ozzie . "Good code is short, simple, and symmetrical - the challenge is figuring out how to get there." -- Sean Parent . "Alas, to wear the mantle of Galileo it is not enough that you be persecuted by an unkind establishment, you must also be right." -- Bob Park . "Copy and paste is a design error" -- David Parnas . "Every program has (at least) two purposes: the one for which it was written, and another for which it wasn't." -- Alan J. Perlis . "There are two ways to write error-free programs; only the third works." -- Alan J. Perlis . "When someone says, 'I want a programming language in which I need only say what I want done', give him a lollipop." -- Alan Perlis . "Some problems are so complex that you have to be highly intelligent and well informed just to be undecided about them." -- Laurence J. Peter . "The most amazing achievement of the computer software industry is its continuing cancellation of the steady and staggering gains made by the computer hardware industry." -- Henry Petroski . "Computers are useless. They can only give you answers." -- Pablo Picasso . "Technology is dominated by two types of people: Those who understand what they do not manage. Those who manage what they do not understand." -- Putt's Law . "Ugly programs are like ugly suspension bridges: they're much more liable to collapse than pretty ones, because the way humans (especially engineer-humans) perceive beauty is intimately related to our ability to process and understand complexity. A language that makes it hard to write elegant code makes it hard to write good code." -- Eric S. Raymond . "PHP is a minor evil perpetrated and created by incompetent amateurs, whereas Perl is a great and insidious evil, perpetrated by skilled but perverted professionals." -- Jon Ribbens . "UNIX is simple. It just takes a genius to understand its simplicity." -- Dennis Ritchie . "We only acknowledge small faults in order to make it appear that we are free from great ones." -- La Rochefoucauld . "Even if you're on the right track, you'll get run over if you just sit there." -- Will Rogers . "The trouble with the world is that the stupid are cocksure and the intelligent are full of doubt." -- Bertrand Russell . "A mathematician is a machine for turning coffee into theorems." -- Alfréd Rényi (also attributed to Paul Erdös) . "You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." -- Antoine de Saint-Exupery, Wind, Sand and Stars . "Fashion is something barbarous, for it produces innovation without reason and imitation without benefit." -- George Santayana . "Those who cannot remember the past are condemned to repeat it." -- George Santayana . "If the code and the comments disagree, then both are probably wrong." -- attributed to Norm Schryer . "It is difficult to get a man to understand something when his salary depends on his not understanding it." -- Upton Sinclair . "When you start off by telling those who disagree with you that they are not merely in error but in sin, how much of a dialogue do you expect ?"" -- Thomas Sowell . "If you lie to the compiler, it will get its revenge." -- Henry Spencer . "Without requirements or design, programming is the art of adding bugs to an empty text file." -- Louis Srygley . "The primary duty of an exception handler is to get the error out of the lap of the programmer and into the surprised face of the user. Provided you keep this cardinal rule in mind, you can't go far wrong." -- Verity Stob . "We are tied down to a language which makes up in obscurity what it lacks in style." -- Tom Stoppard . "A notation is important for what it leaves out." -- Joseph Stoy . "An organisation that treats its programmers as morons will soon have programmers that are willing and able to act like morons only." -- Bjarne Stroustrup . "I did say something along the lines of 'C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows your whole leg off.'" -- Bjarne Stroustrup . "I have always wished that my computer would be as easy to use as my telephone. My wish has come true. I no longer know how to use my telephone." -- Bjarne Stroustrup . "The most important single aspect of software development is to be clear about what you are trying to build." -- Bjarne Stroustrup . "To many managers, getting rid of the arrogant, undisciplined, over-paid, technology-obsessed, improperly-dressed etc. programmers would appear to be a significant added benefit." -- Bjarne Stroustrup The C++ Programming Language 3e, section 24.2.4 . "Exceptions relieve the programmer of tedious writing boilerplate code -- without removing the semantics of said code -- and they allow the programmer to arrange the code so that error handling code is more separate from the main program logic." -- Herb Sutter . "A multithreaded file system is only a performance hack." -- Prof. Andrew S. Tanenbaum . "I've finally learned what "upward compatible" means. It means we get to keep all our old mistakes." -- Dennie van Tassel . "There are only two industries that refer to their customers as 'users'." -- Edward Tufte . "Lord, give us the wisdom to utter words that are gentle and tender, for tomorrow we may have to eat them." -- Rep. Morris Udall . "Simplicity is the ultimate sophistication." -- Leonardo da Vinci . "The best is the enemy of the good." -- Voltaire . "Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris." -- Larry Wall . "We all agree on the necessity of compromise. We just can't agree on when it's necessary to compromise." -- Larry Wall . "Power is the ability to control things, moral authority is the ability to change things" -- Jim Wallis . "When one is postulating correlations or causations extant in reality, one should always remember that the human brain is mainly a pattern recognition engine. And it is such a persistent pattern recognition engine that it often perceives patterns where none exist." -- Jeff Walther . "The pessimist complains about the wind; the optimist expects it to change; the realist adjusts the sails." -- William Arthur Ward . "They always say time changes things, but you actually have to change them yourself." -- Andy Warhol . "If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilisation." -- Gerald Weinberg . "Naturally we feel that mentally ill people are not what we are looking for when we hire programmers - although there is no empirical data to support or contradict that view... Is it appropriate to give tests for mental illness to anyone applying for any kind of job?" -- Weinberg The Psychology of Computer Programming . "As soon as we started programming, we found to our surprise that it wasn't as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs." -- Maurice Wilkes discovers debugging, 1949 . "Increasingly, people seem to misinterpret complexity as sophistication, which is baffling - the incomprehensible should cause suspicion rather than admiration. Possibly this trend results from a mistaken belief that using a somewhat mysterious device confers an aura of power on the user." -- Niklaus Wirth . "More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity." -- W.A. Wulf . "If you think your management doesn't know what it's doing or that your organisation turns out low-quality software crap that embarrasses you, then leave." -- Edward Yourdon Rise and Resurrection of the American Programmer . "The purpose of software engineering is to control complexity, not to create it." -- Dr. Pamela Zave . "Some people, when confronted with a problem, think 'I know, I'll use regular expressions.' Now they have two problems." -- Jamie Zawinski . "If you plan to throw one away, you will throw away two." -- Craig Zerouni . "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." -- Brian Kernighan . "The city's central computer told you? R2D2, you know better than to trust a strange computer!" -- C3PO . "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." -- Martin Golding . "I don't care if it works on your machine! We are not shipping your machine!" -- Vidiu Platon . "If McDonalds were run like a software company, one out of every hundred Big Macs would give you food poisoning, and the response would be, 'We're sorry, here's a coupon for two more.'" -- Mark Minasi . "A computer lets you make more mistakes faster than any invention in human history - with the possible exceptions of handguns and tequila." -- Mitch Radcliffe . "The best thing about a boolean is even if you are wrong, you are only off by a bit." . "Mr. Madison, what you've just said is one of the most insanely idiotic things I have ever heard. At no point in your rambling, incoherent response were you even close to anything that could be considered a rational thought. Everyone in this room is now dumber for having listened to it. I award you no points, and may God have mercy on your soul." -- from movie Billy Madison . "There are, it has been said, two types of people in the world. There are those who, when presented with a glass that is exactly half full, say: this glass is half full. And then there are those who say: this glass is half empty. The world belongs, however, to those who can look at the glass and say: What's up with this glass? Excuse me? Excuse me? This is my glass? I don't think so. My glass was full! And it was a bigger glass!" -- Terry Pratchett, (The Truth) . 'What our ancestors would really be thinking, if they were alive today, is: "Why is it so dark in here?"' -- Terry Pratchett, (Pyramids) . "The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it." -- Terry Pratchett (Diggers) . 'That seems to point up a significant difference between Europeans and Americans. A European says: "I can't understand this, what's wrong with me?" An American says: "I can't understand this, what's wrong with him?"' -- Terry Pratchett . "Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry." -- Terry Pratchett (Thief of Time) . "Give a man a fire and he's warm for the day, but set fire to him and he's warm for the rest of his life." -- Terry Pratchett (Jingo) . "It is said that your life flashes before your eyes just before you die. That is true, it's called Life." -- Terry Pratchett (The Last Continent) . "If cats looked like frogs we'd realize what nasty, cruel little bastards they are. Style. That's what people remember." -- Terry Pratchett (Lords and Ladies) . "Stories of imagination tend to upset those without one." -- Terry Pratchett . "In ancient times cats were worshipped as gods; they have not forgotten this." -- Terry Pratchett . "It's not worth doing something unless someone, somewhere, would much rather you weren't doing it." -- Terry Pratchett . "Time is a drug. Too much of it kills you." -- Terry Pratchett (Small Gods) . "I'll be more enthusiastic about encouraging thinking outside the box when there's evidence of any thinking going on inside it." -- Terry Pratchett . "In the beginning there was nothing, which exploded." -- Terry Pratchett (Lords and Ladies) . "Wisdom comes from experience. Experience is often a result of lack of wisdom." -- Terry Pratchett . "No! Please! I'll tell you whatever you want to know!" the man yelled. "Really?" said Vimes. "What's the orbital velocity of the moon?" "What?" "Oh, you'd like something simpler?" -- Terry Pratchett (Night Watch) . "Real stupidity beats artificial intelligence every time." -- Terry Pratchett (Hogfather) . "Five exclamation marks, the sure sign of an insane mind." -- Terry Pratchett (Reaper Man) . "If you have enough book space, I don't want to talk to you." -- Terry Pratchett . "Coming back to where you started is not the same as never leaving." -- Terry Pratchett (A Hat Full of Sky) . "A good bookshop is just a genteel Black Hole that knows how to read." -- Terry Pratchett (Guards! Guards!) . "Just erotic. Nothing kinky. It's the difference between using a feather and using a chicken." -- Terry Pratchett (Eric) . "I meant," said Ipslore bitterly, "what is there in this world that truly makes living worthwhile?" Death thought about it. "Cats," he said eventually. "Cats are nice." -- Terry Pratchett (Sourcery) . "It would seem that you have no useful skill or talent whatsoever,' he said. 'Have you thought of going into teaching?" -- Terry Pratchett (Mort) . "I'd rather be a climbing ape than a falling angel." -- Terry Pratchett . "DON'T THINK OF IT AS DYING, said Death. JUST THINK OF IT AS LEAVING EARLY TO AVOID THE RUSH." -- Terry Pratchett (Good Omens) . "There is a rumour going around that I have found God. I think this is unlikely because I have enough difficulty finding my keys, and there is empirical evidence that they exist." -- Terry Pratchett . "The whole of life is just like watching a film. Only it's as though you always get in ten minutes after the big picture has started, and no-one will tell you the plot, so you have to work it out all yourself from the clues." -- Terry Pratchett (Moving Pictures) . "And what would humans be without love?" "Rare," said Death. -- Terry Pratchett (Sourcery) . "He'd been wrong, there was a light at the end of the tunnel, and it was a flamethrower." -- Terry Pratchett (Mort) . "His philosophy was a mixture of three famous schools -- the Cynics, the Stoics and the Epicureans -- and summed up all three of them in his famous phrase, 'You can't trust any bugger further than you can throw him, and there's nothing you can do about it, so let's have a drink.'" -- Terry Pratchett (Small Gods) . "If complete and utter chaos was lightning, then he'd be the sort to stand on a hilltop in a thunderstorm wearing wet copper armour and shouting 'All gods are bastards!'" -- Terry Pratchett (The Color of Magic) . "She was already learning that if you ignore the rules people will, half the time, quietly rewrite them so that they don't apply to you." -- Terry Pratchett (Equal Rites) . "This isn't life in the fast lane, it's life in the oncoming traffic." -- Terry Pratchett . "Fantasy is an exercise bicycle for the mind. It might not take you anywhere, but it tones up the muscles that can. Of course, I could be wrong." -- Terry Pratchett . "Always be wary of any helpful item that weighs less than its operating manual." -- Terry Pratchett (Jingo) . "Over the centuries, mankind has tried many ways of combating the forces of evil... prayer, fasting, good works and so on. Up until Doom, no one seemed to have thought about the double-barrel shotgun. Eat leaden death, demon..." -- Terry Pratchett . "Many people, meeting Aziraphale for the first time, formed three impressions: that he was English, that he was intelligent, and that he was gayer than a treeful of monkeys on nitrous oxide." -- Terry Pratchett (Good Omens) . "The presence of those seeking the truth is infinitely to be preferred to the presence of those who think they've found it." -- Terry Pratchett (Monstrous Regiment) . "Chaos is found in greatest abundance wherever order is being sought. It always defeats order, because it is better organized." -- Terry Pratchett (Interesting Times) . "The three rules of the Librarians of Time and Space are: 1) Silence; 2) Books must be returned by no later than the date shown; and 3) Do not interfere with the nature of causality." -- Terry Pratchett (Guards! Guards!) . "Studies have shown that an ant can carry one hundred times its own weight, but there is no known limit to the lifting power of the average tiny eighty-year-old Spanish peasant grandmother." -- Terry Pratchett (Reaper Man) . "We who think we are about to die will laugh at anything." -- Terry Pratchett (Night Watch) . "There are, it has been said, two types of people in the world. There are those who, when presented with a glass that is exactly half full, say: this glass is half full. And then there are those who say: this glass is half empty. The world belongs, however, to those who can look at the glass and say: What's up with this glass? Excuse me? Excuse me? This is my glass? I don't think so. My glass was full! And it was a bigger glass! Who's been pinching my beer? And at the other end of the bar the world is full of the other type of person, who has a broken glass, or a glass that has been carelessly knocked over (usually by one of the people calling for a larger glass) or who had no glass at all, because he was at the back of the crowd and had failed to catch the barman's eye. " -- Terry Pratchett (The Truth) . "Elves are wonderful. They provoke wonder. Elves are marvellous. They cause marvels. Elves are fantastic. They create fantasies. Elves are glamorous. They project glamour. Elves are enchanting. They weave enchantment. Elves are terrific. They beget terror. The thing about words is that meanings can twist just like a snake, and if you want to find snakes look for them behind words that have changed their meaning. No one ever said elves are nice. Elves are bad." -- Terry Pratchett (Lords and Ladies) . "I do note with interest that old women in my books become young women on the covers... this is discrimination against the chronologically gifted." --Terry Pratchett . "Albert grunted. 'Do you know what happens to lads who ask too many questions?' Mort thought for a moment. 'No,' he said eventually, 'what?' There was silence. Then Albert straightened up and said, 'Damned if I know. Probably they get answers, and serve 'em right.'" -- Terry Pratchett (Mort) . "It's still magic even if you know how it's done." -- Terry Pratchett (A Hat Full of Sky) . "If there was anything that depressed him more than his own cynicism, it was that quite often it still wasn't as cynical as real life." -- Terry Pratchett (Guards! Guards!) . "Insanity is catching." -- Terry Pratchett (Making Money) . "Gods prefer simple, vicious games, where you Do Not Achieve Transcendence but Go Straight To Oblivion; a key to the understanding of all religion is that a god's idea of amusement is Snakes and Ladders with greased rungs." -- Terry Pratchett (Wyrd Sisters) . "Getting an education was a bit like a communicable sexual disease. It made you unsuitable for a lot of jobs and then you had the urge to pass it on." -- Terry Pratchett (Hogfather) . "He'd noticed that sex bore some resemblance to cookery: it fascinated people, they sometimes bought books full of complicated recipes and interesting pictures, and sometimes when they were really hungry they created vast banquets in their imagination - but at the end of the day they'd settle quite happily for egg and chips. If it was well done and maybe had a slice of tomato." -- Terry Pratchett (The Fifth Elephant) . "The reason that the rich were so rich, Vimes reasoned, was because they managed to spend less money. Take boots, for example. He earned thirty-eight dollars a month plus allowances. A really good pair of leather boots cost fifty dollars. But an affordable pair of boots, which were sort of OK for a season or two and then leaked like hell when the cardboard gave out, cost about ten dollars. Those were the kind of boots Vimes always bought, and wore until the soles were so thin that he could tell where he was in Ankh-Morpork on a foggy night by the feel of the cobbles. But the thing was that good boots lasted for years and years. A man who could afford fifty dollars had a pair of boots that'd still be keeping his feet dry in ten years' time, while the poor man who could only afford cheap boots would have spent a hundred dollars on boots in the same time and would still have wet feet. This was the Captain Samuel Vimes 'Boots' theory of socioeconomic unfairness." -- Terry Pratchett (Men at Arms) . "Everything starts somewhere, though many physicists disagree. But people have always been dimly aware of the problem with the start of things. They wonder how the snowplough driver gets to work, or how the makers of dictionaries look up the spelling of words." -- Terry Pratchett (Hogfather) . "For animals, the entire universe has been neatly divided into things to (a) mate with, (b) eat, (c) run away from, and (d) rocks." -- Terry Pratchett (Equal Rites) . "My experience in Amsterdam is that cyclists ride where the hell they like and aim in a state of rage at all pedestrians while ringing their bell loudly, the concept of avoiding people being foreign to them. My dream holiday would be a) a ticket to Amsterdam b) immunity from prosecution and c) a baseball bat." -- Terry Pratchett . "There's a door." "Where does it go?" "It stays where it is, I think." -- Terry Pratchett (Eric) . "You don't elect politicians to commit crimes; you elect politicians to make your crimes legal." -- Matt Taibbi . "Is your argument that the Creator of the Universe was working under a deadline and His manager forced Him to rush inefficient designs into production?" -- John B. Breckenridge in bpot . "The role of the president of the United States is to support the decisions that are made by the people of Israel. It is not up to us to pick and choose from among the political parties." -- Former White House official Ann Lewis, representing Hillary Clinton. WaPo, Mar 18, 2008. . "If you have a procedure with 10 parameters, you probably missed some." -- Alan Perlis . ACHTUNG! ALLES LOOKENSPEEPERS! Das computermachine ist nicht fuer gefingerpoken und mittengrabben. Ist easy schnappen der springenwerk, blowenfusen und poppencorken mit spitzensparken. Ist nicht fuer gewerken bei das dumpkopfen. Das rubbernecken sichtseeren keepen das cotten-pickenen hans in das pockets muss; relaxen und watchen das blinkenlichten. -- from "THE JARGON FILE, VERSION 2.9.9, 01 APR 1992 . "Real Programmers never work from 9 to 5. If any real programmer is around at 9 a.m., it's because they were up all night." -- Some Computer Geek . "Usenet is like a herd of performing elephants with diarrhea -- massive, difficult to redirect, awe-inspiring, entertaining, and a source of mind-boggling amounts of excrement when you least expect it." -- Gene Spafford . "Hardware : The parts of a computer system that can be kicked." -- Jeff Pesis . "I have a spelling checker, It came with my PC; It plainly marks four my revue Mistakes I cannot sea. I've run this poem threw it, I'm sure your pleased too no, Its letter perfect in it's weigh, My checker tolled me sew." -- Janet Minor, "Spellbound" . "'Uncle Cosmo, why do they call this a word processor?' 'It's simple, Skyler. You've seen what food processors do to food, right?" -- MacNelley, in "Shoe" . "If it's there and you can see it - it's real. If it's not there and you can see it - it's virtual. If it's there and you can't see it - it's transparent. If it's not there and you can't see it - you erased it!" - Scott Hammer (an old IBM VM statement) . "Crossposting isn't inherently evil, in the same sense that necrophilia doesn't really hurt anybody. One wonders only whether it's appropriate to the occasion." -- Rick Gordon . "My suggestion for an Official Usenet Motto: "If you have nothing to say, then come on in, this is the place for you, tell us all about it!" -- Hevard Fosseng [quotation collector] . "The best way to accelerate a Macintosh is at 9.8 m/sec/sec." -- Marcus Dolengo . On the value of binary; the Bible says: "But let your communication be Yea, yea; nay, nay: for whatsoever is more than these cometh of evil." -- (Matthew 5:37) . "A distributed system is one in which the failure of a computer you didn't even know existed can render your own computer unusable." -- Leslie Lamport . "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." -- John F. Woods . "To err is human - and to blame it on a computer is even more so." -- Robert Orben . "A computer once beat me at chess, but it was no match for me at kick boxing." -- Emo Philips . "If computers get too powerful, we can organize them into a committee - that will do them in." . "A computer makes it possible to do, in half an hour, tasks which were completely unnecessary to do before." . "The most overlooked advantage of owning a computer is that if they foul up there's no law against whacking them around a bit." -- Eric Porterfield . "A computer is like an Old Testament god, with a lot of rules and no mercy" -- Joseph Campbell . "Two men were examining the output of the new computer in their department. After an hour or so of analyzing the data, one of them remarked: 'Do you realize it would take 400 men at least 250 years to make a mistake this big ?'" . "Technology: No Place for Wimps!" -- Scott Adams . "I would much prefer a government run bureaucracy than a for profit bureaucracy. In the first I am at least a stakeholder. In the latter I'm simply a cost." -- digby in her blog. . "Horatio stops by to say really obvious things slowly." -- From IMDb Synopsis for "CSI: Miami - Won't Get Fueled Again" . "'Abstinence-only sex education' is a little like saying 'Just-hold-it potty training'." -- Roy Zimmerman . "I hate you, I despise you, I loathe you. Everything about you DISGUSTS me. Your ears, eyes, nose, mouth, tongue, legs, knees, stomach, ribs and bottom make me want to vomit up. You're repulsive, loathsome, grotesque and insupportable. I want to kill you, I want to twist your nipples off and throw them to the dogs. You low corrosive lump of faecal horror; you maniac bastardly turd; I would rather drink stale urine from Norman Fowler's arse-pit than remain one moment longer in your defiling company; you're filth, you're cack, you're the ooze of a burst boil; I abominate you, you towering mound of corrupted slime; your every utterance is like the slithering hiss of a fat maggot in the guts of a decomposing rat; your face is fowler than the unwiped ring of Satan's rectum." -- Stephen Fry, A Bit of Fry and Laurie . "If economists were held in the same regard as medical practitioners, our courts would be overwhelmed with malpractice suits" -- unknown . "If all the economists in the world were laid end-to-end, they would still not reach a conclusion." -- unknown "If all the girls from Vassar were laid end-to-end, I wouldn't be surprised." -- Dorothy Parker . "I suppose that it takes a $1000/hour lawyer to write contracts that a $250/hour lawyer cannot find holes in. -- John Herbster in b.p.d.non-technical . "The defense policy of the United States is based on a simple premise: The United States does not start fights. We will never be an aggressor." -- Ronald Reagan . "War is wretched beyond description, and only a fool or a fraud could sentimentalize its cruel reality." -- Senator John McCain . "Criticism in a time of war is essential to the maintenance of any kind of democratic government." -- Sen. Robert Taft, (R) Ohio . "We first fought... in the name of religion, then Communism, and now in the name of drugs and terrorism. Our excuses for global domination always change." -- Serj Tankian . "Democracy is not an incident that happens overnight, nor a gift that America can give to the world. It is a culture which needs peace to evolve." -- Shirin Ebadi, Nobel Peace Laureate of Iran . "A belligerent state permits itself every such misdeed, every such act of violence, as would disgrace the individual." -- Sigmund Freud . "Civilization began the first time an angry person cast a word instead of a rock." -- Sigmund Freud . "If you live long enough, you'll see that every victory turns into a defeat." -- Simone de Beauvoir . "The great error of nearly all studies of war... has been to consider war as an episode in foreign policies, when it is an act of interior politics..." -- Simone Weil . "Terrorism is the war of the poor, and war is the terrorism of the rich." -- Sir Peter Ustinov . "In modern war there is no such thing as victor and vanquished... There is only a loser, and the loser is mankind." -- U Thant, Burmese UN Secretary General . "If you kill one person you are a murderer. If you kill ten people you are a monster. If you kill ten thousand you are a national hero." -- Vassilis Epaminondou . "All murderers are punished unless they kill in large numbers and to the sound of trumpets." -- Voltaire . "So long as the deceit ran along quiet and monotonous, all of us let ourselves be deceived, abetting it unawares or maybe through cowardice..." -- William Faulkner . "The cry has been that when war is declared, all opposition should be hushed. A sentiment more unworthy of a free country could hardly be propagated." -- William Ellery Channing . "Necessity is the plea for every infringement of human freedom. It is the argument of tyrants; it is the creed of slaves." -- William Pitt . "You can no more win a war than you can win an earthquake." -- Jeanette Rankin . "So apparently Delphi now has both aristocrats [Counts, Cardinals] and dogs [Pointers, Setters] ... " -- Andrew Fiddian-Green in borland.public.delphi.nativeapi.win32 . "Conservative politics is about simple solutions to complex problems, which usually involve pinning all the blame on someone else. It doesn't matter whether they make any sense - they can be explained in several words, and sound best when yelled." -- Michael Warner in borland.public.off-topic . "I contend that we are both atheists. I just believe in one fewer god than you do. When you understand why you dismiss all the other possible gods, you will understand why I dismiss yours." -- Stephen Roberts . "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius, and a lot of courage to move in the opposite direction." -- Albert Einstein . "Man is certainly stark mad: he cannot make a worm, yet he will make gods by the dozen." -- Michel de Montaigne . "Civil disobedience, that's not our problem. Our problem is that people are obedient all over the world in the face of poverty and starvation and stupidity, and war, and cruelty. Our problem is that people are obedient while the jails are full of petty thieves, and all the while the grand thieves are running the country. That's our problem." -- Howard Zinn . "Men will never be free until the last king is strangled with the entrails of the last priest." -- Denis Diderot . "We, on our side, are praying to Him to give us victory, because we believe we are right; but those on the other side pray to Him, too, for victory, believing they are right. What must He think of us?" -- Abraham Lincoln . "Invisible Pink Unicorns are beings of awesome mystical power. We know this because they manage to be invisible and pink at the same time. Like all religions, the Faith of the Invisible Pink Unicorns is based upon both logic and faith. We have faith that they are pink; we logically know that they are invisible because we can't see them." -- Steve Eley . "All great truths begin as blasphemies." -- George Bernard Shaw . "The injury we do and the one we suffer are not weighed in the same scale." -- Aesop . "Take only memories; leave nothing but footprints." -- Chief Seattle . "They made a wasteland and called it peace." -- Tacitus . "The law, in its majestic equality, forbids the rich, as well as the poor, to sleep under the bridges, to beg in the streets, and to steal bread." -- Anatole France . "The philosopher has never killed any priests, whereas the priest has killed a great many philosophers." -- Denis Diderot . "A terrorist is someone who has a bomb but can't afford an air force." -- William Blum . "What you do speaks so loud that I cannot hear what you say." -- Ralph Waldo Emerson . "A time will come when a politician who has willfully made war and promoted international dissension will be ... surer of the noose than a private homicide." -- H. G. Wells . "A man's ethical behavior should be based effectually on sympathy, education, and social ties and needs; no religious basis is necessary. Man would indeed be in a poor way if he had to be restrained by fear of punishment and hope of reward after death." -- Albert Einstein . "Disobedience, in the eyes of anyone who has read history, is man's original virtue. It is through disobedience that progress has been made, through disobedience and through rebellion." -- Oscar Wilde . "When you philosophically oppose an entire power elite, you cannot help but sound like a conspiracy theorist. Social power is by nature a conspiracy." -- Tom N . "Because I do it with one small ship, I am called a terrorist (pirate?). You do it with a whole fleet and are called an emperor." -- St. Augustine . "Insanity in individuals is something rare; but in groups, parties, nations, and epochs it is the rule." -- Nietzsche . "If you talk to God, you are praying. If God talks to you, you have schizophrenia." -- Thomas Szasz . "Every war when it comes, or before it comes, is represented not as a war but as an act of self-defense against a homicidal maniac." -- George Orwell . "It was, of course, a lie what you read about my religious convictions, a lie which is being systematically repeated. I do not believe in a personal god and I have never denied this but have expressed it clearly. If something is in me which can be called religious, then it is the unbounded admiration for the structure of the world so far as our science can reveal it." -- Albert Einstein . "You know your god is man-made when he hates all the same people you do." -- [Usenet] . "Disobedience is the true foundation of liberty. The obedient must be slaves." -- Henry David Thoreau . "One man's magic is another man's engineering. Supernatural is a null word." -- Robert Heinlein . "We must question the story logic of having an all-knowing all-powerful God, who creates faulty humans, and then blames them for his own mistakes." -- Gene Roddenberry . "The trouble with the world is that the stupid are cocksure and the intelligent are full of doubt." -- Bertrand Russell . "As with the Christian religion, the worst advertisement for Socialism is its adherents." -- George Orwell . "A conservative is a man who is too cowardly to fight and too fat to run." -- Elbert Hubbard . "Religion is what keeps the poor from murdering the rich." -- Napoleon . "Never be deceived that the rich will allow you to vote away their wealth." -- Lucy Parsons . "If child molestation is actually your concern, how come we don't see Bradley tanks knocking down Catholic churches?" -- Bill Hicks, 1993, referencing the Waco siege . "Do you see now that your self-righteousness was nothing more than breeding and years of privilege? You know, we are one nation under a god. Yes, you were right. An angry, crack slinging god who decorates with bullets and spent condoms, a blind god whose eyes are just like yours." -- Solipsist by Henry Rollins . "Religion, comprises a system of wishful illusions together with a disavowal of reality, such as we find in an isolated form nowhere else but in amentia, in a state of blissful hallucinatory confusion." -- Sigmund Freud . "The ink of the scholar is holier than the blood of the martyr." -- Prophet Muhammad . "Which is it, is man one of God's blunders or is God one of man's?" -- Nietzsche . "The compulsion to do good is an innate American trait. Only North Americans seem to believe that they always should, may, and actually can choose somebody with whom to share their blessings. Ultimately this attitude leads to bombing people into the acceptance of gifts." -- Ivan Illich . "... The biggest detractors of communism and socialism always seem to want to embrace the worst excesses of both." -- . "Kill a man, and you are an assassin. Kill millions of men, and you are a conqueror. Kill everyone, and you are a god." -- Jean Rostand . "Secular schools can never be tolerated because such schools have no religious instruction, and a general moral instruction without a religious foundation is built on air; consequently, all character training and religion must be derived from faith ... we need believing people." -- Adolf Hitler . "I never would have agreed to the formulation of the Central Intelligence Agency back in forty-seven, if I had known it would become the American Gestapo." -- Harry S Truman, 1961 . "Men are not punished for their sins, but by them." -- Elbert G Hubbard . "I like your Christ; I do not like your Christians. Your Christians are so unlike your Christ." -- Mohandas Gandhi . "Unless Americans come to realize that they are not stronger in the world because they have the bomb but weaker because of their vulnerability to atomic attack, they are not likely to conduct their policy, in a spirit that furthers the arrival at an understanding." -- Albert Einstein . "Patriotism is your conviction that this country is superior to all other countries because you were born in it." -- George Bernard Shaw . "The same people that wrote the bible thought the world was flat." -- Unknown - (disputed) . "If god created us in his image we have certainly returned the compliment." -- Voltaire . "Stopping terrorism is simple. Just quit screwing around with other people's countries and the terrorists will go home. But the government of the United States wants to go on screwing around with other people's countries, refuses to stop, indeed views it as Manifest Destiny for the United States Government to persist in screwing around with other people's countries, and views the inconvenience, increased tax burden, loss of civil liberties, and even deaths among the American people as just another cost of doing business." -- Michael Rivero . "Be happy while you're living, for you're a long time dead." -- Scottish proverb . "Work like you don't need the money. Love like you've never been hurt. Dance like nobody's watching." -- Satchel Paige . "Git yer guns, the liberal folks are gonna let the coloreds vote!" -- Unknown . "Be kind; everyone you meet is fighting a hard battle." -- Plato The enemy is anybody who's going to get you killed, no matter which side he is on." -- Joseph Heller . "It is forbidden to kill; therefore all murderers are punished unless they kill in large numbers and to the sound of trumpets." -- Voltaire . "Capitalism is the astounding belief that the most wickedest of men will do the most wickedest of things for the greatest good of everyone." -- John Maynard Keynes . "I distrust those people who know so well what God wants them to do because I notice it always coincides with their own desires." -- Susan B. Anthony . "If pigs could vote, the man with the slop bucket would be elected swineherd every time, no matter how much slaughtering he did on the side." -- Orson Scott Card . "It is poverty to decide that a child must die so that you may live as you wish." -- Mother Teresa . "I'm ineffably tired of pro-war ideologues moaning about how the anti-war folk are just 'complaining' without 'offering solutions' to global dilemmas. Peace doesn't need a freekin moral, ethical, economical, or political qualification; war does. Peace doesn't ravage, plunder, rape, or kill; war does. Peace does not need justification, war does." -- <|OnAir|> . "History is an account mostly false, of events mostly unimportant, which are brought about by rulers, mostly knaves, and soldiers, mostly fools." -- Ambrose Bierce . "The people who have really made history are the martyrs." -- Aleister Crowley . "Laurel and Hardy, that's John and Yoko. And we stand a better chance under that guise because all the serious people like Martin Luther King, Jr. and Kennedy and Gandhi got shot." -- John Lennon . "Does anybody know who Lee Harvey Oswald was? . . . And do you know how far away he was? . . . Two hundred and fifty feet. He was two hundred and fifty feet away and shooting at a moving target. He got off three shots with a bolt action rifle in six seconds, and got two hits, including a head shot. Do you know where those men learned to shoot like that? . . . In the Marines! Outstanding! Those individuals showed what one motivated marine and his rifle can do! And before you ladies leave my island, you will be able to do the same thing!" -- Full Metal Jacket . "I love talking about the Kennedy assassination. The reason I do is because I'm fascinated by it. I'm fascinated that our government could lie to us so blatantly, so obviously for so long, and we do absolutely nothing about it." -- Bill Hicks . "Men who believe absurdities will commit atrocities." -- Voltaire . "The nationalist not only does not disapprove of atrocities committed by his own side, but he has a remarkable capacity for not even hearing about them." -- George Orwell . "Our government has kept us in a perpetual state of fear, kept us in a continuous stampede of patriotic fervor, with the cry of grave national emergency. Always there has been some terrible evil at home or some monstrous foreign power that was going to gobble us up if we did not blindly rally behind it." -- General Douglas MacArthur . "Knowledge, idea, belief stands in the way of wisdom." -- J. Krishnamurthi . "If we'd been born where they were born and taught what they were taught, we would believe what they believe." -- A church sign in Northern Ireland . "My humble friend, we know not how to live this life which is so short yet seek one that never ends." -- Anatole France . "It makes no difference as to the name of the God, since love is the real God of all in the world." -- Apache . "We choose our joys and sorrows long before we experience them." -- Kahlil Gibran . "Statistically one hundred percent of the shots you don't take don't go in." -- Wayne Gretsky . "Christianity exceeds all other faiths in its power to deform and finally invert the mental process." -- Ida White . "God favors no group. Only religions do that." -- Bumper Sticker . "On the outskirts of every agony sits some observant fellow who points." -- Virginia Woolf . "The fascist state is the corporate state." -- Benito Mussolini . "Jehovah was not a moral god. He had all the vices and he lacked all the virtues. He generally carried out all his threats, but he never faithfully kept a promise." -- Robert G. Ingersoll . "Guns make us powerful; butter will only make us fat." -- Nazi Hermann Goering . "Life is like an overlong drama through which we sit being nagged by the vague memories of having read the reviews." -- John Updike . "Everyone likes to say Hitler did this and Hitler did that. But the truth is Hitler did very little. He was a world class asshole, but the evil actually done, from the death camps to World War Two, was all done by citizens who were afraid to question if what they were told by their government was the truth or not, and who because they did not want to admit to themselves that they were afraid to question the government, refused to see the truth behind the Reichstag Fire, refused to see the invasion by Poland was a staged fake, and followed Hitler into national disaster." -- Michael Rivero . "Each nation knowing it has the only true religion and the only sane system of government, each despising all the others, each an ass and not suspecting it." -- Mark Twain . "All men are created equal. They are endowed by their Creator with certain unalienable rights, among these are life, liberty and the pursuit of happiness." -- Ho Chi Minh, 1945, as the Democratic Republic of Vietnam was created . "If there has to be a blood bath, let's get it over with." --Ronald Reagan, Vietnam . "You will kill ten of our men, and we will kill one of yours, and in the end it will be you who tire of it." -- Ho Chi Minh . "I ain't got no quarrel with the Vietcong ... No Vietcong ever called me nigger." -- Muhammad Ali, stripped of boxing title, convicted of a felony for refusing to serve during the Vietnam War . "I can envision a small cottage somewhere, with a lot of writing paper, and a dog, and a fireplace and maybe enough money to give myself some Irish coffee now and then and entertain my two friends." -- Richard Van de Geer, letter, 1975, last American to die in Vietnam War, Time, 1985 . "If you are required to kill someone today, on the promise of a political leader that someone else shall live in peace tomorrow, believe me, you are not only a double murderer, you are a suicide, too." -- Katherine Anne Porter . "I spent thirty-three years in the marines, most of my time being a high-class muscle man for big business, for Wall Street and the bankers. In short, I was a racketeer for capitalism." -- General Smedley Butler, Marine . "Over breakfast coffee we read of 40,000 American dead in Vietnam. Instead of vomiting, we reach for the toast. Our morning rush through crowded streets is not to cry murder but to hit that trough before somebody else gobbles our share." -- Dalton Trumbo . "What difference does it make to the dead, the orphans, and the homeless, whether the mad destruction is wrought under the name of totalitarianism or the holy name of liberty and democracy?" -- Mohandas Gandhi . "It is not so much the suffering as the senselessness of it that is unendurable." -- Nietzsche . "I dream that someday the United States will be on the side of the peasants in some civil war. I dream that we will be the ones who will help the poor overthrow the rich, who will talk about land reform and education and health facilities for everyone, and that when the Red Cross or Amnesty International comes to count the bodies and take the testimony of women raped, that our side won't be the heavies." -- Richard Cohen . "Throughout the world, on any given day, a man, woman or child is likely to be displaced, tortured, killed or disappeared, at the hands of governments or armed political groups. More often than not, the United States shares the blame." -- Amnesty International, in its annual report on U.S. Military aid and human rights, 1996 . "I am tired of fighting, our chiefs are killed...it is cold and we have no blankets. The little children are freezing to death...hear me, my chiefs, I am tired: my heart is sick and sad. From where the sun now stands...I will fight no more forever..." -- Chief Joseph, before his tribe was slaughtered . "When great changes occur in history, when great principles are involved, as a rule the majority are wrong." -- Eugene V. Debs . "Usually when people are sad, they don't do anything. They just cry over their condition. But when they get angry, they bring about a change." -- Malcolm X . "If we could read the secret history of our enemies, we should find in each man's life sorrow and suffering enough to disarm all hostility." -- Henry Wadsworth Longfellow . "Where it is a duty to worship the sun, it is pretty sure to be a crime to examine the laws of heat." -- John Morley . "The Church says that the earth is flat, but I know that it is round, for I have seen its shadow on the moon, and I have more faith in a shadow than in the Church." -- Ferdinand Magellan - (disputed) . "A casual stroll through the lunatic asylum shows that faith does not prove anything." -- Nietzsche . "Humanity without religion is like a serial killer without a chainsaw." -- Unknown . "In all the disputes, which have excited Christians against each other, Rome has invariably decided in favor of that opinion which tended most towards the suppression of the human intellect and the annihilation of the reasoning powers." -- Voltaire . "Humanity has advanced, when it has advanced, not because it has been sober, responsible, and cautious, but because it has been playful, rebellious, and immature." -- Tom Robbins . "The most detestable wickedness, the most horrid cruelties, and the greatest miseries that have afflicted the human race have had their origin in this thing called revelation, or revealed religion." -- Thomas Paine . "I have seldom met an intelligent person whose views were not narrowed and distorted by religion." -- James Buchanan . "Fascism is capitalism in decay." -- Vladimir Ilyich Lenin . "Giving money and power to government is like giving whiskey and car keys to teenage boys." -- P. J. O'Rourke . "The police are not here to create disorder. They're here to preserve disorder." -- Ex-Chicago Mayor Daley during the 1968 riots . "We need a common enemy to unite us." -- Condoleezza Rice, March 2000 . "I don't know that atheists should be considered citizens, nor should they be considered patriots. This is one nation under God." -- President George Bush, August 27, 1988 . "Peace is over rated. Any slave can have peace. Just pick the cotton." -- TheSong . "Pain is certain, suffering is optional." -- Buddha . "When did I realize I was God? Well, I was praying and I suddenly realized I was talking to myself." -- Jack Gurney - "The Ruling Class" . "Could a being create the fifty billion galaxies, each with two hundred billion stars, then rejoice in the smell of burning goat flesh?" -- Ron Patterson . "The United States is in no sense founded upon the Christian doctrine." -- George Washington Administration Treaty . "In the end, we will remember not the words of our enemies, but the silence of our friends." -- Martin Luther King, Jr. . "You're not to be so blind with patriotism that you can't face reality. Wrong is wrong, no matter who does it or says it." -- Malcolm X . "The great nations have always acted like gangsters, and the small nations like prostitutes." -- Stanley Kubrick . "The Pope!?! How many divisions has he got?" -- Joseph Stalin . "Science has done more for the development of western civilization in one hundred years than Christianity did in eighteen hundred years." -- Jeff Burroughs . "It is my conviction that killing under the cloak of war is nothing but an act of murder." -- Albert Einstein . "Americans used to roar like lions for liberty; now we bleat like sheep for security." -- Norman Vincent Peale . "Probably no nation is rich enough to pay for both war and education." -- Braham Flexner . "It is part of the general pattern of misguided policy that our country is now geared to an arms economy which was bred in an artificially induced psychosis of war hysteria and nurtured upon an incessant propaganda of fear." -- General Douglas MacArthur . "Everybody's worried about stopping terrorism. Well, there's a really easy way; stop participating in it." -- Noam Chomsky . "Everyone laughs and cries in the same language." -- dreamslaughter . "When you give food to the poor, they call you a saint. When you ask why the poor have no food, they call you a communist." -- Archbishop Helder Camara . "I saw a human skull the other day. There was an inscription below it: 'Look long and hard at me, for I was once as you are and you will soon be as I am.'" -- Unknown . "I read about an Eskimo hunter who asked the local missionary priest, 'If I did not know about God and sin, would I go to hell?' 'No,' said the priest, 'not if you did not know.' 'Then why,' asked the Eskimo earnestly, 'did you tell me?'" -- Annie Dillard . "Missionaries are perfect nuisances and leave every place worse than they found it." -- Charles Dickens . "I am convinced that I am acting as the agent of our Creator. By fighting off the Jews, I am doing the Lord's work." -- Adolf Hitler . "What do the nationalists say about killers punishing murderers and thieves sentencing looters?" -- Kahlil Gibran . "The most heinous and the cruelest crimes of which history has record have been committed under the cover of religion or equally noble motives." -- Mohandas Gandhi . "Now, my good man, this is no time for making enemies." -- Voltaire, deathbed, when asked to renounce Satan . "Isn't it enough to see that a garden is beautiful without having to believe that there are fairies at the bottom of it too?" -- Douglas Adams . "I sometimes think that God in creating man somewhat overestimated his ability." -- Oscar Wilde . "If English was good enough for Jesus, it's good enough for them Mexicans." -- Texas politician, Spanish as a second language . "The first clergyman was the first rascal who met the first fool." -- Voltaire . "Democracy is four wolves and a lamb voting on what to have for lunch." -- Ambrose Bierce . "No one rules if no one obeys." -- . "Most of the things worth doing in the world had been declared impossible before they were done." -- Louis Brandeis . "The history of liberty is a history of resistance. The history of liberty is a history of limitations of governmental power, not the increase of it." -- Woodrow Wilson . "None are more hopelessly enslaved than those who falsely believe they are free." -- Johann Wolfgang von Goethe . "It does me no injury for my neighbor to say there are twenty gods, or no God. It neither picks my pocket nor breaks my leg." -- Thomas Jefferson . "All Bibles are man-made." -- Thomas Edison . "In nature, there are neither rewards nor punishments; there are consequences." -- Robert G. Ingersoll . "We always obeyed the law. Isn't that what you do in America? Even if you don't agree with a law personally, you still obey it. Otherwise life would be chaos." -- Gertrude Scholtz-Klink, explaining Nazi policy . "I hit him to get his attention. I shot him to calm him down. I killed him to reason with him." -- Henry Rollins . "Every gun that is made, every warship launched, every rocket fired signifies in the final sense, a theft from those who hunger and are not fed, those who are cold and are not clothed. This world in arms is not spending money alone. It is spending the sweat of its laborers, the genius of its scientists, the hopes of its children. This is not a way of life at all in any true sense. Under the clouds of war, it is humanity hanging on a cross of iron." -- Dwight D. Eisenhower . "I am strongly in favor of using poisoned gas against uncivilized tribes. The moral effect should be good and it would spread a lively terror." -- Winston Churchill commenting on the British use of poison gas against the Iraqis after World War I . "How good bad music and bad reasons sound when we march against an enemy!" -- Nietzsche . "The crimes of the U.S. throughout the world have been systematic, constant, clinical, remorseless, and fully documented but nobody cares to talk about them." -- Harold Pinter . "How long would authority ... exist, if not for the willingness of the mass to become soldiers, policemen, jailers, and hangmen." -- Emma Goldman . "You get what anyone gets; you get a lifetime." -- Death, Neil Gaiman Comic Sandman . "To be wronged is nothing unless you continue to remember it." -- Confucius . "The truth is that there is nothing noble in being superior to somebody else. The only real nobility is in being superior to your former self." -- Whitney Young . "If you ever drop your keys into a river of molten lava, let 'em go, because, man, they're gone." -- Jack Handey . "All our lauded technological progress, our very civilization, is like the axe in the hand of the pathological criminal." -- Albert Einstein . "We hang the petty thieves and appoint the great ones to public office." -- Aesop . "In the 1980s capitalism triumphed over communism. In the 1990s it triumphed over democracy." -- David Korten . "The corporation is a true Frankenstein's monster, an artificial person run amok, responsible only to its own soulless self." -- William Dugger . "Convictions are more dangerous foes of truth than lies." -- Nietzsche . "Hain't we got all the fools in town on our side? And ain't that a big enough majority in any town?" -- Mark Twain . "In matters of conscience, the law of majority has no place." -- Mohandas Gandhi . "Why tell me that a man is a fine speaker, if it is not the truth that he is speaking?" -- Thomas Carlyle . "I cannot imagine a God who rewards and punishes the objects of his creation, whose purposes are modeled after our own; a God, in short, who is but a reflection of human frailty. Neither can I believe that the individual survives the death of his body, although feeble souls harbor such thoughts through fear or ridiculous egotisms..." -- Albert Einstein, obituary . "In every country and every age, the priest has been hostile to liberty." -- Thomas Jefferson . "A celibate clergy is an especially good idea, because it tends to suppress any hereditary propensity toward fanaticism." -- Carl Sagan . "I am amazed how many people on this planet are happy and free and never even saw the US constitution." -- . "Authoritarian government required to speak, is silent. Representative government required to speak, lies with impunity." -- Napoleon . "There is always a certain meanness in the argument of conservatism, joined with a certain superiority in its fact." -- Ralph Waldo Emerson . "I have the greatest admiration for your propaganda. Propaganda in the West is carried out by experts who have had the best training in the world, in the field of advertising, and have mastered the techniques with exceptional proficiency. Yours are subtle and persuasive; ours are crude and obvious. I think that the fundamental difference between our worlds, with respect to propaganda, is quite simple. You tend to believe yours and we tend to disbelieve ours." -- A U.S. based Soviet correspondent . "When you are right you cannot be too radical; when you are wrong you cannot be too conservative." -- Martin Luther King, Jr. . "... The CIA has overthrown functioning democracies in over twenty countries." -- John Stockwell, former CIA official . "When you call yourself an Indian or a Muslim or a Christian or a European, or anything else, you are being violent. Do you see why it is violent? It is because you are separating yourself from the rest of mankind. When you separate yourself by belief, by nationality, by tradition, it breeds violence. So a man who is seeking to understand violence does not belong to any country, to any religion, to any political party or partial system; he is concerned with the total understanding of mankind." -- J. Krishnamurthi . "Like all dreamers, I mistook disenchantment for truth." -- Jean Paul Sartre . "If it were all so simple! If only there were evil people somewhere insidiously committing evil deeds, and it were necessary only to separate them from the rest of us and destroy them; but the line dividing good and evil cuts through the heart of every human being. And who is willing to destroy a piece of his own heart?" -- Aleksandr Solzhenitsyn . "If you speak the truth, have one foot in the stirrup." -- Turkish proverb . "... Somehow we find it hard to sell our values, namely that the rich should plunder the poor." -- John Foster Dulles . "To sin by silence when they should protest makes cowards of men." -- Abraham Lincoln . "Reality is that which, when you stop believing in it, doesn't go away." -- Philip K. Dick . "As a child I understood how to give; I have forgotten this grace since I became civilized." -- Ohiyesa, Sioux . "Under capitalism, man exploits man. Under communism, it's just the opposite." -- John Kenneth Galbraith . "The target suffered a terminal illness before a firing squad in Baghdad." -- CIA officer at US Senate hearing on 1963 overthrow of Iraqi Prime Minister Kassem . "Those who hate and fight must stop themselves; otherwise it is not stopped." -- Spock, Day of the Dove . "Can anything be stupider than that a man has the right to kill me because he lives on the other side of a river and his ruler has a quarrel with mine, though I have not quarreled with him?" -- Blaise Pascal . "I was asked to memorize what I did not understand; and, my memory being so good, it refused to be insulted in that manner." -- Aleister Crowley . "The greatest artists of this world are never puritans, and seldom even ordinarily respectable." -- H. L. Mencken . "It is hard to free fools from chains they revere." -- Voltaire . "There is no real wealth but the labor of man. Where the mountains are of gold and the valleys of silver, the world would not be one grain of corn the richer; not one comfort would be added to the human race." -- Percy B. Shelley . "Foreign aid is when the poor people of a rich country give money to the rich people of a poor country." -- Gary Hart, BC Comic Strip . "I don't really miss God, but I sure miss Santa Claus!" -- Courtney Love . "Distrust all in whom the impulse to punish is powerful." -- Nietzsche . "Man is the religious animal. He is the only religious animal. He is the only animal that has the True Religion, several of them. He is the only animal that loves his neighbor as himself and cuts his throat, if his theology isn't straight. He has made a graveyard of the globe in trying his honest best to smooth his brother's path to happiness and heaven." -- Mark Twain . "The keenest sorrow is to recognize ourselves as the sole cause of all our adversities." -- Sophocles . "The truth is more important than the facts." -- Frank Lloyd Wright . "Every great advance in natural knowledge has involved the absolute rejection of authority." -- Thomas Huxley . "The world is divided into people who think they are right." -- Unknown . "Faith is belief without evidence in what is told by one who speaks without knowledge, of things without parallel." -- Ambrose Bierce . "My opinions may have changed, but not the fact that I am right." -- Ashleigh Brilliant . "Never forget that everything Hitler did in Germany was legal." -- Martin Luther King, Jr. . "Pity the warrior that kills all his foe." -- Star Trek . "Patriotism is the last refuge of a scoundrel." -- Samuel Johnson, English lexicographer, to which Ambrose Bierce replied: 'I beg to submit that it is the first.' . "Every day people are straying away from the church and going back to God." -- Lenny Bruce . "A tyrant is always stirring up some war or other, in order that the people may require a leader." -- Plato . "War is an instrument entirely insufficient toward redressing wrong; and multiplies, instead of indemnifying losses." -- Thomas Jefferson . "I do not feel obliged to believe that the same God who has endowed us with sense, reason, and intellect has intended us to forgo their use." -- Galileo Galilei . "The wise man will love; all others will desire." -- Afranius . "Christianity makes suffering contagious." -- Nietzsche . "May your fondest wish be granted." -- Traditional Chinese curse . "Truth is stranger than fiction, but it is because fiction is obliged to stick to possibilities; truth isn't." -- Mark Twain . "The exact contrary of what is generally believed is often the truth." -- Jean de la Bruyère . "Life is too short to waste in critical peep or cynic bark, quarrel or reprimand: It will soon be dark." -- Ralph Waldo Emerson . "Why of course the people don't want war. Why should some poor slob on a farm want to risk his life in a war when the best he can get out of it is to come back to his farm in one piece? Naturally, the common people don't want war; neither in Russia, nor in England, nor for that matter in Germany. That is understood. But after all, it is the leaders of the country who determine the policy, and it is always a simple matter to drag the people along, whether it is a democracy, or a fascist dictatorship, or a parliament, or a communist dictatorship... Voice or no voice, the people can always be brought to the bidding of the leaders. That is easy. All you have to do is to tell them they are being attacked, and denounce the pacifists for lack of patriotism and exposing the country to danger." -- Nazi Hermann Goering . "Believe those who are seeking the truth; doubt those who find it." -- Andre Gide . "That's not a lie, it's a terminological inexactitude." -- Alexander Haig . "If one acknowledges a group or a nation willing to commit atrocities, then one must also acknowledges the existence of a nation willing to commit atrocities to blame on the first nation." -- Michael Rivero . "He who fights with monsters might take care lest he thereby become a monster. For if you gaze for long into an abyss, the abyss gazes also into you." -- Nietzsche . "It is better to be feared than loved, if you cannot be both." -- Niccolo Machiavelli . "Whenever I hear anyone arguing for slavery, I feel a strong impulse to see it tried on him personally." -- Abraham Lincoln . "I prayed for twenty years but received no answer until I prayed with my legs." -- Frederick Douglass, escaped slave . "So far as I can remember, there is not one word in the Gospels in praise of intelligence." -- Bertrand Russel . "When encountering a new philosophy or religion, do not convert, but rather assimilate." -- Shawn Mikula . "You need only reflect that one of the best ways to get yourself a reputation as a dangerous citizen these days is to go about repeating the very phrases which our founding fathers used in the great struggle for independence." -- Attributed to Charles Austin Beard . "At the risk of seeming ridiculous, let me say that the true revolutionary is guided by great feelings of love. It is impossible to think of a genuine revolutionary lacking this quality." -- Ernesto 'Che' Guevara . "The only thing necessary for the triumph of evil is for good men to do nothing." -- Edmund Burke . "The citizen who sees his society's democratic clothes being worn out and does not cry it out, is not a patriot, but a traitor." -- Mark Twain . "The Christian resolution to find the world ugly and bad has made the world ugly and bad." -- Nietzsche . "The multitude of books is a great evil. There is no limit to this fever for writing." -- Martin Luther . "If the doctor told me I had only six minutes to live, I'd type a little faster." -- Isaac Asimov . "The modern conservative is engaged in one man's oldest exercises in moral philosophy; that is the search for a superior moral justification for selfishness." -- John K. Galbraith . "Conservatives are not necessarily stupid, but most stupid people are conservatives." -- John Stuart Mill . "I have examined all of the known superstitions of the world and I do not find in our superstitions of Christianity one redeeming feature. They are all founded on fables and mythology. Christianity has made one-half the world fools and the other half hypocrites." -- Thomas Jefferson . "It may be that our role on this planet is not to worship God, but to create him." -- Arthur C. Clarke . "In order to learn, one must change one's mind." -- Orson Scott Card . "Every anarchist is a baffled dictator." -- Benito Mussolini . "Everyone's values are defined by what they will tolerate when it is done to others." -- William Greider . "Patriotism is the virtue of the vicious." -- Oscar Wilde . "Do not do an immoral thing for moral reasons." -- Thomas Hardy . "If fifty million people believe a foolish thing, it is still a foolish thing." -- Anatole France . "There must be more to life than having everything." -- Maurice Sendak . "Knowledge comes, but wisdom lingers." -- Alfred, Lord Tennyson . "He who knows nothing is closer to the truth than he whose mind is filled with falsehoods and errors." -- Thomas Jefferson . "I had a lover's quarrel with the world." -- Robert Frost . "Written laws are like spider's webs; they will catch, it is true, the weak and poor, but would be torn in pieces by the rich and powerful." -- Anacharsis . "Computers are useless. They can only give you answers." -- Pablo Picasso . "You simply cannot hang a millionaire in America." -- Bourke Cockran . "We must be willing to let go of the life we have planned, so as to have the life that is waiting for us." -- Joseph Campbell . "When the president does it that means it is not illegal." -- Richard Nixon . "War is hell and all that, but it has a good deal to recommend it. It wipes out all the small nuisances of peacetime." -- Ian Hay . "Patriotism is the willingness to kill and be killed for trivial reasons." -- Bertrand Russell . "All propaganda must be so popular and on such an intellectual level, that even the most stupid of those toward whom it is directed will understand it ... Through clever and constant application of propaganda, people can be made to see paradise as hell, and also the other way around, to consider the most wretched sort of life as paradise." -- Adolf Hitler . "If there was a god, he wouldn't let a guy walk right up and shoot you in the face now would he? That's right, now you get the picture. Truth burns doesn't it?" -- Henry Rollins . "This country, with its institutions, belongs to the people who inhabit it. Whenever they shall grow weary of the existing government, they can exercise their constitutional right of amending it, or exercise their revolutionary right to overthrow it." -- Abraham Lincoln . "If you believe in the existence of fairies at the bottom of the garden you are deemed fit for the bin. If you believe in parthenogenesis, ascension, transubstantiation and all the rest of it, you are deemed fit to govern the country." -- Jonathan Meades . "Gentlemen, you can't fight in here! This is the War Room!" -- Dr. Strangelove . "I know of no crime that has not been defended by the church, in one form or other. The church is not a pioneer; it accepts a new truth, last of all, and only when denial has become useless." -- Robert G. Ingersoll . "In general the art of government consists in taking as much money as possible from one class of citizens to give to the other." -- Voltaire . "A nation is a society united by a delusion about its ancestry and by common hatred of its neighbors." -- William R. Inge . "Cast aside those who liken godliness to whimsy and who try to combine their greed for wealth with their desire for a happy afterlife." -- Kahlil Gibran . "If we do not like the world the way it is, then it is because we are not okay the way we are." -- deeshan . "Your every decision conspires to make this moment happen." -- Christi Philpott . "Yes, my friends, I too am prepared to die for a cause, but there is no cause for which I am prepared to kill." --Mohandas Gandhi . "Experience is a hard teacher because she gives the test first, the lesson afterwards." --Vernon Saunders Law . "It is your business, when the wall next door catches fire." -- Horace . "Once you have seen certain things, you can't un-see them, and seeing nothing is as political an act as seeing something." -- Arundhati Roy . "Translate 'Allah'." -- Bumper Sticker . "Science is always discovering odd scraps of magical wisdom and making a tremendous fuss about its cleverness." -- Aleister Crowley . "They said I was the greatest pitcher they ever saw; I couldn't understand why they couldn't give me no justice." -- Satchel Paige . "A conservative government is an organized hypocrisy." -- Benjamin Disraeli . "In a time of universal deceit, telling the truth is a revolutionary act." -- George Orwell . "Think my friends! You adulate a stone as Vishnu but you cannot see God in a fellow man." -- Sankaracharya . "The total absence of humor in the Bible is one of the most singular things in all literature." -- Alfred North Whitehead . "All I know is that I am not a Marxist." -- Karl Marx . "There is enough for man's need but not for man's greed." --Mohandas Gandhi . "Before you speak, ask yourself is it kind, is it necessary, is it true, does it improve on the silence?" -- Shirdi Sai Bab . "Everything of importance has been said before by somebody who did not discover it." -- Alfred North Whitehead . "The good Christian should beware of mathematicians and all those who make empty prophecies. The danger already exists that mathematicians have made a covenant with the devil to darken the spirit and confine man in the bonds of Hell." --Saint Augustine . "I object to violence because when it appears to do good, the good is only temporary; the evil it does is permanent." -- Mohandas Gandhi . "Truth is for the minority." -- Baltasar Gracián . "The color of the skin makes no difference. What is good and just for one is good and just for the other. And the Great Spirit made all men brothers." -- White Shield, Arikara . "The reasonable man adjusts himself to the world, the unreasonable one persists in trying to adapt the world to himself; therefore all progress depends on the unreasonable man." -- George Bernard Shaw . "I did not know how to say goodbye. It was harder still, when I refused to say it." -- Native American saying . "Never was anything great achieved without danger." -- Niccolo Machiavelli . "Those who see and feel beyond illusion have acquired a far greater gift than could ever be derived from studying scripture and philosophy books, for these were meant only to guide the blind." -- Shawn Mikula . "If you understand everything, you must be misinformed." -- Japanese Proverb . "Theology is never any help; it is searching in a dark cellar at midnight for a black cat that isn't there. Theologians can persuade themselves of anything." -- Robert Heinlein . "This monkey mythology of Darwin is the cause of permissiveness, promiscuity, prophylactics, perversions, pregnancies, abortions, porno-therapy, pollution, poisoning and proliferation of crimes of all types." -- Judge Braswell Dean . "There was a time when I believed in the story and the scheme of salvation, so far as I could understand it, just as I believed there was a Devil. Suddenly the light broke through to me and I saw a silly story, and each generation nowadays swallows it with greater difficulty. Why do people go on pretending about this Christianity?" -- H. G. Wells . "The state has not the right to leave every man free to profess and embrace whatever religion he may desire." -- Pope Pius IX . "Government is actually the worst failure of civilized man. There has never been a really good one, and even those that are most tolerable are arbitrary, cruel, grasping and unintelligent." -- H. L. Mencken . "It's not what you don't know that hurts you. It's what you know that just isn't so." -- Satchel Paige . "We've got to pause and ask ourselves, how much clean air do we need?" -- Lee Iacocca . "It has become appallingly obvious that our technology has exceeded our humanity." -- Albert Einstein . "The difference between our decadence and the Russians' is that while theirs is brutal, ours is apathetic." -- James Thurber . "I do not read advertisements. I would spend all of my time wanting things." -- Franz Kafka . "Don't join the book burners." -- Dwight D. Eisenhower . "To date, despite the efforts of millions of true believers to support this myth, there is no more evidence for the Judeo-Christian god than any of the gods on Mount Olympus." -- Joseph Daleiden . "You find as you look around the world that every single bit of progress in humane feeling, every improvement in the criminal law, every step toward the diminution of war, every step toward better treatment of the colored races, or every mitigation of slavery, every moral progress that there has been in the world, has been consistently opposed by the organized churches of the world. I say quite deliberately that the Christian religion, as organized in its churches, has been and still is the principal enemy of moral progress in the world." -- Bertrand Russell . "Free from desire, you realize the mystery. Caught in desire, you see only the manifestations." -- Tao Te Ching . "if you keep doing what you've always done, you'll keep getting what you've always gotten." -- Jim Rohn . "Few people are capable of expressing with equanimity opinions which differ from the prejudices of their social environment. Most people are even incapable of forming such opinions." -- Albert Einstein . "Everything should be made as simple as possible, but not simpler." -- Albert Einstein . "Our scientific power has outrun our spiritual power. We have guided missiles and misguided men." -- Martin Luther King, Jr. . "We could have saved the Earth but we were too damned cheap." -- Kurt Vonnegut . "Either God wants to abolish evil, and cannot; or he can, but does not want to. If he wants to, but cannot, he is impotent. If he can, but does not want to, he is wicked. If, as they say, God can abolish evil, and God really wants to do it, why is there evil in the world?" -- Epicurus . "Irrationally held truths may be more harmful than reasoned errors." -- Thomas Huxley . "It is a government of the people by the people for the people no longer; it is a government of corporations by corporations for corporations." -- Rutherford B. Hayes . "In all affairs, it's a healthy thing now and then to hang a question mark on the things you have long taken for granted." -- Bertrand Russell . "Religion is not merely the opium of the masses; it's the cyanide." -- Tom Robbins . "Nothing overshadows truth so much as authority." -- Leon Battista Alberti . "In Christianity, neither morality nor religion comes into contact with reality at any point." -- Nietzsche . "A language is a dialect with an army and a navy." -- Max Weinreich . "It is dangerous to be right in matters on which the established authorities are wrong." -- Voltaire . "Beware of the man whose god is in the skies." -- George Bernard Shaw . "Almost all absurdity of conduct arises from the imitation of those whom we cannot resemble." -- Samuel Johnson . "Turn over the pages of history and read the damning record of the church's opposition to every advance in every field of science." -- Upton Sinclair . "Don't try to teach a pig to sing, it can't be done and it only ticks off the pig." -- Robert Heinlein . "Form no covetous desire, so that the demon of greediness may not deceive thee, and the treasure of the world may not be tasteless to thee." -- Zoroaster . "The more laws and order are made prominent, the more thieves and robbers there will be." -- Lao Tsu . "People with virtue must speak out; People who speak are not all virtuous." -- Confucius . "One death is a tragedy. A million deaths is a statistic." -- Josef Stalin . "Prohibition goes beyond reason in that it attempts to control a man's appetite through legislation. A prohibition law strikes a blow at the very principles this country was founded upon." -- Abraham Lincoln . "When liberty is taken away by force it can be restored by force. When it is relinquished voluntarily by default, it can never be recovered." -- Dorothy Thompson . "Problems cannot be solved at the same level of awareness that created them." -- Albert Einstein . "We can often do more for other men by trying to correct our own faults than by trying to correct theirs." -- Francois Fenelon . "News is what someone wants to suppress. Everything else is advertising." -- Ex-NBC news president Rubin Frank . "When women are depressed they either eat or go shopping. Men invade another country." -- Elayne Boosler . "To use the term blind faith, is to use an adjective needlessly." -- Julian Ruck . "The establishment of Christianity arrested the normal development of the physical sciences for over fifteen hundred years." -- Andrew Dickson White . "It is right noble to fight with wickedness and wrong; the mistake is in supposing that spiritual evil can be overcome by physical means." -- Lydia Maria Child . "Nothing except a battle lost can be half as melancholy as a battle won." -- Duke of Wellington . "All warfare is based on deception." -- Sun tzu . "Nothing brings people together more, than mutual hatred." -- Henry Rollins . "Just as a picture is drawn by an artist, surroundings are created by the activities of the mind." -- Buddha . "The best way to make children good is to make them happy." -- Oscar Wilde . "The minority, the ruling class at present, has the schools and press, usually the Church as well under its thumb. This enables it to organize and sway the emotions of the masses, and make its tool of them." -- Albert Einstein . "All civilization has from time to time become a thin crust over a volcano of revolution." -- Havelock Ellis . "Outside of the killings, Washington has one of the lowest crime rates in the country." -- Marion Barry, former mayor Washington D.C. . "When I told the people of Northern Ireland that I was an atheist, a woman in the audience stood up and said, 'Yes, but is it the God of the Catholics or the God of the Protestants in whom you don't believe?'" -- Quentin Crisp . "Whatever the natural cause, sin is the true cause of all earthquakes." -- John Wesley . "Anyone who has two shirts when someone has none is not a Christian." -- Lenny Bruce . "Generosity is not giving me that which I need more than you do, but it is giving me that which you need more than I do." -- Kahlil Gibran . "You exist only in what you do." -- Federico Fellini . "All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident." -- Arthur Schopenhauer . "Kindness is more important than wisdom, and the recognition of this is the beginning of wisdom." -- Theodore Isaac Rubin . "You can't say civilizations don't advance, because they kill you in a new way in each war." -- Will Rogers . "In order to be an immaculate member of a flock of sheep, one must above all be a sheep oneself." -- Albert Einstein . "The church tries to save sinners, but science seeks to stop their manufacture." -- Elbert Hubbard . "I can't embrace a male god who has persecuted female sexuality throughout the ages; and that persecution still goes on today, all over the world." -- Amanda Donohoe . "Any fool can make a rule, and any fool will mind it." -- Henry David Thoreau . "Pontius Pilate was the first great censor, and Jesus Christ the first great victim of censorship." -- Ben Lindsay . "We are what we think. All that we are arises with our thoughts. With our thoughts, we make the world." -- Buddha . "I thought dying for your country was the worst thing that could happen to you. I think killing for your country can be a lot worse; because that's the memory that haunts." -- Bob Kerry told to The New York Times . "It is lamentable, that to be a good patriot one must become the enemy of the rest of mankind." -- Voltaire . "Contraction of theological influence has at once been the best measure, and the essential condition of intellectual advance." -- William H. Lecky . "Isn't killing people in the name of God a pretty good definition of insanity?" -- Arthur C. Clarke . "Talent hits a target no one else can hit; Genius hits a target no one else can see." -- Arthur Schopenhauer . "Oh Mortal Man, is there nothing you cannot be made to believe?" -- Adam Weishaupt, Co-founder New World Order . "There are three truths: my truth, your truth, and the truth." -- Chinese proverb . "People only see what they are prepared to see." -- Ralph Waldo Emerson . "Lying is done with words and also with silence." -- Adrienne Rich . "If a man would follow, today, the teachings of the Old Testament, he would be a criminal. If he would follow strictly the teachings of the New, he would be insane." -- Robert G. Ingersoll . "The man who accumulates, whether money or knowledge, can never be free." -- J. Krishnamurthi . "There is a tragic clash between truth and the world. Pure undistorted truth burns up the world." -- Nikolay Berdyayev . "Just drive down that road, until you get blown up." -- General George Patton, reconnaissance troops . "If I could find a way to get [Saddam Hussein] out of there, even putting a contract out on him, ... ahh ... if the CIA still did that sort of thing, . . . ahh . . . assuming it ever did . . . . . . . I would be for it." -- Richard Nixon . "I never advocated war except as a means of peace." -- Ulysses S. Grant . "If you pray for rain long enough, it eventually does fall. If you pray for floodwaters to abate, they eventually do. The same happens in the absence of prayers." -- Steve Allen . "Spiritual maturity is a lifelong process of replacing lies with truth." -- Kurt Bruner . "I was under medication when I made the decision to burn the tapes." -- Richard Nixon . "Freedom is not something that anybody can be given, freedom is something people take." -- James Baldwin . "The public is wonderfully tolerant. It forgives everything except genius." -- Oscar Wilde . "Intellectuals solve problems; geniuses prevent them." -- Albert Einstein . "Acceptance without proof is the fundamental characteristic of Western religion, rejection without proof is the fundamental characteristic of Western science." -- Gary Zukav . "How can you make a revolution without executions?" -- Lenin on hearing that the death penalty had been abolished by the Soviet . "True and false are attributes of speech, not of things. And where speech is not, there is neither truth nor falsehood." -- Thomas Hobbes . "Do you love your Creator? Love your fellow beings first." -- Prophet Muhammad . "Laws are silent in time of war." -- Cicero . "I shall be an autocrat: that's my trade. And the good Lord will forgive me: that's his." -- Empress Catherine the Great . "Man was born free, and everywhere he is in chains." -- Rousseau . "Never go to sleep when your meat is on the fire." -- Pueblo . "A treatise upon human nature: It is not contrary to reason to prefer the destruction of the whole world to the scratching of my finger." -- David Hume . "You can't step twice into the same river." -- Heraclitus . "You should never wear your best trousers when you go out to fight for freedom and liberty." -- Henrik Ibsen . "Necessity never made a good bargain." -- Ben Franklin . "You shall find out how salt is the taste of another man's bread, and how hard is the way up and down another man's stairs." -- Dante . "You'll never have a quiet world till you knock the patriotism out of the human race." -- George Bernard Shaw . "This is very true; for my words are my own, and my actions are my ministers." -- Charles II . "Sometimes a scream is better than a thesis." -- Ralph Waldo Emerson . "Politics is war without bloodshed while war is politics with bloodshed." -- Mao Tse Tung When a stupid man is doing something he is ashamed of, he always declares that it is his duty." -- George Bernard Shaw . "There are very few monsters who warrant the fear we have of them." -- Andre Gide . "Whoever controls the media, the images, controls the culture." -- Allen Ginsberg . "Listen or your tongue will keep you deaf." -- Native American saying . "One-tenth of the folks run the world. One-tenth watch them run it, and the other eighty percent don't know what the hell's going on." -- Jake Simmons . "An empty stomach is not a good political advisor." -- Albert Einstein . "Religion is the end of love and honesty, the beginning of confusion; faith is a colorful hope or fear, the origin of folly." -- Tao Te Ching . "Why do we kill people who are killing people to show that killing people is wrong?" -- Holly Near . "If you give me six lines written by the hand of the most honest of men, I will find something in them which will hang him." -- Cardinal Richelieu . "Only a fool tests the depth of the water with both feet." -- African proverb . "Democracy is the recurrent suspicion that more than half of the people are right more than half of the time." -- Elwyn B. White . "The more I study religions the more I am convinced that man never worshipped anything but himself." -- Sir R. F. Burton . "We are ensnared by the wisdom of the serpent; we are set free by the foolishness of God." -- Saint Augustine . "We live in our desires rather than in our achievements." -- George Moore . "Wherever there is great property, there is great inequality, for one very rich man; there must be at least five hundred poor." -- Adam Smith . "When a government lasts a long while, it deteriorates by insensible degrees. Republics end through luxury, monarchies through poverty." -- Montesquieu . "The cardinal doctrine of a fanatic's creed is that his enemies are the enemies of God." -- Andrew Dickson White . "Society in every state is a blessing, but government, even in its best stage, is but a necessary evil; in its worst stage, an intolerable one." -- Thomas Paine . "The supreme art of war is to subdue the enemy without fighting." -- Sun tzu . "A foolish consistency is the hobgoblin of little minds, adored by little statesmen and philosophers and divines." -- Ralph Waldo Emerson . "Truthful words are not beautiful; beautiful words are not truthful. Good words are not persuasive; persuasive words are not good." -- Lao tzu . "Oh, how bitter a thing is to look through another man's eye." -- William Shakespeare . "Know all and you will pardon all." -- Thomas à Kempis . "I am sufficiently proud of my knowing something to be modest about my not knowing everything." -- Vladimir Nabokov . "All natural institutions of churches, whether Jewish, Christian, or Turkish, appear to me no other than human inventions, set up to terrify and enslave mankind, and monopolize power and profit." -- Thomas Paine . "They that die by famine die by inches." -- Matthew Henry . "In law a man is guilty when he violates the rights of another. In ethics he is guilty if he only thinks of doing so." -- Immanuel Kant . "There is no sport in hate when all the rage is on one side." -- Percy B. Shelley . "Except as its clown and jester, society does not encourage individuality, and the State abhors it." -- Bernard Berenson . "Everywhere is walking distance if you have the time." -- Steven Wright . "You must ask your neighbor if you shall live in peace." -- John Clark . "It is true that liberty, so precious, must be rationed." -- Nikolai Lenin . "It would now be technically possible to unify the world, abolish war and poverty altogether, if men desired their own happiness more than the misery of their enemies." -- Bertrand Russel . "Most men lead lives of quiet desperation and go to the grave with the song still in them." -- Henry David Thoreau . "I refuse to be labeled immoral merely because I am godless." -- Peter Walker . "Art is dangerous. It is one of the attractions: when it ceases to be dangerous, you don't want it." -- Duke Ellington . "Suppose you were an idiot, and suppose you were a member of congress; but I repeat myself." -- Mark Twain . "Know thy enemy and know thy self and you will win a hundred battles." -- Sun tzu . "Life is like a game of cards. The hand that is dealt you represents determinism; the way you play it is free will." -- Jawaharlal Nehru . "The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true." -- James Branch Cabell . "Peace is only possible if men cease to place their happiness in the possession of things which cannot be shared." -- Julien Benda . "It may be necessary temporarily to accept a lesser evil, but one must never label a necessary evil as good." -- Margaret Mead . "Silence is one of the hardest arguments to refute." -- Josh Billings . "You can't wake a person who is pretending to be asleep." -- Native Proverb . "I have often regretted my speech, never my silence." -- Xenocrates . "Never does nature say one thing and wisdom another." -- Juvenal . "He who will not reason is a bigot; he who cannot is a fool; and he who dares not is a slave." -- William Drummond . "The quickest way of ending a war is to lose it." -- George Orwell . "Truth always lags behind, limping along on the arm of Time." -- Baltasar Gracián . "Nothing unites the English like war. Nothing divides them like Picasso." -- Hugh Mills . "...as hollow as the o in god..." -- Marilyn Manson . "War: first, one hopes to win; then one expects the enemy to lose; then, one is satisfied that he too is suffering; in the end, one is surprised that everyone has lost." -- Karl Kraus . "It is better to be generous than just. It is sometimes better to sympathize instead of trying to understand." -- Pierre Lecompte de Nouy . "The more you own, the more it owns you." -- Henry Rollins . "Money often costs too much." -- Ralph Waldo Emerson . "It is hard, I submit, to loathe bloodshed, including war, more than I do, but it is still harder to exceed my loathing of the very nature of totalitarian states in which massacre is only an administrative detail." -- Vladimir Nabokov . "Nothing is more surprising than the easiness with which the many are governed by the few." -- David Hume . "And the little screaming fact that sounds through all history: repression works only to strengthen and knit the repressed." -- John Steinbeck . "We are condemned to kill time: thus we die bit by bit." -- Octavio Paz . "Do not seek to follow in the footsteps of the wise. Seek what they sought." -- Basho . "By trying we can easily learn to endure adversity; another man's, I mean." -- Mark Twain . "Give to every other human being every right you claim for yourself." -- Robert G. Ingersoll . "Don't say you don't have enough time. You have exactly the same number of hours per day that were given to Helen Keller, Pasteur, Michelangelo, Mother Teresa, Leonardo da Vinci, Thomas Jefferson, and Albert Einstein." -- H. Jackson Brown . "While the word is yet unspoken, you are master of it; when once it is spoken, it is master of you." -- Arab proverb . "Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did do." -- Samuel Clemens . "Ignorance is always afraid of change." -- Jawaharlal Nehru . "Before we blame, we should first see if we can excuse." -- G. C. Lichtenberg . "Don't speak unless you can improve on the silence." -- Spanish proverb . "I would have made a good pope." -- Richard Nixon . "In politics, stupidity is not a handicap." -- Napoleon . "The purpose of law is to prevent the strong from always having their way." -- Ovid . "Time is a great teacher, but unfortunately it kills all its pupils." -- Hector Berlioz . "A man who is afraid will do anything." -- Jawaharlal Nehru . "Heresy is a cradle; orthodoxy a coffin." -- Robert G. Ingersoll . "Each of us is confined to a world of our own making." -- Shawn Mikula . "Democracy used to be a good thing, but now it has gotten into the wrong hands." -- Jessie Helms . "If a person is to get to the meaning of life, he must learn to like the facts about himself, ugly as they may seem to his sentimental vanity, before he can learn the truth behind the facts. And the truth is never ugly." -- Eugene O'Neill . "No one has ever had an idea in a dress suit." -- Sir Frederick G. Banting . "Without censorship, things can get terribly confused in the public mind." -- General William Westmoreland . "Strange is our situation here upon Earth." -- Albert Einstein . "Until the infallibility of human judgment shall have been proved to me, I shall persist in demanding the abolition of the death penalty." -- Marquis de Lafayette . "If you don't know where you're going, any road will get you there." -- Ancient Chinese Proverb . "Opportunities multiply as they are seized." -- Sun tzu . "Real knowledge is to know the extent of one's ignorance." -- Confucius . "As far as the laws of mathematics refer to reality, they are not certain, and as far as they are certain, they do not refer to reality." -- Albert Einstein . "One's mind, once stretched by a new idea, never regains its original dimensions." -- Oliver Wendell Holmes . "It is not easy to find happiness in ourselves; it is not possible to find it elsewhere." -- Agnes Repplier . "Being deeply loved by someone gives you strength; loving someone deeply gives you courage." -- Lao tzu . "The world is too dangerous to live in, not because of the people who do evil, but because of the people who sit and let it happen." -- Albert Einstein . "Beliefs are what divide people. Doubt unites them." -- Peter Ustinov . "Wisdom is knowing what to do next. Virtue is doing it." -- David Starr Jordan . "The liar's punishment is not in the least that he is not believed, but that he cannot believe anyone else." -- George Bernard Shaw . "Whatever you do will be insignificant, but it is very important that you do it." -- Mohandas Gandhi . "You can't have everything. Where would you put it?" -- Steven Wright . "The way to find what the mainstream will do tomorrow is to associate with the lunatic fringe today." -- Jean-Louis Gassee . "A jury consists of twelve persons chosen to decide who has the better lawyer." -- Robert Frost . "Our job is to give people not what they want, but what we decide they ought to have." -- Richard Salent, Former President CBS News . "You can pretend to be serious; you can't pretend to be witty." -- Sacha Guitry . "Two attitudes are all that is needed; do not harm anything, say and do things that make others happy." -- dreamslaughter . "In spite of everything I still believe that people are really good at heart." -- Anne Frank, holocaust victim . "Why is propaganda so much more successful when it stirs up hatred than when it tries to stir up friendly feeling?" -- Bertrand Russell . "Nature does not hurry, yet everything is accomplished." -- Lao tzu . "The illegal we do immediately. The unconstitutional takes a bit longer." -- Henry Kissinger . "The victor will never be asked if he told the truth." -- Adolf Hitler . "What sane person could live in this world and not be crazy?" -- Ursula K. LeGuin . "Never express yourself more clearly than you think." -- Neils Bohr . "Modern morality and manners suppress all natural instincts, keep people ignorant of the facts of nature and make them fighting drunk on bogey tales." -- Aleister Crowley . "The right things to do are those that keep our violence in abeyance; the wrong things are those that bring it to the fore." -- Robert J. Sawyer . "When you are content to be simply yourself and don't compare or compete, everybody will respect you." -- Lao tzu . "What is the use of a house if you haven't got a tolerable planet to put it on?" -- Henry David Thoreau . "I consider Christian theology to be one of the greatest disasters of the human race." -- Alfred North Whitehead . "Most people drive thru life with the parking brake on." -- Lance Bradley . "Truth is living, it is not static, and the mind that would discover truth must also be living, not burdened with knowledge or experience." -- J. Krishnamurthi . "If everyone demanded peace instead of another television set, then there'd be peace." -- John Lennon . "The biggest conspiracy of all is the claim that there are no conspiracies!" -- Michael Rivero . "The death of dogma is the birth of morality." -- Immanuel Kant . "Can you sympathize with an exploding star?" -- Shawn Mikula . "The revolution is a dictatorship of the exploited against the exploiters." -- Fidel Castro . "Whoever imagines himself a favorite with God holds others in contempt." -- Robert G. Ingersoll . "Simplicity is the ultimate sophistication." -- Leonardo da Vinci . "All religions are founded on the fear of the many and the cleverness of the few." -- Stendhal . "Today it is fashionable to talk about the poor. Unfortunately, it is not fashionable to talk with them." -- Mother Teresa . "No man's knowledge here can go beyond his experience." -- John A. Locke . "Life's under no obligation to give us what we expect." -- Margaret Mitchell . "The history of war is the history of powerful individuals willing to sacrifice thousands upon thousands of other people's lives for personal gains." -- Michael Rivero . "Being with a woman all night never hurt no professional baseball player. It's staying up all night looking for a woman that does him in." -- Casey Stengel . "The religion of the future will be a cosmic religion, the religion which based on experience, which refuses dogma." -- Albert Einstein . "Would you like to liberate yourself from the lower realms of life? Would you like to save the world from the degradation and destruction it seems destined for? Then step away from shallow mass movements and quietly go to work on your own self-awareness." -- Lao tzu . "It is curious that physical courage should be so common in the world and moral courage so rare." -- Mark Twain . "Do not mind anything that anyone tells you about anyone else. Judge everyone and everything for yourself." -- Henry James . "When a thing has been said and said well, have no scruple. Take it and copy it." -- Anatole France . "The secret of happiness is to admire without desiring." -- F. H. Bradley . "To travel is to discover that everyone is wrong about other countries." -- Aldous Huxley . "Pray: To ask the laws of the universe to be annulled on behalf of a single petitioner confessedly unworthy." -- Ambrose Bierce . "The greatest deception men suffer is from their own opinions." -- Leonardo da Vinci . "Even if truth destroys the whole universe, still it is truth; stand by it." -- Swami Vivekananda . "The actions of men are the best interpreters of their thoughts." --John Locke . "Christians are supposed not merely to endure change, nor even to profit by it, but to cause it." -- Harry Emerson Fosdick . "Every man is guilty of all the good he didn't do." -- Voltaire . "Put your hand on a hot stove for a minute, and it seems like an hour. Sit with a pretty girl for an hour, and it seems like a minute. That's relativity." -- Albert Einstein . "If you would be a real seeker after truth, it is necessary that at least once in your life you doubt, as far as possible, all things." -- Rene Descartes . "Time wounds all heels." -- Jane Ace . "Beware of all enterprises that require new clothes." -- Henry David Thoreau . "Manifest plainness, embrace simplicity, reduce selfishness, have few desires." -- Lao tzu . "When a man says he approves of something in principle, it means he hasn't the slightest intention of carrying it out in practice." -- Otto von Bismarck . "A man's character is his fate." -- Heraclitus . "Quarrels would not last long if only one side was wrong." -- Francois Duc de la Rochefoucauld . "Philosophers have merely interpreted the world. The point is to change it." -- Karl Marx . "I am not a communist and neither is the revolutionary movement." -- Fidel Castro . "When a nation's young men are conservative, its funeral bell is already rung." -- Henry Ward Beecher . "Science is the great antidote to the poison of enthusiasm and superstition." -- Adam Smith . "The Brush Dance is a Yurok healing ritual where being true to yourself means give your best to a person in need. Being true to yourself is the one and only Yurok Indian Law." -- Brush Dance Journal . "Happiness is an imaginary condition, formerly attributed by the living to the dead, now usually attributed by adults to children, and by children to adults." -- Thomas Szasz . "Never explain, your friends do not need it and your enemies will not believe you anyway." -- Elbert Hubbard . "The pious pretense that evil does not exist only makes it vague, enormous and menacing." -- Aleister Crowley . "Once all struggle is grasped, miracles are possible." -- Mao Tse Tung . "Everybody sooner or later, sits down to a banquet of consequences." -- Robert Louis Stevenson . "We will be known by the tracks we leave behind." -- Dakota proverb . "If a scholar aspires to the Way but is ashamed of bad clothes and bad food, he isn't ready to join the discussion yet." -- Confucius . "Earth provides enough to satisfy every man's need, but not every man's greed." --Mohandas Gandhi . "...so long as the media are in corporate hands, the task of social change will be vastly more difficult, if not impossible." -- Robert McChesney . "It is wrong always, everywhere, and for anyone, to believe anything upon insufficient evidence." -- William Kingdon Clifford . "I do not believe that any type of religion should ever be introduced into the public schools of the United States." -- Thomas Edison . "The radical invents the views. When he has worn them out, the conservative adopts them." -- Mark Twain . "Monarchy degenerates into tyranny, aristocracy into oligarchy, and democracy into savage violence and chaos." -- Polybius . "Never interrupt your enemy when he is making a mistake." -- Napoleon . "When the water starts boiling it is foolish to turn off the heat." -- Nelson Mandela . "The spirit of resistance to government is so valuable on certain occasions that I wish it to be always kept alive." -- Thomas Jefferson . "If we continue to develop our technology without wisdom or prudence, our servant may prove to be our executioner." -- General Omar N. Bradley . "The rights of women are sacred. See that women are maintained in the rights attributed to them." -- Prophet Muhammed . "Try not to become a man of success but rather to become a man of value." -- Albert Einstein . "When you meet a worthy person, focus on reaching his level. When you meet an unworthy person, take a good look inside yourself." -- Confucius . "If one were to take the bible seriously one would go mad. But to take the bible seriously, one must be already mad." -- Aleister Crowley . "All my humor is based upon destruction and despair. If the whole world were tranquil, without disease and violence, I'd be standing on the breadline right in back of J. Edgar Hoover." -- Lenny Bruce . "If I can't dance, I don't want to be part of your revolution." -- Emma Goldman . "It is not what we do, but also what we do not do, for which we are accountable." -- Moliere . "Religion is excellent stuff for keeping common people quiet." -- Napoleon . "Living is change; Growth is optional." -- Juan Wa Chang . "Religion is an insult to human dignity. With or without it, you'd have good people doing good things and evil people doing bad things, but for good people to do bad things, it takes religion." -- Steven Weinberg . "It is difficult to produce a television documentary that is both incisive and probing when every twelve minutes one is interrupted by twelve dancing rabbits singing about toilet paper." -- Rod Serling . "You have not converted a man because you have silenced him." -- John Morley . "We have a political system that awards office to the most ruthless, cunning, and selfish of mortals, then act surprised when those willing to do anything to win power are equally willing to do anything with it." -- Michael Rivero . "Use what talent you possess: the woods would be very silent if no birds sang except those that sang best." -- Henry Van Dyke . "The hardest years in life are those between ten and seventy." -- Helen Hayes, age 83 . "Everything has been figured out, except how to live." -- Jean Paul Sartre . "The vast majority of mankind is trapped within perceptual prisons." -- Shawn Mikula . "What difference does it make how much you have? What you do not have amounts to much more." -- Seneca . "America ... just a nation of two hundred million used car salesmen with all the money we need to buy guns and no qualms about killing anybody else in the world who tries to make us uncomfortable." -- Hunter S. Thompson . "The government of the United States does not, in its policies, express the decency of its people." -- Jerry Fresia . "Grasshopper, look beyond the game, as you look beneath the surface of the pool to see its depths." -- Master Po . "Write injuries in sand, kindnesses in marble." -- French proverb . "Kindness is a mark of faith, and whoever has not kindness has not faith." -- Prophet Muhammad . "It is not impossible to govern Italians. It is merely useless." -- Benito Mussolini . "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former." -- Albert Einstein . "Every revolution evaporates and leaves behind it only the slime of bureaucracy." -- Franz Kafka . "Always remember you are a totally unique individual; just like everyone else." -- Unknown . "Mythology is what we call someone else's religion." -- Joseph Campbell . "Christian is a VERB not a noun." -- Meria Heller . "Someday man will imprison the power of the sun, release atomic power, and harness the rise and fall of the tides. I am proud of the fact that I never invented weapons to kill." -- Thomas Edison . "Beware the man of one book." -- Saint Thomas Aquinas . "If we don't believe in freedom of expression for people we despise, we don't believe in it at all." -- Noam Chomsky . "The only thing we never get enough of is love; and the only thing we never give enough of is love." -- Henry Miller . "The United States is not nearly so concerned that its acts be kept secret from its intended victims as it is that the American people not know of them." -- Ramsey Clark . "Nothing exists except atoms and empty space; everything else is opinion." -- Democritus . "Cancel the kitchen scraps for lepers and orphans! No more merciful beheadings! And call off Christmas!" -- The Sheriff of Nottingham . "The god of the cannibals will be a cannibal, of the crusaders, a crusader, and of the merchants a merchant." -- Ralph Waldo Emerson . "The degree of one's emotion varies inversely with one's knowledge of the facts. The less you know, the hotter you get." -- Bertrand Russel . "Knowing others is intelligence; knowing yourself is true wisdom. Mastering others is strength; mastering yourself is true power." -- Lao Tzu . "The believer is happy; the doubter is wise." -- Hungarian Proverb . "I complained that I had no shoes until I met a man who had no feet." -- Persian proverb . "Rules of Optimization: Rule 1: Don't do it. Rule 2 (for experts only): Don't do it yet." -- M.A. Jackson . "More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason - including blind stupidity." -- W.A. Wulf . "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil." -- Donald Knuth . "> > > Goodbye to all! Thanks for years of great fun and good > > > business! > > Suicide or MS C++? > Is there a difference? Suicide hurts only once..." -- Conversation on borland.public.delphi.non-technical . "May God grant me the grace to one day know the truth. Until then, may he spare me the company of those who've already found it." -- unknown . Fundamentalists: believe 2+2=5 because It Is Written. Somewhere. They have a lot of trouble on their tax returns. "Moderate" believers: live their lives on the basis that 2+2=4. But go regularly to church to be told that 2+2 once made 5, or will one day make 5, or in a very real and spiritual sense, should make 5. "Moderate" atheists: know that 2+2=4 but think it impolite to say so too loudly as people who think 2+2=5 might be offended. "Militant" atheists: "Oh for pity's sake. HERE. Two pebbles. Two more pebbles. FOUR pebbles. What is WRONG with you people?" . "If you try and take a cat apart to see how it works, the first thing you have in your hands is a non-working cat." -- Douglas Adams . "Finagle's Law of Dynamic Negatives: Anything that can go wrong, will -- at the worst possible moment." . "O'Toole's Corollary of Finagle's Law: The perversity of the Universe tends towards a maximum." . "Hofstadter's Law: It always takes longer than you expect, even when you take into account Hofstadter's Law." . "Many journalists have fallen for the conspiracy theory of government. I do assure you that they would produce more accurate work if they adhered to the cock-up theory." -- Sir Bernard Ingham . "Misunderstandings and neglect create more confusion in this world than trickery and malice. At any rate, the last two are certainly much less frequent." -- Goethe, "Werther" . "Genius may have its limitations, but stupidity is not thus handicapped." -- Elbert Hubbard . "Hanlon's Razor: Never attribute to malice that which can be adequately explained by stupidity." . "Asswhole = a complete ass" -- John McTaggart in bpot . "Free speech is the right to yell "Theater!" in a crowded fire..." -- Abbie Hoffman . "A bird in the hand makes it hard to blow your nose." . "Don't drive me crazy -- it's within walking distance." . "The early worm deserves the bird." . "We need either less corruption or more chance to participate in it." . "They laughed when I said I'd be a comedian. They aren't laughing now." . "There are many kinds of people in the world. Are you one of them?" . "We totally deny the allegations, and we are trying to identify the allegators." . "When you've seen one non-sequitur, the price of tea in China." . "Nine out of ten doctors agree that one out of ten doctors is an idiot." . "Save the whales! Collect the whole set!" . "TV is called a medium because it is neither rare nor well done." . "Gentleman: Knows how to play the bagpipes, but doesn't." . "Courage: Two cannibals having oral sex." . "Emulate your heros, but don't carry it too far. Especially if they are dead." . "Every journalist has a novel in him, which is an excellent place for it." . "Experience is what you get when you were expecting something else." . "Familiarity breeds children." . "If it wasn't for muscle spasms, I wouldn't get any exercise at all." . "I have seen the future and it is just like the present, only longer." -- Albran . "I could not possibly fail to disagree with you less." . "If all the world's managers were laid end to end, it would be an improvement." . "Let him who takes the Plunge remember to return it by Tuesday." . "Smoking is one of the leading causes of statistics." -- Fletcher Knebel . "My last cow just died, so I won't need your bull anymore." . "Radioactive cats have 18 half-lives." . "People who think they know everything greatly annoy those of us who do." . "If it wasn't for lawyers, we wouldn't need them." . "My opinions might have changed, but not the fact that I am right." . "Love: The warm feeling you get towards someone who meets your neurotic needs." . "Don't sweat the petty things, just pet the sweaty things." . "A closed mouth gathers no foot." . "Despite the high cost of living, it remains popular." . "A good pun is its own reword." . "All things are possible, except skiing through a revolving door." . "Democracy is where you can say what you think even if you don't think." . "Cole's Law: Thinly sliced cabbage." . "An effective way to deal with predators is to taste terrible." . "All rights left. All lefts reserved. All reserves removed. All removes right." . "You never really learn to swear until you learn to drive." . "Machine. Unexpectedly, I'd invented a time." -- Alan Moore . "If Tyranny and Oppression come to this land, it will be in the guise of fighting a foreign enemy." -- James Madison . "In Germany they first came for the Communists, and I didn't speak up because I wasn't a Communist. Then they came for the Jews, and I didn't speak up because I wasn't a Jew. Then they came for the trade unionists, and I didn't speak up because I wasn't a trade unionist. Then they came for the Catholics, and I didn't speak up because I was a Protestant. Then they came for me - and by that time no one was left to speak up." -- Pastor Martin Niemöller . "The problem with people who have no vices is that generally you can be pretty sure they're going to have some pretty annoying virtues." -- Elizabeth Taylor . "Talk sense to a fool and he calls you foolish." -- Euripides . "Invading Iraq after 9/11 was like invading Mexico after Pearl Harbor." -- Richard Clarke . "I've never seen anyone change his mind because of the power of a superior argument or the acquisition of new facts. But I've seen plenty of people change behavior to avoid being mocked." -- Scott Adams . "The years of peak mental activity are undoubtedly between the ages of four and eighteen. At four we know all the questions, at eighteen all the answers." -- unknown . "I'm fed up to the ears with old men dreaming up wars for young men to die in." -- George McGovern . "The music business is a cruel and shallow money trench, a long plastic hallway where thieves and pimps run free, and good men die like dogs. There's also a negative side". -- Hunter S. Thompson . "What a cruel thing is war: to separate and destroy families and friends, and mar the purest joys and happiness God has granted us in this world; to fill our hearts with hatred instead of love for our neighbors, and to devastate the fair face of this beautiful world." -- Robert E. Lee, letter to his wife, 1864 . "Pardon him, Theodotus; he is a barbarian, and thinks that the customs of his tribe and island are the laws of nature." -- George Bernard Shaw . "The competent programmer is fully aware of the limited size of his own skull. He therefore approaches his task with full humility, and avoids clever tricks like the plague." -- Edsger W. Dijkstra, EWD340 . "Ignorance simplifies ANY problem." -- R. Lucke . "The chain reaction of evil -- wars producing more wars -- must be broken, or we shall be plunged into the dark abyss of annihilation." -- Martin Luther King, Jr. . "Before the war is ended, the war party assumes the divine right to denounce and silence all opposition to war as unpatriotic and cowardly." -- Senator Robert M. La Follette . "After every 'victory' you have more enemies." -- Jeanette Winterson . "Our children are not born to hate, they are raised to hate." -- Thomas della Peruta . "The shepherd always tries to persuade the sheep that their interests and his own are the same." -- Marie Beyle . "I hate those men who would send into war youth to fight and die for them; the pride and cowardice of those old men, making their wars that boys must die." -- Mary Roberts Rinehart . "Guard against the impostures of pretended patriotism." -- George Washington . "The de facto role of the US armed forces will be to keep the world safe for our economy and open to our cultural assault." -- Major Ralph Peters, US Military . "Patriotism means to stand by the country. It does not mean to stand by the president or any other public official..." -- Theodore Roosevelt . "The worst crimes were dared by a few, willed by more and tolerated by all." -- Tacitus . "Military glory -- that attractive rainbow, that rises in showers of blood -- that serpent's eye, that charms to destroy..." -- Abraham Lincoln . "Only a free and unrestrained press can effectively expose deception in government." -- Hugo Black, Supreme Court Justice . "War is fear cloaked in courage." -- General William Westmoreland . "Because I do it with one small ship, I am called a terrorist. You do it with a whole fleet and are called an emperor." -- A pirate, from St. Augustine's "City of God" . "What is morally wrong can never be advantageous, even when it enables you to make some gain that you believe to be to your advantage." -- Marcus Tullius Cicero . "Everybody's worried about stopping terrorism. Well, there's a really easy way: stop participating in it." -- Noam Chomsky . "It is far easier to make war than peace." -- Georges Clemenceau . "The belief in the possibility of a short decisive war appears to be one of the most ancient and dangerous of human illusions." -- Robert Lynd . "Of all the enemies to public liberty, war is perhaps the most to be dreaded because it comprises and develops the germ of every other." -- James Madison . "War doesn't make boys men, it makes men dead." -- Ken Gillespie . "Every nation has its war party. It is not the party of democracy. It is the party of autocracy. It seeks to dominate absolutely." -- Senator Robert M. La Follette . "It is the job of thinking people not to be on the side of the executioners." -- Albert Camus . "Paramount among the responsibilities of a free press is the duty to prevent any part of the government from deceiving the people." -- Hugo Black, Supreme Court Justice . "Liberty and democracy become unholy when their hands are dyed red with innocent blood." -- Mahatma Gandhi . "Peace is constructed, not fought for." -- Brent Davis . "In this war - as in others - I am less interested in honoring the dead than in preventing the dead." -- Butler Shaffer . "It is only those who have neither fired a shot nor heard the shrieks and groans of the wounded who cry aloud for blood... War is hell." -- General William Tecumseh Sherman . "It is dangerous to be right when the government is wrong." -- Voltaire . "The worst barbarity of war is that it forces men collectively to commit acts against which individually they would revolt with their whole being." -- Ellen Key . "Some men, in order to prevent the supposed intentions of their adversaries, have committed the most enormous cruelties." -- Clearchus, in Xenophon . "[War] might be avoidable were more emphasis placed on the training to social interest, less on the attainment of egotistical grandeur." -- Lydia Sicher . "Look at you in war. There has never been a just one, never an honorable one, on the part of the instigator of the war." -- Mark Twain . "Everything secret degenerates, even the administration of justice." -- Lord Acton . "Military justice is to justice what military music is to music." -- Groucho Marx . "Violence is the last refuge of the incompetent." -- Issac Asimov . "A state of war only serves as an excuse for domestic tyranny." -- Aleksandr Solzhenitsyn . "War is not the continuation of politics with different means, it is the greatest mass-crime perpetrated on the community of man." -- Alfred Adler . "We will not learn how to live together in peace by killing each other's children." -- Jimmy Carter . "The dangerous patriot ... is a defender of militarism and its ideals of war and glory." -- Colonel James A. Donovan, Marine Corps . "To jaw-jaw is always better than to war-war." -- Winston Churchill . "Man has no right to kill his brother. It is no excuse that he does so in uniform: he only adds the infamy of servitude to the crime of murder." -- Percy Bysshe Shelley . "Is it not a strange blindness on our part to teach publicly the techniques of warfare and to reward with medals those who prove to be the most adroit killers?" -- Marquis de Sade . "The cry has been that when war is declared, all opposition should be hushed. A sentiment more unworthy of a free country could hardly be propagated." -- William Ellery Channing . "Our government has kept us in a perpetual state of fear - kept us in a continuous stampede of patriotic fervor - with the cry of grave national emergency." -- General Douglas MacArthur . "The internet is not something you just dump something on. It's not a truck. It's a series of tubes!" -- Sen. Ted Stevens, chairman of the United States Senate Committee on Commerce, Science and Transportation . "Elegance is not a dispensable luxury but a factor that decides between success and failure." -- Edsger Dijkstra . "It's wonderful to be here in the great state of Chicago." -- Dan Quayle . "If Al Gore invented the Internet, I invented spell check." -- Dan Quayle . "My current job sucks so hard, black holes are going green with envy." -- Liz Kimber, in borland.*.*.*.delphi.win32 . "I was playing poker the other night... with Tarot cards. I got a full house and 4 people died." -- Steven Wright . "'Everything you say is boring and incomprehensible', she said, 'but that alone doesn't make it true.'" -- Franz Kafka . "Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration." -- Stan Kelly-Bootle . "If electricity comes from electrons, does that mean that morality comes from morons?" -- Unknown . "The company doesn't tell me what to say, and I don't tell them where to stick it." -- Unknown . "The only way to combat criminals is by not voting for them." -- Dayton Allen . "A camel is a horse designed by a committee" -- Unknown . "I'm not under the alkafluence of inkahol that some thinkle peep I am. It's just the drunker I sit here the longer I get." -- Unknown . "Sex is like air. It's only a big deal if you can't get any." -- Unknown . AMAZING BUT TRUE ... There is so much sand in Northern Africa that if it were spread out it would completely cover the Sahara Desert. . "Support your local Search and Rescue unit -- get lost." -- Unknown . "A great many people think they are thinking when they are merely rearranging their prejudices." -- William James . "The whole problem with the world is that fools and fanatics are always so certain of themselves, but wiser people so full of doubts." -- Bertrand Russell . "The bureaucracy is expanding to meet the needs of an expanding bureaucracy." -- Unknown . "I took a course in speed reading and was able to read War and Peace in twenty minutes. It's about Russia." -- Woody Allen . "Jesus may love you, but I think you're garbage wrapped in skin." -- Michael O'Donohugh . "Ah, you know the type. They like to blame it all on the Jews or the Blacks, 'cause if they couldn't, they'd have to wake up to the fact that life's one big, scary, glorious, complex and ultimately unfathomable crapshoot -- and the only reason THEY can't seem to keep up is they're a bunch of misfits and losers." -- An analysis of Neo-Nazis, from "The Badger" comic . "Subtlety is the art of saying what you think and getting out of the way before it is understood." -- Unknown . "Tact is the ability to tell a man he has an open mind when he has a hole in his head." -- Unknown . "The study of non-linear physics is like the study of non-elephant biology." -- Unknown . "I do not have a body, I am a body." -- Unknown . "If people are good only because they fear punishment, and hope for reward, then we are a sorry lot indeed." -- Albert Einstein . "A radioactive cat has eighteen half-lives." -- Unknown . "Clothes make the man. Naked people have little or no influence on society." -- Mark Twain . "I doubt, therefore I might be." -- Unknown . "If you believe in telekinesis, raise my hand." -- Unknown . "Light thinks it travels faster than anything but it is wrong. No matter how fast light travels, it finds the darkness has always got there first, and is waiting for it." -- Terry Pratchett (Reaper Man) . "If you take something apart and put it back together again enough times, you will eventually have enough parts left over to build a second one." -- The law of inanimate reproduction . "I have spoken many a word, therefore, it is fact." -- Eric the Verbose . "Puritanism: The haunting fear that someone, somewhere, may be happy." -- H. L. Mencken . "Roses are #FF0000 Violets are #0000FF All my base are belong to you!" -- Geek Valentine T-shirt at ThinkGeek . "As nightfall does not come at once, neither does oppression. In both instances, there is a twilight when everything remains unchanged. And it is in such twilight that we all must be most aware of change in the air - however slight - lest we become unwitting victims of the darkness." -- Supreme Court Justice William O. Douglas . "The surest way to corrupt a youth is to instruct him to hold in higher esteem those who think alike than those who think differently" -- Friedrich Nietzsche . "Conservatives are not necessarily stupid, but most stupid people are conservatives" -- John Stuart Mill . "Throughout American history, the government has said we're in an unprecedented crisis and that we must live without civil liberties until the crisis is over. It's a hoax." -- Yale Kamisar, 1990. . "Quoting Coulter is kind of like quoting Joe McCarthy; no doubt it does well when you're pandering to a group of like-minded hate mongerers, but it earns you a well-deserved reputation as a vicious, mean-spirited airhead and intellectual lightweight in more analytical and dispassionate circles." -- Mark Vaughan in borland.public.off-topic . "Under conditions of competition, standards are set by the morally least reputable agent." -- philosopher/economist John Stuart Mill . "A terrorist is someone who has a bomb, but doesn't have an air force." -- William Blum . "You cannot depend on your eyes when your imagination is out of focus." -- Mark Twain . "Once you've written TBicycle, you never forget how." -- Oliver Townshend in b.p.d.n-t. . "When the rich think about the poor, they have poor ideas." -- Evita Peron . "Any fool can criticize, condemn, and complain - and most fools do." -- Dale Carnegie . "Real punks help little old ladies across the street because it shocks more people than if they spit on the sidewalk." -- Unknown . "If you can read this you're not aiming in the right direction." -- Toilet-ceiling graffiti . "Getting an education was a bit like a communicable sexual disease. It made you unsuitable for a lot of jobs and then you had the urge to pass it on." -- Terry Pratchett, Hogfather . "To understand a man you should walk a mile in his shoes. If what he says still bothers you that's ok because you'll be a mile away from him and you'll have his shoes." -- Unknown . "I'm trying to see things from your point of view but I can't get my head that far up my ass." --- Unknown . "Early to rise, Early to bed, Makes a man healthy but socially dead." -- The Warner Brothers (Animaniacs) . "I hope life isn't a big joke ... because I don't get it." -- Unknown . "I'd stop eating chocolate, but I'm no quitter." -- Unknown . "I'm so poor I can't even pay attention." -- Unknown . "It's dangerous to underestimate the intelligence of a customer who grew a business that's successful enough to require a large and complex set of software" -- Grady Booch . "A physicist is an atom's way of knowing about atoms." -- George Wald . "It's the liberal bias. The press is liberally biased to the right." -- Ken de Camargo . "83.7% of all statistics are made up" - Stephen Wright . "That is the saving grace of humor, if you fail no one is laughing at you." -- A. Whitney Brown . "Humor is the only test of gravity, and gravity of humor; for a subject which will not bear raillery is suspicious, and a jest which will not bear serious examination is false wit." -- Aristotle (384 BC-322 BC) . "All I need to make a comedy is a park, a policeman and a pretty girl." -- Charlie Chaplin (1889-1977), in My Autobiography (1964) . "Total absence of humor renders life impossible." -- Colette (1873-1954), Chance Acquaintances, 1952 . "Humor is always based on a modicum of truth. Have you ever heard a joke about a father-in-law?" -- Dick Clark . "A sense of humor is part of the art of leadership, of getting along with people, of getting things done." -- Dwight D. Eisenhower (1890-1969) . "Analyzing humor is like dissecting a frog. Few people are interested and the frog dies of it." -- E. B. White (1899-1985) . "Humor is by far the most significant activity of the human brain." -- Edward De Bono . "The world is a tragedy to those who feel, but a comedy to those who think." -- Horace Walpole (1717-1797) . "If there's one thing I know it's God does love a good joke." -- Hugh Elliott, Standing Room Only weblog, 05-01-04 . "The only rules comedy can tolerate are those of taste, and the only limitations those of libel." -- James Thurber (1894-1961) . "The wit makes fun of other persons; the satirist makes fun of the world; the humorist makes fun of himself." -- James Thurber (1894-1961), in Edward R. Murrow television interview . "Where humor is concerned there are no standards - no one can say what is good or bad, although you can be sure that everyone will." -- John Kenneth Galbraith (1908-2006) . "One doesn't have a sense of humor. It has you." -- Larry Gelbart . "Humor is the great thing, the saving thing. The minute it crops up, all our irritations and resentments slip away and a sunny spirit takes their place." -- Mark Twain (1835-1910) . "Humor is a rubber sword - it allows you to make a point without drawing blood." -- Mary Hirsch . "Humor is just another defense against the universe." -- Mel Brooks (1926- ) . "Comedy is simply a funny way of being serious." -- Peter Ustinov (1921-2004) . "Comedy is nothing more than tragedy deferred." -- Pico Iyer, Time . "Wit makes its own welcome and levels all distinctions." -- Ralph Waldo Emerson (1803-1882) . "Defining and analyzing humor is a pastime of humorless people." -- Robert Benchley (1889 - 1945) . "Humor is also a way of saying something serious." -- T. S. Eliot (1888 - 1965) . "There's no trick to being a humorist when you have the whole government working for you." -- Will Rogers (1879-1935) . "Politicians are like diapers. They should be changed often, and for the same reason." -- Anonymous . "Small minds run in the same gutter." -- Alfred E. Neuman . "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning." -- Rich Cook. . "Computer dating is fine, if you're a computer." -- Rita May Brown. . "All sorts of computer errors are now turning up. You'd be surprised to know the number of doctors who claim they are treating pregnant men." -- Isaac Asimov. . "To err is human, but to really foul things up you need a computer." -- Paul Ehrlich. . "The trouble with the Internet is that it's replacing masturbation as a leisure activity." -- Patrick Murray. . "Beware of computer programmers that carry screwdrivers." -- Leonard Brandwein. . "UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity." -- Dennis Ritchie. . "The perfect computer has been developed. You just feed in your problems and they never come out again." -- Al Goodman. . "The most overlooked advantage of owning a computer is that if they foul up there's no law against whacking them around a bit." -- Eric Porterfield. . "Computers make it easier to do a lot of things, but most of the things they make it easier to do don't need to be done." -- Andy Rooney. . "Computer Science is no more about computers than astronomy is about telescopes" -- Edsger W. Dijkstra. . "The great thing about a computer notebook is that no matter how much you stuff into it, it doesn't get bigger or heavier." -- Bill Gates. . "Not even computers will replace committees, because committees buy computers." -- Unknown . "I do not fear computers. I fear the lack of them." -- Isaac Asimov. . "Computers can figure out all kinds of problems, except the things in the world that just don't add up." -- James Magary. . "In all large corporations, there is a pervasive fear that someone, somewhere is having fun with a computer on company time. Networks help alleviate that fear." -- John C. Dvorak. . "Imagine if every Thursday your shoes exploded if you tied them the usual way. This happens to us all the time with computers, and nobody thinks of complaining." -- Jeff Raskin. . "If computers get too powerful, we can organize them into a committee -- that will do them in." -- Bradley's Bromide. . "The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents." -- Nathaniel Borenstein. . "To err is human -- and to blame it on a computer is even more so." -- Robert Orben. . "If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside." -- Robert X. Cringely. . "If you put tomfoolery into a computer, nothing comes out of it but tomfoolery. But this tomfoolery, having passed through a very expensive machine, is somehow enobled and no-one dares criticize it." -- Pierre Gallois. . "Descended from the apes? Let us hope that it is not true. But if it is, let us pray that it may not become generally known." -- FA Montagu. . "I am an expert of electricity. My father occupied the chair of applied electricity at the state prison." -- WC Fields. . "My advice to you is get married: if you find a good wife you'll be happy; if not, you'll become a philosopher." -- Socrates. . "An intellectual is someone who has found something more interesting than sex." -- Edgar Wallace. . "You ask me if I keep a notebook to record my great ideas. I've only ever had one." -- Albert Einstein. . "Only one man ever understood me, and he didn't understand me." -- GW Hegel. . "Chaos Theory is a new theory invented by scientists panicked by the thought that the public were beginning to understand the old ones." -- Mike Barfield. . "The secret of creativity is knowing how to hide your sources." -- Albert Einstein. . "Louis Pasteur's theory of germs is ridiculous fiction." -- Pierre Pachet, Professor of Physiology at Toulouse, 1872 . "The wireless music box has no imaginable commercial value. Who would pay for a message sent to nobody in particular?" -- David Sarnoff's associates in response to his urging for investment in the radio in the 1920s. . "Researchers have discovered that chocolate produces some of the same reactions in the brain as marijuana. The researchers also discovered other similarities between the two but can't remember what they are." -- Matt Lauer on NBC's Today Show. . "If it weren't for electricity we'd all be watching television by candlelight." -- George Gobel. . "USA Today has come out with a new survey: Apparently three out of four people make up 75 percent of the population." -- David Letterman. . "In ancient times they had no statistics so they had to fall back on lies." -- Stephen Leacock. . "Ketchup left overnight on dinner plates has a longer half-life than radioactive waste." -- Wes Smith. . "Biologically speaking, if something bites you it's more likely to be female." -- Desmond Morris. . "When I die I'm going to leave my body to science fiction." -- Steven Wright. . "Inanimate objects can be classified scientifically into three major categories; those that don't work, those that break down and those that get lost." -- Russell Baker. . "Heaven is an American salary, a Chinese cook, an English house, and a Japanese wife. Hell is defined as having a Chinese salary, an English cook, a Japanese house, and an American wife." -- James H. Kabbler III. . "When his life was ruined, his family killed, his farm destroyed, Job knelt down on the ground and yelled up to the heavens, 'Why god? Why me?' and the thundering voice of God answered, 'There's just something about you that pisses me off.'" -- Stephen King. . "How can I believe in God when just last week I got my tongue caught in the roller of an electric typewriter?" -- Woody Allen. . "If there is no God, who pops up the next Kleenex?" -- Art Hoppe. . "My mother said to me, "If you are a soldier, you will become a general. If you are a monk, you will become the Pope." Instead, I was a painter, and became Picasso." -- Pablo Picasso. . "I was thrown out of college for cheating on the metaphysics exam; I looked into the soul of the boy next to me." -- Woody Allen. . "A good sermon should be like a woman's skirt: short enough to arouse interest but long enough to cover the essentials." -- Ronald Knox. . "Not only is there no God, but you try getting a plumber at weekends." -- Woody Allen. . "As God once said, and I think rightly..." -- Margaret Thatcher. . "Hearing nuns' confessions is like being stoned to death with popcorn." -- Fulton Sheen. . "If there is no Hell, a good many preachers are obtaining money under false pretences." -- William Sunday. . "I admire the Pope. I have a lot of respect for anyone who can tour without an album." -- Rita Rudner. . "Thank God I'm an atheist." -- Luis Bunuel. . "The Bible was a consolation to a fellow alone in the old cell. The lovely thin paper with a bit of matress stuffing in it, if you could get a match, was as good a smoke as I ever tasted." -- Brendan Behan. . "In the begining there was nothing and God said 'Let there be light', and there was still nothing but everybody could see it." -- Dave Thomas. . "Sailors ought never to go to church. They ought to go to hell, where it is much more comfortable." -- HG Wells. . "If absolute power corrupts absolutely, where does that leave God?" -- George Deacon. . "I don't believe in the after life, although I am bringing a change of underwear." -- Woody Allen. . "When I was a kid I used to pray every night for a new bicycle. Then I realised that the Lord doesn't work that way so I stole one and asked Him to forgive me." -- Emo Philips. . "When I told the people of Northern Ireland that I was an atheist, a woman in the audience stood up and said, 'Yes, but is it the God of the Catholics or the God of the Protestants in whom you don't believe?" -- Quentin Crisp. . "When I am dead, I hope it may be said: 'His sins were scarlet but his books were read." -- Hillaire Belloc. . "Sometimes I lie awake at night, and I ask, 'Where have I gone wrong?' Then a voice says to me, 'This is going to take more than one night.'" -- Charlie Brown. . "Maybe there is no actual place called hell. Maybe hell is just having to listen to our grandparents breathe through their noses when they're eating sandwiches." -- Jim Carrey. . "When did I realize I was God? Well, I was praying and I suddenly realized I was talking to myself." -- Peter O'Toole. . "They say such nice things about people at their funerals that it makes me sad that I'm going to miss mine by just a few days." -- Garrison Kielor. . "It was God who made me so beautiful. If I weren't, then I'd be a teacher." -- Linda Evangelista. . "The secret of a good sermon is to have a good beginning and a good ending, then having the two as close together as possible." -- George Burns. . "I would have made a good Pope." -- Richard Nixon. . "I was raised in the Jewish tradition, taught never to marry a Gentile woman, shave on a Saturday night and, most especially, never to shave a Gentile woman on a Saturday night." -- Woody Allen. . "God is love, but get it in writing." -- Gypsy Rose Lee. . "I don't pray because I don't want to bore God." -- Orson Welles. . "As the poet said, 'Only God can make a tree,' probably because it's so hard to figure out how to get the bark on." -- Woody Allen. . "I have four children which is not bad considering I'm not a Catholic." -- Peter Ustinov. . "I hear Glenn Hoddle has found God. That must have been one hell of a pass." -- Bob Davies. . "And God said, 'Let there be light' and there was light, but the Electricity Board said He would have to wait until Thursday to be connected." -- Spike Milligan. . "No mention of God. They keep Him up their sleeves for as long as they can, vicars do. They know it puts people off." -- Alan Bennett. . "I'm Jewish. I don't work out. If God had wanted us to bend over, He would have put diamonds on the floor." -- Joan Rivers. . "There is a charm about the forbidden that makes it unspeakably diserable." -- Mark Twain. . "Always go to other people's funerals, otherwise they won't come to yours." -- Yogi Berra. . "Death is a low chemical trick played on everybody except sequoia trees." -- JJ Furnas. . "Dying is a very dull, dreary affair. And my advice to you is to have nothing whatever to do with it." -- W. Somerset Maugham. . "Early to rise and early to bed. Makes a male healthy, wealthy and dead." -- James Thurber. . "Everybody wants to go to heaven, but nobody wants to die." -- Joe Louis. . "He had decided to live forever or die in the attempt." -- Joseph Heller. . "I am ready to meet my Maker. Whether my Maker is prepared for the great ordeal of meeting me is another matter." -- Winston Churchill. . "Death is one of the few things that can be done as easily lying down. The difference between sex and death is that with death you can do it alone and no one is going to make fun of you." -- Woody Allen. . "All our knowledge merely helps us to die a more painful death than animals that know nothing." -- Maurice Maeterlinck. . "A single death is a tragedy, a million deaths is a statistic." -- Joseph Stalin. . "Eternal nothingness is fine if you happen to be dressed for it." -- Woody Allen. . "Everything is drive-through. In California, they even have a burial service called Jump-In-The-Box." -- Wil Shriner. . "In this world, nothing is certain but death and taxes." -- Benjamin Franklin. . "The fear of death is the most unjustified of all fears, for there's no risk of accident for someone who's dead." -- Albert Einstein. . "I wouldn't mind dying - it's the business of having to stay dead that scares the shit out of me." -- R. Geis. . "It's impossible to experience one's death objectively and still carry a tune." -- Woody Allen. . "For if he like a madman lived, At least he like a wise one died." -- Cervantes. . "Death does not concern us, because as long as we exist, death is not here. And when it does come, we no longer exist." -- Epicurus. . "Am I lightheaded because I'm not dead or because I'm still alive?" -- Heidi Sandige. . "A low voter turnout is an indication of fewer people going to the polls." -- George W. Bush . "I was raised in the West. The west of Texas. It's pretty close to California. In more ways than Washington, D.C., is close to California." -- George W. Bush . "Rarely is the question asked: Is our children learning?" -- George W. Bush . "What I am against is quotas. I am against hard quotas, quotas they basically delineate based upon whatever. However they delineate, quotas, I think, vulcanize society. So I don't know how that fits into what everybody else is saying, their relative positions, but that's my position." -- George W. Bush . "It's clearly a budget. It's got a lot of numbers in it." -- George W. Bush . "One word sums up probably the responsibility of any Governor, and that one word is 'to be prepared'." -- George W. Bush . "If you're sick and tired of the politics of cynicism and polls and principles, come and join this campaign." -- George W. Bush . "We must all hear the universal call to like your neighbor like you like to be liked yourself." -- George W. Bush . "The most important job is not to be Governor, or First Lady in my case." -- George W. Bush . "If people can judge me on the company I keep, they would judge me with keeping really good company with Laura." -- George W. Bush . "You'll notice that Nancy Reagan never drinks water when Ronnie speaks." -- Robin Williams. . "I'm not going to have some reporters pawing through our papers. We are the president." -- Hillary Clinton. . "A committee is a group of people who individually can do nothing but together can decide that nothing can be done." -- Fred Allen. . "Richard Nixon is a no good, lying bastard. He can lie out of both sides of his mouth at the same time, and if he ever caught himself telling the truth, he'd lie just to keep his hand in." -- Harry S. Truman. . "Behind every successful man is a woman, behind her is his wife." -- Groucho Marx . "Marry me and I'll never look at another horse!" -- Groucho Marx . "A woman is an occasional pleasure but a cigar is always a smoke." -- Groucho Marx . "Outside of a dog, a book is man's best friend. Inside of a dog, it's too dark to read." -- Groucho Marx . "Why was I with her? She reminds me of you. In fact, she reminds me more of you than you do!" -- Groucho Marx . "Women should be obscene and not heard." -- Groucho Marx . "Either he's dead or my watch has stopped." -- Groucho Marx . "I don't care to belong to a club that accepts people like me as members." -- Groucho Marx . "I must confess, I was born at a very early age." -- Groucho Marx . "I have had a perfectly wonderful evening, but this wasn't it." -- Groucho Marx . "Room service? Send up a larger room." -- Groucho Marx . "I never forget a face, but in your case I'll be glad to make an exception." -- Groucho Marx . "A man's only as old as the woman he feels." -- Groucho Marx . "One morning I shot a bear in my pajamas. How it got into my pajamas I'll never know." -- Groucho Marx . "If I held you any closer I would be on the other side of you." -- Groucho Marx . "I was married by a judge. I should have asked for a jury." -- Groucho Marx . "Who are you going to believe, me or your own eyes?" -- Groucho Marx . "Quote me as saying I was mis-quoted." -- Groucho Marx . "A child of five could understand this. Fetch me a child of five." -- Groucho Marx . "Those are my principles. If you don't like them I have others." -- Groucho Marx . "Police arrested two kids yesterday, one was drinking battery acid, the other was eating fireworks. They charged one and let the other one off." -- Tommy Cooper . "A blind bloke walks into a shop with a guide dog. He picks the Dog up and starts swinging it around his head. Alarmed, a shop assistant calls out: 'Can I help, sir?' 'No thanks,' says the blind bloke. 'Just looking.'" -- Tommy Cooper . "It's strange, isn't it. You stand in the middle of a library and go 'aaaaagghhhh' and everyone just stares at you. But you do the same thing on an aeroplane, and everyone joins in." -- Tommy Cooper . "So I was getting into my car, and this bloke says to me "Can you give me a lift?" I said "Sure, you look great, the world's your oyster, go for it.'" -- Tommy Cooper . "You know, somebody actually complimented me on my driving today. They left a little note on the windscreen, it said 'Parking Fine.'" -- Tommy Cooper . "So I went to the dentist. He said "Say Aaah." I said "Why?" He said "My dog's died.'" -- Tommy Cooper . "So I rang up a local building firm, I said 'I want a skip outside my house.' He said 'I'm not stopping you.'" -- Tommy Cooper . "So I was in my car, and I was driving along, and my boss rang up and he said 'You've been promoted'. And I swerved. And then he rang up a second time and said 'You've been promoted again'. And I swerved again. He rang up a third time and said 'You're managing director.' And I went into a tree. And a policeman came up and said 'What happened to you?' And I Said 'I careered off the road.'" -- Tommy Cooper . "Don't knock masturbation, it's sex with someone I love ." -- Woody Allen, From 'Annie Hall' 1977. . "A fast word about oral contraception. I asked a girl to go to bed with me, she said 'no'." -- Woody Allen . "It's not that I'm afraid to die, I just don't want to be there when it happens." -- Woody Allen, From 'Death' 1975. . "There are worse things in life than death. Have you ever spent an evening with an insurance salesman?" -- Woody Allen . "Money is better than poverty, if only for financial reasons." -- Woody Allen, From 'Without Feathers' 1976. . "I failed to make the chess team because of my height." -- Woody Allen . "I believe that sex is a beautiful thing between two people. Between five, it's fantastic." -- Woody Allen . "Love is the answer - but while you're waiting for the answer sex raises some pretty good questions." -- Woody Allen . "I'm very proud of my gold pocket watch. My grandfather, on his deathbed, sold me this watch." -- Woody Allen . "I'm always amazed to hear of air crash victims so badly mutilated that they have to be identified by their dental records. What I can't understand is, if they don't know who you are, how do they know who your dentist is?" -- Paul Merton. . "The Stones, I love the Stones. I watch them whenever I can. Fred, Barney..." -- Steven Wright. . "First you forget names, then you forget faces. Next you forget to pull your zipper up and finally, you forget to pull it down." -- George Burns. . "The pen is mightier than the sword, and considerably easier to write with." -- Marty Feldman. . "We had gay burglars the other night. They broke in and rearranged the furniture." -- Robin Williams. . "If toast always lands butter-side down, and cats always land on their feet, what happens if you strap toast on the back of a cat and drop it?" -- Steven Wright. . "I'm desperately trying to figure out why kamikaze pilots wore helmets." -- Dave Edison. . "Did you ever walk in a room and forget why you walked in? I think that's how dogs spend their lives." -- Sue Murphy. . "A sure cure for seasickness is to sit under a tree." -- Spike Milligan. . "Why don't they make the whole plane out of that black box stuff." -- Steven Wright. . "I once heard two ladies going on and on about the pains of childbirth and how men don't seem to know what real pain is. I asked if either of them ever got themselves caught in a zipper." -- Emo Philips. . "My neighbour asked if he could use my lawnmower and I told him of course he could, so long as he didn't take it out of my garden." -- Eric Morecambe. . "You're about as useful as a one-legged man at an arse kicking contest." -- Rowan Atkinson. . "He managed to stupid himself right into the White House." -- Charles Appel about George W. Bush . "Reality is that which, when you stop believing in it, doesn't go away." -- Philip K. Dick. . "Believe those who are seeking the truth. Doubt those who find it." -- André Gide . "Just because bulldozers are used to build highways doesn't mean bulldozers are the best way to travel on a highway." -- Danny Thorpe in borland.public.delphi.non-technical . "Write a wise word and your name will live forever." -- Anonymous . "To the Honourable Member opposite I say, when he goes home tonight, may his mother run out from under the porch and bark at him" -- John G. Diefenbaker . "Sterling's Corollary to Clarke's Law: Any sufficiently advanced garbage is indistinguishable from magic." . "Minsky's Second Law: Don't just do something. Stand there." -- Marvin Minsky . "Devlin's First Law - Buyer beware: in the hands of a charlatan, mathematics can be used to make a vacuous argument look impressive. Devlin's Second Law - So can PowerPoint." -- Keith Devlin . "Gigerenzer's Law of Indispensable Ignorance: The world cannot function without partially ignorant people." -- Gerd Gigerenzer . "Lohr's Law: The future is merely the past with a twist - and better tools." -- Steve Lohr . "Raymond's Law of Software: Given a sufficiently large number of eyeballs, all bugs are shallow." -- Eric S. Raymond . "Barabási's Law of Programming: Program development ends when the program does what you expect it to do - whether it is correct or not." -- Albert-László Barabási . "Anyone who starts a sentence, 'With all due respect ...' is about to insult you." -- unknown . "The only one listening to both sides of an argument is the neighbor in the next apartment" -- unknown . "Cholesterol is your natural defence against excessive circulation of blood, which can carry venoms, poisons and other toxins around your body." -- Michael Warner, in bpot . "Mit der Dummheit kämpfen Götter selbst vergebens" "Against stupidity the (very) gods themselves contend in vain" -- Friedrich von Schiller . "There Ought to be Limits to Freedom!" -- George W. Bush, commenting on gwbush.com (05/21/1999) . "We are Dyslexia of Borg. Fusistance is retile. Your ass will be laminated." -- unknown . ICTOARTCYAODHTIOTSSIWRTNCAHICGAWI, Acronym: "I Can't Think Of Anything Reasonable To Counter Your Argument Or Don't Have The Least Inkling Of The Subject So I Will Resort To Name Calling And Hope I Can Get Away With It." -- Ken de Camargo, borland.public.off-topic . "I don't approve of political jokes... I've seen too many of them get elected." -- unknown . "I plan to live forever. So far so good." -- Rob C. Claffie in borland.public.off-topic . "Millions long for immortality who do not know what to do with themselves on a rainy Sunday afternoon." -- Susan Ertz . "If the United Nations once admits that international disputes can be settled by using force, then we will have destroyed the foundation of the organization and our best hope of establishing a world order." -- Dwight D. Eisenhower . "When you hear hoofbeats, think of horses, not zebras." -- Old saying . "Sex is like a Chinese dinner. It isn't over until everyone gets their cookies." -- from the movie "Outside Providence" . "A picture is worth a thousand words (which is why it takes a thousand times longer to load...)" -- Eric Tilton, Composing Good HTML . "1001 words say more than one picture" -- Chinese proverb . "There is no idea so simple and powerful that you can't get zillions of people to misunderstand it." -- Alan Kay . "The purpose of computing is not numbers but insight." -- Richard Hamming . "They have computers, and they may have other weapons of mass destruction." -- Janet Reno, Us Attorney General, 02-27-98 . "Absence of evidence is not evidence of absence." -- Source Unknown . "Imagine if every Thursday your shoes exploded if you tied them the usual way. This happens to us all the time with computers, and nobody thinks of complaining." -- Jeff Raskin . "Programming is like sex: one mistake and you have to support it for the rest of your life." -- Michael Sinz . "Linux is like living in a teepee. No Windows, no Gates, Apache in house." -- Usenet signature . "DOS Computers manufactured by companies such as IBM, Compaq, Tandy, and millions of others are by far the most popular, with about 70 million machines in use worldwide. Macintosh fans, on the other hand, may note that cockroaches are far more numerous than humans, and that numbers alone do not denote a higher life form." -- New York Times, November 26, 1991 . "Politics is the art of looking for trouble, finding it everywhere, diagnosing it incorrectly, and applying the wrong remedies." -- Groucho Marx . "Momma always said life was like a box of chocolates. You never know what you're gonna get." -- Forest Gump . "I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." -- Alan Kay . "Reality is merely an illusion, albeit a very persistent one." -- Albert Einstein . "Never test for an error condition you don't know how to handle." -- Steinbach's Guideline for Systems Programmers. . "Science is what people understand well enough to explain to a computer. All else is art." -- Donald Knuth . "Beware of bugs in the above code; I have only proven it correct, not tried it." -- Donald E. Knuth. . "Object-oriented programming is an exceptionally bad idea which could only have originated in California." -- Edsger Dijkstra . "Object-oriented programming is a style of programming designed to teach students about stacks." -- Edsger Dijkstra . "Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians." -- Edsger Dijkstra . "The use of anthropomorphic terminology when dealing with computing systems is a symptom of professional immaturity." -- Edsger Dijkstra . "About the use of language: it is impossible to sharpen a pencil with a blunt axe. It is equally vain to try to do it with ten blunt axes instead." -- Edsger W. Dijkstra . "If FORTRAN has been called an infantile disorder, then PL/I must be classified as a fatal disease." -- Edsger Dijkstra . "Testing proves the presence, not the absence, of bugs." -- Edsger Dijkstra . "The question of whether a computer can think is no more interesting than the question of whether a submarine can swim." -- Edsger Dijkstra . "It is practically imposible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration." -- Edsger Dijkstra . "The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense." -- Edsger Dijkstra . Bible, Dijkstra 5:15 "and the clueless shall spend their time reinventing the wheel while the elite merely use the Wordstar key mappings" -- Ed Mulroy . "Why did God create dentists? -- In his infinite love, he thought it would be charitable to His creatures to let them see what Hell is like, during their lives." -- PhR . Customer: "I'm running Windows '95." Tech: "Yes." Customer: "My computer isn't working now." Tech: "Yes, you said that." . "If we knew what it was we were doing, it would not be called research, would it?" -- Albert Einstein . "A [pseudo]random number generator is much like sex: when it's good it's wonderful, and when it's bad it's still pretty good." -- G. Marsaglia . "A model is done when nothing else can be taken out." -- Dyson . "Real life is that big, high-res, high-color screen saver behind all the windows." -- anonymous . "We've all heard that a million monkeys banging on a million typewriters will eventually reproduce the entire works of Shakespeare. Now, thanks to the Internet, we know this is not true." -- Robert Wilensky . "Not everything that can be counted counts, and not everything that counts can be counted." -- Albert Einstein . "Physics is not a religion. If it were, we'd have a much easier time raising money." -- Leon Lenderman . "Java, the best argument for Smalltalk since C++." -- unknown . "Computers are useless; they can only give you answers." -- Pablo Picasso . "Life would be so much easier if we could just see the source code." -- unknown . "Deliver yesterday, code today, think tomorrow." -- unknown . "Having the source code is the difference between buying a house and renting an apartment." -- Behlendorf . "C++: an octopus made by nailing extra legs onto a dog" -- unknown . "C combines all the power of assembly language with the ease of use of assembly language" -- trad . "God is real unless declared integer" -- david . "Java: the elegant simplicity of C++ and the blazing speed of Smalltalk." -- Roland Turner . "Quotation confesses inferiority." -- Ralph Waldo Emerson . "A mind all logic is like a knife all blade. It makes the hand bleed that uses it." -- Rabindranath Tagore . "Sometimes, the best answer is a more interesting question" -- Terry Pratchett . "Before C++ we had to code all of our bugs by hand; now we inherit them." -- unknown . "Incrementing C by 1 is not enough to make a good object-oriented language." -- M. Sakkinen . "Science is like sex: sometimes something useful comes out, but that is not the reason we are doing it" -- Richard Feynman . "Man is the best computer we can put aboard a spacecraft... and the only one that can be mass produced with unskilled labor." -- Wernher von Braun . "Computer /nm./: a device designed to speed and automate errors." -- From the Jargon File. . "RAM /abr./: Rarely Adequate Memory." -- From the Jargon File . "A printer consists of three main parts: the case, the jammed paper tray and the blinking red light" -- unknown . "Real Programmers always confuse Christmas and Halloween because Oct31 == Dec25 !" -- Andrew Rutherford . "2 + 2 = 5, for extremely large values of 2." -- unknown . "ASCII stupid question, get a stupid ANSI !" -- unknown . "Multitasking /adj./ 3 PCs and a chair with wheels !" -- unknown . "Pascal /n./ A programming language named after a man who would turn over in his grave if he knew about it." -- From the Jargon File . "If it wasn't for C, we'd be writing programs in BASI, PASAL, and OBOL." -- unknown . "I have yet to meet a C compiler that is more friendly and easier to use than eating soup with a knife." -- unknown . "... one of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs." -- Robert Firth . "Do you program in Assembly ?" she asked. "NOP," he said. . "Smith & Wesson - the original point and click interface." . "We should leave our minds open, but not so open that our brains fall out." -- Alan Ross Anderson . "The difference between what the most and the least learned people know is inexpressibly trivial in relation to that which is unknown." -- Albert Einstein . "Statistics is like a bikini. What they reveal is suggestive. What they conceal is vital." -- Arthur Koestler . "A hen is only an egg's way of making another egg." -- Samuel Butler . "It is a miracle that curiosity survives formal education." -- Albert Einstein . "Gravity cannot be held responsible for people falling in love." -- Albert Einstein . "Common sense is the collection of prejudices acquired by age eighteen." -- Albert Einstein . "The secret to creativity is knowing how to hide your sources." -- Albert Einstein . "Intellectuals solve problems; geniuses prevent them." -- Albert Einstein . "Put your hand on a hot stove for a minute, and it seems like an hour. Sit with a pretty girl for an hour, and it seems like a minute. THAT'S relativity." -- Albert Einstein? . "To iterate is human, to recurse divine." -- L. Peter Deutsch . "Premature optimization is the root of all evil." -- Donald Knuth . "UNIX is simple. It just takes a genius to understand its simplicity."-- Dennis Ritchie . "If you give a man a fish, he will eat for today. If you teach him to fish, he'll understand why some people think golf is exciting." -- P.G. Wodehouse . "I'd give my right arm to be ambidextrous." -- Brian Kernighan . "I know that there are people in this world who do not love their fellow human beings, and I hate people like that." -- Tom Lehrer . "Yes, I'm fat, but you're ugly and I can go on a diet." -- bumper sticker . "I want to die in my sleep like my grandfather... not screaming and yelling like the passengers in his car..." -- bumper sticker . "Time is the best teacher; Unfortunately it kills all its students!" -- bumper sticker . "Diplomacy is the art of saying 'Nice doggie!'... 'til you can find a rock." -- bumper sticker . "Ever stop to think, and forget to start again?" -- bumper sticker . "If you need more than five lines to prove something, then you are on the wrong track" -- Edgser W. Dijkstra's mother [ibid, p. 55] . "If you think it's simple, then you have misunderstood the problem." -- Bjarne Stroustrup [lecture at Temple U., 11/25/97] . "True. When your hammer is C++, everything begins to look like a thumb." -- Steve Haflich, in comp.lang.c++ . "I have made this letter longer than usual because I lack the time to make it shorter." -- Blaise Pascal . The "abort()" function is now called "choice()." -- from the "Politically Correct UNIX System VI Release notes" . "We don't make mistakes, we just have happy little accidents." -- Bob Ross, "The Joy of Painting" . "Modern capitalism is not about free markets, it is about building sufficient mass that the market gravitationally collapses around you."-- Alisdair Meredith . "If quantum physics doesn't confuse you then you don't understand it." -- Niels Bohr . "If the brain were so simple we could understand it, we would be so simple we couldn't." -- Lyall Watson . "Moral indignation is jealousy with a halo." -- H. G. Wells (1866-1946) . "Glory is fleeting, but obscurity is forever." -- Napoleon Bonaparte (1769-1821) . "Victory goes to the player who makes the next-to-last mistake." -- Chessmaster Savielly Grigorievitch Tartakower (1887-1956) . "Don't be so humble - you are not that great." -- Golda Meir (1898-1978) to a visiting diplomat . "His ignorance is encyclopedic" -- Abba Eban (1915-2002) . "If a man does his best, what else is there?" -- General George S. Patton (1885-1945) . "I can write better than anybody who can write faster, and I can write faster than anybody who can write better." -- A. J. Liebling (1904-1963) . "People demand freedom of speech to make up for the freedom of thought which they avoid." -- Soren Aabye Kierkegaard (1813-1855) . "Give me chastity and continence, but not yet." -- Saint Augustine (354-430) . "Not everything that can be counted counts, and not everything that counts can be counted." -- Albert Einstein (1879-1955) . "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former." -- Albert Einstein (1879-1955) . "A lie gets halfway around the world before the truth has a chance to get its pants on." -- Sir Winston Churchill (1874-1965) . "I do not feel obliged to believe that the same God who has endowed us with sense, reason, and intellect has intended us to forgo their use." -- Galileo Galilei . "The artist is nothing without the gift, but the gift is nothing without work." -- Emile Zola (1840-1902) . "This book fills a much-needed gap." -- Moses Hadas (1900-1966) in a review . "The full use of your powers along lines of excellence." -- definition of "happiness" by John F. Kennedy (1917-1963) . "I'm living so far beyond my income that we may almost be said to be living apart." -- e e cummings (1894-1962) . "Give me a museum and I'll fill it." -- Pablo Picasso (1881-1973) . "Assassins!" -- Arturo Toscanini (1867-1957) to his orchestra . "I'll moider da bum." -- Heavyweight boxer Tony Galento, when asked what he thought of William Shakespeare . "In theory, there is no difference between theory and practice. But, in practice, there is." -- Jan L.A. van de Snepscheut . "I find that the harder I work, the more luck I seem to have." -- Thomas Jefferson (1743-1826) . "Each problem that I solved became a rule which served afterwards to solve other problems." -- Rene Descartes (1596-1650), "Discours de la Methode" . "In the End, we will remember not the words of our enemies, but the silence of our friends." -- Martin Luther King Jr. (1929-1968) . "Whether you think that you can, or that you can't, you are usually right." -- Henry Ford (1863-1947) . "Do, or do not. There is no 'try'." -- Yoda ('The Empire Strikes Back') . "The only way to get rid of a temptation is to yield to it." -- Oscar Wilde (1854-1900) . "Don't stay in bed, unless you can make money in bed." -- George Burns (1896-1996) . "I don't know why we are here, but I'm pretty sure that it is not in order to enjoy ourselves." -- Ludwig Wittgenstein (1889-1951) . "The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense." -- Edsger Dijkstra . "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg." -- Bjarne Stroustrup . "A mathematician is a device for turning coffee into theorems." -- Paul Erdos . "The only difference between me and a madman is that I'm not mad." -- Salvador Dali (1904-1989) . "If you can't get rid of the skeleton in your closet, you'd best teach it to dance." -- George Bernard Shaw (1856-1950) . "But at my back I always hear Time's winged chariot hurrying near." -- Andrew Marvell (1621-1678) . "Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws." -- Plato (427-347 B.C.) . "The power of accurate observation is frequently called cynicism by those who don't have it." -- George Bernard Shaw (1856-1950) . "Whenever I climb I am followed by a dog called 'Ego'." - Friedrich Nietzsche (1844-1900) . "We have art to save ourselves from the truth." - Friedrich Nietzsche (1844-1900) . "Never interrupt your enemy when he is making a mistake." - Napoleon Bonaparte (1769-1821) . "I think 'Hail to the Chief' has a nice ring to it." -- John F. Kennedy (1917-1963) when asked what is his favorite song . "Human history becomes more and more a race between education and catastrophe." -- H. G. Wells (1866-1946) . "Talent does what it can; genius does what it must." - Edward George Bulwer-Lytton (1803-1873) . "The difference between 'involvement' and 'commitment' is like an eggs-and-ham breakfast: the chicken was 'involved' - the pig was 'committed'." -- unknown . "If you are going through hell, keep going." - Sir Winston Churchill (1874-1965) . "I'm all in favor of keeping dangerous weapons out of the hands of fools. Let's start with typewriters." -- Frank Lloyd Wright (1868-1959) . "Some cause happiness wherever they go; others, whenever they go." -- Oscar Wilde (1854-1900) . "God is a comedian playing to an audience too afraid to laugh." -- Voltaire (1694-1778) . "He is one of those people who would be enormously improved by death." -- H. H. Munro (Saki) (1870-1916) . "I am ready to meet my Maker. Whether my Maker is prepared for the great ordeal of meeting me is another matter." -- Sir Winston Churchill (1874-1965) . "I shall not waste my days in trying to prolong them." -- Ian L. Fleming (1908-1964) . "If you can count your money, you don't have a billion dollars." -- J. Paul Getty (1892-1976) . "Facts are the enemy of truth." -- Don Quixote - "Man of La Mancha" . "When you do the common things in life in an uncommon way, you will command the attention of the world." -- George Washington Carver (1864-1943) . "How wrong it is for a woman to expect the man to build the world she wants, rather than to create it herself." -- Anais Nin (1903-1977) . "I have not failed. I've just found 10,000 ways that won't work." -- Thomas Alva Edison (1847-1931) . "I begin by taking. I shall find scholars later to demonstrate my perfect right." -- Frederick (II) the Great . "Maybe this world is another planet's Hell." -- Aldous Huxley (1894-1963) . "Blessed is the man, who having nothing to say, abstains from giving wordy evidence of the fact." -- George Eliot (1819-1880) . "Once you eliminate the impossible, whatever remains, no matter how improbable, must be the truth." -- Sherlock Holmes (by Sir Arthur Conan Doyle, 1859-1930) . "Black holes are where God divided by zero." - Steven Wright . "I've had a wonderful time, but this wasn't it." -- Groucho Marx (1895-1977) . "It's kind of fun to do the impossible." - Walt Disney (1901-1966) . "We didn't lose the game; we just ran out of time." - Vince Lombardi . "The optimist proclaims that we live in the best of all possible worlds, and the pessimist fears this is true." -- James Branch Cabell . "A friendship founded on business is better than a business founded on friendship." -- John D. Rockefeller (1874-1960) . "All are lunatics, but he who can analyze his delusion is called a philosopher." -- Ambrose Bierce (1842-1914) . "You can only find truth with logic if you have already found truth without it." -- Gilbert Keith Chesterton (1874-1936) . "An inconvenience is only an adventure wrongly considered; an adventure is an inconvenience rightly considered." -- Gilbert Keith Chesterton (1874-1936) . "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco . "Be nice to people on your way up because you meet them on your way down." -- Jimmy Durante . "The true measure of a man is how he treats someone who can do him absolutely no good." -- Samuel Johnson (1709-1784) . "A people that values its privileges above its principles soon loses both." -- Dwight D. Eisenhower (1890-1969), Inaugural Address, January 20, 1953 . "The significant problems we face cannot be solved at the same level of thinking we were at when we created them." -- Albert Einstein (1879-1955) . "Basically, I no longer work for anything but the sensation I have while working." -- Albert Giacometti (sculptor) . "All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident." -- Arthur Schopenhauer (1788-1860) . "Many a man's reputation would not know his character if they met on the street." -- Elbert Hubbard (1856-1915) . "There is more stupidity than hydrogen in the universe, and it has a longer shelf life." -- Frank Zappa . "Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away." -- Antoine de Saint Exupéry . "Life is pleasant. Death is peaceful. It's the transition that's troublesome." -- Isaac Asimov . "If you want to make an apple pie from scratch, you must first create the universe." -- Carl Sagan . "It is much more comfortable to be mad and know it, than to be sane and have one's doubts." -- G. B. Burgin . "Once is happenstance. Twice is coincidence. Three times is enemy action." -- Auric Goldfinger, in "Goldfinger" by Ian L. Fleming (1908-1964) . "To love oneself is the beginning of a lifelong romance" -- Oscar Wilde (1854-1900) . "Knowledge speaks, but wisdom listens." -- Jimi Hendrix . "A clever man commits no minor blunders." -- Goethe (1749-1832) . "Argue for your limitations, and sure enough they're yours." -- Richard Bach . "A witty saying proves nothing." -- Voltaire (1694-1778) . "Education is a progressive discovery of our own ignorance." -- Will Durant . "I have often regretted my speech, never my silence." -- Xenocrates (396-314 B.C.) . "It was the experience of mystery -- even if mixed with fear -- that engendered religion." -- Albert Einstein (1879-1955) . "If everything seems under control, you're just not going fast enough." -- Mario Andretti . "I do not consider it an insult, but rather a compliment to be called an agnostic. I do not pretend to know where many ignorant men are sure -- that is all that agnosticism means." -- Clarence Darrow, Scopes trial, 1925. . "Obstacles are those frightful things you see when you take your eyes off your goal." -- Henry Ford (1863-1947) . "I'll sleep when I'm dead." -- Warren Zevon . "There are people in the world so hungry, that God cannot appear to them except in the form of bread." -- Mahatma Gandhi (1869-1948) . "If you gaze long into an abyss, the abyss will gaze back into you." -- Friedrich Nietzsche (1844-1900) . "The instinct of nearly all societies is to lock up anybody who is truly free. First, society begins by trying to beat you up. If this fails, they try to poison you. If this fails too, the finish by loading honors on your head." -- Jean Cocteau (1889-1963) . "Everyone is a genius at least once a year; a real genius has his original ideas closer together." -- Georg Lichtenberg (1742-1799) . "Success usually comes to those who are too busy to be looking for it" -- Henry David Thoreau (1817-1862) . "While we are postponing, life speeds by." -- Seneca (3BC - 65AD) . "Where are we going, and why am I in this handbasket?" -- Bumper Sticker . "God, please save me from your followers!" -- Bumper Sticker . "Fill what's empty, empty what's full, and scratch where it itches." -- the Duchess of Windsor, when asked what is the secret of a long and happy life . "First they ignore you, then they laugh at you, then they fight you, then you win." -- Mahatma Gandhi (1869-1948) . "Luck is the residue of design." -- Branch Rickey - former owner of the Brooklyn Dodger Baseball Team . "Tragedy is when I cut my finger. Comedy is when you walk into an open sewer and die." -- Mel Brooks . "Most people would sooner die than think; in fact, they do so." -- Bertrand Russell (1872-1970) . "Wit is educated insolence." -- Aristotle (384-322 B.C.) . "My advice to you is get married: if you find a good wife you'll be happy; if not, you'll become a philosopher." -- Socrates (470-399 B.C.) . "Egotist: a person more interested in himself than in me." -- Ambrose Bierce (1842-1914) . "A narcissist is someone better looking than you are." - Gore Vidal . "Wise men make proverbs, but fools repeat them." - Samuel Palmer (1805-80) . "It has become appallingly obvious that our technology has exceeded our humanity." -- Albert Einstein (1879-1955) . "The secret of success is to know something nobody else knows." -- Aristotle Onassis (1906-1975) . "Sometimes when reading Goethe I have the paralyzing suspicion that he is trying to be funny." -- Guy Davenport . "When you have to kill a man, it costs nothing to be polite." -- Sir Winston Churchill (1874-1965) . "Any man who is under 30, and is not a liberal, has not heart; and any man who is over 30, and is not a conservative, has no brains." -- Sir Winston Churchill (1874-1965) . "The opposite of a correct statement is a false statement. The opposite of a profound truth may well be another profound truth." -- Niels Bohr (1885-1962) . "We all agree that your theory is crazy, but is it crazy enough?" -- Niels Bohr (1885-1962) . "When I am working on a problem I never think about beauty. I only think about how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -- Buckminster Fuller (1895-1983) . "In science one tries to tell people, in such a way as to be understood by everyone, something that no one ever knew before. But in poetry, it's the exact opposite." -- Paul Dirac (1902-1984) . "I would have made a good Pope." -- Richard M. Nixon (1913-1994) . "In any contest between power and patience, bet on patience." -- W.B. Prescott . "Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin." -- John von Neumann (1903-1957) . "The mistakes are all waiting to be made." -- chessmaster Savielly Grigorievitch Tartakower (1887-1956) on the game's opening position . "It is unbecoming for young men to utter maxims." -- Aristotle (384-322 B.C.) . "Grove giveth and Gates taketh away." -- Bob Metcalfe (inventor of Ethernet) on the trend of hardware speedups not being able to keep up with software demands . "Reality is merely an illusion, albeit a very persistent one." -- Albert Einstein (1879-1955) . "One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." -- Bertrand Russell (1872-1970) . "A little inaccuracy sometimes saves a ton of explanation." -- H. H. Munro (Saki) (1870-1916) . "There are two ways of constructing a software design; one way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." -- C. A. R. Hoare . "Make everything as simple as possible, but not simpler." -- Albert Einstein (1879-1955) . "What do you take me for, an idiot?" -- General Charles de Gaulle (1890-1970), when a journalist asked him if he was happy . "I heard someone tried the monkeys-on-typewriters bit trying for the plays of W. Shakespeare, but all they got was the collected works of Francis Bacon." -- Bill Hirst . "Three o'clock is always too late or too early for anything you want to do." -- Jean-Paul Sartre (1905-1980) . "A doctor can bury his mistakes but an architect can only advise his clients to plant vines." -- Frank Lloyd Wright (1868-1959) . "It is dangerous to be sincere unless you are also stupid." - George Bernard Shaw (1856-1950) . "If you haven't got anything nice to say about anybody, come sit next to me." -- Alice Roosevelt Longworth (1884-1980) . "A man can't be too careful in the choice of his enemies." -- Oscar Wilde (1854-1900) . "Forgive your enemies, but never forget their names." -- John F. Kennedy (1917-1963) . "Logic is in the eye of the logician." -- Gloria Steinem . "No one can earn a million dollars honestly." -- William Jennings Bryan (1860-1925) . "Everything has been figured out, except how to live." -- Jean-Paul Sartre (1905-1980) . "Well-timed silence hath more eloquence than speech." - Martin Fraquhar Tupper . "Thank you for sending me a copy of your book - I'll waste no time reading it." -- Moses Hadas (1900-1966) . "From the moment I picked your book up until I laid it down I was convulsed with laughter. Some day I intend reading it." -- Groucho Marx (1895-1977) . "It is better to have a permanent income than to be fascinating." -- Oscar Wilde (1854-1900) . "When ideas fail, words come in very handy." -- Goethe (1749-1832) . "In the end, everything is a gag." -- Charlie Chaplin (1889-1977) . "The nice thing about egotists is that they don't talk about other people." -- Lucille S. Harper . "You got to be careful if you don't know where you're going, because you might not get there." -- Yogi Berra . "I love Mickey Mouse more than any woman I have ever known." -- Walt Disney (1901-1966) . "He who hesitates is a damned fool." -- Mae West (1892-1980) . "Good teaching is one-fourth preparation and three-fourths theater." -- Gail Godwin . "University politics are vicious precisely because the stakes are so small." -- Henry Kissinger (1923-) . "The graveyards are full of indispensable men." -- Charles de Gaulle (1890-1970) . "You can pretend to be serious; you can't pretend to be witty." -- Sacha Guitry (1885-1957) . "Behind every great fortune there is a crime." -- Honore de Balzac (1799-1850) . "If women didn't exist, all the money in the world would have no meaning." -- Aristotle Onassis (1906-1975) . "I am not young enough to know everything." -- Oscar Wilde (1854-1900) . "The object of war is not to die for your country but to make the other bastard die for his." -- General George Patton (1885-1945) . "Sometimes a scream is better than a thesis." -- Ralph Waldo Emerson (1803-1882) . "There is no sincerer love than the love of food." -- George Bernard Shaw (1856-1950) . "I don't even butter my bread; I consider that cooking." -- Katherine Cebrian . "I have an existential map; it has 'you are here' written all over it." -- Steven Wright . "Mr. Wagner has beautiful moments but bad quarters of an hour." - Gioacchino Rossini (1792-1868) . "Manuscript: something submitted in haste and returned at leisure." -- Oliver Herford (1863-1935) . "I have read your book and much like it." -- Moses Hadas (1900-1966) . "The covers of this book are too far apart." -- Ambrose Bierce (1842-1914) . "Everywhere I go I'm asked if I think the university stifles writers. My opinion is that they don't stifle enough of them." -- Flannery O'Connor (1925-1964) . "Too many pieces of music finish too long after the end." -- Igor Stravinsky (1882-1971) . "Anything that is too stupid to be spoken is sung." -- Voltaire (1694-1778) . "When choosing between two evils, I always like to try the one I've never tried before." -- Mae West (1892-1980) . "I don't know anything about music. In my line you don't have to." -- Elvis Presley (1935-1977) . "No Sane man will dance." -- Cicero (106-43 B.C.) . "Hell is a half-filled auditorium." -- Robert Frost (1874-1963) . "Show me a sane man and I will cure him for you." -- Carl Gustav Jung (1875-1961) . "Vote early and vote often." -- Al Capone (1899-1947) . "If I were two-faced, would I be wearing this one?" -- Abraham Lincoln (1809-1865) . "Few things are harder to put up with than a good example." - Mark Twain (1835-1910) . "Hell is other people." -- Jean-Paul Sartre (1905-1980) . "I am become death, shatterer of worlds." -- Robert J. Oppenheimer (1904-1967) (citing from the Bhagavad Gita, after witnessing the world's first nuclear explosion) . "Happiness is good health and a bad memory." -- Ingrid Bergman (1917-1982) . "Friends may come and go, but enemies accumulate." -- Thomas Jones . "You can get more with a kind word and a gun than you can with a kind word alone." -- Al Capone (1899-1947) . "The gods too are fond of a joke." -- Aristotle (384-322 B.C.) . "Distrust any enterprise that requires new clothes." -- Henry David Thoreau (1817-1862) . "The difference between pornography and erotica is lighting." -- Gloria Leonard . "It is time I stepped aside for a less experienced and less able man." -- Professor Scott Elledge on his retirement from Cornell . "Every day I get up and look through the Forbes list of the richest people in America. If I'm not there, I go to work." -- Robert Orben . "The cynics are right nine times out of ten." -- Henry Louis Mencken (1880-1956) . "There are some experiences in life which should not be demanded twice from any man, and one of them is listening to the Brahms Requiem." -- George Bernard Shaw (1856-1950) . "Attention to health is life's greatest hindrance." -- Plato (427-347 B.C.) . "Plato was a bore." -- Friedrich Nietzsche (1844-1900) . "Nietzsche was stupid and abnormal." -- Leo Tolstoy (1828-1910) . "I'm not going to get into the ring with Tolstoy." -- Ernest Hemingway (1899-1961) . "Hemingway was a jerk." -- Harold Robbins . "Men are not disturbed by things, but the view they take of things." -- Epictetus (55-135 A.D.) "What about things like bullets?" -- Herb Kimmel, Behavioralist, Professor of Psychology, upon hearing the above quote (1981) . "How can I lose to such an idiot?" -- A shout from chessmaster Aaron Nimzovich (1886-1935) . "I don't feel good." -- The last words of Luther Burbank (1849-1926) . "Nothing is wrong with California that a rise in the ocean level wouldn't cure." -- Ross MacDonald (1915-1983) . "Men have become the tools of their tools." -- Henry David Thoreau (1817-1862) . "I have never let my schooling interfere with my education." -- Mark Twain (1835-1910) . "It is now possible for a flight attendant to get a pilot pregnant." -- Richard J. Ferris, president of United Airlines . "I never miss a chance to have sex or appear on television." -- Gore Vidal . "I don't want to achieve immortality through my work; I want to achieve immortality through not dying." -- Woody Allen (1935-) . "Men and nations behave wisely once they have exhausted all the other alternatives." -- Abba Eban (1915-2002) . "To sit alone with my conscience will be judgment enough for me." -- Charles William Stubbs . "Sanity is a madness put to good uses." -- George Santayana (1863-1952) . "Imitation is the sincerest form of television." -- Fred Allen (1894-1956) . "Always do right- this will gratify some and astonish the rest." -- Mark Twain (1835-1910) . "In America, anybody can be president. That's one of the risks you take." -- Adlai Stevenson (1900-1965) . "Copy from one, it's plagiarism; copy from two, it's research." -- Wilson Mizner (1876-1933) . "Why don't you write books people can read?" -- Nora Joyce to her husband James (1882-1941) . "Some editors are failed writers, but so are most writers." -- T. S. Eliot (1888-1965) . "Criticism is prejudice made plausible." -- Henry Louis Mencken (1880-1956) . "It is better to be quotable than to be honest." -- Tom Stoppard . "Being on the tightrope is living; everything else is waiting." -- Karl Wallenda . "Opportunities multiply as they are seized." -- Sun Tzu . "A scholar who cherishes the love of comfort is not fit to be deemed a scholar." -- Lao-Tzu (570?-490? BC) . "The best way to predict the future is to invent it." -- Alan Kay . "Never mistake motion for action." -- Ernest Hemingway (1899-1961) . "Hell is paved with good samaritans." -- William M. Holden . "The longer I live the more I see that I am never wrong about anything, and that all the pains that I have so humbly taken to verify my notions have only wasted my time." -- George Bernard Shaw (1856-1950) . "Silence is argument carried out by other means." -- Ernesto "Che" Guevara (1928-1967) . "Well done is better than well said." -- Benjamin Franklin (1706-1790) . "The average person thinks he isn't." -- Father Larry Lorenzoni . "Heav'n hath no rage like love to hatred turn'd, Nor Hell a fury, like a woman scorn'd." -- William Congreve (1670-1729) . "A husband is what is left of the lover after the nerve has been extracted." -- Helen Rowland (1876-1950) . "Learning is what most adults will do for a living in the 21st century." -- Perelman . "The man who goes alone can start today; but he who travels with another must wait till that other is ready." -- Henry David Thoreau (1817-1862) . "There is a country in Europe where multiple-choice tests are illegal." -- Sigfried Hulzer . "Ask her to wait a moment - I am almost done." -- Carl Friedrich Gauss (1777-1855), while working, when informed that his wife is dying . "A pessimist sees the difficulty in every opportunity; an optimist sees the opportunity in every difficulty." -- Sir Winston Churchill (1874-1965) . "I think there is a world market for maybe five computers." -- Thomas Watson (1874-1956), Chairman of IBM, 1943 . "I think it would be a good idea." -- Mahatma Gandhi (1869-1948), when asked what he thought of Western civilization . "The only thing necessary for the triumph of evil is for good men to do nothing." -- Edmund Burke (1729-1797) . "I'm not a member of any organized political party, I'm a Democrat!" -- Will Rogers (1879-1935) . "If Stupidity got us into this mess, then why can't it get us out?" -- Will Rogers (1879-1935) . "The backbone of surprise is fusing speed with secrecy." -- Von Clausewitz (1780-1831) . "Democracy does not guarantee equality of conditions - it only guarantees equality of opportunity." -- Irving Kristol . "There is no reason anyone would want a computer in their home." -- Ken Olson, president, chairman and founder of Digital Equipment Corp., 1977 . "640K ought to be enough for anybody." -- Bill Gates (1955-), in 1981 . "The concept is interesting and well-formed, but in order to earn better than a 'C', the idea must be feasible." -- A Yale University management professor in response to student Fred Smith's paper proposing reliable overnight delivery service (Smith went on to found Federal Express Corp.) . "Who the hell wants to hear actors talk?" -- H.M. Warner (1881-1958), founder of Warner Brothers, in 1927 . "We don't like their sound, and guitar music is on the way out." -- Decca Recording Co. rejecting the Beatles, 1962 . "Everything that can be invented has been invented." -- Charles H. Duell, Commissioner, U.S. Office of Patents, 1899 . "Denial ain't just a river in Egypt." -- Mark Twain (1835-1910) . "A pint of sweat, saves a gallon of blood." -- General George S. Patton (1885-1945) . "After I'm dead I'd rather have people ask why I have no monument than why I have one." -- Cato the Elder (234-149 BC, AKA Marcus Porcius Cato) . "He can compress the most words into the smallest idea of any man I know." -- Abraham Lincoln (1809-1865) . "Don't let it end like this. Tell them I said something." -- last words of Pancho Villa (1877-1923) . "The right to swing my fist ends where the other man's nose begins." -- Oliver Wendell Holmes (1841-1935) . "The difference between fiction and reality? Fiction has to make sense." -- Tom Clancy . "It's not the size of the dog in the fight, it's the size of the fight in the dog." -- Mark Twain (1835-1910) . "It is better to be feared than loved, if you cannot be both." -- Niccolo Machiavelli (1469-1527), "The Prince" . "Whatever is begun in anger ends in shame." -- Benjamin Franklin (1706-1790) . "The President has kept all of the promises he intended to keep." -- Clinton aide George Stephanopolous speaking on Larry King Live . "We're going to turn this team around 360 degrees." -- Jason Kidd, upon his drafting to the Dallas Mavericks . "Half this game is ninety percent mental." -- Yogi Berra . "There is only one nature - the division into science and engineering is a human imposition, not a natural one. Indeed, the division is a human failure; it reflects our limited capacity to comprehend the whole." -- Bill Wulf . "There's many a bestseller that could have been prevented by a good teacher." -- Flannery O'Connor (1925-1964) . "He has all the virtues I dislike and none of the vices I admire." -- Sir Winston Churchill (1874-1965) . "I criticize by creation - not by finding fault." -- Cicero (106-43 B.C.) . "Love is friendship set on fire." -- Jeremy Taylor . "God gave men both a penis and a brain, but unfortunately not enough blood supply to run both at the same time." -- Robin Williams, commenting on the Clinton/Lewinsky affair . "My occupation now, I suppose, is jail inmate." -- Unibomber Theodore Kaczynski, when asked in court what his current profession was . "Woman was God's second mistake." -- Friedrich Nietzsche (1844-1900) . "This isn't right, this isn't even wrong." -- Wolfgang Pauli (1900-1958), upon reading a young physicist's paper . "For centuries, theologians have been explaining the unknowable in terms of the-not-worth-knowing." -- Henry Louis Mencken (1880-1956) . "Pray, v.: To ask that the laws of the universe be annulled on behalf of a single petitioner confessedly unworthy." -- Ambrose Bierce (1842-1914) . "Every normal man must be tempted at times to spit upon his hands, hoist the black flag, and begin slitting throats." -- Henry Louis Mencken (1880-1956) . "Now, now my good man, this is no time for making enemies." -- Voltaire (1694-1778) on his deathbed in response to a priest asking that he renounce Satan. . "Fill the unforgiving minute with sixty seconds worth of distance run." -- Rudyard Kipling (1865-1936) . "He would make a lovely corpse." -- Charles Dickens (1812-1870) . "I've just learned about his illness. Let's hope it's nothing trivial." -- Irvin S. Cobb . "I worship the quicksand he walks in." -- Art Buchwald . "Wagner's music is better than it sounds." -- Mark Twain (1835-1910) . "A poem is never finished, only abandoned." -- Paul Valery (1871-1945) . "We are not retreating - we are advancing in another Direction." -- General Douglas MacArthur (1880-1964) . "If you were plowing a field, which would you rather use? Two strong oxen or 1024 chickens?" -- Seymour Cray (1925-1996), father of supercomputing . "#3 pencils and quadrille pads." -- Seymoure Cray (1925-1996) when asked what CAD tools he used to design the Cray I supercomputer; he also recommended using the back side of the pages so that the lines were not so dominant. . "I just bought a Mac to help me design the next Cray." -- Seymoure Cray (1925-1996) when was informed that Apple Inc. had recently bought a Cray supercomputer to help them design the next Mac. . "Your Highness, I have no need of this hypothesis." -- Pierre Laplace (1749-1827), to Napoleon on why his works on celestial mechanics make no mention of God. . "I choose a block of marble and chop off whatever I don't need." -- Francois-Auguste Rodin (1840-1917), when asked how he managed to make his remarkable statues . "The man who does not read good books has no advantage over the man who cannot read them." -- Mark Twain (1835-1910) . "The truth is more important than the facts." -- Frank Lloyd Wright (1868-1959) . "Research is what I'm doing when I don't know what I'm doing." -- Wernher Von Braun (1912-1977) . "There are only two tragedies in life: one is not getting what one wants, and the other is getting it." -- Oscar Wilde (1854-1900) . "There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle." -- Albert Einstein (1879-1955) . "Be tolerant of the human race. Your whole family belongs to it -- and some of your spouse's family too." -- Anonymous. . "Mother-in-law = A woman who destroys her son-in-law's peace of mind by giving him a piece of hers." -- Anonymous. . "Why do grandparents and grandchildren get along so well? They have the same enemy -- the mother." -- Claudette Colbert. . "The first half of our life is ruined by our parents and the second half by our children." -- Clarence Darrow. . "Honolulu, it's got everything. Sand for the children, sun for the wife, and sharks for the wife's mother." -- Ken Dodd. . "A coward is a hero with a wife, kids, and a mortgage." -- Marvin Kitman. . "A man can't get rich if he takes proper care of his family." - Navaho saying. . "Giving birth is like taking your lower lip and forcing it over your head." - Carol Burnett. . "You have to stay in shape. My grandmother, she started walking five miles a day when she was 60. She's 97 today and we don't know where she is!" -- Ellen DeGeneres. . "I'm not into working out. My philosophy: No pain, no pain." -- Carol Leifer. . "You have a cough? Go home tonight, eat a whole box of Ex-Lax -- tomorrow you'll be afraid to cough." -- Pearl Williams. . "Now comes the mystery" -- Henry Ward Beecher, dying words, March 8, 1887 . "I don't feel good." -- Luther Burbank, dying words . "The nourishment is palatable" -- Emily Dickinson, dying words . "Dieu me pardonnera. C'est son métier." Translation: God forgive me. It's his job. -- Heinrich Heine, dying words. . "Go on, get out. Last words are for fools who haven't said enough." -- Karl Marx, dying words to his housekeeper. . "Why yes -- a bulletproof vest." -- James Rodges, murderer, on his final request before the firing squad. . "They couldn't hit an elephant at this dist--" -- John B. Sedwick, general, dying words, 1864 . "I still live." -- Daniel Webster, dying words . "Go away...I'm alright." -- H.G.Wells, dying words . "Friends applaud, the Comedy is over." -- Ludwig von Beethoven, dying words . "Ah well, then I suppose I shall have to die beyond my means." -- Oscar Wilde, dying words . "I agree with the reforms, but I want nothing to change" -- Ion Luca Caragiale, Romanian playwriter, 1880 . "Far too many development shops are run by fools who succeed despite their many failings." -- Brion L. Webster . "Never raise your hands to your kids. It leaves your groin unprotected." -- Red Button . "I'm in shape. Round is a shape." -- George Carlin . "Do illiterate people get the full effect of alphabet soup?" -- John Mendoza . "I've always wanted to be somebody, but I should have been more specific." -- George Carlin . "Ever notice when you blow in a dog's face he gets mad at you, but when you take him in a car he sticks his head out the window?" -- George Carlin . "Ever notice that anyone going slower than you is an idiot, but anyone going faster is a maniac?" -- George Carlin . "I have six locks on my door, all in a row. When I go out, I lock every other one. I figure no matter how long somebody stands there picking the locks, they are always locking three of them." -- George Carlin . "One out of every three Americans is suffering from some form of mental illness. Think of two of your best friends. If they are OK, then it must be you." -- George Carlin . "They show you how detergents take out bloodstains. I think if you've got a T-shirt with bloodstains all over it, maybe your laundry isn't your biggest problem." -- George Carlin . "Ask people why they have deer heads on their walls and they tell you it's because they're such beautiful animals. I think my wife is beautiful, but I only have photographs of her on the wall." -- George Carlin . "A lady came up to me on the street, pointed at my suede jacket and said, 'Don't you know a cow was murdered for that jacket?' I said 'I didn't know there were any witnesses. Now I'll have to kill you too'." -- George Carlin . "Future historians will be able to study at the Jimmy Carter Library, the Gerald Ford Library, the Ronald Reagan Library, and the Bill Clinton Adult Bookstore." -- George Carlin . "Benny Goodman plays the clarinet. I play music." -- Artie Shaw . "If you were my husband, I'd give you poison." -- Lady Astor to Churchill "If you were my wife, I'd take it." -- Curchill to Lady Astor . "Sir, you will either die of the pox or on the gallows." -- The Earl Of Sandwich to John Wilkes "That depends, sir, On whether I embrace your mistress or your principles" -- John Wilkes to the Earl of Sandwich . "He had delusions of adequacy." -- Walter Kerr . "He has all the virtues I dislike and none of the vices I admire." -- Winston Churchill . "A modest little person, with much to be modest about." -- Winston Churchill . "I have never killed a man, but I have read many obituaries with great pleasure." -- Clarence Darrow . "He has never been known to use a word that might send a reader to the dictionary." -- William Faulkner about Ernest Hemingway "Poor Faulkner. Does he really think big emotions come from big words?" -- Ernest Hemingway about William Faulkner . "Thank you for sending me a copy of your book; I'll waste no time reading it." -- Moses Hadas . "He can compress the most words into the smallest idea of any man I know." -- Abraham Lincoln . "I didn't attend the funeral, but I sent a nice letter saying I approved of it." -- Mark Twain . "He has no enemies, but is intensely disliked by his friends." -- Oscar Wilde . "I am enclosing two tickets to the first night of my new play; bring a friend... if you have one." -- George Bernard Shaw to Winston Churchill "Cannot possibly attend first night, will attend second... if there is one." - Winston Churchill, in response. . "I feel so miserable without you; it's almost like having you here." -- Stephen Bishop . "He is a self-made man and worships his creator." -- John Bright . "I've just learned about his illness. Let's hope it's nothing trivial." -- Irvin S. Cobb . "He is not only dull himself, he is the cause of dullness in others." -- Samuel Johnson . "He is simply a shiver looking for a spine to run up." -- Paul Keating . "There's nothing wrong with you that reincarnation won't cure." -- Jack E. Leonard . "He has the attention span of a lightning bolt." -- Robert Redford . "They never open their mouths without subtracting from the sum of human knowledge." -- Thomas Brackett Reed . "In order to avoid being called a flirt, she always yielded easily." -- Charles, Count Talleyrand . "He loves nature in spite of what it did to him." -- Forrest Tucker . "Why do you sit there looking like an envelope without any address on it?" -- Mark Twain . "His mother should have thrown him away and kept the stork." -- Mae West . "Some cause happiness wherever they go; others, whenever they go." -- Oscar Wilde . "He uses statistics as a drunken man uses lamp-posts... for support rather than illumination." -- Andrew Lang (1844-1912) . "He has Van Gogh's ear for music." -- Billy Wilder . Lady Astor: "Mr. Churchill, you're drunk!" Winston Churchill: "Yes, and you, Madam, are ugly. But tomorrow, I shall be sober." . "I liked your opera. I think I will set it to music." -- Beethoven to a fellow composer . "I must say Bernard Shaw is greatly improved by music." -- T.S. Elliot referring to 'My Fair Lady' . "The best time I ever had with Joan Crawford was when I pushed her down the stairs in 'Whatever Happened to Baby Jane?'" -- Bette Davis . "Why am I so good at playing bitches? I think it's because I'm not a bitch. Maybe that's why Miss Crawford always plays ladies." -- Bette Davis . "Two things should be cut - the second act and the child's throat." -- Noel Coward on a dull play with an annoying child star . "There are two ways of disliking poetry; one way is to dislike it, the other is to read Pope." -- Oscar Wilde on Alexander Pope . "This is not a novel to be tossed aside lightly. It should be thrown with great force." -- Book review by Dorothy Parker . "That's not writing; That's typing." -- Truman Capote on Jack Kerouac . "[A book by Henry James] is like a church lit but without a congregation to distract you, with every light and line focused on the high altar. And on the altar, very reverently placed, intensely there, is a dead kitten, an eggshell, a bit of string." -- H.G. Wells on Henry James . "His book is much harder to read than it must have been to write." -- Christopher Hitchens about Bob Woodwars's new book, 'State of Denial' . "Let's not bring age into this discussion. I will not let my opponent's youth and inexperience become an issue." -- Ronald Reagan on Walter Mondale . "Properly read, the Bible is the most potent force for atheism ever conceived." -- Isaac Asimov variety-0.8.3/variety/plugins/downloaders/000077500000000000000000000000001362063646600207065ustar00rootroot00000000000000variety-0.8.3/variety/plugins/downloaders/ConfigurableImageSource.py000066400000000000000000000051621362063646600260100ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import abc from variety.plugins.downloaders.ImageSource import ImageSource class ConfigurableImageSource(ImageSource, metaclass=abc.ABCMeta): """ Implements configurable/searchable image sources. """ @abc.abstractmethod def validate(self, config): """ Given a source config, validates whether images can be fetche for this config. As part of the validation, performs config normalization and initial lookup calls and returns a "final" config that will be persisted. Returns a tuple (config_to_persist, error_message) If error_message is None, the config is considered valid and a source is added. If error_message is not None, it is shown as an error in UI and a new source is not added. Example valid: return formatted(query), None Example invalid: return query, _('Not a proper XYZ query') @:param config the search query, URL or other config string for the new source @:return tuple (config_to_persist, error_message_or_none) """ pass @abc.abstractmethod def create_downloader(self, config): """ Creates a Downloader for the given config :param config: the downloader config :return: a Downloader object """ pass @abc.abstractmethod def get_ui_instruction(self): """ Long instruction to show in the "Add..." dialog :return: long instruction """ pass @abc.abstractmethod def get_ui_short_instruction(self): """ Short instructiton to show in the "Add..." dialog in front of the input field :return: short instruction """ pass @abc.abstractmethod def get_ui_short_description(self): """ Source description to show in the "Add..." menu popup :return: short description """ pass variety-0.8.3/variety/plugins/downloaders/DefaultDownloader.py000066400000000000000000000226511362063646600246710ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import abc import collections import logging import os from variety.plugins.downloaders.Downloader import Downloader from variety.Util import Util logger = logging.getLogger("variety") QueueItem = collections.namedtuple("QueueItem", ["origin_url", "image_url", "extra_metadata"]) SAFE_MODE_BLACKLIST = { # Sample of Wallhaven and Flickr tags that cover most not-fully-safe images "woman", "women", "model", "models", "boob", "boobs", "tit", "tits", "lingerie", "bikini", "bikini model", "sexy", "bra", "bras", "panties", "face", "faces", "legs", "feet", "pussy", "ass", "asses", "topless", "long hair", "lesbians", "cleavage", "brunette", "brunettes", "redhead", "redheads", "blonde", "blondes", "high heels", "miniskirt", "stockings", "anime girls", "in bed", "kneeling", "girl", "girls", "nude", "naked", "people", "fuck", "sex", } class DefaultDownloader(Downloader, metaclass=abc.ABCMeta): def __init__(self, source, config=None): super().__init__(source, config) self.queue = [] @abc.abstractmethod def fill_queue(self): """ Subclasses should implement this method. It should return one or more QueueItems. This serves as a cache so that downloaders can prepare multiple items for downloading using fewer API/scrape calls. The size of the queue should be a compromise between making fewer API calls and keeping some variety in the consecutive downloads. :return: a list with one or more QueueItems """ pass def download_queue_item(self, queue_item): """ Unpacks the queue item (as populated by fill_queue) into arguments to pass to save_locally, and calls it. By default this assumes QueueItems are returned, but subclasses may choose a different represetnation for the queue items, and may also want to perform additional actions before calling save_locally (e.g. additional data fetching and parsing). Override if some work needs to be done on every queue item before it can be downloaded. :param queue_item: the queue item, as populated into the queue by fill_queue :return whatever the call to save_locally returns i.e. either the local file path in case of success, or None otherwise """ origin_url, image_url, extra_metadata = queue_item return self.save_locally(origin_url, image_url, extra_metadata=extra_metadata) def download_one(self): """ Provides a default implementation which relies on fill_queue, and takes the image source throttling into account. :return: path to the newly downloaded file, or None if the download attempt ws unsuccessful """ if self.target_folder is None: raise Exception("update_download_folder was not called before downloading") name = self.get_source_name() max_downloads_per_hour, max_queue_fills_per_hour = self.source.get_throttling() if not self.source.is_download_allowed(): logger.info( lambda: "%s: max_downloads_per_hour of %d reached, skip this attempt" % (name, max_downloads_per_hour) ) return None logger.info(lambda: "%s: Downloading an image, config: %s" % (name, self.config)) logger.info(lambda: "%s: Queue size: %d" % (name, len(self.queue))) if not self.queue: if not self.source.is_fill_queue_allowed(): logger.info( lambda: "%s: Queue empty, but max_queue_fills_per_hour of %d reached, " "will try again later" % (name, max_queue_fills_per_hour) ) return None self.source.register_fill_queue() logger.info(lambda: "%s: Filling queue" % name) items = self.fill_queue() for item in items: self.queue.append(item) if not self.queue: logger.info(lambda: "%s: Queue still empty after fill request" % name) return None else: logger.info(lambda: "%s: Queue populated with %d URLs" % (name, len(self.queue))) self.source.register_download() queue_item = self.queue.pop() return self.download_queue_item(queue_item) def is_in_downloaded(self, image_url): return os.path.exists(self._local_filepath(url=image_url)) def is_in_banned(self, origin_url): return self.get_variety() and origin_url in self.get_variety().banned def is_safe_mode_enabled(self): return self.get_variety() and self.get_variety().options.safe_mode def is_unsafe(self, extra_metadata): if self.is_safe_mode_enabled() and "keywords" in extra_metadata: blacklisted = set(k.lower() for k in extra_metadata["keywords"]) & SAFE_MODE_BLACKLIST return (True, blacklisted) if len(blacklisted) > 0 else (False, []) return False, [] def is_size_inadequate(self, width, height): return self.get_variety() and not self.get_variety().size_ok(width, height) def is_in_favorites(self, url): return self.get_variety() and os.path.exists( os.path.join(self.get_variety().options.favorites_folder, Util.get_local_name(url)) ) def save_locally( self, origin_url, image_url, source_type=None, source_location=None, source_name=None, force_download=False, extra_metadata=None, local_filename=None, request_headers=None, request_kwargs=None, ): source_type = source_type or self.get_source_type() source_name = source_name or self.get_source_name() source_location = source_location or self.get_source_location() or self.get_description() if not force_download and self.is_in_banned(origin_url): logger.info(lambda: "URL " + origin_url + " is banned, skip downloading") return None try: os.makedirs(self.target_folder) except Exception: pass if origin_url.startswith("//"): origin_url = "https:" + origin_url if image_url.startswith("//"): image_url = origin_url.split("//")[0] + image_url # we will download the contents to a ".partial" file, then rename it to the proper name if not local_filename: local_filename = self.get_local_filename(url=image_url) local_filepath = self._local_filepath(local_filename=local_filename) local_filepath_partial = local_filepath + ".partial" logger.info(lambda: "Origin URL: " + origin_url) logger.info(lambda: "Image URL: " + image_url) logger.info(lambda: "Local path: " + local_filepath) if not force_download and os.path.exists(local_filepath): logger.info(lambda: "File already exists, skip downloading") return None is_unsafe, blacklisted = self.is_unsafe(extra_metadata or {}) if is_unsafe: logger.info( lambda: "Skipping non-safe download %s due to blacklisted keywords (%s). " "Is the source %s:%s suitable for Safe mode?" % (origin_url, str(blacklisted), source_type, source_location) ) return None try: r = Util.request( image_url, stream=True, headers=request_headers, **(request_kwargs or {}) ) with open(local_filepath_partial, "wb") as f: Util.request_write_to(r, f) except Exception as e: logger.info( lambda: "Download failed from image URL: %s (source location: %s) " % (image_url, source_location) ) Util.safe_unlink(local_filepath_partial) raise e if not Util.is_image(local_filepath_partial, check_contents=True): logger.info(lambda: "Downloaded data was not an image, image URL might be outdated") Util.safe_unlink(local_filepath_partial) return None metadata = { "sourceType": source_type, "sourceName": source_name, "sourceLocation": source_location, "sourceURL": origin_url, "imageURL": image_url, } metadata.update(extra_metadata or {}) Util.write_metadata(local_filepath_partial, metadata) # file rename is an atomic operation, so we should never end up with partial downloads os.rename(local_filepath_partial, local_filepath) logger.info(lambda: "Download complete") return local_filepath variety-0.8.3/variety/plugins/downloaders/Downloader.py000066400000000000000000000166531362063646600233710ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import abc import json import os from variety.Util import Util class Downloader(abc.ABC): def __init__(self, source, config=None): """ Create a downloader for an image source :param source: the image source this downloader is associated with :param config: optional, see get_config() """ super().__init__() self.source = source self.config = config self.target_folder = None # initialized post construction by update_download_folder self.state = None def get_variety(self): """ :return: the VarietyWindow instance, if set in the source, else None """ return self.source.get_variety() def update_download_folder(self, global_download_folder): """ Called after initialization, once the VarietyWindow instance is filled in, sets the target folder according to the current options. Also called if downloads folder is changed in settings. :param global_download_folder the "global" download folder as set in Variety's preferences Our target_folder will be a subfolder to that one, named depending on what get_folder_name() returns. :return the target_folder for this particular downloader """ filename = self.get_folder_name() if len(filename) + len(global_download_folder) > 160: filename = filename[: (150 - len(global_download_folder))] + Util.md5(filename)[:10] self.target_folder = os.path.join(global_download_folder, filename) self._load_state() return self.target_folder def _load_state(self): try: with open(os.path.join(self.target_folder, "state.json")) as f: self.state = json.load(f) except Exception: self.state = {} def save_state(self): """ Persists the state as json inside the downloader's target folder. state is a dict that is used internally by Variety, but the downloaders can also use it keeping any sort of state is necessary for the downloader. """ if self.target_folder is None: raise Exception("update_download_folder was not called before save_state") with open(os.path.join(self.target_folder, "state.json"), "w") as f: json.dump(self.state, f) def get_local_filename(self, url): """ Returns the local file name under which to save a remote image (at URL url). By default this is Util.get_local_name(url), but subclasses can override. :param url: the URL of the image :return: the full local path, under the current target_folder """ return Util.get_local_name(url) def _local_filepath(self, url=None, local_filename=None): """ Returns the local file path where to save a remote image (at URL url). By default this is os.path.join(self.target_folder, self.get_local_filename(url)). Subclasses are discouraged from overriding this method, override get_local_filename() instead so that downloaded files are kept under the downloader's target_folder. :param url: the URL of the image :param local_filename: what local filename to use instead of extracting it from the URL. Pass None to use self.get_local_filename(url) :return: the full local path, under the current target_folder """ if url is None and local_filename is None: raise ValueError("One of url or local_filename must be specified") if self.target_folder is None: raise Exception("update_download_folder was not called before downloading") filename = local_filename if local_filename else self.get_local_filename(url) return os.path.join(self.target_folder, filename) def get_source(self): """ Returns the IImageSource associated with this downloader :return: IImageSource """ return self.source def get_source_type(self): """ :return: the image source's source type """ return self.source.get_source_type() def get_source_name(self): """ :return: the image source's source name """ return self.source.get_source_name() def get_source_location(self): """ What to save as sourceLocation in the images' metadata. By default this is this downloader's config string. Override in SimpleDownloaders to return a non-null string. :return: the source location to be saved in images """ return self.get_config() def get_description(self): """ User-friendly description of this downloader to show in UI (in the list of sources). E.g. "Downloads random images from site X", or "Images from Flickr user XXX" :return: description """ return self.config def get_config(self): """ Returns the config string used to create this downloader, e.g. a search keyword, or URL :return: the config string, will be None for non-configurable sources """ return self.config def get_identifier(self): return self.target_folder def get_folder_name(self): """ How should the folder be named where images from this source are downloaded to :return: folder name (just name, not full path) """ if self.config: return self.get_source_type() + "_" + Util.convert_to_filename(self.config) else: return self.get_source_name() def get_refresh_interval_seconds(self): """ Refresher downloaders can download one and the same image URL on a regular basis. Returning a positive integer here instructs Variety to initiate regular downloads and wallpaper changes when using this downloader. Images downloaded by refreshers MUST contain the string "--refreshable" in the name - this is the way Variety will know these images can be set as wallpaper again and again. :return: False by defualt, override to return True when implementing refreshers :return: None, or a positive number of seconds """ return None def is_refresher(self): """ Checks if this is a "refresher" plugin, i.e. refresh_interval_seconds is not None """ return self.get_refresh_interval_seconds() is not None @abc.abstractmethod def download_one(self): """ Downloads a single image. DefaultDownloader provides a reference implementation and most plugins should inherit DefaultDownloader instead of implementing this method. :return: the downloaded file path, or None """ pass variety-0.8.3/variety/plugins/downloaders/ImageSource.py000066400000000000000000000157661362063646600235020ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import abc import collections import logging import time from datetime import timedelta from variety.plugins.IVarietyPlugin import IVarietyPlugin logger = logging.getLogger("variety") Throttling = collections.namedtuple( "Throttling", ["max_downloads_per_hour", "max_queue_fills_per_hour"] ) class ImageSource(IVarietyPlugin, metaclass=abc.ABCMeta): def __init__(self): super().__init__() self._last_download_times = [] self._last_queue_fill_times = [] self.variety = None def set_variety(self, variety): """ Sets the VarietyWindow instance. This is called after Jumble creates the instance, before it is actually used. :param variety: the instance of VarietyWindow """ self.variety = variety def get_variety(self): """ Returns the VarietyWindow instance, if set via set_variety(), or None. This is available before the source is actually used. :return the instance of VarietyWindow """ return self.variety @abc.abstractmethod def get_source_type(self): """ Returns a key for this source that will be used to identify it in configuration files, and will be saved in image metadata under Xmp.variety.sourceType. Variety will use this source type to find which plugin can handle a particular saved image source configuration, so this should not collide between different image source plugins. :return: source type, e.g. "flickr", "unsplash", etc. """ pass def get_source_name(self): """ Returns the value that will go into Xmp.variety.sourceName in image metadata. This will also be shown in UI. This could be the name of the service that is used to fetch images, e.g. Flickr. Default implementation is to return source_type, with uppercase first letter. :return: source name, e.g. "Flickr", "Unsplash", etc. """ source_type = self.get_source_type() return source_type[0].upper() + source_type[1:] def on_image_set_as_wallpaper(self, img, meta): """ Called when a wallpaper downloaded from this source was used as a wallpaper. This can be used to call back the image provider for stats purposes. :param img path to the image file :param meta image metadata """ pass def on_image_favorited(self, img, meta): """ Called when a wallpaper downloaded from this source was copied or moved to favorites. This can be used to call back the image provider for stats purposes. :param img path to the image file :param meta image metadata """ pass def get_default_throttling(self): """ Throttling serves to avoid overloading servers when multiple Variety users use the source simultaneously. It is normally controlled via a remote config, but defaults should be provided for the cases when the remote config is not set or cannot be fetched. All downloaders for the same source are throttled together. :return: a Throttling namedtuple """ return Throttling(max_downloads_per_hour=None, max_queue_fills_per_hour=None) def get_server_options_key(self): """ Key under the the server-side throttling options where the configs for this source reside. By default it is the same as the source type. :return: key in remote server options for this source, e.g. "unsplash_v2" """ return self.get_source_type() def get_server_options(self): """ Returns the server options for this source. The default implementation reads from get_variety().server_options, i.e. it uses Variety's central serverside options, but you could override this method to read from elsewhere. :return: remotely-configured options for this image source """ return self.get_variety().server_options[self.get_server_options_key()] def get_throttling(self): """ Returns the actual throttling, taking remote configuration into account (if available) """ defaults = self.get_default_throttling() max_downloads_per_hour, max_queue_fills_per_hour = defaults name = self.get_source_name() try: logger.info(lambda: "{}: parsing serverside options".format(name)) options = self.get_server_options() logger.info( lambda: "{} serverside options: {}".format(self.get_source_name(), str(options)) ) except Exception: logger.info( lambda: "Could not parse {} serverside options, using defaults {}, {}".format( name, max_downloads_per_hour, max_queue_fills_per_hour ) ) return defaults try: max_downloads_per_hour = int(options["max_downloads_per_hour"]) except Exception: pass try: max_queue_fills_per_hour = int(options["max_queue_fills_per_hour"]) except Exception: pass return Throttling(max_downloads_per_hour, max_queue_fills_per_hour) def _count_last_hour_downloads(self): now = time.time() self._last_download_times = [t for t in self._last_download_times if now - t < 3600] return len(self._last_download_times) def is_download_allowed(self): max_downloads_per_hour, _ = self.get_throttling() return ( max_downloads_per_hour is None or self._count_last_hour_downloads() < max_downloads_per_hour ) def register_download(self): self._last_download_times.append(time.time()) def _count_last_hour_queue_fills(self): now = time.time() self._last_queue_fill_times = [t for t in self._last_queue_fill_times if now - t < 3600] return len(self._last_queue_fill_times) def is_fill_queue_allowed(self): _, max_queue_fills_per_hour = self.get_throttling() return ( max_queue_fills_per_hour is None or self._count_last_hour_queue_fills() < max_queue_fills_per_hour ) def register_fill_queue(self): self._last_queue_fill_times.append(time.time()) variety-0.8.3/variety/plugins/downloaders/SimpleDownloader.py000066400000000000000000000024221362063646600245300ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE import abc from variety.plugins.downloaders.DefaultDownloader import DefaultDownloader from variety.plugins.downloaders.ImageSource import ImageSource class SimpleDownloader(ImageSource, DefaultDownloader, metaclass=abc.ABCMeta): """ Base class for non-configurable "singleton" downloaders, where the same object instance serves as both the ImageSource and the Downloader. """ def __init__(self): ImageSource.__init__(self) DefaultDownloader.__init__(self, source=self) self.queue = [] variety-0.8.3/variety/plugins/downloaders/__init__.py000066400000000000000000000000001362063646600230050ustar00rootroot00000000000000variety-0.8.3/variety/profile.py000066400000000000000000000032401362063646600167150ustar00rootroot00000000000000import os from variety.Util import Util DEFAULT_PROFILE_PATH = "~/.config/variety/" __profile_path = DEFAULT_PROFILE_PATH def set_profile_path(profile_path): if not profile_path: profile_path = DEFAULT_PROFILE_PATH # if just a name is passed instead of a full path, put it under ~/.config/variety-profiles if not "/" in profile_path: profile_path = "~/.config/variety-profiles/{}".format(profile_path) # make sure profile path has a trailing slash if not profile_path.endswith("/"): profile_path += "/" global __profile_path __profile_path = profile_path def get_profile_path(expanded=True): global __profile_path return os.path.expanduser(__profile_path) if expanded else __profile_path def get_profile_short_name(): return os.path.basename(get_profile_path()[:-1]) def get_profile_wm_class(): return "Variety" + ("" if is_default_profile() else " (Profile: {})".format(get_profile_path())) def is_default_profile(): """ Are we using the default profile or a custom profile? """ return os.path.normpath(get_profile_path()) == os.path.normpath( os.path.expanduser(DEFAULT_PROFILE_PATH) ) def get_profile_id(): """ Returns a dbus-and-filename-friendly identificator of the profile path """ return Util.md5(os.path.normpath(get_profile_path()))[:10] def get_desktop_file_name(): if is_default_profile(): return "variety.desktop" else: return "variety-{}-{}.desktop".format(get_profile_short_name(), get_profile_id()) def get_autostart_file_path(): return os.path.join(os.path.expanduser("~/.config/autostart"), get_desktop_file_name()) variety-0.8.3/variety_lib/000077500000000000000000000000001362063646600155325ustar00rootroot00000000000000variety-0.8.3/variety_lib/AboutDialog.py000066400000000000000000000037601362063646600203040ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE from gi.repository import Gtk # pylint: disable=E0611 from variety.profile import get_profile_wm_class from .helpers import get_builder class AboutDialog(Gtk.AboutDialog): __gtype_name__ = "AboutDialog" def __new__(cls): """Special static method that's automatically called by Python when constructing a new instance of this class. Returns a fully instantiated AboutDialog object. """ builder = get_builder("AboutVarietyDialog") new_object = builder.get_object("about_variety_dialog") new_object.finish_initializing(builder) return new_object def finish_initializing(self, builder): """Called while initializing this instance in __new__ finish_initalizing should be called after parsing the ui definition and creating a AboutDialog object with it in order to finish initializing the start of the new AboutVarietyDialog instance. Put your initialization code in here and leave __init__ undefined. """ # Get a reference to the builder and set up the signals. self.builder = builder self.ui = builder.get_ui(self) self.set_wmclass(get_profile_wm_class(), get_profile_wm_class()) variety-0.8.3/variety_lib/Builder.py000066400000000000000000000262701362063646600175010ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE """Enhances builder connections, provides object to access glade objects""" import functools import inspect import logging from xml.etree.cElementTree import ElementTree from gi.repository import GObject, Gtk # pylint: disable=E0611 logger = logging.getLogger("variety_lib") # this module is big so uses some conventional prefixes and postfixes # *s list, except self.widgets is a dictionary # *_dict dictionary # *name string # ele_* element in a ElementTree # pylint: disable=R0904 # the many public methods is a feature of Gtk.Builder class Builder(Gtk.Builder): """ extra features connects glade defined handler to default_handler if necessary auto connects widget to handler with matching name or alias auto connects several widgets to a handler via multiple aliases allow handlers to lookup widget name logs every connection made, and any on_* not made """ def __init__(self): Gtk.Builder.__init__(self) self.widgets = {} self.glade_handler_dict = {} self.connections = [] self._reverse_widget_dict = {} # pylint: disable=R0201 # this is a method so that a subclass of Builder can redefine it def default_handler(self, handler_name, filename, *args, **kwargs): """helps the apprentice guru glade defined handlers that do not exist come here instead. An apprentice guru might wonder which signal does what he wants, now he can define any likely candidates in glade and notice which ones get triggered when he plays with the project. this method does not appear in Gtk.Builder""" logger.debug( """tried to call non-existent function:%s() expected in %s args:%s kwargs:%s""", handler_name, filename, args, kwargs, ) # pylint: enable=R0201 def get_name(self, widget): """ allows a handler to get the name (id) of a widget this method does not appear in Gtk.Builder""" return self._reverse_widget_dict.get(widget) def add_from_file(self, filename): """parses xml file and stores wanted details""" Gtk.Builder.add_from_file(self, filename) # extract data for the extra interfaces tree = ElementTree() tree.parse(filename) ele_widgets = tree.getiterator("object") for ele_widget in ele_widgets: name = ele_widget.attrib.get("id") if not name: continue widget = self.get_object(name) # populate indexes - a dictionary of widgets self.widgets[name] = widget # populate a reversed dictionary self._reverse_widget_dict[widget] = name # populate connections list ele_signals = ele_widget.findall("signal") connections = [ (name, ele_signal.attrib["name"], ele_signal.attrib["handler"]) for ele_signal in ele_signals ] if connections: self.connections.extend(connections) ele_signals = tree.getiterator("signal") for ele_signal in ele_signals: self.glade_handler_dict.update({ele_signal.attrib["handler"]: None}) def connect_signals(self, callback_obj): """connect the handlers defined in glade reports successful and failed connections and logs call to missing handlers""" filename = inspect.getfile(callback_obj.__class__) callback_handler_dict = dict_from_callback_obj(callback_obj) connection_dict = {} connection_dict.update(self.glade_handler_dict) connection_dict.update(callback_handler_dict) for item in connection_dict.items(): if item[1] is None: # the handler is missing so reroute to default_handler handler = functools.partial(self.default_handler, item[0], filename) connection_dict[item[0]] = handler # replace the run time warning logger.warn("expected handler '%s' in %s", item[0], filename) # connect glade define handlers Gtk.Builder.connect_signals(self, connection_dict) # let's tell the user how we applied the glade design for connection in self.connections: widget_name, signal_name, handler_name = connection logger.debug( "connect builder by design '%s', '%s', '%s'", widget_name, signal_name, handler_name ) def get_ui(self, callback_obj=None, by_name=True): """Creates the ui object with widgets as attributes connects signals by 2 methods this method does not appear in Gtk.Builder""" result = UiFactory(self.widgets) # Hook up any signals the user defined in glade if callback_obj is not None: # connect glade define handlers self.connect_signals(callback_obj) if by_name: auto_connect_by_name(callback_obj, self) return result # pylint: disable=R0903 # this class deliberately does not provide any public interfaces # apart from the glade widgets class UiFactory: """ provides an object with attributes as glade widgets""" def __init__(self, widget_dict): self._widget_dict = widget_dict for (widget_name, widget) in widget_dict.items(): setattr(self, widget_name, widget) # Mangle any non-usable names (like with spaces or dashes) # into pythonic ones cannot_message = """cannot bind ui.%s, name already exists consider using a pythonic name instead of design name '%s'""" consider_message = """consider using a pythonic name instead of design name '%s'""" for (widget_name, widget) in widget_dict.items(): pyname = make_pyname(widget_name) if pyname != widget_name: if hasattr(self, pyname): logger.debug(cannot_message, pyname, widget_name) else: logger.debug(consider_message, widget_name) setattr(self, pyname, widget) def __iter__(self): """Implements iteration, i.e. 'for o in self' """ return self._widget_dict.values() def __getitem__(self, name): """Provides access as dictionary where name might be non-pythonic""" return self._widget_dict[name] # pylint: enable=R0903 def make_pyname(name): """ mangles non-pythonic names into pythonic ones""" pyname = "" for character in name: if character.isalpha() or character == "_" or (pyname and character.isdigit()): pyname += character else: pyname += "_" return pyname # Until bug https://bugzilla.gnome.org/show_bug.cgi?id=652127 is fixed, we # need to reimplement inspect.getmembers. GObject introspection doesn't # play nice with it. def getmembers(obj, check): members = [] for k in dir(obj): try: attr = getattr(obj, k) except: continue if check(attr): members.append((k, attr)) members.sort() return members def dict_from_callback_obj(callback_obj): """a dictionary interface to callback_obj""" methods = getmembers(callback_obj, inspect.ismethod) aliased_methods = [x[1] for x in methods if hasattr(x[1], "aliases")] # a method may have several aliases # ~ @alias('on_btn_foo_clicked') # ~ @alias('on_tool_foo_activate') # ~ on_menu_foo_activate(): # ~ pass alias_groups = [(x.aliases, x) for x in aliased_methods] aliases = [] for item in alias_groups: for alias in item[0]: aliases.append((alias, item[1])) dict_methods = dict(methods) dict_aliases = dict(aliases) results = {} results.update(dict_methods) results.update(dict_aliases) return results def auto_connect_by_name(callback_obj, builder): """finds handlers like on__ and connects them i.e. find widget,signal pair in builder and call widget.connect(signal, on__)""" callback_handler_dict = dict_from_callback_obj(callback_obj) for item in builder.widgets.items(): (widget_name, widget) = item signal_ids = [] try: widget_type = type(widget) while widget_type: signal_ids.extend(GObject.signal_list_ids(widget_type)) widget_type = GObject.type_parent(widget_type) except RuntimeError: # pylint wants a specific error pass signal_names = [GObject.signal_name(sid) for sid in signal_ids] # Now, automatically find any the user didn't specify in glade for sig in signal_names: # using convention suggested by glade sig = sig.replace("-", "_") handler_names = ["on_%s_%s" % (widget_name, sig)] # Using the convention that the top level window is not # specified in the handler name. That is use # on_destroy() instead of on_windowname_destroy() if widget is callback_obj: handler_names.append("on_%s" % sig) do_connect(item, sig, handler_names, callback_handler_dict, builder.connections) log_unconnected_functions(callback_handler_dict, builder.connections) def do_connect(item, signal_name, handler_names, callback_handler_dict, connections): """connect this signal to an unused handler""" widget_name, widget = item for handler_name in handler_names: target = handler_name in list(callback_handler_dict.keys()) connection = (widget_name, signal_name, handler_name) duplicate = connection in connections if target and not duplicate: widget.connect(signal_name, callback_handler_dict[handler_name]) connections.append(connection) logger.debug( "connect builder by name '%s','%s', '%s'", widget_name, signal_name, handler_name ) def log_unconnected_functions(callback_handler_dict, connections): """log functions like on_* that we could not connect""" connected_functions = [x[2] for x in connections] handler_names = list(callback_handler_dict.keys()) unconnected = [x for x in handler_names if x.startswith("on_")] for handler_name in connected_functions: try: unconnected.remove(handler_name) except ValueError: pass for handler_name in unconnected: logger.debug("Not connected to builder '%s'", handler_name) variety-0.8.3/variety_lib/PreferencesDialog.py000066400000000000000000000045751362063646600215000ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE """this dialog adjusts values in gsettings """ import logging from gi.repository import Gtk # pylint: disable=E0611 from .helpers import get_builder, get_help_uri, show_uri logger = logging.getLogger("variety_lib") class PreferencesDialog(Gtk.Dialog): __gtype_name__ = "PreferencesDialog" def __new__(cls, parent): """Special static method that's automatically called by Python when constructing a new instance of this class. Returns a fully instantiated PreferencesDialog object. """ builder = get_builder("PreferencesVarietyDialog") new_object = builder.get_object("preferences_variety_dialog") new_object.finish_initializing(builder, parent) return new_object def finish_initializing(self, builder, parent): """Called while initializing this instance in __new__ finish_initalizing should be called after parsing the ui definition and creating a PreferencesDialog object with it in order to finish initializing the start of the new PerferencesVarietyDialog instance. Put your initialization code in here and leave __init__ undefined. """ # Get a reference to the builder and set up the signals. self.parent = parent self.builder = builder self.ui = builder.get_ui(self, True) # code for other initialization actions should be added here def on_btn_close_clicked(self, widget, data=None): self.hide() self.on_destroy() def on_btn_help_clicked(self, widget, data=None): show_uri(self, "ghelp:%s" % get_help_uri("preferences")) variety-0.8.3/variety_lib/__init__.py000066400000000000000000000015761362063646600176540ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE """facade - makes variety_lib package easy to refactor while keeping its api constant""" from .varietyconfig import get_version variety-0.8.3/variety_lib/helpers.py000066400000000000000000000053571362063646600175600ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE """Helpers for an Ubuntu application.""" import logging import os from .Builder import Builder from .varietyconfig import get_data_file def get_builder(builder_file_name): """Return a fully-instantiated Gtk.Builder instance from specified ui file :param builder_file_name: The name of the builder file, without extension. Assumed to be in the 'ui' directory under the data path. """ # Look for the ui file that describes the user interface. ui_filename = get_data_file("ui", "%s.ui" % (builder_file_name,)) if not os.path.exists(ui_filename): ui_filename = None builder = Builder() builder.set_translation_domain("variety") builder.add_from_file(ui_filename) return builder # Owais Lone : To get quick access to icons and stuff. def get_media_file(media_file_name): media_filename = get_data_file("media", "%s" % (media_file_name,)) if not os.path.exists(media_filename): media_filename = None return "file:///" + media_filename def get_help_uri(page=None): # help_uri from source tree - default language here = os.path.dirname(__file__) help_uri = os.path.abspath(os.path.join(here, "..", "help", "C")) if not os.path.exists(help_uri): # installed so use gnome help tree - user's language help_uri = "variety" # unspecified page is the index.page if page is not None: help_uri = "%s#%s" % (help_uri, page) return help_uri def show_uri(parent, link): from gi.repository import Gtk # pylint: disable=E0611 screen = parent.get_screen() Gtk.show_uri(screen, link, Gtk.get_current_event_time()) def alias(alternative_function_name): """see http://www.drdobbs.com/web-development/184406073#l9""" def decorator(function): """attach alternative_function_name(s) to function""" if not hasattr(function, "aliases"): function.aliases = [] function.aliases.append(alternative_function_name) return function return decorator variety-0.8.3/variety_lib/varietyconfig.py000066400000000000000000000041371362063646600207620ustar00rootroot00000000000000# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*- ### BEGIN LICENSE # Copyright (c) 2012, Peter Levi # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranties of # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . ### END LICENSE __all__ = ["project_path_not_found", "get_data_file", "get_data_path"] try: from .variety_build_settings import __variety_data_directory__ except ImportError: # Variety's data directory. This is set by setup.py for permanent installations, but defaults to ../data # for easy development / running from source. __variety_data_directory__ = "../data" __license__ = "GPL-3" __version__ = "0.8.3" import os class project_path_not_found(Exception): """Raised when we can't find the project directory.""" def get_data_file(*path_segments): """Get the full path to a data file. Returns the path to a file underneath the data directory (as defined by `get_data_path`). Equivalent to os.path.join(get_data_path(), *path_segments). """ return os.path.join(get_data_path(), *path_segments) def get_data_path(): """Retrieve variety data path This path is by default /../data/ in trunk and /usr/share/variety in an installed version but this path is specified at installation time. """ # Get pathname absolute or relative. path = os.path.join(os.path.dirname(__file__), __variety_data_directory__) abs_data_path = os.path.abspath(path) if not os.path.exists(abs_data_path): raise project_path_not_found return abs_data_path def get_version(): return __version__