pax_global_header00006660000000000000000000000064144513201630014511gustar00rootroot0000000000000052 comment=d172c9126550c5c00a92ba15c7c3cd2da6dfb461 Pippy-76/000077500000000000000000000000001445132016300124105ustar00rootroot00000000000000Pippy-76/.flake8000066400000000000000000000001771445132016300135700ustar00rootroot00000000000000[flake8] # E402 module level import not at top of file # gi.require_version() is required before later imports ignore = E402 Pippy-76/.gitignore000066400000000000000000000010261445132016300143770ustar00rootroot00000000000000locale # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] # Distribution / packaging .Python env/ bin/ build/ develop-eggs/ dist/ eggs/ lib/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .cache nosetests.xml coverage.xml # Translations *.mo # Mr Developer .mr.developer.cfg .project .pydevproject # Rope .ropeproject # Django stuff: *.log *.pot # Sphinx documentation docs/_build/ *~ Pippy-76/COPYING000066400000000000000000000431031445132016300134440ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. Pippy-76/COPYING.GPLv3000066400000000000000000001044601445132016300143420ustar00rootroot00000000000000GNU 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. {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year} {name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 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: {project} Copyright (C) {year} {fullname} 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 .Pippy-76/COPYING.LGPLv2000066400000000000000000000614471445132016300144640ustar00rootroot00000000000000 GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library 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 Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! Pippy-76/MAINTAINERS000066400000000000000000000002241445132016300141030ustar00rootroot000000000000002013-11-29: Walter Bender 2010-05-07: Anish Mangal Formerly: Brian Jordan Pippy-76/NEWS000066400000000000000000000263371445132016300131220ustar00rootroot0000000000000076 * Check box2d installation when loading box2d example (Sparsh Goenka), * Fix undo and redo buttons remaining sensitive (Sparsh Goenka), * Fix full screen glitch (Sparsh Goenka) * Fix no source tab on resume of empty file (Shaan Subbaiah), * Fix dark mode is not set on new tabs (Shaan Subbaiah), * Verify source files names before exporting to distutils (Martin Abente), * Fix bug in demo (Sebastian Silva) 75 * Port to Python 3 - inline template and #! (Srevin Saju), * New icon (Srevin Saju), * Set focus on empty page (Martin Abente), * Port to GTK 3 - query module (Ibiam Chihurumnaya), * Remove Box2D binaries (Ibiam Chihurumnaya), * Port to Python 3 - missed #! (James Cameron), 74 * Fix keep error in a shared instance (James Cameron), * Fix harmless mime_type log error (James Cameron), * Fix data loss of notebook tab label during collaboration (James Cameron), * Use logging consistently (James Cameron), * Port CollabWrapper to Python 3 (James Cameron), * Share renaming of notebook tabs (James Cameron), * Share closing of notebook tabs (James Cameron), * Add notebook tab close confirmation alert (James Cameron), * Avoid close confirmation on unchanged examples or empty tabs (James Cameron), * Grab focus for the text view on startup (James Cameron), * Rename clear button (James Cameron). 73 * Update Collabwrapper to favour TelepathyGLib (Aniket Mathur), * Remove empty locale files (James Cameron), * Port to Python 3 (Aniket Mathur, James Cameron), * Using default acclerator (Aniket Mathur), * Define PyGObject versions before import (Aniket Mathur), * Add dark mode for embedded terminal and source view (James Cameron), * Fix example ordering (James Cameron), * Fix GTK deprecation warnings in tutorials (James Cameron), * Port from GObject to GLib in tutorials (James Cameron). 72 * Fix license inconsistencies, remove groupthink (James Cameron), * Port PyGameActivity to Sugar Toolkit for GTK+ 3 (Yash Agrawal), * Port camera example to GTK+ 3 (Rahul Bothra), * Update README (Rudra Sadhu), * Add .gitignore (Vipul Gupta), * Update metadata in activity.info (Vipul Gupta), * Add COPYING files (Vipul Gupta), * Add Screenshots (Vipul Gupta), * New translations (Chris Leonard et al). 71.1 * Fix for Fedora 18 32-bit fail to start #4926 (James Cameron) 71 * Demote unnecessary errors (James Cameron) * Add missing msgstr in po/bg.po (James Cameron) * Update repository URL (James Cameron) * Fix version warnings from Python GI API (James Cameron) * Trim headers, synch to Pootle (Chris Leonard) * fix_erase (Icarito) * New examples (Cristian Garcia) * Clear only the canvas not the code. Fixes #44. (Icarito) * Fix AttributeError on missing 'leader' attribute (György Balló) * Add Gtk and Sugar examples (Cristian Garcia) * merge Albanian strings (Chris Leonard) * merge Yoruba strings (Chris Leonard) * honor max-participants (AbrahmAB) * Copy from Vte or text buffer (James Cameron) * Rename example load to open (James Cameron) * Load examples in new tab (James Cameron) * Typo, disutils to distutils (James Cameron) * Save as library; only if writable (James Cameron) * Load example; omit En and Es directories (James Cameron) * Pong example playability (James Cameron) * Repair Gtk tutorial examples (James Cameron) * Fix missing run, stop, clear icons (James Cameron) * Use either Vte version (James Cameron) * use latest collabwrapper.py (James Cameron) 70 * More collabwrapper fixes (James Cameron) 69 * Add missing file 68 * New translations * Fixes to notebook tabs (erilyth) 67 * Updated VTE and Box2D support; cleaned up support for ARM (Ezequiel Pereira) 66 * Cleaner implementation of workaround for old Vte version detection. 65 ENHANCEMENTS: * Add tab selection shortcuts (Vikram Ahuja) * Add category (Walter Bender) BUG FIXES: * Really old versions of VTE don't have versions (Walter Bender) * Catch deprecated method: vte.fork_command_full (Martin Abente) * Fix broken Vte.Terminal.set_colors on Fedora 21 (Martin Abente) * Code style fixes, pep8 (Vikram Ahuja) * Fix tab naming problems (Vikram Ahuja) * Ignore Ctrl-w if only one tab open (Vikram Ahuja) * Fix tab name changing problems (Sakala Venkata Krishna Rohit) * Hide close button if only one tab open, fixes #4818 (Vikram Ahuja) 64 ENHANCEMENTS: * Control for font size (svineet) * Improved tab control (goutamnair7) 63 BUG FIXES: * Update some tutorials with fixes from Jean THIERY. 62 BUG FIX: * Use local import for physics/elements module (fixed import issue on SoaS). 61 ENHANCEMENT: * More hot keys (native) BUG FIXES: * Fix indentation problem in GroupThink (icarito) * Fix scrollbar in activity template (icarito) 60 ENHANCEMENT: * Added hot keys to open and close tabs (native) 59 BUG FIX: * Fixed "output of the program is not fully displayed" (SL #4661) patch by "native " * Fixed problem with importing sample code into empty notebook 58 BUG FIX: * Fixed typo in alert callback name 57 ENHANCEMENTS: * Set tab label with file name when loading examples * Set focus on text view BUG FIX: * Sort out numerous cases regarding saving/restoring tabs/tabs content * Fixed problem with sound check in sugar-build env. 56 ENHANCEMENTS: * Don't offer up sound examples if TamTam is not installed * Improvement to search for sound resources (Gonzalo Odiard) BUG FIX: * Work around problem importing sugar3.actitity to generate bundle_path 55 ENHANCEMENTS: * Export as distutils, as library, as example (Sai Vineet) * Edit on multiple tabs (Sai Vineet) * Add custom icon selection when saving as Sugar activity (Ignacio Rodriguez) * New icons BUG FIX: * keep dialog window on top after cycling between activities 54 ENHANCEMENTS: * Add confirmation alert before loading new projects (Emil Dudev) * Use open palette instead of treeview (Ignacio Rodriguez) * Show/Hide terminal widget (Sai Vineet) * Added new examples (math/pi, math/stern-brocot) * Added i18n support for examples (Jorge Alberto Gómez López) * Added tutorials (Jorge Alberto Gómez López) BUG FIXES: * Reenable copy/paste (Ignacio Rodriguez) * Fix problems with sound library * Using elements package from Physics 53 BUG FIXES: * Replaced the comma-space with a semicolon (no space) to fix a problem with parsing mime_types that prevented Pippy from opening .py files * Fixed many issues with export Sugar activity code 50 BUG FIXES: * Replaced the comma-space with a semicolon (no space) to fix a problem with parsing mime_types that prevented Pippy from opening .py files * Fixed many issues with export Sugar activity code 43 * Fix for export button + icons (Manu Quiñones) * Fix the load of already saved examples (Gonzalo Odiard) * New translations. 42 *New translations. 41 *New Translations by aman0115, samybt, aputsiaq, khaled, cjl, Myckel, mschlager *Division by zero fix for when elapsed time is zero on fast systems, OLPC#11176 James Cameron *Regen pot, pep8 fixes, Adding save as example option, based on geirea patch on SL#1496, Better way to go to TamTamEdit, updating url_update info, removing service_name, Rafael Ortiz *Update MAINTAINERS file, Anish Mangal 40 *Fix Pippy sound library on non-OLPC OS systems (SL#638) *Run graphics (pygame) examples in full screen mode (OLPC#10688) 39 * Factorial example fix * pep8 and pylint cleanup for examples 38 * Fix svg icons for Pippy * Add EditToolbar & modify toolbars for <=0.84 compatibility (Gonzalo and Anish) * Remove the 'dobject'/groupthink submodule * Switch activity.info from class to exec 37 * Remove broken slideshow until it is fixed #2054 (James Cameron) * Adapt pippy examples to screen dimensions (except xolyimpics), dev.laptop.org #9260 (James Cameron) 36 * Add COPYING based on activity.info license field, verify source file licenses, include LICENSE from Elements upstream SVN, fixes Sugarlabs.org #1571 and laptop.org #9181. (James Cameron) * Fixed pippy layout so that it doesn't break at any resolution other than 1200x900. (Anish Mangal) * Moved the start, stop and run buttons to the activity toolbar. (Anish Mangal) 35 * Add collaborative editing with Groupthink * Fix self-generated bundles by including port/ (and now groupthink/) 34 * Editor: enable autotabbing, space tabs, and tab size = 2 (to ensure compatability with examples) 33 * Include XOlympics physics game example * Use default Sugar-specified font sizes 32 * Trac #607 (SugarLabs), Font size needs to be 10 for Soas (font size of 8 for XO-1 users) 31 * Trac #350 (SugarLabs), Python path set improperly 30 * Allow playing sounds identified by full filesystem path in pippy.sound (cscott) * Resync Pippy's "Pippy metadata" with its activity.info, etc. (cscott) * New default activity icon (Madeleine Ball) * Trac #6323: Pippy's terminal and code editor font sizes are too big (brian) * Add pippy.physics package and graphics/physics example (brian) * Allow UTF-8 in Pippy source files. (cscott) 29 * Trac #8665, cont: further fixes for bundle-building. 28 * Trac #8665: Bundle-building was broken by a Sugar API change (trac #8136) 27 * Use a protected update_url. * Updated license information in files; added 'license' field. * Reverted bundlebuilder change: using .start("Pippy") makes modern bundlebuilder complain: WARNING:root:bundle_name deprecated, now comes from activity.info 26 * Bundlebuilder API change -- use .start("Pippy") instead of .start(). 25 24 23 22 * Add check to not fail on new gtksourceview2 API (erikos) 21 * Add "tree" and "snow" from Dafydd Harries. * Give a friendly error message if the audio library isn't found. 20 * Collaboration works; you get a copy of the host's source buffer. * We look for the audio library in /home/olpc as well as /usr/share. 19 * #6475: Fix crash on launch when no telepathy connection (morgs) 18 * Updated translations for release. 17 * Attempt to fix Spanish, from Sayamindu. 16 * New "slideshow" example, by cjb. 15 * "View source" now works on both Pippy and Pippy-generated activities! (From C. Scott Ananian.) 14 * Add pippy.console.size() to get rows/cols, make "thanks" use it. 13 * Pippy can now create activity bundles of user code, using the "Keep As Bundle" icon on the toolbar! (From C. Scott Ananian.) 12 * Factor out a pippy library, which programs can use with 'import pippy'. * The pygame portion of the library uses 'best practices' to avoid eating up CPU, and pauses & suspends after 20 seconds of inactivity. (From C. Scott Ananian.) 11 * New pygame examples by Henry Holtzman! "bounce", "camera", "lines", "pong". 10 * Add "guess" example (Pilar Saenz). 9 * Changed sound library location again. Add "thanks". 8 * Changed location of sound library on filesystem, for build573+. 7 * Remove the "interpreter" banner; we don't provide the help files it mentions * Add "Stop!" button to terminate the currently running code. 6 * Add "interpreter" example, by Ivan Krstić. * 55px->45px icon, resized by Eben Eliason. 5 * Update to new Tubes API * Small example changes * Added getSoundList() which returns the list of available sounds for playWave() (Flipo) 4 * Journal integration * Sound support! Thanks to Nat/TamTam team. * New examples: Sierpinski (Madeleine Ball) Recursion (Mel Chua) Fibonacci (Rafael Ortiz) 3 * Added scrollbars, replaced hippo with gtk. 2 * First public release. Pippy-76/README.md000066400000000000000000000025271445132016300136750ustar00rootroot00000000000000What is this? ============= Pippy allows the student to examine, execute, and modify simple Python programs. In addition it is possible to write Python statements to play sounds, calculate expressions, or make simple text based interactive games. How to use? =========== Pippy is part of the Sugar desktop. Please refer to; * [How to Get Sugar on sugarlabs.org](https://sugarlabs.org/), * [How to use Sugar](https://help.sugarlabs.org/), * [How to use Pippy](https://help.sugarlabs.org/pippy.html). How to upgrade? =============== On Sugar desktop systems; * use [My Settings](https://help.sugarlabs.org/my_settings.html), [Software Update](https://help.sugarlabs.org/my_settings.html#software-update). How to integrate? ================= On Debian and Ubuntu systems; ``` apt install sugar-pippy-activity ``` On Fedora systems; ``` dnf install sugar-pippy ``` Pippy depends on Python, [Sugar Toolkit](https://github.com/sugarlabs/sugar-toolkit-gtk3), Cairo, Telepathy, GTK+ 3, [GtkSourceView](https://wiki.gnome.org/Projects/GtkSourceView), Pango, Vte, Box2d and Pygame. Pippy is started by [Sugar](https://github.com/sugarlabs/sugar). Pippy is packaged by Linux distributions; * [Fedora package sugar-pippy](https://src.fedoraproject.org/rpms/sugar-pippy) * [Debian package sugar-pippy-activity](https://packages.debian.org/sugar-pippy-activity). Pippy-76/activity.py000077500000000000000000000246551445132016300146350ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # Copyright (C) 2007,2008,2010 One Laptop per Child Association, Inc. # Written by C. Scott Ananian # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA """Pippy activity helper classes.""" import logging from gettext import gettext as _ from gi import require_version require_version('Gdk', '3.0') require_version('Gtk', '3.0') from gi.repository import Gdk from gi.repository import Gtk from gi.repository import Pango try: require_version('Vte', '2.91') except: require_version('Vte', '2.90') from gi.repository import Vte from gi.repository import GLib from sugar3.activity import activity from sugar3.activity.widgets import ActivityToolbarButton from sugar3.activity.widgets import StopButton from sugar3.graphics.toolbarbox import ToolbarBox class ViewSourceActivity(activity.Activity): """Activity subclass which handles the 'view source' key.""" def __init__(self, handle, **kwargs): super(ViewSourceActivity, self).__init__(handle, **kwargs) self.__source_object_id = None # XXX: persist this across invocations? self.connect('key-press-event', self._key_press_cb) self._pid = None def _key_press_cb(self, widget, event): if Gdk.keyval_name(event.keyval) == 'XF86Start': self.view_source() return True return False def view_source(self): """Implement the 'view source' key by saving pippy_app.py to the datastore, and then telling the Journal to view it.""" if self.__source_object_id is None: from sugar3 import profile from sugar3.datastore import datastore from sugar3.activity.activity import (get_bundle_name, get_bundle_path) import os.path jobject = datastore.create() metadata = { 'title': _('%s Source') % get_bundle_name(), 'title_set_by_user': '1', 'suggested_filename': 'pippy_app.py', 'icon-color': profile.get_color().to_string(), 'mime_type': 'text/x-python', } for k, v in list(metadata.items()): jobject.metadata[k] = v # dict.update method is missing =( jobject.file_path = os.path.join(get_bundle_path(), 'pippy_app.py') datastore.write(jobject) self.__source_object_id = jobject.object_id jobject.destroy() self.journal_show_object(self.__source_object_id) def journal_show_object(self, object_id): """Invoke journal_show_object from sugar.activity.activity if it exists.""" try: from sugar3.activity.activity import show_object_in_journal show_object_in_journal(object_id) except ImportError: pass # no love from sugar. TARGET_TYPE_TEXT = 80 class VteActivity(ViewSourceActivity): """Activity subclass built around the Vte terminal widget.""" def __init__(self, handle): super(VteActivity, self).__init__(handle) self.max_participants = 1 # no sharing toolbox = ToolbarBox() activity_button_toolbar = ActivityToolbarButton(self) toolbox.toolbar.insert(activity_button_toolbar, 0) activity_button_toolbar.show() self.set_toolbar_box(toolbox) toolbox.show() self.toolbar = toolbox.toolbar ''' # add 'copy' icon from standard toolbar. edittoolbar = activity.EditToolbar() edittoolbar.copy.set_tooltip(_('Copy selected text to clipboard')) edittoolbar.copy.connect('clicked', self._on_copy_clicked_cb) edittoolbar.paste.connect('clicked', self._on_paste_clicked_cb) # as long as nothing is selected, copy needs to be insensitive. edittoolbar.copy.set_sensitive(False) toolbox.add_toolbar(_('Edit'), edittoolbar) edittoolbar.show() self._copy_button = edittoolbar.copy ''' separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbox.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) toolbox.toolbar.insert(stop_button, -1) stop_button.show() toolbox.toolbar.show_all() # creates vte widget self._vte = Vte.Terminal() self._vte.set_size(30, 5) self._vte.set_size_request(200, 300) font = 'Monospace 10' self._vte.set_font(Pango.FontDescription(font)) self._vte.set_colors(Gdk.color_parse('#000000'), Gdk.color_parse('#E7E7E7'), []) ''' self._vte.connect('selection-changed', self._on_selection_changed_cb) # FIXME It does not work because it expects and receives # StructMeta Gtk.TargetEntry # #self._vte.drag_dest_set(Gtk.DestDefaults.ALL, # [("text/plain", 0, TARGET_TYPE_TEXT)], # Gdk.DragAction.COPY) self._vte.connect('drag_data_received', self._on_drop_cb) ''' # ...and its scrollbar vtebox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) vtebox.pack_start(self._vte, True, True, 0) vtesb = Gtk.Scrollbar(orientation=Gtk.Orientation.VERTICAL) # vtesb.set_adjustment(self._vte.get_adjustment()) vtesb.show() vtebox.pack_start(vtesb, False, False, 0) self.set_canvas(vtebox) self.show_all() ''' # hide the buttons we don't use. toolbar.share.hide() # this should share bundle. edittoolbar.undo.hide() edittoolbar.redo.hide() edittoolbar.separator.hide() ''' # now start subprocess. self._vte.connect('child-exited', self.on_child_exit) self._vte.grab_focus() bundle_path = activity.get_bundle_path() # the 'sleep 1' works around a bug with the command dying before # the vte widget manages to snarf the last bits of its output logging.error(bundle_path) self._pid = self._vte.fork_command_full( Vte.PtyFlags.DEFAULT, bundle_path, ['/bin/sh', '-c', 'python3 %s/pippy_app.py; sleep 1' % bundle_path], ["PYTHONPATH=%s/library" % bundle_path], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None,) def _on_copy_clicked_cb(self, widget): if self._vte.get_has_selection(): self._vte.copy_clipboard() def _on_paste_clicked_cb(self, widget): self._vte.paste_clipboard() def _on_selection_changed_cb(self, widget): self._copy_button.set_sensitive(self._vte.get_has_selection()) def _on_drop_cb(self, widget, context, x, y, selection, targetType, time): if targetType == TARGET_TYPE_TEXT: self._vte.feed_child(selection.data) def on_child_exit(self, widget): """This method is invoked when the user's script exits.""" pass # override in subclass class PyGameActivity(ViewSourceActivity): """Activity wrapper for a pygame.""" def __init__(self, handle): # fork pygame before we initialize the activity. import os import pygame import sys pygame.init() windowid = pygame.display.get_wm_info()['wmwindow'] self.child_pid = os.fork() if self.child_pid == 0: bp = activity.get_bundle_path() library_path = os.path.join(bp, 'library') pippy_app_path = os.path.join(bp, 'pippy_app.py') sys.path[0:0] = [library_path] g = globals() g['__name__'] = '__main__' exec(compile(open(pippy_app_path, "rb").read(), pippy_app_path, 'exec'), g, g) # start pygame sys.exit(0) super(PyGameActivity, self).__init__(handle) from gi.repository import GObject from gi.repository import Gtk self.max_participants = 1 # no sharing toolbox = ToolbarBox() activity_button_toolbar = ActivityToolbarButton(self) toolbox.toolbar.insert(activity_button_toolbar, 0) activity_button_toolbar.show() self.set_toolbar_box(toolbox) toolbox.show() separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbox.toolbar.insert(separator, -1) separator.show() stop_button = StopButton(self) toolbox.toolbar.insert(stop_button, -1) stop_button.show() toolbox.toolbar.show_all() socket = Gtk.Socket() socket.set_flags(socket.flags() | Gtk.CAN_FOCUS) socket.show() self.set_canvas(socket) socket.add_id(windowid) self.show_all() socket.grab_focus() GObject.child_watch_add(self.child_pid, lambda pid, cond: self.close()) def _main(): """Launch this activity from the command line.""" pass ''' from sugar3.activity import activityfactory # from sugar3.activity.registry import ActivityInfo from sugar3.bundle.activitybundle import ActivityBundle import os ab = ActivityBundle(os.path.dirname(__file__) or '.') ai = ActivityInfo(name=ab.get_name(), icon=None, bundle_id=ab.get_bundle_id(), version=ab.get_activity_version(), path=ab.get_path(), show_launcher=ab.get_show_launcher(), command=ab.get_command(), favorite=True, installation_time=ab.get_installation_time(), position_x=0, position_y=0) env = activityfactory.get_environment(ai) cmd_args = activityfactory.get_command(ai) os.execvpe(cmd_args[0], cmd_args, env) ''' if __name__ == '__main__': _main() Pippy-76/activity/000077500000000000000000000000001445132016300142445ustar00rootroot00000000000000Pippy-76/activity/activity-default.svg000066400000000000000000000271031445132016300202460ustar00rootroot00000000000000 ]> image/svg+xml Pippy-76/activity/activity-icon.svg000066400000000000000000000271031445132016300175520ustar00rootroot00000000000000 ]> image/svg+xml Pippy-76/activity/activity.info000066400000000000000000000007521445132016300167610ustar00rootroot00000000000000[Activity] name = Pippy bundle_id = org.laptop.Pippy exec = sugar-activity3 pippy_app.PippyActivity icon = activity-icon activity_version = 76 max_participants = 4 mime_types = text/x-python show_launcher = yes license = GPLv2+;GPLv3+;LGPLv2 summary = Searching for programmers! Here you can use examples to begin learning the language your computer understands called "Python". tags = Programming repository = https://github.com/sugarlabs/Pippy url = https://help.sugarlabs.org/pippy.html Pippy-76/collabwrapper.py000066400000000000000000001001231445132016300156140ustar00rootroot00000000000000# Copyright (C) 2015 Walter Bender # Copyright (C) 2015 Sam Parkinson # # This program is free software; you can 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 library; if not, write to the Free Software # Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA ''' The wrapper module provides an abstraction over the Sugar collaboration system. Using CollabWrapper ------------------- 1. Add `get_data` and `set_data` methods to the activity class:: def get_data(self): # return plain python objects - things that can be encoded # using the json module return dict( text=self._entry.get_text() ) def set_data(self, data): # data will be the same object returned by get_data self._entry.set_text(data.get('text')) 2. Make a CollabWrapper instance:: def __init__(self, handle): sugar3.activity.activity.Activity.__init__(self, handle) self._collab = CollabWrapper(self) self._collab.connect('message', self.__message_cb) # setup your activity here self._collab.setup() 3. Post any changes of shared state to the CollabWrapper. The changes will be sent to other buddies if any are connected, for example:: def __entry_changed_cb(self, *args): self._collab.post(dict( action='entry_changed', new_text=self._entry.get_text() )) 4. Handle incoming messages, for example:: def __message_cb(self, collab, buddy, msg): action = msg.get('action') if action == 'entry_changed': self._entry.set_text(msg.get('new_text')) ''' import os import json import socket from gettext import gettext as _ import gi gi.require_version('TelepathyGLib', '0.12') from gi.repository import GObject from gi.repository import Gio from gi.repository import GLib from gi.repository import TelepathyGLib import dbus from dbus import PROPERTIES_IFACE CHANNEL_INTERFACE = TelepathyGLib.IFACE_CHANNEL CHANNEL_INTERFACE_GROUP = TelepathyGLib.IFACE_CHANNEL_INTERFACE_GROUP CHANNEL_TYPE_TEXT = TelepathyGLib.IFACE_CHANNEL_TYPE_TEXT CHANNEL_TYPE_FILE_TRANSFER = TelepathyGLib.IFACE_CHANNEL_TYPE_FILE_TRANSFER CONN_INTERFACE_ALIASING = TelepathyGLib.IFACE_CONNECTION_INTERFACE_ALIASING CONN_INTERFACE = TelepathyGLib.IFACE_CONNECTION CHANNEL = TelepathyGLib.IFACE_CHANNEL CLIENT = TelepathyGLib.IFACE_CLIENT CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES = \ TelepathyGLib.ChannelGroupFlags.CHANNEL_SPECIFIC_HANDLES CONNECTION_HANDLE_TYPE_CONTACT = TelepathyGLib.HandleType.CONTACT CHANNEL_TEXT_MESSAGE_TYPE_NORMAL = TelepathyGLib.ChannelTextMessageType.NORMAL SOCKET_ADDRESS_TYPE_UNIX = TelepathyGLib.SocketAddressType.UNIX SOCKET_ACCESS_CONTROL_LOCALHOST = TelepathyGLib.SocketAccessControl.LOCALHOST from sugar3.presence import presenceservice from sugar3.activity.activity import SCOPE_PRIVATE from sugar3.graphics.alert import NotifyAlert import logging _logger = logging.getLogger('CollabWrapper') ACTION_INIT_REQUEST = '!!ACTION_INIT_REQUEST' ACTION_INIT_RESPONSE = '!!ACTION_INIT_RESPONSE' ACTIVITY_FT_MIME = 'x-sugar/from-activity' class CollabWrapper(GObject.GObject): ''' The wrapper provides a high level abstraction over the collaboration system. The wrapper deals with setting up the channels, encoding and decoding messages, initialization and alerting the caller to the status. An activity instance is initially private, but may be shared. Once shared, an instance will remain shared for as long as the activity runs. On stop, the journal will preserve the instance as shared, and on resume the instance will be shared again. When the caller shares an activity instance, they are the leader, and other buddies may join. The instance is now a shared activity. When the caller joins a shared activity, the leader will call `get_data`, and the caller's `set_data` will be called with the result. The `joined` signal is emitted when the caller joins a shared activity. One or more `buddy_joined` signals will be emitted before this signal. The signal is not emitted to the caller who first shared the activity. There are no arguments. The `buddy_joined` signal is emitted when another buddy joins the shared activity. At least one will be emitted before the `joined` signal. The caller will never be mentioned, but is assumed to be part of the set. The signal passes a :class:`sugar3.presence.buddy.Buddy` as the only argument. The `buddy_left` signal is emitted when another user leaves the shared activity. The signal is not emitted during quit. The signal passes a :class:`sugar3.presence.buddy.Buddy` as the only argument. Any buddy may call `post` to send a message to all buddies. Each buddy will receive a `message` signal. The `message` signal is emitted when a `post` is received from any buddy. The signal has two arguments. The first is a :class:`sugar3.presence.buddy.Buddy`. The second is the message. Any buddy may call `send_file_memory` or `send_file_file` to transfer a file to all buddies. A description is to be given. Each buddy will receive an `incoming_file` signal. The `incoming_file` signal is emitted when a file transfer is received. The signal has two arguments. The first is a :class:`IncomingFileTransfer`. The second is the description. ''' message = GObject.Signal('message', arg_types=[object, object]) joined = GObject.Signal('joined') buddy_joined = GObject.Signal('buddy_joined', arg_types=[object]) buddy_left = GObject.Signal('buddy_left', arg_types=[object]) incoming_file = GObject.Signal('incoming_file', arg_types=[object, object]) def __init__(self, activity): _logger.debug('__init__') GObject.GObject.__init__(self) self.activity = activity self.shared_activity = activity.shared_activity self._leader = False self._init_waiting = False self._text_channel = None def setup(self): ''' Setup must be called so that the activity can join or share if appropriate. .. note:: As soon as setup is called, any signal, `get_data` or `set_data` call may occur. This means that the activity must have set up enough so these functions can work. For example, call setup at the end of the activity `__init__` function. ''' _logger.debug('setup') # Some glue to know if we are launching, joining, or resuming # a shared activity. if self.shared_activity: # We're joining the activity. self.activity.connect("joined", self.__joined_cb) if self.activity.get_shared(): _logger.debug('calling _joined_cb') self.__joined_cb(self) else: _logger.debug('Joining activity...') self._alert(_('Joining activity...'), _('Please wait for the connection...')) else: self._leader = True if not self.activity.metadata or self.activity.metadata.get( 'share-scope', SCOPE_PRIVATE) == \ SCOPE_PRIVATE: # We are creating a new activity instance. _logger.debug('Off-line') else: # We are sharing an old activity instance. _logger.debug('On-line') self._alert(_('Resuming shared activity...'), _('Please wait for the connection...')) self.activity.connect('shared', self.__shared_cb) def _alert(self, title, msg=None): a = NotifyAlert() a.props.title = title a.props.msg = msg self.activity.add_alert(a) a.connect('response', lambda a, r: self.activity.remove_alert(a)) a.show() def __shared_cb(self, sender): ''' Callback for when activity is shared. ''' _logger.debug('__shared_cb') # FIXME: may be called twice, but we should only act once self.shared_activity = self.activity.shared_activity self._setup_text_channel() self._listen_for_channels() def __joined_cb(self, sender): '''Callback for when an activity is joined.''' _logger.debug('__joined_cb') self.shared_activity = self.activity.shared_activity if not self.shared_activity: return self._setup_text_channel() self._listen_for_channels() self._init_waiting = True self.post({'action': ACTION_INIT_REQUEST}) for buddy in self.shared_activity.get_joined_buddies(): self.buddy_joined.emit(buddy) self.joined.emit() def _setup_text_channel(self): ''' Set up a text channel to use for collaboration. ''' _logger.debug('_setup_text_channel') self._text_channel = _TextChannelWrapper( self.shared_activity.telepathy_text_chan, self.shared_activity.telepathy_conn) # Tell the text channel what callback to use for incoming # text messages. self._text_channel.set_received_callback(self.__received_cb) # Tell the text channel what callbacks to use when buddies # come and go. self.shared_activity.connect('buddy-joined', self.__buddy_joined_cb) self.shared_activity.connect('buddy-left', self.__buddy_left_cb) def _listen_for_channels(self): _logger.debug('_listen_for_channels') conn = self.shared_activity.telepathy_conn conn.connect_to_signal('NewChannels', self.__new_channels_cb) def __new_channels_cb(self, channels): _logger.debug('__new_channels_cb') conn = self.shared_activity.telepathy_conn for path, props in channels: if props[CHANNEL + '.Requested']: continue # This channel was requested by me channel_type = props[CHANNEL + '.ChannelType'] if channel_type == CHANNEL_TYPE_FILE_TRANSFER: self._handle_ft_channel(conn, path, props) def _handle_ft_channel(self, conn, path, props): _logger.debug('_handle_ft_channel') ft = IncomingFileTransfer(conn, path, props) if ft.description == ACTION_INIT_RESPONSE: ft.connect('ready', self.__ready_cb) ft.accept_to_memory() else: desc = json.loads(ft.description) self.incoming_file.emit(ft, desc) def __ready_cb(self, ft, stream): _logger.debug('__ready_cb') if self._init_waiting: stream.close(None) # FIXME: The data prop seems to just be the raw pointer gbytes = stream.steal_as_bytes() data = gbytes.get_data() _logger.debug('Got init data from buddy: %r', data) data = json.loads(data) self.activity.set_data(data) self._init_waiting = False def __received_cb(self, buddy, msg): '''Process a message when it is received.''' _logger.debug('__received_cb') action = msg.get('action') if action == ACTION_INIT_REQUEST: if self._leader: data = self.activity.get_data() if data is not None: data = json.dumps(data) OutgoingBlobTransfer( buddy, self.shared_activity.telepathy_conn, data.encode(), self.get_client_name(), ACTION_INIT_RESPONSE, ACTIVITY_FT_MIME) return if buddy: nick = buddy.props.nick else: nick = '???' _logger.debug('Received message from %s: %r', nick, msg) self.message.emit(buddy, msg) def send_file_memory(self, buddy, data, description): ''' Send a one to one file transfer from memory to a buddy. The buddy will get the file transfer and description through the `incoming_transfer` signal. Args: buddy (sugar3.presence.buddy.Buddy), buddy to send to. data (str), the data to send. description (object), a json encodable description for the transfer. This will be given to the `incoming_transfer` signal at the buddy. ''' OutgoingBlobTransfer( buddy, self.shared_activity.telepathy_conn, data, self.get_client_name(), json.dumps(description), ACTIVITY_FT_MIME) def send_file_file(self, buddy, path, description): ''' Send a one to one file transfer from a filesystem path to a given buddy. The buddy will get the file transfer and description through the `incoming_transfer` signal. Args: buddy (sugar3.presence.buddy.Buddy), buddy to send to. path (str), path of the file containing the data to send. description (object), a json encodable description for the transfer. This will be given to the `incoming_transfer` signal at the buddy. ''' OutgoingFileTransfer( buddy, self.shared_activity.telepathy_conn, path, self.get_client_name(), json.dumps(description), ACTIVITY_FT_MIME) def post(self, msg): ''' Send a message to all buddies. If the activity is not shared, no message is sent. Args: msg (object): json encodable object to send, eg. :class:`dict` or :class:`str`. ''' if self._text_channel is not None: self._text_channel.post(msg) def __buddy_joined_cb(self, sender, buddy): '''A buddy joined.''' self.buddy_joined.emit(buddy) def __buddy_left_cb(self, sender, buddy): '''A buddy left.''' self.buddy_left.emit(buddy) def get_client_name(self): ''' Get the name of the activity's telepathy client. Returns: str, telepathy client name ''' return CLIENT + '.' + self.activity.get_bundle_id() @GObject.property def leader(self): ''' Boolean of if this client is the leader in this activity. The way the leader is decided may change, however there should only ever be one leader for an activity. ''' return self._leader FT_STATE_NONE = 0 FT_STATE_PENDING = 1 FT_STATE_ACCEPTED = 2 FT_STATE_OPEN = 3 FT_STATE_COMPLETED = 4 FT_STATE_CANCELLED = 5 FT_REASON_NONE = 0 FT_REASON_REQUESTED = 1 FT_REASON_LOCAL_STOPPED = 2 FT_REASON_REMOTE_STOPPED = 3 FT_REASON_LOCAL_ERROR = 4 FT_REASON_LOCAL_ERROR = 5 FT_REASON_REMOTE_ERROR = 6 class _BaseFileTransfer(GObject.GObject): ''' The base file transfer should not be used directly. It is used as a base class for the incoming and outgoing file transfers. Props: filename (str), metadata provided by the buddy file_size (str), size of the file being sent/received, in bytes description (str), metadata provided by the buddy mime_type (str), metadata provided by the buddy buddy (:class:`sugar3.presence.buddy.Buddy`), other party in the transfer reason_last_change (FT_REASON_*), reason for the last state change GObject Props: state (FT_STATE_*), current state of the transfer transferred_bytes (int), number of bytes transferred so far ''' def __init__(self): GObject.GObject.__init__(self) self._state = FT_STATE_NONE self._transferred_bytes = 0 self.channel = None self.buddy = None self.filename = None self.file_size = None self.description = None self.mime_type = None self.reason_last_change = FT_REASON_NONE def set_channel(self, channel): ''' Setup the file transfer to use a given telepathy channel. This should only be used by direct subclasses of the base file transfer. ''' self.channel = channel self.channel[CHANNEL_TYPE_FILE_TRANSFER].connect_to_signal( 'FileTransferStateChanged', self.__state_changed_cb) self.channel[CHANNEL_TYPE_FILE_TRANSFER].connect_to_signal( 'TransferredBytesChanged', self.__transferred_bytes_changed_cb) self.channel[CHANNEL_TYPE_FILE_TRANSFER].connect_to_signal( 'InitialOffsetDefined', self.__initial_offset_defined_cb) channel_properties = self.channel[PROPERTIES_IFACE] props = channel_properties.GetAll(CHANNEL_TYPE_FILE_TRANSFER) self._state = props['State'] self.filename = props['Filename'] self.file_size = props['Size'] self.description = props['Description'] self.mime_type = props['ContentType'] def __transferred_bytes_changed_cb(self, transferred_bytes): _logger.debug('__transferred_bytes_changed_cb %r', transferred_bytes) self.props.transferred_bytes = transferred_bytes def _set_transferred_bytes(self, transferred_bytes): self._transferred_bytes = transferred_bytes def _get_transferred_bytes(self): return self._transferred_bytes transferred_bytes = GObject.property(type=int, default=0, getter=_get_transferred_bytes, setter=_set_transferred_bytes) def __initial_offset_defined_cb(self, offset): _logger.debug('__initial_offset_defined_cb %r', offset) self.initial_offset = offset def __state_changed_cb(self, state, reason): _logger.debug('__state_changed_cb %r %r', state, reason) self.reason_last_change = reason self.props.state = state def _set_state(self, state): self._state = state def _get_state(self): return self._state state = GObject.property(type=int, getter=_get_state, setter=_set_state) def cancel(self): ''' Request that telepathy close the file transfer channel Spec: http://telepathy.freedesktop.org/spec/Channel.html#Method:Close ''' self.channel[CHANNEL].Close() class IncomingFileTransfer(_BaseFileTransfer): ''' An incoming file transfer from another buddy. You need to first accept the transfer (either to memory or to a file). Then you need to listen to the state and wait until the transfer is completed. Then you can read the file that it was saved to, or access the :class:`Gio.MemoryOutputStream` from the `output` property. The `output` property is different depending on how the file was accepted. If the file was accepted to a file on the file system, it is a string representing the path to the file. If the file was accepted to memory, it is a :class:`Gio.MemoryOutputStream`. ''' ready = GObject.Signal('ready', arg_types=[object]) def __init__(self, connection, object_path, props): _BaseFileTransfer.__init__(self) channel = {} proxy = dbus.Bus().get_object(connection.bus_name, object_path) channel[PROPERTIES_IFACE] = dbus.Interface(proxy, PROPERTIES_IFACE) channel[CHANNEL] = dbus.Interface(proxy, CHANNEL) channel[CHANNEL_TYPE_FILE_TRANSFER] = dbus.Interface( proxy, CHANNEL_TYPE_FILE_TRANSFER) self.set_channel(channel) self.connect('notify::state', self.__notify_state_cb) self._destination_path = None self._output_stream = None self._socket_address = None self._socket = None self._splicer = None def accept_to_file(self, destination_path): ''' Accept the file transfer and write it to a new file. The file must already exist. Args: destination_path (str): the path where a new file will be created and saved to ''' if os.path.exists(destination_path): raise ValueError('Destination path already exists: %r' % destination_path) self._destination_path = destination_path self._accept() def accept_to_memory(self): ''' Accept the file transfer. Once the state is FT_STATE_OPEN, a :class:`Gio.MemoryOutputStream` accessible via the output prop. ''' self._destination_path = None self._accept() def _accept(self): channel_ft = self.channel[CHANNEL_TYPE_FILE_TRANSFER] self._socket_address = channel_ft.AcceptFile( SOCKET_ADDRESS_TYPE_UNIX, SOCKET_ACCESS_CONTROL_LOCALHOST, '', 0, byte_arrays=True) def __notify_state_cb(self, file_transfer, pspec): _logger.debug('__notify_state_cb %r', self.props.state) if self.props.state == FT_STATE_OPEN: # Need to hold a reference to the socket so that python doesn't # close the fd when it goes out of scope self._socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) self._socket.connect(self._socket_address) input_stream = Gio.UnixInputStream.new(self._socket.fileno(), True) if self._destination_path is not None: destination_file = Gio.File.new_for_path( self._destination_path) if self.initial_offset == 0: self._output_stream = destination_file.create( Gio.FileCreateFlags.PRIVATE, None) else: self._output_stream = destination_file.append_to() else: if hasattr(Gio.MemoryOutputStream, 'new_resizable'): self._output_stream = \ Gio.MemoryOutputStream.new_resizable() else: self._output_stream = Gio.MemoryOutputStream() self._output_stream.splice_async( input_stream, Gio.OutputStreamSpliceFlags.CLOSE_SOURCE | Gio.OutputStreamSpliceFlags.CLOSE_TARGET, GLib.PRIORITY_LOW, None, self.__splice_done_cb, None) def __splice_done_cb(self, output_stream, res, user): _logger.debug('__splice_done_cb') self.ready.emit(self._destination_path or self._output_stream) @GObject.Property def output(self): return self._destination_path or self._output_stream class _BaseOutgoingTransfer(_BaseFileTransfer): ''' This class provides the base of an outgoing file transfer. You can override the `_get_input_stream` method to return any type of Gio input stream. This will then be used to provide the file if requested by the application. You also need to call `_create_channel` with the length of the file in bytes during your `__init__`. Args: buddy (sugar3.presence.buddy.Buddy), who to send the transfer to conn (telepathy.client.conn.Connection), telepathy connection to use to send the transfer. Eg. `shared_activity.telepathy_conn` filename (str), metadata sent to the receiver description (str), metadata sent to the receiver mime (str), metadata sent to the receiver ''' def __init__(self, buddy, conn, filename, description, mime): _BaseFileTransfer.__init__(self) self.connect('notify::state', self.__notify_state_cb) self._socket_address = None self._socket = None self._splicer = None self._conn = conn self._filename = filename self._description = description self._mime = mime self.buddy = buddy def _create_channel(self, file_size): object_path, properties_ = self._conn.CreateChannel(dbus.Dictionary({ CHANNEL + '.ChannelType': CHANNEL_TYPE_FILE_TRANSFER, CHANNEL + '.TargetHandleType': CONNECTION_HANDLE_TYPE_CONTACT, CHANNEL + '.TargetHandle': self.buddy.contact_handle, CHANNEL_TYPE_FILE_TRANSFER + '.Filename': self._filename, CHANNEL_TYPE_FILE_TRANSFER + '.Description': self._description, CHANNEL_TYPE_FILE_TRANSFER + '.Size': file_size, CHANNEL_TYPE_FILE_TRANSFER + '.ContentType': self._mime, CHANNEL_TYPE_FILE_TRANSFER + '.InitialOffset': 0}, signature='sv')) channel = {} proxy = dbus.Bus().get_object(self._conn.bus_name, object_path) channel[PROPERTIES_IFACE] = dbus.Interface(proxy, PROPERTIES_IFACE) channel[CHANNEL] = dbus.Interface(proxy, CHANNEL) channel[CHANNEL_TYPE_FILE_TRANSFER] = dbus.Interface( proxy, CHANNEL_TYPE_FILE_TRANSFER) self.set_channel(channel) channel_file_transfer = self.channel[CHANNEL_TYPE_FILE_TRANSFER] self._socket_address = channel_file_transfer.ProvideFile( SOCKET_ADDRESS_TYPE_UNIX, SOCKET_ACCESS_CONTROL_LOCALHOST, '', byte_arrays=True) def _get_input_stream(self): raise NotImplementedError() def __notify_state_cb(self, file_transfer, pspec): if self.props.state == FT_STATE_OPEN: # Need to hold a reference to the socket so that python doesn't # closes the fd when it goes out of scope self._socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) self._socket.connect(self._socket_address) output_stream = Gio.UnixOutputStream.new( self._socket.fileno(), True) input_stream = self._get_input_stream() output_stream.splice_async( input_stream, Gio.OutputStreamSpliceFlags.CLOSE_SOURCE | Gio.OutputStreamSpliceFlags.CLOSE_TARGET, GLib.PRIORITY_LOW, None, None, None) class OutgoingFileTransfer(_BaseOutgoingTransfer): ''' An outgoing file transfer to send from a file (on the computer's file system). Note that the `path` argument is the path for the file that will be sent, whereas the `filename` argument is only for metadata. Args: path (str), path of the file to send ''' def __init__(self, buddy, conn, path, filename, description, mime): _BaseOutgoingTransfer.__init__( self, buddy, conn, filename, description, mime) self._path = path file_size = os.stat(path).st_size self._create_channel(file_size) def _get_input_stream(self): return Gio.File.new_for_path(self._path).read(None) class OutgoingBlobTransfer(_BaseOutgoingTransfer): ''' An outgoing file transfer to send from a string in memory. Args: blob (str), data to send ''' def __init__(self, buddy, conn, blob, filename, description, mime): _BaseOutgoingTransfer.__init__( self, buddy, conn, filename, description, mime) self._blob = blob self._create_channel(len(self._blob)) def _get_input_stream(self): return Gio.MemoryInputStream.new_from_data(self._blob, None) class _TextChannelWrapper(object): '''Wrapper for a telepathy Text Channel''' def __init__(self, text_chan, conn): '''Connect to the text channel''' self._activity_cb = None self._activity_close_cb = None self._text_chan = text_chan self._conn = conn self._signal_matches = [] m = self._text_chan[CHANNEL_INTERFACE].connect_to_signal( 'Closed', self._closed_cb) self._signal_matches.append(m) def post(self, msg): if msg is not None: _logger.debug('post') self._send(json.dumps(msg)) def _send(self, text): '''Send text over the Telepathy text channel.''' _logger.debug('sending %s' % text) if self._text_chan is not None: self._text_chan[CHANNEL_TYPE_TEXT].Send( CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, text) def close(self): '''Close the text channel.''' _logger.debug('Closing text channel') try: self._text_chan[CHANNEL_INTERFACE].Close() except Exception: _logger.debug('Channel disappeared!') self._closed_cb() def _closed_cb(self): '''Clean up text channel.''' for match in self._signal_matches: match.remove() self._signal_matches = [] self._text_chan = None if self._activity_close_cb is not None: self._activity_close_cb() def set_received_callback(self, callback): '''Connect the function callback to the signal. callback -- callback function taking buddy and text args ''' if self._text_chan is None: return self._activity_cb = callback m = self._text_chan[CHANNEL_TYPE_TEXT].connect_to_signal( 'Received', self._received_cb) self._signal_matches.append(m) def handle_pending_messages(self): '''Get pending messages and show them as received.''' for identity, timestamp, sender, type_, flags, text in \ self._text_chan[ CHANNEL_TYPE_TEXT].ListPendingMessages(False): self._received_cb(identity, timestamp, sender, type_, flags, text) def _received_cb(self, identity, timestamp, sender, type_, flags, text): '''Handle received text from the text channel. Converts sender to a Buddy. Calls self._activity_cb which is a callback to the activity. ''' _logger.debug('received_cb %r %s' % (type_, text)) if type_ != 0: # Exclude any auxiliary messages return msg = json.loads(text) if self._activity_cb: try: self._text_chan[CHANNEL_INTERFACE_GROUP] except Exception: # One to one XMPP chat nick = self._conn[ CONN_INTERFACE_ALIASING].RequestAliases([sender])[0] buddy = {'nick': nick, 'color': '#000000,#808080'} _logger.debug('exception: recieved from sender %r buddy %r' % (sender, buddy)) else: # XXX: cache these buddy = self._get_buddy(sender) _logger.debug('Else: recieved from sender %r buddy %r' % (sender, buddy)) self._activity_cb(buddy, msg) self._text_chan[ CHANNEL_TYPE_TEXT].AcknowledgePendingMessages([identity]) else: _logger.debug('Throwing received message on the floor' ' since there is no callback connected. See' ' set_received_callback') def set_closed_callback(self, callback): '''Connect a callback for when the text channel is closed. callback -- callback function taking no args ''' _logger.debug('set closed callback') self._activity_close_cb = callback def _get_buddy(self, cs_handle): '''Get a Buddy from a (possibly channel-specific) handle.''' # XXX This will be made redundant once Presence Service # provides buddy resolution # Get the Presence Service pservice = presenceservice.get_instance() # Get the Telepathy Connection tp_name, tp_path = pservice.get_preferred_connection() obj = dbus.Bus().get_object(tp_name, tp_path) conn = dbus.Interface(obj, CONN_INTERFACE) group = self._text_chan[CHANNEL_INTERFACE_GROUP] my_csh = group.GetSelfHandle() if my_csh == cs_handle: handle = conn.GetSelfHandle() elif (group.GetGroupFlags() & CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES): handle = group.GetHandleOwners([cs_handle])[0] else: handle = cs_handle # XXX: deal with failure to get the handle owner assert handle != 0 return pservice.get_buddy_by_telepathy_handle( tp_name, tp_path, handle) Pippy-76/data/000077500000000000000000000000001445132016300133215ustar00rootroot00000000000000Pippy-76/data/en/000077500000000000000000000000001445132016300137235ustar00rootroot00000000000000Pippy-76/data/en/graphics/000077500000000000000000000000001445132016300155235ustar00rootroot00000000000000Pippy-76/data/en/graphics/bounce000066400000000000000000000040611445132016300167220ustar00rootroot00000000000000# bounce: move some text around the screen import pippy import pygame import sys from pygame.locals import * # the text to bounce around the screen msg = 'Hello!' # the size of the text, in pixels fsize = 36 # vector for motion, will control speed and angle mvect = [3, 2] # always need to init first thing pygame.init() # turn off cursor pygame.mouse.set_visible(False) # create the window and keep track of the surface # for drawing into screen = pygame.display.set_mode((0, 0), pygame.NOFRAME | pygame.FULLSCREEN) # ask for screen's width and height size = width, height = screen.get_size() # create a Font object from a file, or use the default # font if the file name is None. size param is height # in pixels # usage: pygame.font.Font(filename|object, size) font = pygame.font.Font(None, fsize) # Font.render draws text onto a new surface. # # usage: Font.render(text, antialias, color, bg=None) text = font.render(msg, True, (10, 10, 10)) # the Rect object is used for positioning textRect = text.get_rect() # start at the top left textRect.left = 0 textRect.top = 0 while pippy.pygame.next_frame(): # every time we move the text, check for quit or keydown events and exit for event in pygame.event.get(): if event.type == QUIT: sys.exit() elif event.type == KEYDOWN: sys.exit() # fill the screen with almost white screen.fill((250, 250, 250)) # draw the text screen.blit(text, textRect) # update the display pygame.display.flip() # move the text # # Rect.move returns a new Rect while # Rect.move_ip moves in place, so we'll use # the latter textRect.move_ip(mvect) # bounce off edges if textRect.left < 0: textRect.left = 0 mvect[0] = -1 * mvect[0] elif textRect.right >= size[0]: textRect.right = size[0] - 1 mvect[0] = -1 * mvect[0] if textRect.top < 0: textRect.top = 0 mvect[1] = -1 * mvect[1] elif textRect.bottom >= size[1]: textRect.bottom = size[1] - 1 mvect[1] = -1 * mvect[1] Pippy-76/data/en/graphics/camera000066400000000000000000000034171445132016300167030ustar00rootroot00000000000000# camera: take a picture, animate it on screen import gi gi.require_version("Gst", "1.0") from gi.repository import Gst Gst.init(None) import pippy import pygame import sys import time # grey background bgcolor = (128, 128, 128) # start using pygame pygame.init() # turn off cursor pygame.mouse.set_visible(False) # create the pygame window and return a Surface object for # drawing in that window. screen = pygame.display.set_mode((0, 0), pygame.NOFRAME | pygame.FULLSCREEN) # grab a frame from camera to file pipeline = Gst.parse_launch('v4l2src ! videoconvert ! jpegenc ! filesink location=/tmp/pippypic.jpg') pipeline.set_state(Gst.State.PLAYING) # keep trying to load in the grabbed camera frame until it works while True: try: image = pygame.image.load('/tmp/pippypic.jpg') break except pygame.error: time.sleep(1) # stop the camera frame grabbing pipeline.set_state(Gst.State.NULL) # set initial rotation angle and scale angle = 0.0 scale = 2.0 while pippy.pygame.next_frame(): # every time we animate, check for quit or keydown events and exit for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: sys.exit() # rotate and scale the image newImage = pygame.transform.rotozoom(image, angle, scale) newImageRect = newImage.get_rect() newImageRect.centerx = screen.get_rect().centerx newImageRect.centery = screen.get_rect().centery # display the rotated and scaled image screen.fill(bgcolor) screen.blit(newImage, newImageRect) pygame.display.flip() # choose a new rotation angle and scale angle = angle + 5.0 scale = scale * 0.95 # finish once the scale becomes very very small if scale < 0.001: break Pippy-76/data/en/graphics/jump000066400000000000000000000010451445132016300164210ustar00rootroot00000000000000import pippy for i in range(0, 50): pippy.console.clear() if i < 25: pippy.console.red() else: pippy.console.blue() # Note that we have to escape backslashes print('\\o/') print('_|_') print(' ') pippy.wait() pippy.console.clear() print('_o_') print(' | ') print('/ \\') pippy.wait() pippy.console.clear() print(' o ') print('/|\\') print('| |') pippy.wait() pippy.console.clear() print('_o_') print(' | ') print('/ \\') pippy.wait() Pippy-76/data/en/graphics/life000066400000000000000000000076031445132016300163730ustar00rootroot00000000000000# -*- coding: utf-8 -*- # This is the game life http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life import os import time import random def LoadCells(rows, cols): """ We need a function to load cells in the neighborhood """ grid = [] col = [0] * cols # first we load an empty grid for i in range(rows): col = [0] * cols grid.append(col) # then we load some cells for x in range(rows): for y in range(cols): cell = random.randint(0, random.randint(0, 1)) grid[x][y] = cell return grid def DrawGrid(grid): """ Here we draw the grid """ """ Test: Print the number of neighbors of living cells """ rows = len(grid) cols = len(grid[1]) # print rows, cols for x in range(rows): for y in range(cols): if grid[x][y] != 1: print('.', end=' ') else: neighbors = CountNeighbors(grid, x, y) print(chr(neighbors+48), end=' ') # print 'o', print('\n', end=' ') def CountNeighbors(grid, x, y): """ Count neighbors arround a single cell""" neighbors = 0 rows = len(grid) cols = len(grid[1]) # if x < (rows - 1) and grid[x + 1][y] == 1: # neighbors += 1 # if x > 0 and grid[x - 1][y] == 1: # neighbors += 1 # if y < (cols - 1) and grid[x][y + 1] == 1: # neighbors += 1 # if y > 0 and grid[x][y - 1] == 1: # neighbors += 1 # if x < (rows - 1) and y < (cols - 1) and grid[x + 1][y + 1] == 1: # neighbors += 1 # if x > 0 and y > 0 and grid[x - 1][y - 1] == 1: # neighbors += 1 # if x > 0 and y < (cols - 1) and grid[x - 1][y + 1] == 1: # neighbors += 1 # if x < (rows - 1) and y > 0 and grid[x + 1][y - 1] == 1: # neighbors += 1 neighbors += grid[(x+rows-1) % rows][(y+cols-1) % cols] neighbors += grid[(x+rows-1) % rows][ y ] neighbors += grid[(x+rows-1) % rows][(y +1) % cols] neighbors += grid[ x ][(y+cols-1) % cols] # neighbors += grid[ x ][ y ] neighbors += grid[ x ][(y +1) % cols] neighbors += grid[(x +1) % rows][(y+cols-1) % cols] neighbors += grid[(x +1) % rows][ y ] neighbors += grid[(x +1) % rows][(y +1) % cols] return neighbors def Iteration(grid): """ here we define a single iteration : # if we have between 3 and 6 neighbors the single cell lives # in other case the cell dies If a living cell has 2 or 3 neighbors, it survives in other cases it dies. A dead cell with 3 neighbors will become alive. """ rows = len(grid) cols = len(grid[1]) # grid0 = grid # Save the original grid for proper counts grid0 = [] col = [0] * cols # First we load an empty grid for x in range(rows): col = [0] * cols grid0.append(col) for x in range(rows): for y in range(cols): cell = grid[x][y] grid0[x][y] = cell # neighbors = 0 for x in range(rows): for y in range(cols): neighbors = CountNeighbors(grid0, x, y) if grid0[x][y] == 1: if neighbors < 2 or neighbors > 3: grid[x][y] = 0 else: if neighbors == 3: grid[x][y] = 1 return grid def Iterator(rows, cols, pulses): """ Iterate n pulses and draws the result of each one """ pulse = 1 grid = LoadCells(rows, cols) while pulse <= pulses: # os.system('clear') print('Pulse: ', pulse) # Iteration(grid) grid = Iteration(grid) DrawGrid(grid) pulse += 1 time.sleep(0.2) number = eval(input('Please input the number of rows and cols (unique number):')) pulses = eval(input('Please input the number of pulses:')) Iterator(number, 4*number, pulses) Pippy-76/data/en/graphics/lines000066400000000000000000000056111445132016300165630ustar00rootroot00000000000000# lines: make lots of lines on the screen # pep8-ignore: E501 import pippy import pygame import sys from pygame.locals import * from random import * # always need to init first thing pygame.init() # turn off the cursor pygame.mouse.set_visible(False) # create the window and keep track of the surface # for drawing into screen = pygame.display.set_mode((0, 0), pygame.NOFRAME | pygame.FULLSCREEN) # ask for screen's width and height size = width, height = screen.get_size() # start the screen all black screen.fill((0, 0, 0)) # we need starting endpoints for the line and seed motion vectors start = [randint(0, size[0]), randint(0, size[1])] end = [randint(0, size[0]), randint(0, size[1])] # randomize the motion, 1..3 in each direction, positive or negative, but # never 0 mvect_start = [choice((-1, 1)) * randint(1, 3), choice((-1, 1)) * randint(1, 3)] mvect_end = [choice((-1, 1)) * randint(1, 3), choice((-1, 1)) * randint(1, 3)] # start with a random color and color direction color = [randint(0, 255), randint(0, 255), randint(0, 255)] direction = [choice((-1, 1)), choice((-1, 1)), choice((-1, 1))] while pippy.pygame.next_frame(): for event in pygame.event.get(): if event.type == QUIT: sys.exit() elif event.type == KEYDOWN: sys.exit() # draw the line using the current values and width=3 pygame.draw.line(screen, color, start, end, 3) # update the display pygame.display.flip() # update the end points and the color for i in range(2): start[i] = start[i] + mvect_start[i] end[i] = end[i] + mvect_end[i] for i in range(3): color[i] = color[i] + direction[i] # check if anything has gone out of range and # if so, bring back to edge and reverse the # corresponding motion vector if start[0] < 0: start[0] = 0 mvect_start[0] = (-1) * mvect_start[0] elif start[0] >= size[0]: start[0] = size[0] - 1 mvect_start[0] = (-1) * mvect_start[0] if start[1] < 0: start[1] = 0 mvect_start[1] = (-1) * mvect_start[1] elif start[1] >= size[1]: start[1] = size[1] - 1 mvect_start[1] = (-1) * mvect_start[1] if end[0] < 0: end[0] = 0 mvect_end[0] = (-1) * mvect_end[0] elif end[0] >= size[0]: end[0] = size[0] - 1 mvect_end[0] = (-1) * mvect_end[0] if end[1] < 0: end[1] = 0 mvect_end[1] = (-1) * mvect_end[1] elif end[1] >= size[1]: end[1] = size[1] - 1 mvect_end[1] = (-1) * mvect_end[1] for i in range(3): if color[i] < 0: color[i] = 0 direction[i] = direction[i] * (-1) elif color[i] >= 255: color[i] = 255 direction[i] = direction[i] * (-1) # randomly change the color directon on occasion if randint(0, 511) == 128: for i in range(3): direction[i] = choice((-1, 1)) Pippy-76/data/en/graphics/physics000066400000000000000000000030511445132016300171270ustar00rootroot00000000000000# physics import pippy import pygame import sys import math from pygame.locals import * from pippy import physics # initialize pygame first thing pygame.init() screen = pygame.display.set_mode((0, 0), pygame.NOFRAME | pygame.FULLSCREEN) # set up the physics world (instance of Elements) world = physics.Elements(screen.get_size()) world.renderer.set_surface(screen) # set up initial physics objects world.add.ground() world.add.ball((600, 0), 50) world.add.rect((500, 0), 25, 300, dynamic=True, density=1.0, restitution=0.16, friction=0.5) # add 20 more balls balls = 0 while(balls < 20): world.add.ball(((balls * 5) + 200, balls * 5), 50) balls += 1 # begin physics simulation world.run_physics = True while pippy.pygame.next_frame() and world.run_physics: for event in pygame.event.get(): if event.type == QUIT: sys.exit() elif event.type == KEYDOWN: sys.exit() elif event.type == MOUSEBUTTONDOWN and event.button == 1: bodylist = world.get_bodies_at_pos(event.pos, include_static=False) if bodylist and len(bodylist) > 0: world.add.mouseJoint(bodylist[0], event.pos) elif event.type == MOUSEBUTTONUP and event.button == 1: world.add.remove_mouseJoint() elif event.type == MOUSEMOTION and event.buttons[0]: world.mouse_move(event.pos) # clear display with a color screen.fill((80, 160, 240)) # update & draw physics world world.update() world.draw() # update the display pygame.display.flip() Pippy-76/data/en/graphics/pong000066400000000000000000000121101445132016300164040ustar00rootroot00000000000000# pong: hit the ball with the paddle # # use the escape key to exit # # on the XO, the escape key is the top lefthand key, # circle with an x in it. import pippy import pygame import sys from pygame.locals import * from random import * # always need to init first thing pygame.init() # create the window and keep track of the surface # for drawing into screen = pygame.display.set_mode((0, 0), pygame.NOFRAME | pygame.FULLSCREEN) # ask for screen's width and height size = width, height = screen.get_size() # turn off the cursor pygame.mouse.set_visible(False) # start the screen all black bgcolor = (0, 0, 0) screen.fill(bgcolor) # paddle constants paddle_width = 20 paddle_length = 100 paddle_radius = paddle_length / 2 paddle_color = (250, 250, 250) # ball constants ball_color = (250, 250, 250) ball_radius = 25 # game constants fsize = 48 msg = "Press 'g' to start game" font = pygame.font.Font(None, fsize) text = font.render(msg, True, (250, 250, 250)) textRect = text.get_rect() textRect.centerx = screen.get_rect().centerx textRect.centery = screen.get_rect().centery while pippy.pygame.next_frame(): # display msg screen.fill(bgcolor) screen.blit(text, textRect) pygame.display.flip() # chill until a key is pressed for idle_event in pygame.event.get(): if idle_event.type == QUIT: sys.exit() if idle_event.type == KEYDOWN: if idle_event.key == K_ESCAPE: sys.exit() if idle_event.key == 103: # g key # play a game! # start the paddle in the center paddle_location = height / 2 # number of balls to a game balls = 4 while balls > 0: ball_position = [ball_radius, ball_radius] ball_mvect = [randint(9, 12), randint(5, 12)] ball_limit = size balls = balls - 1 while ball_position[0] + ball_radius < ball_limit[0]: # in play for event in pygame.event.get(): if event.type == QUIT: sys.exit() elif event.type == KEYDOWN: if event.key == K_ESCAPE: sys.exit() (_, paddle_location) = pygame.mouse.get_pos() # make sure the paddle is in-bounds if paddle_location - paddle_radius < 0: paddle_location = paddle_radius elif paddle_location + paddle_radius >= height: paddle_location = height - 1 - paddle_radius # clear the screen screen.fill(bgcolor) # draw the paddle on the right side of the screen pygame.draw.line(screen, paddle_color, (width - paddle_width, paddle_location - paddle_radius), (width - paddle_width, paddle_location + paddle_radius), paddle_width) # draw the ball pygame.draw.circle(screen, ball_color, ball_position, ball_radius) # draw the unused balls for i in range(balls): pygame.draw.circle(screen, ball_color, (int(round(30 + i * ball_radius * 2.4)), 30), ball_radius) # update the display pygame.display.flip() pippy.pygame.next_frame(max_fps=25) # update the ball for i in range(2): ball_position[i] = ball_position[i] + ball_mvect[i] # bounce on top and left if ball_position[i] < ball_radius: ball_position[i] = ball_radius ball_mvect[i] = -1 * ball_mvect[i] # bounce on bottom elif i == 1 \ and ball_position[i] >= ball_limit[i] - ball_radius: ball_position[i] = ball_limit[i] - ball_radius - 1 ball_mvect[i] = -1 * ball_mvect[i] elif i == 0 \ and ball_position[i] >= ball_limit[i] - ball_radius - paddle_width \ and ball_position[1] > paddle_location - paddle_radius \ and ball_position[1] < paddle_location + paddle_radius: ball_position[i] = ball_limit[i] - ball_radius - paddle_width - 1 ball_mvect[i] = (-1) * ball_mvect[i] pippy.pygame.next_frame(max_fps=5) Pippy-76/data/en/graphics/snow000066400000000000000000000031601445132016300164340ustar00rootroot00000000000000# snow import pippy import pygame import sys from pygame.locals import * from random import * # always need to init first thing pygame.init() # create the window and keep track of the surface # for drawing into screen = pygame.display.set_mode((0, 0), pygame.NOFRAME | pygame.FULLSCREEN) # ask for screen's width and height width, height = screen.get_size() # turn off the cursor pygame.mouse.set_visible(False) bg_color = (0, 0, 0) xs = [] ys = [] dxs = [] dys = [] sizes = [] nflakes = 1000 while pippy.pygame.next_frame(): # if we don't have enough flakes, add one if len(xs) < nflakes: xs.append(randint(0, width)) ys.append(0) dxs.append(randint(-2, 2)) size = expovariate(1) * 5 sizes.append(int(size)) dys.append(size * 2) # clear the screen screen.fill(bg_color) for event in pygame.event.get(): if event.type == QUIT: sys.exit() elif event.type == KEYDOWN: if event.key == K_ESCAPE: sys.exit() for x, y, size in zip(xs, ys, sizes): c = 40 + int(float(y) / height * 215) pygame.draw.circle( screen, (c, c, c), (x, y), size) xs_ = [] ys_ = [] dxs_ = [] dys_ = [] sizes_ = [] for x, y, dx, dy, size in zip(xs, ys, dxs, dys, sizes): if 0 <= x + dx <= width and 0 <= y + dy <= height: xs_.append(x + dx) ys_.append(y + int(dy)) dxs_.append(dx) dys_.append(dy) sizes_.append(size) xs = xs_ ys = ys_ dxs = dxs_ dys = dys_ sizes = sizes_ pygame.display.flip() Pippy-76/data/en/graphics/tree000066400000000000000000000036201445132016300164060ustar00rootroot00000000000000# tree import pippy import pygame import sys from pygame.locals import * from random import * import math # always need to init first thing pygame.init() # create the window and keep track of the surface # for drawing into screen = pygame.display.set_mode((0, 0), pygame.NOFRAME | pygame.FULLSCREEN) # ask for screen's width and height width, height = screen.get_size() # turn off the cursor pygame.mouse.set_visible(False) color = (250, 250, 250) min_factor = 0.8 max_factor = 0.9 start_length = 130 min_length = 40 min_angle_delta = 0.4 max_angle_delta = 0.5 # start the screen all black bgcolor = (0, 0, 0) screen.fill(bgcolor) def draw_tree(x, y, length, angle): x2 = x + length * math.sin(angle) y2 = y - length * math.cos(angle) pygame.draw.line(screen, color, (x, y), (x2, y2)) if length > min_length: # draw left branch left_angle = angle - \ uniform(min_angle_delta, max_angle_delta) left_length = length * \ uniform(min_factor, max_factor) draw_tree(x2, y2, left_length, left_angle) # draw middle branch middle_length = length * \ uniform(min_factor, max_factor) draw_tree(x2, y2, middle_length, angle) # draw right branch right_angle = angle + \ uniform(min_angle_delta, max_angle_delta) right_length = length * \ uniform(min_factor, max_factor) draw_tree(x2, y2, right_length, right_angle) # clear the screen screen.fill(bgcolor) # draw a tree, starting at the bottom centre of the # screen draw_tree((width / 2), height - 20, start_length, 0) pygame.display.flip() # do nothing visible until the escape key is pressed while pippy.pygame.next_frame(): for event in pygame.event.get(): if event.type == QUIT: sys.exit() if event.type == KEYDOWN: if event.key == K_ESCAPE: sys.exit() Pippy-76/data/en/math/000077500000000000000000000000001445132016300146545ustar00rootroot00000000000000Pippy-76/data/en/math/factorial000066400000000000000000000021271445132016300165450ustar00rootroot00000000000000import time def factorial_recursive(number): """ Define a factorial function in recursive flavor """ result = 1 if number > 0: result = number * factorial_recursive(number - 1) print('factorizing: ', number, ' result: ', result) return result def factorial_iterative(number): """ Define a factorial function in iterative flavor """ result = 1 for i in range(1, number + 1): result = result * i print('factorizing: ', i, ' result: ', result) return result def calculate(number, type): """ Calculate factorial using recursive and iterative methods """ start = time.time() if type == 0: type_s = 'recursive' factorial_recursive(number) else: type_s = 'iterative' factorial_iterative(number) delta = time.time() - start if delta > 0: print('Type: ', type_s, ' in: ', 1 / delta) else: print('Type: ', type_s) # ask for a number to compute the factorial of number = eval(input('Please input a number:')) print('Calculating...') calculate(number, 0) calculate(number, 1) Pippy-76/data/en/math/fibonacci000066400000000000000000000001061445132016300165110ustar00rootroot00000000000000a, b = 0, 1 while b < 1001: print(b, end=' ') a, b = b, a + b Pippy-76/data/en/math/guess000066400000000000000000000006601445132016300157270ustar00rootroot00000000000000import random import pippy R = random.randrange(1, 100) print('Guess a number between 1 and 100!') N = eval(input('Enter a number: ')) i = 1 while (N != R): if N > R: pippy.console.red() print('Too big... try again') else: pippy.console.blue() print('Too small.. try again') pippy.console.black() N = eval(input('Enter a number: ')) i = i + 1 print('You got it in', i, 'tries') Pippy-76/data/en/math/pascal000066400000000000000000000006571445132016300160520ustar00rootroot00000000000000# Pascal's triangle lines = 9 vector = [1] for i in range(1, lines + 1): vector.insert(0, 0) vector.append(0) for i in range(0, lines): newvector = vector[:] for j in range(0, len(vector) - 1): if (newvector[j] == 0): print(' ', end=' ') else: print('%2d' % newvector[j], end=' ') newvector[j] = vector[j - 1] + vector[j + 1] print() vector = newvector[:] Pippy-76/data/en/math/pi000066400000000000000000000016431445132016300152130ustar00rootroot00000000000000a,b = 1.0,3.0 breakpoint = 1000 pi = 0.0 for loop in range(1, breakpoint): pi += (4.0/a) - (4.0/b) a += 4 b += 4 print(pi) # Now that the result has been computed we can explore printing the result. print("There are multiple ways to print numbers here is a quick sample.") print("Just print it :", pi) print("Using repr() :", repr(pi)) print("Our approximation: %3.20f" % pi) print("\nPi is a very famous number....") # Use python's math module it is faster and close enough for most computations. import math print("Python's Math library computes") print("a better value pi: %3.39f" % math.pi); # it uses...(math.atan(1.0) * 4.0) # when running computations based on "pi" it is good to begin with the best value you can get. # from the gnu 'C' comiler /usr/include/math.h" print("For reference a more exact 32 bit floating point value for pi is.") print("Known value of pi: 3.14159265358979323846") Pippy-76/data/en/math/sierpinski000066400000000000000000000011161445132016300167560ustar00rootroot00000000000000# Sierpinski triangles size = 3 modulus = 2 lines = modulus ** size vector = [1] for i in range(1, lines + 1): vector.insert(0, 0) vector.append(0) for i in range(0, lines): newvector = vector[:] for j in range(0, len(vector) - 1): if (newvector[j] == 0): print(' ', end=' ') else: remainder = newvector[j] % modulus if (remainder == 0): print('O', end=' ') else: print('.', end=' ') newvector[j] = vector[j - 1] + vector[j + 1] print() vector = newvector[:] Pippy-76/data/en/math/stern-brocot000066400000000000000000000021231445132016300172160ustar00rootroot00000000000000# The Stern-Brocot tree contains every non-negative rational number # expressed in its lowest terms # Reference: Brian Hayes, Computing Science On the Teeth of Wheels, # American Scientist, July-August, Volume 88, No. 4, # define a class for rational numbers: # numerator / denominator class Rational: def __init__(self, num, den): self.num, self.den = num, den def __repr__(self): return str(self.num) + '/' + str(self.den) # define the mediant function # mediant (a/b, c/d) = (a+c)/(b+d) def mediant(a, b): return Rational(a.num + b.num, a.den + b.den) # expand a row by calculating mediants between each pair of elements # e.g., [0/1, 1/0] -> [0/1, 1/1, 1/0] def expand(row): x = [row[0]] for i in range(1, len(row)): x += [mediant(row[i-1], row[i])] + [row[i]] return x # initialize the first row with 0/1, 1/0 # each pass will yield an expanded row def rationals(): row = [Rational(0, 1), Rational(1, 0)] while True: yield row row = expand(row) # iterate through successive rows r = rationals() i = 1 while i<5: print(next(r)) i+=1 Pippy-76/data/en/math/times000066400000000000000000000001561445132016300157220ustar00rootroot00000000000000number = eval(input('Which times table? ')) for i in range(1, 13): print(i, 'x', number, '=', i * number) Pippy-76/data/en/python/000077500000000000000000000000001445132016300152445ustar00rootroot00000000000000Pippy-76/data/en/python/function000066400000000000000000000000651445132016300170150ustar00rootroot00000000000000def square(x): print(x * x) square(3) square(4) Pippy-76/data/en/python/if000066400000000000000000000002371445132016300155670ustar00rootroot00000000000000number = eval(input('Enter a number: ')) if number > 5: print('Greater than 5') elif number < 5: print('Less than 5') else: print('Number is 5!') Pippy-76/data/en/python/interpreter000066400000000000000000000000721445132016300175310ustar00rootroot00000000000000import code code.InteractiveConsole().interact(banner='') Pippy-76/data/en/python/recursion000066400000000000000000000004331445132016300172000ustar00rootroot00000000000000def count_backwards(number): print('I have the number', number) if number > 0: print('Calling count_backwards again!') count_backwards(number - 1) else: print('I am done counting') number = eval(input('Enter a number: ')) count_backwards(number) Pippy-76/data/en/sound/000077500000000000000000000000001445132016300150535ustar00rootroot00000000000000Pippy-76/data/en/sound/getSoundList000066400000000000000000000000721445132016300174210ustar00rootroot00000000000000import pippy print(" ".join(pippy.sound.getSoundList())) Pippy-76/data/en/sound/playSine000066400000000000000000000001261445132016300165610ustar00rootroot00000000000000import pippy pippy.sound.playSine(pitch=1000, amplitude=5000) pippy.sound.audioOut() Pippy-76/data/en/sound/playWave000066400000000000000000000001441445132016300165650ustar00rootroot00000000000000import pippy pippy.sound.playWave(sound='didjeridu', loop=True, duration=5) pippy.sound.audioOut() Pippy-76/data/en/sound/sequence000066400000000000000000000003601445132016300166050ustar00rootroot00000000000000import pippy import random for i in range(25): pitch = random.randint(500, 2000) amplitude = 5000 duration = 0.1 start_time = i * 0.1 pippy.sound.playSine(pitch, amplitude, duration, start_time) pippy.sound.audioOut() Pippy-76/data/en/string/000077500000000000000000000000001445132016300152315ustar00rootroot00000000000000Pippy-76/data/en/string/hello000066400000000000000000000001031445132016300162510ustar00rootroot00000000000000name = input("Type your name here: ") print("Hello " + name + "!") Pippy-76/data/en/string/jeringoso000066400000000000000000000012531445132016300171540ustar00rootroot00000000000000# jeringoso is an innocent spanish way to talk used by kids, # you need to add an "p" before earch spanish vowel (a,e,i,o,u) and # the same vowel after the "p" # then you got a funny way to talk that parents will not understand. # ref: http://en.wikipedia.org/wiki/Jeringonza # first we define the spanish vowels vowels = ['a', 'e', 'i', 'o', 'u'] # then we ask for a string to make the replacements text = input("Please input your text to translate to jeringoso:") length = len(text) jeringoso = "" for i in range(length): char = text[i] if char in vowels: jeringoso = jeringoso + char + "p" + char else: jeringoso = jeringoso + char print(jeringoso) Pippy-76/data/en/string/thanks000066400000000000000000000121641445132016300164500ustar00rootroot00000000000000table = { 'Hardware & Mechanicals': 'John Watlington, Mark Foster, Mary Lou Jepsen, Yves Behar, Bret Recor, Mitch Pergola, Martin Schnitzer, Kenneth Jewell, Kevin Young, Jacques Gagne, Nicholas Negroponte, Frank Lee, Victor Chau, Albert Hsu, HT Chen, Vance Ke, Ben Chuang, Johnson Huang, Sam Chang, Alex Chu, Roger Huang, and the rest of the Quanta team, the Marvell team, the AMD team, the ChiMei team ...', 'Firmware': 'Ron Minnich, Richard Smith, Mitch Bradley, Tom Sylla, Lilian Walter, Bruce Wang, James Cameron ...', 'Kernel & Drivers': 'Jaya Kumar, Jon Corbet, Reynaldo Verdejo, Pierre Ossman, Dave Woodhouse, Matthew Garrett, Chris Ball, Andy Tanenbaum, Linus Torvalds, Dave Jones, Andres Salomon, Marcelo Tosatti ...', 'Graphics systems': 'Jordan Crouse, Daniel Stone, Zephaniah Hull, Bernardo Innocenti, Behdad Esfahbod, Jim Gettys, Adam Jackson, RobertTheKing, William Orr, Simon Schampijer, Gary Martin ...', 'Programming': 'Guido Van Rossum, Johan Dahlin, Brian Silverman, Alan Kay, Kim Rose, Bert Freudenberg, Yoshiki Ohshima, Takashi Yamamiya, Scott Wallace, Ted Kaehler, Stephane Ducasse, Hilaire Fernandes, David Narveaz, Tim Moody, Martin Langhoff, Paul Fox, Tim Shepard, Martin Abente Lahaye, Sam Parkinson, James Cameron, Ignacio Rodriguez, Jerry Vonau, Sebastian Silva, Ana Balica, rcunning01 Frederick Grose, Prason Shukla, Emil Dudev, Christofer Yael, cheekujodhpur, Agustin Zubiaga, Daniel Francis ...', 'Sugar': 'Marco Pesenti Gritti, Dan Williams, Chris Blizzard, John Palmieri, Lisa Strausfeld, Christian Marc Schmidt, Takaaki Okada, Eben Eliason, Walter Bender, Tomeu Vizoso, Simon Schampijer, Reinier Heeres, Ben Saller, Martin Dengler, Benjamin Berg, Daniel Drake, Jameson Quinn, Miguel Alvarez ...', 'Activities': 'Erik Blankinship, Bakhtiar Mikhak, Manusheel Gupta, J.M. Maurer (uwog) and the Abiword team, the Mozilla team, Jean Piche, Barry Vercoe, Richard Boulanger, Greg Thompson, Arjun Sarwal, Cody Lodrige, Shannon Sullivan, Idit Harel, and the MaMaMedia team, John Huang, Bruno Coudoin, Eduardo Silva, Hakon Wium Lie, Don Hopkins, Muriel de Souza Godoi, Benjamin M. Schwartz ...', 'Network': 'Michael Bletsas, James Cameron, Javier Cardona, Ronak Chokshi, Polychronis Ypodimatopoulos, Simon McVittie, Dafydd Harries, Sjoerd Simons, Morgan Collett, Guillaume Desmottes, Robert McQueen ...', 'Security': 'Ivan Krstic, Michael Stone, C. Scott Ananian, Noah Kantrowitz, Herbert Poetzl, Marcus Leech ...', 'Content': 'SJ Klein, Mako Hill, Xavier Alvarez, Alfonso de la Guarda, Sayamindu Dasgupta, Mallory Chua, Lauren Klein, Zdenek Broz, Felicity Tepper, Andy Sisson, Christine Madsen, Matthew Steven Carlos, Justin Thorp, Ian Bicking, Christopher Fabian, Wayne Mackintosh, the OurStories team, Will Wright, Chuck Normann ...', 'Testing': 'Kim Quirk, Alex Latham, Giannis Galanis, Ricardo Carrano, Zach Cerza, John Fuhrer, Tom Gilliard, Niraj Nakrani ...', 'Country Support': 'Carla Gomez Monroy, David Cavallo, Matt Keller, Khaled Hassounah, Antonio Battro, Audrey Choi, Habib Kahn, Arnan (Roger) Sipitakiat, Reuben Caron ...', 'Administrative Support': 'Nia Lewis, Felice Gardner, Lindsay Petrillose, Jill Clarke, Julia Reynolds, Tracy Price, David Robertson, Danny Clark ...', 'Finance & Legal': 'Eben Moglen, Bruce Parker, William Kolb, John Sare, Sandra Lee, Richard Bernstein, Jaclyn Tsai, Jaime Cheng, Robert Fadel, Charles Kane (Grasshopper), Kathy Paur, Andriani Ferti ...', 'PR and Media': 'Larry Weber, Jackie Lustig, Jodi Petrie, George Snell, Kyle Austin, Hilary Meserole, Erick A. Betancourt, Michael Borosky, Sylvain Lefebvre, Martin Le Sauteur ...', 'Directors & Advisors': 'Howard Anderson, Rebecca Allen, Ayo Kusamotu, Jose Maria Aznar, V. Michael Bove, Jr., Rodrigo Mesquita, Seymour Papert, Ted Selker, Ethan Beard (Google); John Roese (Nortel); Dandy Hsu (Quanta); Marcelo Claure (Brightstar); Gary Dillabough (eBay); Gustavo Arenas (AMD); Mike Evans (Red Hat); Ed Horowitz (SES Astra); Jeremy Philips (NewsCorp); Scott Soong (Chi Lin); Sehat Sutardja (Marvell); Joe Jacobson (MIT Media Lab); Steve Kaufman (Riverside); and Tom Meredith (MFI)', 'Pippy': 'Chris Ball, C. Scott Ananian, James Cameron, Anish Mangal ...' } import random import time from pippy.console import * from textwrap import fill # Determine the number of columns in our window in # order to wrap text to that width -- this changes # when we run as a standalone activity instead of # inside the output pane. cols, lines = size() while True: reset() print(fill("OLPC would like to take this opportunity to acknowledge the community of people and projects that have made the XO laptop possible.", int(cols))) subsystem = random.choice(list(table.keys())) random.choice([red, green, yellow, blue, magenta, cyan])() #random.choice([normal, bold, underlined, inverse])() print('\n' + fill("%s: %s" % (subsystem, table[subsystem]), int(cols))) table.pop(subsystem) if len(table) == 0: break time.sleep(3) reset() Pippy-76/data/en/tutorials/000077500000000000000000000000001445132016300157515ustar00rootroot00000000000000Pippy-76/data/en/tutorials/Tutorial_01_simple_input.py000066400000000000000000000000761445132016300232210ustar00rootroot00000000000000 name = input('What is your name?\n') print('Hi, %s.' % name) Pippy-76/data/en/tutorials/Tutorial_02_while.py000066400000000000000000000005071445132016300216210ustar00rootroot00000000000000import time def while_backward_count(number): while(number > -1): print(str(number) + " for the explosion!!!") time.sleep(1) number = number -1 number = eval(input('Enter a number: ')) print("Let's count backward using a while sentence!!") while_backward_count(number) print("Kaboooommm!!!, X_X") Pippy-76/data/en/tutorials/Tutorial_03_range.py000066400000000000000000000006401445132016300216040ustar00rootroot00000000000000def sum_in_range(num1, num2): total = num1 num1 = num1 + 1 num2 = num2 + 1 for i in range(num1, num2): print(str(total) + " + " + str(i) + " = " + str(total+i)) total = total + 1 number1 = int(eval(input('Enter first number: '))) number2 = int(eval(input('Enter second number: '))) if number1 < number2: sum_in_range(number1, number2) else: sum_in_range(number2, number1) Pippy-76/data/en/tutorials/Tutorial_04_list.py000066400000000000000000000003231445132016300214620ustar00rootroot00000000000000my_list = [] num = 1 while(num < 5): data = eval(input("Please enter number " + str(num) + ":")) my_list.append(int(data)) num = num + 1 print("You entered the following numbers:") print(my_list) Pippy-76/data/en/tutorials/Tutorial_05_dictionaries.py000066400000000000000000000004661445132016300231750ustar00rootroot00000000000000basket = { 'oranges': 12, 'pears': 5, 'apples': 4 } basket['bananas'] = 5 print(basket) print("There are %d various items in the basket" % len(basket)) print(basket['apples']) basket['apples'] = 8 print(basket['apples']) print(basket.get('oranges', 'undefined')) print(basket.get('cherries', 'undefined')) Pippy-76/data/en/tutorials/Tutorial_06_try_except.py000066400000000000000000000004001445132016300226730ustar00rootroot00000000000000def is_valid_number(num): try: int(num) print("You wrote a number") except: print("Sorry but, you didn't write a number") number1 = input("Give me any input and I will tell you if it's a number: ") is_valid_number(number1) Pippy-76/data/en/tutorials/Tutorial_07_gtk_basic_form.py000066400000000000000000000006061445132016300234670ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Hello World!!') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.connect('destroy', Gtk.main_quit) self.set_size_request(250, 150) self.show() PyApp() Gtk.main() Pippy-76/data/en/tutorials/Tutorial_08_gtk_button_form.py000066400000000000000000000011611445132016300237170ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Button') self.set_size_request(250, 200) self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) def button_cb(widget): print('click') button = Gtk.Button(label='Button') fixed = Gtk.Fixed() fixed.put(button, 20, 30) button.connect('clicked', button_cb) self.connect('destroy', Gtk.main_quit) self.add(fixed) self.show_all() PyApp() Gtk.main() Pippy-76/data/en/tutorials/Tutorial_09_gtk_entry.py000066400000000000000000000013741445132016300225310ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk from gi.repository import Gdk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Text Entry') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 150) def entry_cb(widget, event): if Gdk.keyval_name(event.keyval) == 'Return': print(widget.get_text()) entry = Gtk.Entry() entry.connect('key_press_event', entry_cb) entry.show() fixed = Gtk.Fixed() fixed.show() fixed.put(entry, 20, 30) self.add(fixed) self.show() self.connect('destroy', Gtk.main_quit) PyApp() Gtk.main() Pippy-76/data/en/tutorials/Tutorial_10_gtk_grid.py000066400000000000000000000016231445132016300223020ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Grid') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) grid = Gtk.Grid() grid.set_column_homogeneous(True) grid.set_row_homogeneous(True) button = Gtk.Button(label='Button 1') grid.attach(button, 0, 0, 1, 1) button = Gtk.Button(label='Button 2') grid.attach(button, 0, 2, 1, 2) button = Gtk.Button(label='Button 3') grid.attach(button, 1, 1, 2, 2) button = Gtk.Button(label='Button 4') grid.attach(button, 2, 0, 2, 1) button = Gtk.Button(label='Button 5') grid.attach(button, 3, 3, 3, 3) self.add(grid) self.show_all() self.connect('destroy', Gtk.main_quit) PyApp() Gtk.main() Pippy-76/data/en/tutorials/Tutorial_11_gtk_scrolled_window.py000066400000000000000000000012231445132016300245500ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Scrolled Window') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 150) scrolled = Gtk.ScrolledWindow() vbox = Gtk.VBox() scrolled.add(vbox) for x in range(1, 16): boton = Gtk.Button(label='Button %d' % x) vbox.pack_start(boton, False, False, 1) self.add(scrolled) self.show_all() self.connect('destroy', Gtk.main_quit) PyApp() Gtk.main() Pippy-76/data/en/tutorials/Tutorial_12_text_view.py000066400000000000000000000021341445132016300225260ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Text view') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 150) scrolled = Gtk.ScrolledWindow() textview = Gtk.TextView() scrolled.add(textview) textbuffer = textview.get_buffer() textbuffer.set_text('Multiple lines\nin the same editor\n') end = textbuffer.get_end_iter() anchor = textbuffer.create_child_anchor(end) box = Gtk.HBox() textview.add_child_at_anchor(box, anchor) button = Gtk.Button(label='Click me') button.connect('clicked', self._clicked_cb, textbuffer) box.pack_start(button, False, False, 0) self.add(scrolled) self.show_all() self.connect('destroy', Gtk.main_quit) def _clicked_cb(self, button, textbuffer): end = textbuffer.get_end_iter() textbuffer.insert(end, 'You clicked the button!!\n') PyApp() Gtk.main() Pippy-76/data/en/tutorials/Tutorial_13_gtk_radio_buttons.py000066400000000000000000000021211445132016300242260ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Radio buttons') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 150) vbox = Gtk.VBox() button1 = Gtk.RadioButton(group=None, label='Button 1') button1.connect('toggled', self._activate_cb, 1) vbox.pack_start(button1, True, True, 2) button2 = Gtk.RadioButton(group=button1, label='Button 2') button2.connect('toggled', self._activate_cb, 2) vbox.pack_start(button2, True, True, 2) button3 = Gtk.RadioButton(group=button1, label='Button 3') button3.connect('toggled', self._activate_cb, 3) vbox.pack_start(button3, True, True, 2) self.add(vbox) self.show_all() self.connect('destroy', Gtk.main_quit) def _activate_cb(self, button, button_index): if button.get_active(): print('You selected %d button' % button_index) PyApp() Gtk.main() Pippy-76/data/en/tutorials/Tutorial_14_menu.py000066400000000000000000000137011445132016300214600ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Menu') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 150) accel_group = Gtk.AccelGroup() self.add_accel_group(accel_group) vbox = Gtk.VBox() menubar = Gtk.MenuBar() vbox.pack_start(menubar, False, False, 0) self.label = Gtk.Label(label='Activate a menu item') vbox.pack_start(self.label, True, True, 0) menu_file = Gtk.Menu() item_file = Gtk.MenuItem.new_with_mnemonic('_File') item_file.set_submenu(menu_file) menubar.append(item_file) item_new = Gtk.MenuItem.new_with_mnemonic('_New') key, mod = Gtk.accelerator_parse('N') item_new.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_new.connect('activate', self._activate_cb, 'New') menu_file.append(item_new) item_open = Gtk.MenuItem.new_with_mnemonic('_Open') key, mod = Gtk.accelerator_parse('O') item_open.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_open.connect('activate', self._activate_cb, 'Open') menu_file.append(item_open) menu_recents = Gtk.Menu() item_recents = Gtk.MenuItem.new_with_mnemonic('Open _recents') item_recents.set_submenu(menu_recents) menu_file.append(item_recents) for recent_file in range(1, 6): item_recent = Gtk.MenuItem.new_with_mnemonic('_%d: Recent file %d' % (recent_file, recent_file)) item_recent.connect('activate', self._activate_cb, 'Recent file %d' % recent_file) menu_recents.append(item_recent) separator = Gtk.SeparatorMenuItem() menu_file.append(separator) item_exit = Gtk.MenuItem.new_with_mnemonic('_Quit') key, mod = Gtk.accelerator_parse('Q') item_exit.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_exit.connect('activate', self._activate_cb, 'Quit') menu_file.append(item_exit) menu_edit = Gtk.Menu() item_edit = Gtk.MenuItem.new_with_mnemonic('_Edit') item_edit.set_submenu(menu_edit) menubar.append(item_edit) item_undo = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_UNDO, None) key, mod = Gtk.accelerator_parse('Z') item_undo.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_undo.connect('activate', self._activate_cb, 'Undo') menu_edit.append(item_undo) item_redo = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_REDO, None) key, mod = Gtk.accelerator_parse('Z') item_redo.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_redo.connect('activate', self._activate_cb, 'Redo') menu_edit.append(item_redo) separator = Gtk.SeparatorMenuItem() menu_edit.append(separator) item_copy = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_COPY, None) key, mod = Gtk.accelerator_parse('C') item_copy.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_copy.connect('activate', self._activate_cb, 'Copy') menu_edit.append(item_copy) item_cut = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_CUT, None) key, mod = Gtk.accelerator_parse('X') item_cut.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_cut.connect('activate', self._activate_cb, 'Cut') menu_edit.append(item_cut) item_paste = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_PASTE, None) key, mod = Gtk.accelerator_parse('V') item_paste.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_paste.connect('activate', self._activate_cb, 'Paste') menu_edit.append(item_paste) separator = Gtk.SeparatorMenuItem() menu_edit.append(separator) label = 'Vertical page' item_vertical = Gtk.RadioMenuItem(label=label) item_vertical.set_active(True) item_vertical.connect('toggled', self._toggled_cb, label) menu_edit.append(item_vertical) label = 'Horizontal page' item_horizontal = Gtk.RadioMenuItem.new_with_label((item_vertical,), label) item_horizontal.connect('toggled', self._toggled_cb, label) menu_edit.append(item_horizontal) menu_view = Gtk.Menu() item_view = Gtk.MenuItem.new_with_mnemonic('_View') item_view.set_submenu(menu_view) menubar.append(item_view) item_hides = Gtk.CheckMenuItem.new_with_mnemonic('_Hidden files') key, mod = Gtk.accelerator_parse('H') item_hides.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_hides.connect('toggled', self._toggled_cb, 'Hidden files', True) menu_view.append(item_hides) menu_help = Gtk.Menu() item_help = Gtk.MenuItem(label='Ayuda') item_help.set_submenu(menu_help) menubar.append(item_help) item_about = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_ABOUT, None) item_about.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_about.connect('activate', self._activate_cb, 'About') menu_help.append(item_about) self.add(vbox) self.show_all() self.connect('destroy', Gtk.main_quit) def _activate_cb(self, item, label): self.label.set_text('You activated %s item' % label) def _toggled_cb(self, item, label, no_active=False): if item.get_active(): self.label.set_text('You activated %s item' % label) elif not item.get_active() and no_active: self.label.set_text('You deactivate %s item' % label) PyApp() Gtk.main() Pippy-76/data/en/tutorials/Tutorial_15_gtk_progress_bar.py000066400000000000000000000025001445132016300240450ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk from gi.repository import GLib class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Barras de progreso') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_border_width(20) self.fraction = 0 grid = Gtk.Grid() grid.set_row_spacing(10) self.bar1 = Gtk.ProgressBar() self.bar1.set_hexpand(True) self.bar1.set_vexpand(True) grid.attach(self.bar1, 1, 0, 3, 1) label = Gtk.Label(label="Una barra de progreso simple") label.set_hexpand(True) grid.attach(label, 1, 1, 1, 1) self.bar2 = Gtk.ProgressBar() self.bar2.set_hexpand(True) self.bar2.set_vexpand(True) grid.attach(self.bar2, 1, 2, 3, 1) label = Gtk.Label(label="Una barra de progreso con pulsos") grid.attach(label, 1, 3, 1, 1) GLib.timeout_add(200, self._update) self.add(grid) self.show_all() self.connect('destroy', Gtk.main_quit) def _update(self): self.fraction += 0.01 if self.fraction >= 1: self.fraction = 0 self.bar1.set_fraction(self.fraction) self.bar2.pulse() return True PyApp() Gtk.main() Pippy-76/data/en/tutorials/Tutorial_16_sugar_palettes.py000066400000000000000000000054311445132016300235410ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk from sugar3.graphics.toolbarbox import ToolbarBox from sugar3.graphics.toolbutton import ToolButton from sugar3.graphics.palettemenu import PaletteMenuBox from sugar3.graphics.palettemenu import PaletteMenuItem from sugar3.graphics.colorbutton import ColorToolButton class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Palettes') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) vbox = Gtk.VBox() toolbarbox = ToolbarBox() vbox.add(toolbarbox) toolbar = toolbarbox.toolbar color_button = ColorToolButton() toolbar.insert(color_button, -1) button = ToolButton('list-add') button.set_tooltip('Palette with widgets') toolbar.insert(button, -1) palette = button.get_palette() palette_box = Gtk.VBox() palette.set_content(palette_box) checkbutton1 = Gtk.CheckButton(label='Option 1') palette_box.pack_start(checkbutton1, False, False, 0) checkbutton2 = Gtk.CheckButton(label='Option 2') palette_box.pack_start(checkbutton2, False, False, 0) checkbutton3 = Gtk.CheckButton(label='Option 3') palette_box.pack_start(checkbutton3, False, False, 0) separator = Gtk.VSeparator() palette_box.pack_start(separator, False, False, 0) radio_button1 = Gtk.RadioButton(label='Option 1') palette_box.pack_start(radio_button1, False, False, 0) radio_button2 = Gtk.RadioButton(label='Option 2', group=radio_button1) palette_box.pack_start(radio_button2, False, False, 0) radio_button3 = Gtk.RadioButton(label='Option 3', group=radio_button1) palette_box.pack_start(radio_button3, False, False, 0) palette_box.show_all() button = ToolButton(icon_name='format-justify-fill') button.props.tooltip = 'Select list' button.props.hide_tooltip_on_click = False button.palette_invoker.props.toggle_palette = True toolbar.insert(button, -1) menu_box = PaletteMenuBox() button.props.palette.set_content(menu_box) menu_box.show() menu_item = PaletteMenuItem('Item 1', icon_name='format-justify-fill') menu_box.append_item(menu_item) menu_item = PaletteMenuItem('Item 1', icon_name='format-justify-center') menu_box.append_item(menu_item) menu_item = PaletteMenuItem('Item 1', icon_name='format-justify-left') menu_box.append_item(menu_item) menu_item = PaletteMenuItem('Item 1', icon_name='format-justify-right') menu_box.append_item(menu_item) self.add(vbox) self.show_all() self.connect('destroy', Gtk.main_quit) PyApp() Gtk.main() Pippy-76/data/es/000077500000000000000000000000001445132016300137305ustar00rootroot00000000000000Pippy-76/data/es/tutorials/000077500000000000000000000000001445132016300157565ustar00rootroot00000000000000Pippy-76/data/es/tutorials/Tutorial_01_entrada_simple.py000066400000000000000000000001271445132016300235020ustar00rootroot00000000000000# -*- coding: utf-8 -*- name = input('¿Cual es tu nombre?\n') print('Hi, %s.' % name) Pippy-76/data/es/tutorials/Tutorial_02_while.py000066400000000000000000000005371445132016300216310ustar00rootroot00000000000000# -*- coding: utf-8 import time def while_cuenta_regresiva(numero): while(numero > -1): print(str(numero) + ' para la explosion!!!') time.sleep(1) numero = numero -1 numero = eval(input('Escribe un numero: ')) print('Cuenta regresiva usando sentencia while!!') while_cuenta_regresiva(numero) print('Kaboooommm!!!, X_X') Pippy-76/data/es/tutorials/Tutorial_03_rango.py000066400000000000000000000006511445132016300216250ustar00rootroot00000000000000def suma_en_rango(num1, num2): total = num1 num1 = num1 + 1 num2 = num2 + 1 for i in range(num1, num2): print(str(total) + " + " + str(i) + " = " + str(total+i)) total = total + 1 numero1 = int(eval(input('Escribe primer numero: '))) numero2 = int(eval(input('Escribe segundo numero: '))) if numero1 < numero2: suma_en_rango(numero1, numero2) else: suma_en_rango(numero2, numero1) Pippy-76/data/es/tutorials/Tutorial_04_lista.py000066400000000000000000000003401445132016300216270ustar00rootroot00000000000000mi_lista = [] num = 1 while(num < 5): data = eval(input("Porfavor escriba el numero " + str(num) + ":")) mi_lista.append(int(data)) num = num + 1 print("Tu escribiste los siguientes numeros:") print(mi_lista) Pippy-76/data/es/tutorials/Tutorial_05_diccionarios.py000066400000000000000000000005031445132016300231630ustar00rootroot00000000000000canasta = { 'naranjas': 12, 'peras': 5, 'manzanas': 4 } canasta['bananas'] = 5 print(canasta) print("Hay %d tipos de fruta en la canasta" % len(canasta)) print(canasta['manzanas']) canasta['manzanas'] = 8 print(canasta['manzanas']) print(canasta.get('naranjas', 'undefined')) print(canasta.get('cerezas', 'undefined')) Pippy-76/data/es/tutorials/Tutorial_06_try_except.py000066400000000000000000000003611445132016300227060ustar00rootroot00000000000000def es_numero_valido(num): try: int(num) print("Escribio un numero") except: print("Lo siento, no escribiste un numero") number1 = eval(input("Escriba y le dire si es un numero: ")) es_numero_valido(number1) Pippy-76/data/es/tutorials/Tutorial_07_gtk_ventana_basica.py000066400000000000000000000006071445132016300243270ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title("Hola mundo!!") self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 150) self.connect("destroy", Gtk.main_quit) self.show() PyApp() Gtk.main() Pippy-76/data/es/tutorials/Tutorial_08_gtk_ventana_boton.py000066400000000000000000000011561445132016300242270ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title("Boton") self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 200) def button_cb(widget): print('click') button = Gtk.Button(label="Boton") fixed = Gtk.Fixed() fixed.put(button, 20, 30) button.connect('clicked', button_cb) self.connect("destroy", Gtk.main_quit) self.add(fixed) self.show_all() PyApp() Gtk.main() Pippy-76/data/es/tutorials/Tutorial_09_gtk_caja_de_texto.py000066400000000000000000000014021445132016300241560ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk from gi.repository import Gdk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Entrada de Texto') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 150) def entry_cb(widget, event): if Gdk.keyval_name(event.keyval) == 'Return': print(widget.get_text()) entry = Gtk.Entry() entry.connect('key_press_event', entry_cb) entry.show() fixed = Gtk.Fixed() fixed.put(entry, 20, 30) fixed.show() self.add(fixed) self.show() self.connect('destroy', Gtk.main_quit) PyApp() Gtk.main() Pippy-76/data/es/tutorials/Tutorial_10_gtk_cuadricula.py000066400000000000000000000016241445132016300234770ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Cuadricula') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) grid = Gtk.Grid() grid.set_column_homogeneous(True) grid.set_row_homogeneous(True) button = Gtk.Button(label='Boton 1') grid.attach(button, 0, 0, 1, 1) button = Gtk.Button(label='Boton 2') grid.attach(button, 0, 2, 1, 2) button = Gtk.Button(label='Boton 3') grid.attach(button, 1, 1, 2, 2) button = Gtk.Button(label='Boton 4') grid.attach(button, 2, 0, 2, 1) button = Gtk.Button(label='Boton 5') grid.attach(button, 3, 3, 3, 3) self.add(grid) self.show_all() self.connect('destroy', Gtk.main_quit) PyApp() Gtk.main() Pippy-76/data/es/tutorials/Tutorial_11_gtk_ventana_de_desplazamiento.py000066400000000000000000000012341445132016300265640ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Ventana de desplazamiento') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 150) scrolled = Gtk.ScrolledWindow() vbox = Gtk.VBox() scrolled.add(vbox) for x in range(1, 16): boton = Gtk.Button(label='Boton %d' % x) vbox.pack_start(boton, False, False, 1) self.add(scrolled) self.show_all() self.connect('destroy', Gtk.main_quit) PyApp() Gtk.main() Pippy-76/data/es/tutorials/Tutorial_12_gtk_visor_de_texto.py000066400000000000000000000021561445132016300244230ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Visor de texto') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 150) scrolled = Gtk.ScrolledWindow() textview = Gtk.TextView() scrolled.add(textview) textbuffer = textview.get_buffer() textbuffer.set_text('Multiples lineas\nen un mismo editor\n') end = textbuffer.get_end_iter() anchor = textbuffer.create_child_anchor(end) box = Gtk.HBox() textview.add_child_at_anchor(box, anchor) button = Gtk.Button(label='Haz click en mi') button.connect('clicked', self._clicked_cb, textbuffer) box.pack_start(button, False, False, 0) self.add(scrolled) self.show_all() self.connect('destroy', Gtk.main_quit) def _clicked_cb(self, button, textbuffer): end = textbuffer.get_end_iter() textbuffer.insert(end, 'Haz hecho click en el boton!\n') PyApp() Gtk.main() Pippy-76/data/es/tutorials/Tutorial_13_gtk_botones_de_radio.py000066400000000000000000000021271445132016300246640ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Botones de radio') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 150) vbox = Gtk.VBox() button1 = Gtk.RadioButton(group=None, label='Boton 1') button1.connect('toggled', self._activate_cb, 1) vbox.pack_start(button1, True, True, 2) button2 = Gtk.RadioButton(group=button1, label='Boton 2') button2.connect('toggled', self._activate_cb, 2) vbox.pack_start(button2, True, True, 2) button3 = Gtk.RadioButton(group=button1, label='Boton 3') button3.connect('toggled', self._activate_cb, 3) vbox.pack_start(button3, True, True, 2) self.add(vbox) self.show_all() self.connect('destroy', Gtk.main_quit) def _activate_cb(self, button, button_index): if button.get_active(): print('Has seleccionado el boton %d' % button_index) PyApp() Gtk.main() Pippy-76/data/es/tutorials/Tutorial_14_menu.py000066400000000000000000000137701445132016300214730ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Menu') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_size_request(250, 150) accel_group = Gtk.AccelGroup() self.add_accel_group(accel_group) vbox = Gtk.VBox() menubar = Gtk.MenuBar() vbox.pack_start(menubar, False, False, 0) self.label = Gtk.Label(label='Activa un item del menu') vbox.pack_start(self.label, True, True, 0) menu_file = Gtk.Menu() item_file = Gtk.MenuItem.new_with_mnemonic('_Archivo') item_file.set_submenu(menu_file) menubar.append(item_file) item_new = Gtk.MenuItem.new_with_mnemonic('_Nuevo') key, mod = Gtk.accelerator_parse('N') item_new.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_new.connect('activate', self._activate_cb, 'Nuevo') menu_file.append(item_new) item_open = Gtk.MenuItem.new_with_mnemonic('_Abrir') key, mod = Gtk.accelerator_parse('O') item_open.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_open.connect('activate', self._activate_cb, 'Abrir') menu_file.append(item_open) menu_recents = Gtk.Menu() item_recents = Gtk.MenuItem.new_with_mnemonic('Abrir _reciente') item_recents.set_submenu(menu_recents) menu_file.append(item_recents) for recent_file in range(1, 6): item_recent = Gtk.MenuItem.new_with_mnemonic('_%d: Archivo reciente %d' % (recent_file, recent_file)) item_recent.connect('activate', self._activate_cb, 'Archivo reciente %d' % recent_file) menu_recents.append(item_recent) separator = Gtk.SeparatorMenuItem() menu_file.append(separator) item_exit = Gtk.MenuItem.new_with_mnemonic('_Salir') key, mod = Gtk.accelerator_parse('Q') item_exit.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_exit.connect('activate', self._activate_cb, 'Salir') menu_file.append(item_exit) menu_edit = Gtk.Menu() item_edit = Gtk.MenuItem.new_with_mnemonic('_Editar') item_edit.set_submenu(menu_edit) menubar.append(item_edit) item_undo = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_UNDO, None) key, mod = Gtk.accelerator_parse('Z') item_undo.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_undo.connect('activate', self._activate_cb, 'Deshacer') menu_edit.append(item_undo) item_redo = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_REDO, None) key, mod = Gtk.accelerator_parse('Z') item_redo.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_redo.connect('activate', self._activate_cb, 'Reahacer') menu_edit.append(item_redo) separator = Gtk.SeparatorMenuItem() menu_edit.append(separator) item_copy = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_COPY, None) key, mod = Gtk.accelerator_parse('C') item_copy.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_copy.connect('activate', self._activate_cb, 'Copiar') menu_edit.append(item_copy) item_cut = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_CUT, None) key, mod = Gtk.accelerator_parse('X') item_cut.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_cut.connect('activate', self._activate_cb, 'Cortar') menu_edit.append(item_cut) item_paste = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_PASTE, None) key, mod = Gtk.accelerator_parse('V') item_paste.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_paste.connect('activate', self._activate_cb, 'Pegar') menu_edit.append(item_paste) separator = Gtk.SeparatorMenuItem() menu_edit.append(separator) label = 'Pagina vertical' item_vertical = Gtk.RadioMenuItem(label=label) item_vertical.set_active(True) item_vertical.connect('toggled', self._toggled_cb, label) menu_edit.append(item_vertical) label = 'Pagina horizontal' item_horizontal = Gtk.RadioMenuItem.new_with_label((item_vertical,), label) item_horizontal.connect('toggled', self._toggled_cb, label) menu_edit.append(item_horizontal) menu_view = Gtk.Menu() item_view = Gtk.MenuItem.new_with_mnemonic('_Ver') item_view.set_submenu(menu_view) menubar.append(item_view) item_hides = Gtk.CheckMenuItem.new_with_mnemonic('_Archivos ocultos') key, mod = Gtk.accelerator_parse('H') item_hides.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_hides.connect('toggled', self._toggled_cb, 'Archivos ocultos', True) menu_view.append(item_hides) menu_help = Gtk.Menu() item_help = Gtk.MenuItem(label='Ayuda') item_help.set_submenu(menu_help) menubar.append(item_help) item_about = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_ABOUT, None) item_about.add_accelerator('activate', accel_group, key, mod, Gtk.AccelFlags.VISIBLE) item_about.connect('activate', self._activate_cb, 'Acerca de') menu_help.append(item_about) self.add(vbox) self.show_all() self.connect('destroy', Gtk.main_quit) def _activate_cb(self, item, label): self.label.set_text('Activaste el item %s' % label) def _toggled_cb(self, item, label, no_active=False): if item.get_active(): self.label.set_text('Activaste el item %s' % label) elif not item.get_active() and no_active: self.label.set_text('Desactivaste el item %s' % label) PyApp() Gtk.main() Pippy-76/data/es/tutorials/Tutorial_15_gtk_barra_de_progreso.py000066400000000000000000000025001445132016300250410ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk from gi.repository import GLib class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Barras de progreso') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_border_width(20) self.fraction = 0 grid = Gtk.Grid() grid.set_row_spacing(10) self.bar1 = Gtk.ProgressBar() self.bar1.set_hexpand(True) self.bar1.set_vexpand(True) grid.attach(self.bar1, 1, 0, 3, 1) label = Gtk.Label(label='Una barra de progreso simple') label.set_hexpand(True) grid.attach(label, 1, 1, 1, 1) self.bar2 = Gtk.ProgressBar() self.bar2.set_hexpand(True) self.bar2.set_vexpand(True) grid.attach(self.bar2, 1, 2, 3, 1) label = Gtk.Label(label='Una barra de progreso con pulsos') grid.attach(label, 1, 3, 1, 1) GLib.timeout_add(200, self._update) self.add(grid) self.show_all() self.connect('destroy', Gtk.main_quit) def _update(self): self.fraction += 0.01 if self.fraction >= 1: self.fraction = 0 self.bar1.set_fraction(self.fraction) self.bar2.pulse() return True PyApp() Gtk.main() Pippy-76/data/es/tutorials/Tutorial_16_sugar_paletas.py000066400000000000000000000054261445132016300233620ustar00rootroot00000000000000import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk from sugar3.graphics.toolbarbox import ToolbarBox from sugar3.graphics.toolbutton import ToolButton from sugar3.graphics.palettemenu import PaletteMenuBox from sugar3.graphics.palettemenu import PaletteMenuItem from sugar3.graphics.colorbutton import ColorToolButton class PyApp(Gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title('Paletas') self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) vbox = Gtk.VBox() toolbarbox = ToolbarBox() vbox.add(toolbarbox) toolbar = toolbarbox.toolbar color_button = ColorToolButton() toolbar.insert(color_button, -1) button = ToolButton('list-add') button.set_tooltip('Paleta con widgets') toolbar.insert(button, -1) palette = button.get_palette() palette_box = Gtk.VBox() palette.set_content(palette_box) checkbutton1 = Gtk.CheckButton(label='Opcion 1') palette_box.pack_start(checkbutton1, False, False, 0) checkbutton2 = Gtk.CheckButton(label='Opcion 2') palette_box.pack_start(checkbutton2, False, False, 0) checkbutton3 = Gtk.CheckButton(label='Opcion 3') palette_box.pack_start(checkbutton3, False, False, 0) separator = Gtk.VSeparator() palette_box.pack_start(separator, False, False, 0) radio_button1 = Gtk.RadioButton(label="Opcion 1") palette_box.pack_start(radio_button1, False, False, 0) radio_button2 = Gtk.RadioButton(label="Opcion 2", group=radio_button1) palette_box.pack_start(radio_button2, False, False, 0) radio_button3 = Gtk.RadioButton(label="Opcion 3", group=radio_button1) palette_box.pack_start(radio_button3, False, False, 0) palette_box.show_all() button = ToolButton(icon_name='format-justify-fill') button.props.tooltip = 'Select list' button.props.hide_tooltip_on_click = False button.palette_invoker.props.toggle_palette = True toolbar.insert(button, -1) menu_box = PaletteMenuBox() button.props.palette.set_content(menu_box) menu_box.show() menu_item = PaletteMenuItem("Item 1", icon_name="format-justify-fill") menu_box.append_item(menu_item) menu_item = PaletteMenuItem("Item 1", icon_name="format-justify-center") menu_box.append_item(menu_item) menu_item = PaletteMenuItem("Item 1", icon_name="format-justify-left") menu_box.append_item(menu_item) menu_item = PaletteMenuItem("Item 1", icon_name="format-justify-right") menu_box.append_item(menu_item) self.add(vbox) self.show_all() self.connect('destroy', Gtk.main_quit) PyApp() Gtk.main() Pippy-76/filedialog.py000066400000000000000000000107651445132016300150720ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2014 Walter Bender # Copyright (C) 2014 Ignacio Rodríguez # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA from gi.repository import Gtk, Gdk from sugar3.graphics.toolbarbox import ToolbarBox from sugar3.graphics.toolbutton import ToolButton from gettext import gettext as _ import os class FileDialog(Gtk.Dialog): """ Simple file dialog: from filedialog import FileDialog dialog = FileDialog(['Graphics', '/path/of/graphics']) dialog.run() path = dialog.get_path() """ def __init__(self, dirs, window=None, button=None): Gtk.Dialog.__init__(self, flags=Gtk.DialogFlags.DESTROY_WITH_PARENT) self.example_path = None self.expanders = [] self.dirs = dirs self.button = button x, y = (Gdk.Screen.width() / 1.5, Gdk.Screen.height() / 1.5) self.set_size_request(x, y) toolbox = self.build_toolbar() expands = self.build_scroll() self.vbox.pack_start(toolbox, False, False, 0) self.vbox.pack_start(expands, True, True, 5) self.set_decorated(False) self.set_skip_pager_hint(True) self.set_skip_taskbar_hint(True) self.set_resizable(False) self.set_modal(True) self.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse('#F3EEEE')) self.show_all() def get_path(self): return self.example_path def _destroy(self, widget, sample=False): if sample: self.example_path = widget.get_tooltip_text() if self.button: self.button.set_icon_name("pippy-openoff") self.destroy() def build_toolbar(self): toolbox = ToolbarBox() toolbar = toolbox.toolbar label = Gtk.Label(_('Choose an example to open')) label.modify_fg(Gtk.StateType.NORMAL, Gdk.color_parse('white')) item = Gtk.ToolItem() item.add(label) close = ToolButton('entry-cancel') close.connect('clicked', self._destroy) separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbar.insert(item, -1) toolbar.insert(separator, -1) toolbar.insert(close, -1) toolbox.set_size_request(-1, 35) return toolbox def build_scroll(self): scroll = Gtk.ScrolledWindow() scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) vbox = Gtk.VBox() scroll.add_with_viewport(vbox) dirs = self.dirs for dir_ in dirs: dir_path = dir_[1] dir_name = dir_[0] expand = self.build_expand(dir_path, dir_name) if not expand: continue vbox.pack_start(expand, False, False, 2) expand.show() self.expanders.append(expand) return scroll def build_expand(self, path, name): if not os.path.exists(path): return None expander = Gtk.Expander() expander.set_label(name) expander.modify_fg(Gtk.StateType.NORMAL, Gdk.color_parse('black')) vbox = Gtk.VBox() for root, dirs, files in os.walk(path): if not files: return None files.sort() for _file in files: if _file.endswith('~'): continue entry = {"name": _(_file.capitalize()), "path": os.path.join(path, _file)} button = Gtk.Button(label=entry['name']) button.set_tooltip_text(entry['path']) button.set_has_tooltip(False) button.connect('clicked', self._destroy, True) vbox.pack_start(button, False, False, 1) expander.add(vbox) return expander Pippy-76/icondialog.py000066400000000000000000000125321445132016300150750ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # Copyright (C) 2013 Ignacio Rodríguez # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import shutil from gi.repository import Gtk from gi.repository import Gdk from gi.repository import GdkPixbuf from jarabe.journal.model import get_documents_path from sugar3.activity.activity import get_bundle_path from sugar3.graphics.toolbutton import ToolButton from sugar3.graphics.toolbarbox import ToolbarBox from gettext import gettext as _ import os DEFAULT_NAME = "default-pippy.svg" DEFAULT_ICON = os.path.join(get_bundle_path(), 'activity', 'activity-default.svg') def get_document_icons(): icons = os.listdir(get_documents_path()) icons_ = [] for icon in icons: if icon.endswith('.svg'): icons_.append(icon[:-4]) return icons_ def get_user_path(): user = os.path.expanduser("~") path = os.path.join(user, ".icons") if not os.path.exists(path): os.mkdir(path) if os.path.exists(DEFAULT_NAME): os.remove(DEFAULT_NAME) shutil.copy(DEFAULT_ICON, os.path.join(path, DEFAULT_NAME)) return path def get_usericons_icons(): path = get_user_path() icons = os.listdir(path) icons_ = [] for icon in icons: if icon.endswith('.svg'): icons_.append(icon[:-4]) return icons_ def get_user_icons(): home = get_usericons_icons() documents = get_document_icons() final = [] for x in home: final.append(x) for x in documents: final.append(x) return final class IconDialog(Gtk.Window): def __init__(self): Gtk.Window.__init__(self) self.set_destroy_with_parent(True) self.theme = Gtk.IconTheme.get_default() self.theme.append_search_path(get_documents_path()) self._icon = None grid = Gtk.Grid() self.x, self.y = (Gdk.Screen.width() / 1.5, Gdk.Screen.height() / 1.5) self.set_size_request(self.x, self.y) self.icons = None toolbox = self.build_toolbar() self.icons = self.build_scroll() grid.attach(toolbox, 0, 1, 1, 1) grid.attach(self.icons, 0, 2, 1, 1) self.set_decorated(False) self.set_skip_pager_hint(True) self.set_skip_taskbar_hint(True) self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.set_resizable(False) self.set_modal(True) self.add(grid) self.show_all() def build_toolbar(self): toolbox = ToolbarBox() label = Gtk.Label("\t" + _('Select an icon')) label.modify_fg(Gtk.StateType.NORMAL, Gdk.color_parse('white')) item = Gtk.ToolItem() item.add(label) close = ToolButton('entry-cancel') close.connect('clicked', lambda x: self.destroy()) separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) toolbox.toolbar.insert(item, -1) toolbox.toolbar.insert(separator, -1) toolbox.toolbar.insert(close, -1) return toolbox def get_icon(self): return self._icon def build_scroll(self): scroll = Gtk.ScrolledWindow() scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) icons = self.build_icons() scroll.set_size_request(self.x, self.y) scroll.add_with_viewport(icons) return scroll def build_icons(self): store = Gtk.ListStore(GdkPixbuf.Pixbuf, str, str) icon_view = Gtk.IconView.new_with_model(store) icon_view.set_selection_mode(Gtk.SelectionMode.SINGLE) icon_view.connect('selection-changed', self.set_icon, store) icon_view.set_pixbuf_column(0) icon_view.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse('#D5D5D5')) for icon in get_user_icons(): info = self.theme.lookup_icon(icon, 55, Gtk.IconLookupFlags.FORCE_SVG) if not info: continue icon_path = os.path.join(get_user_path(), icon + ".svg") if not os.path.exists(icon_path): icon_path = os.path.join(get_documents_path(), icon + ".svg") if not os.path.exists(icon_path): icon_path = info.get_filename() pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( icon_path, 55, 55) store.insert(-1, [pixbuf, icon, icon_path]) return icon_view def set_icon(self, widget, model): try: iter_ = model.get_iter(widget.get_selected_items()[0]) except: return icon_path = model.get(iter_, 2)[0] self._icon = icon_path self.destroy() Pippy-76/icons/000077500000000000000000000000001445132016300135235ustar00rootroot00000000000000Pippy-76/icons/close-tab.svg000066400000000000000000000020671445132016300161220ustar00rootroot00000000000000 ]> Pippy-76/icons/dark-theme.svg000066400000000000000000000073001445132016300162650ustar00rootroot00000000000000 image/svg+xml A Pippy-76/icons/eraser_bw.svg000066400000000000000000000034451445132016300162230ustar00rootroot00000000000000 Pippy-76/icons/eraser_color.svg000066400000000000000000000031641445132016300167270ustar00rootroot00000000000000 Pippy-76/icons/light-theme.svg000066400000000000000000000073221445132016300164570ustar00rootroot00000000000000 image/svg+xml A Pippy-76/icons/pippy-create-bundle.svg000066400000000000000000000073341445132016300201240ustar00rootroot00000000000000 image/svg+xmlPippy-76/icons/pippy-create-distutils.svg000066400000000000000000000072741445132016300207020ustar00rootroot00000000000000 image/svg+xmlPippy-76/icons/pippy-export-doc.svg000066400000000000000000000116131445132016300174710ustar00rootroot00000000000000 ]> Pippy-76/icons/pippy-export-example.svg000066400000000000000000000066121445132016300203620ustar00rootroot00000000000000 ]> Pippy-76/icons/pippy-export-library.svg000066400000000000000000000134671445132016300204010ustar00rootroot00000000000000 image/svg+xmlPippy-76/icons/pippy-import-doc.svg000066400000000000000000000144111445132016300174610ustar00rootroot00000000000000 image/svg+xmlPippy-76/icons/pippy-import_py.svg000066400000000000000000000123751445132016300174350ustar00rootroot00000000000000 image/svg+xml Pippy-76/icons/pippy-openoff.svg000066400000000000000000000112561445132016300170440ustar00rootroot00000000000000 image/svg+xml Pippy-76/icons/pippy-openon.svg000066400000000000000000000113701445132016300167030ustar00rootroot00000000000000 image/svg+xml Pippy-76/icons/pippy-save_library.svg000066400000000000000000000107641445132016300200750ustar00rootroot00000000000000 image/svg+xmlPippy-76/icons/run_bw.svg000066400000000000000000000025011445132016300155360ustar00rootroot00000000000000 Pippy-76/icons/run_color.svg000066400000000000000000000025011445132016300162440ustar00rootroot00000000000000 Pippy-76/icons/stopit_bw.svg000066400000000000000000000047641445132016300162710ustar00rootroot00000000000000 Pippy-76/icons/stopit_color.svg000066400000000000000000000047641445132016300167770ustar00rootroot00000000000000 Pippy-76/library/000077500000000000000000000000001445132016300140545ustar00rootroot00000000000000Pippy-76/library/pippy/000077500000000000000000000000001445132016300152155ustar00rootroot00000000000000Pippy-76/library/pippy/__init__.py000066400000000000000000000020641445132016300173300ustar00rootroot00000000000000# Copyright (C) 2007,2008,2010 One Laptop per Child Association, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA """Pippy standard library.""" import pippy.console as console import pippy.game as pygame try: import pippy.sound as sound except ImportError: pass # this module fails to import on non-XOs. def wait(delay=0.1): """Pause briefly, for animations.""" import time time.sleep(delay) Pippy-76/library/pippy/console.py000066400000000000000000000123201445132016300172270ustar00rootroot00000000000000"""Console helpers for pippy.""" # Copyright (C) 2007,2008,2010 One Laptop per Child Association, Inc. # Written by C. Scott Ananian # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import sys import os import tty import termios def clear(): """Clear screen on console.""" # magic escape sequence sys.stdout.write('\x1B[H\x1B[J') def size(): """Return the number of rows/columns in the current terminal widget.""" # xterm magic! see http://rtfm.etla.org/xterm/ctlseq.html fd = os.open('/dev/tty', os.O_RDWR | os.O_APPEND) def read_to_delimit(delimit): buf = [] while True: c = os.read(fd, 1) if c == delimit: break buf.append(c) return b''.join(buf) oldattr = termios.tcgetattr(fd) # make sure we can restore tty state tty.setraw(fd, termios.TCSANOW) # set to raw mode. os.write(fd, b'\x1B[18t') # write the 'query screen size' command read_to_delimit(b'\x1b') # parse response. read_to_delimit(b'[') size = read_to_delimit(b't') # Output can be '8;rows;cols' or 'rows;cols' depending on vte version. # (SL #843) values = size.split(b';') if len(values) == 3: rows = int(values[1]) cols = int(values[2]) else: rows = int(values[0]) cols = int(values[1]) termios.tcsetattr(fd, termios.TCSANOW, oldattr) # reset tty return cols, rows def getpos(): """Return the current x, y position of the cursor on the screen. The top-left corner is 1,1.""" # xterm magic! see http://rtfm.etla.org/xterm/ctlseq.html sys.stdout.flush() # ensure that writes to the terminal have finished fd = os.open('/dev/tty', os.O_RDWR | os.O_APPEND) def read_to_delimit(delimit): buf = [] while True: c = os.read(fd, 1) if c == delimit: break buf.append(c) return b''.join(buf) oldattr = termios.tcgetattr(fd) # make sure we can restore tty state tty.setraw(fd, termios.TCSANOW) # set to raw mode. os.write(fd, b'\x1B[6n') # Report Cursor Position read_to_delimit(b'\x1b') # parse response. read_to_delimit(b'[') row = int(read_to_delimit(b';')) col = int(read_to_delimit(b'R')) termios.tcsetattr(fd, termios.TCSANOW, oldattr) # reset tty return col, row def setpos(column, row): """Move to the given position on the screen. The top-left corner is 1,1""" # xterm magic! see http://rtfm.etla.org/xterm/ctlseq.html sys.stdout.write('\x1B[%d;%dH' % (row, column)) def up(count=1): """Move the cursor up the given number of rows.""" sys.stdout.write('\x1B[%dA' % count) def down(count=1): """Move the cursor down the given number of rows.""" sys.stdout.write('\x1B[%dB' % count) def forward(count=1): """Move the cursor forward the given number of columns.""" sys.stdout.write('\x1B[%dC' % count) def backward(count=1): """Move the cursor backward the given number of columns.""" sys.stdout.write('\x1B[%dD' % count) def normal(): """Switch to normal text.""" sys.stdout.write('\x1B[0m') def bold(): """Switch to bold text.""" sys.stdout.write('\x1B[1m') def underlined(): """Switch to underlined text.""" sys.stdout.write('\x1B[4m') def inverse(): """Switch to inverse text.""" sys.stdout.write('\x1B[7m') def black(): """Change text color to black.""" # magic escape sequence. sys.stdout.write('\x1B[30m') def red(): """Change text color to red.""" # magic escape sequence. sys.stdout.write('\x1B[31m') def green(): """Change text color to green.""" # magic escape sequence. sys.stdout.write('\x1B[32m') def yellow(): """Change text color to yellow.""" # magic escape sequence. sys.stdout.write('\x1B[33m') def blue(): """Change text color to blue.""" # magic escape sequence. sys.stdout.write('\x1B[34m') def magenta(): """Change text color to magenta.""" # magic escape sequence. sys.stdout.write('\x1B[35m') def cyan(): """Change text color to cyan.""" # magic escape sequence. sys.stdout.write('\x1B[36m') def white(): """Change text color to white.""" # magic escape sequence. sys.stdout.write('\x1B[37m') def hide_cursor(): """Hide the cursor.""" sys.stdout.write('\x1B[?25l') def show_cursor(): """Show the cursor.""" sys.stdout.write('\x1B[?25h') def reset(): """Clear screen and reset text color.""" clear() show_cursor() sys.stdout.write('\x1B[0;39m') Pippy-76/library/pippy/game.py000066400000000000000000000061601445132016300165030ustar00rootroot00000000000000"""pygame support for pippy.""" # Copyright (C) 2007,2008 One Laptop per Child Association, Inc. # Written by C. Scott Ananian # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA def pause(): """Display a "Paused" screen and suspend.""" from gettext import gettext as _ import pygame caption, icon_caption = pygame.display.get_caption() screen = pygame.display.get_surface() old_screen = screen.copy() # save this for later. # dim the screen and display the 'paused' message in the center. BLACK = (0, 0, 0) WHITE = (255, 255, 255) dimmed = screen.copy() dimmed.set_alpha(128) screen.fill(BLACK) screen.blit(dimmed, (0, 0)) font = pygame.font.Font(None, 36) # 36px high msg = _("PAUSED") msg_surf = font.render(msg, True, BLACK, WHITE) def center(rect, screen): rect.center = (screen.get_width() / 2, screen.get_height() / 2) rect = pygame.Rect((0, 0), msg_surf.get_size()) rect.inflate_ip(rect.width, rect.height) center(rect, screen) screen.fill(WHITE, rect) rect = msg_surf.get_rect() center(rect, screen) screen.blit(msg_surf, rect) pygame.display.flip() # SUSPEND try: raise RuntimeError() # XXX don't try this yet. we should use ohm. open('/sys/power/state', 'w').write('mem') except: # couldn't suspend (no permissions?) pygame.event.post(pygame.event.wait()) pygame.display.set_caption(caption, icon_caption) screen.blit(old_screen, (0, 0)) pygame.display.flip() _last_event_time = 0 _default_clock = None def next_frame(max_fps=20, idle_timeout=20, clock=None, pause=pause): """Limit maximum frame rate of pygame. Returns True. If idle longer than the idle_timeout (in seconds), then we'll put up a "paused" message and the XO will suspend. This ensures that we don't burn up all of our battery running an animation!""" import pygame global _last_event_time, _default_clock if _default_clock is None: _default_clock = pygame.time.Clock() if clock is None: clock = _default_clock clock.tick(max_fps) if pygame.event.peek(list(range(pygame.NOEVENT, pygame.USEREVENT))): # we're not idle anymore. _last_event_time = pygame.time.get_ticks() elif (pygame.time.get_ticks() - _last_event_time) >= idle_timeout * 1000: # we've been idle for a long time. Pause & suspend. pause() _last_event_time = pygame.time.get_ticks() return True Pippy-76/library/pippy/physics/000077500000000000000000000000001445132016300166775ustar00rootroot00000000000000Pippy-76/library/pippy/physics/__init__.py000066400000000000000000000003331445132016300210070ustar00rootroot00000000000000import sys __all__ = ['locals', 'menu'] # Use own 'elements' modified module # http://bugs.sugarlabs.org/ticket/3361 # sys.path.append('library/pippy/physics/Elements-0.13-py2.5.egg') from .myelements import Elements Pippy-76/library/pippy/physics/myelements/000077500000000000000000000000001445132016300210615ustar00rootroot00000000000000Pippy-76/library/pippy/physics/myelements/__init__.py000066400000000000000000000000741445132016300231730ustar00rootroot00000000000000__all__ = ['locals', 'menu'] from .elements import Elements Pippy-76/library/pippy/physics/myelements/add_objects.py000066400000000000000000000463151445132016300237050ustar00rootroot00000000000000""" This file is part of the 'Elements' Project Elements is a 2D Physics API for Python (supporting Box2D2) Copyright (C) 2008, The Elements Team, Home: http://elements.linuxuser.at IRC: #elements on irc.freenode.org Code: http://www.assembla.com/wiki/show/elements svn co http://svn2.assembla.com/svn/elements License: GPLv3 | See LICENSE for the full text This program is free software: you can 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 . """ from .locals import * from .elements import box2d # Imports from math import pi from math import sqrt from math import asin from . import tools_poly class Add: element_count = 0 def __init__(self, parent): self.parent = parent def ground(self): """ Add a static ground to the scene Return: box2d.b2Body """ return self._rect((-10.0, 0.0), 50.0, 0.1, dynamic=False) def triangle(self, pos, sidelength, dynamic=True, density=1.0, restitution=0.16, friction=0.5, screenCoord=True): """ Add a triangle | pos & a in the current input unit system (meters or pixels) Parameters: pos .... position (x,y) sidelength ...... sidelength other .. see [physics parameters] Return: box2d.b2Body """ vertices = [(-sidelength, 0.0), (sidelength, 0.0), (0.0, 2 * sidelength)] return self.poly(pos, vertices, dynamic, density, restitution, friction, screenCoord) def ball(self, pos, radius, dynamic=True, density=1.0, restitution=0.16, friction=0.5, screenCoord=True): """ Add a dynamic ball at pos after correcting the positions and lengths to the internal meter system if neccessary (if INPUT_PIXELS), then call self._add_ball(...) Parameters: pos ..... position (x,y) radius .. circle radius other ... see [physics parameters] Return: box2d.b2Body """ # Bring coordinates into the world coordinate system (flip, # camera offset, ...) if screenCoord: x, y = self.parent.to_world(pos) else: x, y = pos if self.parent.input_unit == INPUT_PIXELS: x /= self.parent.ppm y /= self.parent.ppm radius /= self.parent.ppm return self._ball((x, y), radius, dynamic, density, restitution, friction) def _ball(self, pos, radius, dynamic=True, density=1.0, restitution=0.16, friction=0.5): # Add a ball without correcting any settings # meaning, pos and vertices are in meters # Define the body x, y = pos bodyDef = box2d.b2BodyDef() bodyDef.position = (x, y) userData = {'color': self.parent.get_color()} bodyDef.userData = userData # Create the Body if not dynamic: density = 0 else: bodyDef.type = box2d.b2_dynamicBody body = self.parent.world.CreateBody(bodyDef) self.parent.element_count += 1 # Add a shape to the Body circleShape = box2d.b2CircleShape() circleShape.radius = radius circleDef = box2d.b2FixtureDef() circleDef.shape = circleShape circleDef.density = density circleDef.restitution = restitution circleDef.friction = friction body.CreateFixture(circleDef) return body def rect(self, pos, width, height, angle=0, dynamic=True, density=1.0, restitution=0.16, friction=0.5, screenCoord=True): """ Add a dynamic rectangle with input unit according to self.input (INPUT_PIXELS or INPUT_METERS) Correcting the positions to meters and calling self._add_rect() Parameters: pos ..... position (x,y) width ....... horizontal line height ....... vertical line angle ........ in degrees (0 .. 360) other ... see [physics parameters] Return: box2d.b2Body """ # Bring coordinates into the world coordinate system (flip, # camera offset, ...) if screenCoord: x, y = self.parent.to_world(pos) else: x, y = pos # If required, translate pixel -> meters if self.parent.input_unit == INPUT_PIXELS: x /= self.parent.ppm y /= self.parent.ppm width /= self.parent.ppm height /= self.parent.ppm # grad -> radians angle = (angle * pi) / 180 return self._rect((x, y), width, height, angle, dynamic, density, restitution, friction) def wall(self, pos1, pos2, width=5, density=1.0, restitution=0.16, friction=0.5, screenCoord=True): """ Add a static rectangle between two arbitrary points with input unit according to self.input_unit (INPUT_PIXELS or INPUT_METERS) Correcting the positions to meters and calling self._add_rect() Return: box2d.b2Body """ if width < 5: width = 5 if (pos1[0] < pos2[0]): x1, y1 = pos1 x2, y2 = pos2 else: x1, y1 = pos2 x2, y2 = pos1 # Bring coordinates into the world coordinate system (flip, # camera offset, ...) if screenCoord: x1, y1 = self.parent.to_world((x1, y1)) x2, y2 = self.parent.to_world((x2, y2)) # If required, translate pixel -> meters if self.parent.input_unit == INPUT_PIXELS: x1 /= self.parent.ppm y1 /= self.parent.ppm x2 /= self.parent.ppm y2 /= self.parent.ppm width /= self.parent.ppm length = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) * 0.5 if width > 0: halfX = x1 + (x2 - x1) * 0.5 halfY = y1 + (y2 - y1) * 0.5 angle = asin((y2 - halfY) / length) return self._rect((halfX, halfY), length, width, angle, False, density, restitution, friction) def _rect(self, pos, width, height, angle=0, dynamic=True, density=1.0, restitution=0.16, friction=0.5): # Add a rect without correcting any settings # meaning, pos and vertices are in meters # angle is now in radians ((degrees * pi) / 180)) x, y = pos bodyDef = box2d.b2BodyDef() bodyDef.position = (x, y) userData = {'color': self.parent.get_color()} bodyDef.userData = userData # Create the Body if not dynamic: density = 0 else: bodyDef.type = box2d.b2_dynamicBody body = self.parent.world.CreateBody(bodyDef) self.parent.element_count += 1 # Add a shape to the Body boxDef = box2d.b2FixtureDef() polygonShape = box2d.b2PolygonShape() polygonShape.SetAsBox(width, height, (0, 0), angle) boxDef.shape = polygonShape boxDef.density = density boxDef.restitution = restitution boxDef.friction = friction body.CreateFixture(boxDef) return body def poly(self, pos, vertices, dynamic=True, density=1.0, restitution=0.16, friction=0.5, screenCoord=True): """ Add a dynamic polygon, which has the vertices arranged around the poly's center at pos Correcting the positions to meters if INPUT_PIXELS, and calling self._add_poly() Parameters: pos ....... position (x,y) vertices .. vertices arranged around the center other ... see [physics parameters] Return: box2d.b2Body """ # Bring coordinates into the world coordinate system (flip, # camera offset, ...) if screenCoord: x, y = self.parent.to_world(pos) else: x, y = pos # If required, translate pixel -> meters if self.parent.input_unit == INPUT_PIXELS: # translate pixel -> meters x /= self.parent.ppm y /= self.parent.ppm # Translate vertices from pixels to meters v_new = [] for v in vertices: vx, vy = v v_new.append((vx / self.parent.ppm, vy / self.parent.ppm)) vertices = v_new return self._poly((x, y), vertices, dynamic, density, restitution, friction) def _poly(self, pos, vertices, dynamic=True, density=1.0, restitution=0.16, friction=0.5): # add a centered poly at pos without correcting any settings # meaning, pos and vertices are in meters x, y = pos bodyDef = box2d.b2BodyDef() bodyDef.position = (x, y) userData = {'color': self.parent.get_color()} bodyDef.userData = userData # Create the Body if not dynamic: density = 0 else: bodyDef.type = box2d.b2_dynamicBody body = self.parent.world.CreateBody(bodyDef) self.parent.element_count += 1 # Add a shape to the Body polyDef = box2d.b2FixtureDef() polygonShape = box2d.b2PolygonShape() polygonShape.vertices = vertices polyDef.shape = polygonShape polyDef.density = density polyDef.restitution = restitution polyDef.friction = friction body.CreateFixture(polyDef) return body def concavePoly(self, vertices, dynamic=True, density=1.0, restitution=0.16, friction=0.5, screenCoord=True): # 1. Step: Reduce # Detect if the polygon is closed or open if vertices[0] != vertices[-1]: is_closed = False else: is_closed = True # Continue reducing the vertecs x, y = c = tools_poly.calc_center(vertices) vertices = tools_poly.poly_center_vertices(vertices) # Bring coordinates into the world coordinate system (flip, # camera offset, ...) if screenCoord: x, y = self.parent.to_world(c) else: x, y = c # If required, translate pixel -> meters if self.parent.input_unit == INPUT_PIXELS: # translate pixel -> meters x /= self.parent.ppm y /= self.parent.ppm # Let's add the body bodyDef = box2d.b2BodyDef() bodyDef.position = (x, y) userData = {'color': self.parent.get_color()} bodyDef.userData = userData # Create the Body if not dynamic: density = 0 else: bodyDef.type = box2d.b2_dynamicBody body = self.parent.world.CreateBody(bodyDef) self.parent.element_count += 1 # Create the reusable Box2D polygon and circle definitions polyDef = box2d.b2FixtureDef() polygonShape = box2d.b2PolygonShape() polygonShape.vertexCount = 4 # rectangle polyDef.shape = polygonShape polyDef.density = density polyDef.restitution = restitution polyDef.friction = friction circleShape = box2d.b2CircleShape() circleShape.radius = 0.086 circleDef = box2d.b2FixtureDef() circleDef.shape = circleShape circleDef.density = density circleDef.restitution = restitution circleDef.friction = friction # Set the scale factor factor = 8.0 v2 = box2d.b2Vec2(*vertices[0]) for v in vertices[1:]: v1 = v2.copy() v2 = box2d.b2Vec2(*v) vdir = v2 - v1 # (v2x-v1x, v2y-v1y) vdir.Normalize() # we need a little size for the end part vn = box2d.b2Vec2(-vdir.y * factor, vdir.x * factor) v = [v1 + vn, v1 - vn, v2 - vn, v2 + vn] # Create a line (rect) for each part of the polygon, # and attach it to the body polyDef.shape.vertices = [vi / self.parent.ppm for vi in v] try: polyDef.shape.valid except ValueError: print("concavePoly: Created an invalid polygon!") return None body.CreateFixture(polyDef) # Now add a circle to the points between the rects # to avoid sharp edges and gaps if not is_closed and v2 == vertices[-1]: # Don't add a circle at the end break circleDef.localPosition = v2 / self.parent.ppm body.CreateFixture(circleDef) # Return hard and soft reduced vertices return body def complexPoly(self, vertices, dynamic=True, density=1.0, restitution=0.16, friction=0.5): # 1. Step: Reduce # 2. Step: See if start and end are close, if so then close the polygon # 3. Step: Detect if convex or concave # 4. Step: Start self.convexPoly or self.concavePoly vertices, is_convex = tools_poly.reduce_poly_by_angle(vertices) # print "->", is_convex # If start and endpoints are close to each other, close polygon x1, y1 = vertices[0] x2, y2 = vertices[-1] dx = x2 - x1 dy = y2 - y1 l = sqrt((dx * dx) + (dy * dy)) if l < 50: vertices[-1] = vertices[0] else: # Never convex if open (we decide so :) is_convex = False if tools_poly.is_line(vertices): # Lines shall be drawn by self.concavePoly(...) # print "is line" is_convex = False if is_convex: # print "convex" return self.convexPoly(vertices, dynamic, density, restitution, friction), vertices else: # print "concave" return self.concavePoly(vertices, dynamic, density, restitution, friction), vertices def convexPoly(self, vertices, dynamic=True, density=1.0, restitution=0.16, friction=0.5): """ Add a complex polygon with vertices in absolute positions (meters or pixels, according to INPUT_PIXELS or INPUT_METERS). This function does the reduction and convec hulling of the poly, and calls add_poly(...) Parameters: vertices .. absolute vertices positions other ..... see [physics parameters] Return: box2d.b2Body """ # NOTE: Box2D has a maximum poly vertex count, defined in # Common/box2d.b2Settings.h (box2d.b2_maxPolygonVertices) We # need to make sure, that we reach that by reducing the poly # with increased tolerance Reduce Polygon tolerance = 10 # 5 v_new = vertices while len(v_new) > box2d.b2_maxPolygonVertices: tolerance += 1 v_new = tools_poly.reduce_poly(vertices, tolerance) # print "convexPoly: Polygon reduced from %i to %i vertices | # tolerance: %i" % (len(vertices), len(v_new), tolerance) vertices = v_new # So poly should be alright now # Continue reducing the vertecs vertices_orig_reduced = vertices vertices = tools_poly.poly_center_vertices(vertices) vertices = tools_poly.convex_hull(vertices) if len(vertices) < 3: return # Define the body x, y = tools_poly.calc_center(vertices_orig_reduced) return self.poly((x, y), vertices, dynamic, density, restitution, friction) def to_b2vec(self, pt): # Convert vector to a b2vect pt = self.parent.to_world(pt) ptx, pty = pt ptx /= self.parent.ppm pty /= self.parent.ppm pt = box2d.b2Vec2(ptx, pty) return pt def joint(self, *args): if len(args) == 5: # Tracking Joint b1, b2, p1, p2, flag = args p1 = self.to_b2vec(p1) p2 = self.to_b2vec(p2) jointDef = box2d.b2DistanceJointDef() jointDef.Initialize(b1, b2, p1, p2) jointDef.collideConnected = flag self.parent.world.CreateJoint(jointDef) elif len(args) == 4: # Distance Joint b1, b2, p1, p2 = args p1 = self.to_b2vec(p1) p2 = self.to_b2vec(p2) jointDef = box2d.b2DistanceJointDef() jointDef.Initialize(b1, b2, p1, p2) jointDef.collideConnected = True try: self.parent.world.CreateJoint(jointDef) except AssertionError: pass elif len(args) == 3: # Revolute Joint between two bodies (unimplemented) pass elif len(args) == 2: # Revolute Joint to the Background, at point b1 = self.parent.world.groundBody b2 = args[0] p1 = self.to_b2vec(args[1]) jointDef = box2d.b2RevoluteJointDef() jointDef.Initialize(b1, b2, p1) try: self.parent.world.CreateJoint(jointDef) except AssertionError: pass elif len(args) == 1: # Revolute Joint to the Background, body center b1 = self.parent.world.groundBody b2 = args[0] p1 = b2.GetWorldCenter() jointDef = box2d.b2RevoluteJointDef() jointDef.Initialize(b1, b2, p1) try: self.parent.world.CreateJoint(jointDef) except AssertionError: pass def motor(self, body, pt, torque=900, speed=-10): # Revolute joint to the background with motor torque applied b1 = self.parent.world.groundBody pt = self.to_b2vec(pt) jointDef = box2d.b2RevoluteJointDef() jointDef.Initialize(b1, body, pt) jointDef.maxMotorTorque = torque jointDef.motorSpeed = speed jointDef.enableMotor = True self.parent.world.CreateJoint(jointDef) def mouseJoint(self, body, pos, jointForce=100.0): pos = self.parent.to_world(pos) x, y = pos x /= self.parent.ppm y /= self.parent.ppm mj = box2d.b2MouseJointDef() mj.bodyA = self.parent.world.groundBody mj.bodyB = body mj.target = (x, y) mj.maxForce = jointForce * body.mass if 'getAsType' in dir(box2d.b2Joint): self.parent.mouseJoint = \ self.parent.world.CreateJoint(mj).getAsType() else: self.parent.mouseJoint = self.parent.world.CreateJoint(mj) body.awake = True def remove_mouseJoint(self): if self.parent.mouseJoint: self.parent.world.DestroyJoint(self.parent.mouseJoint) self.parent.mouseJoint = None Pippy-76/library/pippy/physics/myelements/callbacks.py000066400000000000000000000112231445132016300233510ustar00rootroot00000000000000""" This file is part of the 'Elements' Project Elements is a 2D Physics API for Python (supporting Box2D2) Copyright (C) 2008, The Elements Team, Home: http://elements.linuxuser.at IRC: #elements on irc.freenode.org Code: http://www.assembla.com/wiki/show/elements svn co http://svn2.assembla.com/svn/elements License: GPLv3 | See LICENSE for the full text This program is free software: you can 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 . """ from .locals import * from .elements import box2d class CallbackHandler: # List of contact callbacks and shapes to start them - sorted by # type for quicker access Callbacks are saved as # callbacks[callback_type][[function, parameters], ...] callbacks = {} def __init__(self, parent): self.parent = parent # init callback dict to avoid those slow try # (especially for self.get, as it is called *often*) for i in range(10): self.callbacks[i] = [] def add(self, callback_type, callback_handler, *args): """ Users can add callbacks for certain (or all) collisions Parameters: callback_type ......... CALLBACK_CONTACT (nothing else for now) callback_handler ...... a callback function args (optional) ....... a list of parameters which can be used with callbacks.get Return: callback_id ... used to remove a callback later (int) """ # Create contact listener if required if callback_type in [CALLBACK_CONTACT_ADD, CALLBACK_CONTACT_PERSIST, CALLBACK_CONTACT_REMOVE]: if self.parent.listener is None: self.parent.listener = kContactListener(self.get) self.parent.world.SetContactListener(self.parent.listener) print("* ContactListener added") # Get callback dict for this callback_type c = self.callbacks[callback_type] # Append to the Callback Dictionary c.append([callback_handler, args]) self.callbacks[callback_type] = c # Return Callback ID # ID = callback_type.callback_index (1...n) return "%i.%i" % (callback_type, len(c)) def get(self, callback_type): return self.callbacks[callback_type] def start(self, callback_type, *args): callbacks = self.get(callback_type) for c in callbacks: callback, params = c callback() class kContactListener(box2d.b2ContactListener): def __init__(self, get_callbacks): # Init the Box2D b2ContactListener box2d.b2ContactListener.__init__(self) # Function to get the current callbacks self.get_callbacks = get_callbacks def check_contact(self, contact_type, point): # Checks if a callback should be started with this contact point contacts = self.get_callbacks(contact_type) # Step through all callbacks for this type (eg ADD, PERSIST, REMOVE) for c in contacts: callback, bodylist = c if len(bodylist) == 0: # Without bodylist it's a universal callback (for all bodies) callback(point) else: # This is a callback with specified bodies # See if this contact involves one of the specified b1 = str(point.shape1.GetBody()) b2 = str(point.shape2.GetBody()) for s in bodylist: s = str(s) if b1 == s or b2 == s: # Yes, that's the one :) callback(point) def Add(self, point): """Called when a contact point is created""" self.check_contact(CALLBACK_CONTACT_ADD, point) def Persist(self, point): """Called when a contact point persists for more than a time step""" self.check_contact(CALLBACK_CONTACT_PERSIST, point) def Remove(self, point): """Called when a contact point is removed""" self.check_contact(CALLBACK_CONTACT_REMOVE, point) Pippy-76/library/pippy/physics/myelements/camera.py000066400000000000000000000105331445132016300226650ustar00rootroot00000000000000""" This file is part of the 'Elements' Project Elements is a 2D Physics API for Python (supporting Box2D2) Copyright (C) 2008, The Elements Team, Home: http://elements.linuxuser.at IRC: #elements on irc.freenode.org Code: http://www.assembla.com/wiki/show/elements svn co http://svn2.assembla.com/svn/elements License: GPLv3 | See LICENSE for the full text This program is free software: you can 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 . """ from .locals import * class Camera: """ The Camera class. We will see :) Please also see: http://www.assembla.com/spaces/elements/tickets/31 This class currently handles: - Scaling factor - Screen Offset from the World Coordinate System Inputs from the user have to be checked for them. - Places to check for it: elements.py, drawing.py, add_objects.py """ # All coords to the renderer are multiplied with the scale factor # in elements.draw() scale_factor = 1.0 # Body which means to be tracked. Offset is set at each elements.draw() track_body = None def __init__(self, parent): self.parent = parent def track(self, body): """ Start tracking a specific body """ self.track_body = body def track_stop(self): """ Stop tracking a body """ self.track_body = None def center(self, pos, screenCoord=True, stopTrack=True): """ Centers the camera at given screen coordinates -- in pixel Typical call: world.camera.center(event.pos) Problem: Works ONLY WITH screenCoord now! """ x, y = pos x -= self.parent.display_width / 2 y -= self.parent.display_height / 2 if screenCoord: x /= self.scale_factor y /= self.scale_factor # Set the offset self.inc_offset((x, y), screenCoord, stopTrack) def set_offset(self, offset, screenCoord=True, stopTrack=True): """ Set an offset from the screen to the world cs -- in screen (or world) coordinates and in pixel """ # Stop tracking of an object if stopTrack: self.track_stop() # If screenCoords, we have to bring them to the world cs if screenCoord: x, y = self.parent.to_world(offset) else: x, y = offset self._set_offset((x / self.parent.ppm, y / self.parent.ppm)) def inc_offset(self, offset, screenCoord=True, stopTrack=True): """ Increment an offset from the screen to the world cs -- in world coordinates and in pixel """ # Stop tracking of an object if stopTrack: self.track_stop() # Get Current Offset x, y = self.parent.screen_offset_pixel dx, dy = offset # Bring the directions into the world coordinate system if screenCoord: if self.parent.inputAxis_x_left: dx *= -1 if self.parent.inputAxis_y_down: dy *= -1 # Set New Offset self._set_offset(((x + dx) / self.parent.ppm, (y + dy) / self.parent.ppm)) def _set_offset(self, offset): """ Set the screen offset to the world coordinate system (using meters and the world coordinate system's orientation) """ x, y = offset self.parent.screen_offset = (x, y) self.parent.screen_offset_pixel = (x * self.parent.ppm, y * self.parent.ppm) def set_scale_factor(self, factor=1.0): """ Zoom factor for the renderer 1.0 = 1:1 (original) """ self.scale_factor = factor def inc_scale_factor(self, factor=0.0): """ Increases the zooms for the renderer a given factor """ self.scale_factor += factor Pippy-76/library/pippy/physics/myelements/drawing.py000066400000000000000000000256151445132016300230770ustar00rootroot00000000000000""" This file is part of the 'Elements' Project Elements is a 2D Physics API for Python (supporting Box2D2) Copyright (C) 2008, The Elements Team, Home: http://elements.linuxuser.at IRC: #elements on irc.freenode.org Code: http://www.assembla.com/wiki/show/elements svn co http://svn2.assembla.com/svn/elements License: GPLv3 | See LICENSE for the full text This program is free software: you can 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 . """ from math import pi from math import cos from math import sin from . import tools # Functions of a rendering class # mandatory: # __init__ # start_drawing # after_drawing # draw_circle # draw_polygon # draw_lines # set_lineWidth # # renderer-specific mandatory functions: # for pygame: # set_surface # for cairo: # draw_text # for opengl: # # IMPORTANT # The drawing functions get the coordinates in their screen coordinate system # no need for translations anymore :) class draw_pygame(object): """ This class handles the drawing with pygame, which is really simple since we only need draw_ellipse and draw_polygon. """ lineWidth = 0 def __init__(self): """ Load pygame.draw and pygame.Rect, and reference it for the drawing methods Parameters: surface .... pygame surface (default: None) lineWidth .. Return: Class draw_pygame() """ print("* Pygame selected as renderer") from pygame import draw from pygame import Rect self.draw = draw self.Rect = Rect def set_lineWidth(self, lw): """ """ self.lineWidth = lw def set_surface(self, surface): """ """ self.surface = surface def get_surface(self): """ """ return self.surface def start_drawing(self): pass def after_drawing(self): pass def draw_circle(self, clr, pt, radius, angle): """ Draw a circle Parameters: pt ........ (x, y) clr ....... color in rgb ((r), (g), (b)) radius .... circle radius angle ..... rotation in radians Return: - """ x, y = pt x1 = x - radius y1 = y - radius rect = self.Rect([x1, y1, 2 * radius, 2 * radius]) self.draw.ellipse(self.surface, clr, rect, self.lineWidth) # draw the orientation vector if radius > 10: rx = cos(angle) * radius ry = -sin(angle) * radius self.draw.line(self.surface, (255, 255, 255), pt, (x + rx, y + ry)) def draw_polygon(self, clr, points): """ Draw a polygon Parameters: clr ....... color in rgb ((r), (g), (b)) points .... polygon points in normal (x,y) positions Return: - """ self.draw.polygon(self.surface, clr, points, self.lineWidth) # self.draw.lines(self.surface, clr, True, points) def draw_lines(self, clr, closed, points, width=None): """ Draw a polygon Parameters: clr ....... color in rgb ((r), (g), (b)) points .... polygon points in normal (x,y) positions Return: - """ if width is None: lw = self.lineWidth else: lw = width self.draw.lines(self.surface, clr, closed, points, lw) class draw_cairo(object): """ This class handles the drawing with cairo, which is really simple since we only need draw_ellipse and draw_polygon. """ window = None da = None circle_surface = None box_surface = None def __init__(self, drawMethod="filled"): """ Load cairo.draw and cairo.Rect, and reference it for the drawing methods Return: Class draw_cairo() """ print("* Cairo selected as renderer") import cairo self.cairo = cairo self.set_drawing_method(drawMethod) # self.draw_box = self.draw_box_image def set_lineWidth(self, lw): # unused self.lineWidth = lw def set_drawing_area(self, da): """ Set the area for Cairo to draw to da ...... drawing area (gtk.DrawingArea) Return: - """ self.da = da self.window = da.window print("* Cairo renderer drawing area set") def set_drawing_method(self, type): """ type = filled, image """ self.draw_circle = getattr(self, "draw_circle_%s" % type) # self.draw_box = getattr(self, "draw_box_%s" % type) def start_drawing(self): self.width, self.height = self.window.get_size() self.imagesurface = self.cairo.ImageSurface( self.cairo.FORMAT_ARGB32, self.width, self.height) self.ctx = ctx = self.cairo.Context(self.imagesurface) ctx.set_source_rgb(1, 1, 1) # background color ctx.paint() ctx.move_to(0, 0) ctx.set_source_rgb(0, 0, 0) # defaults for the rest of the drawing ctx.set_line_width(1) ctx.set_tolerance(0.1) ctx.set_line_join(self.cairo.LINE_CAP_BUTT) # LINE_CAP_BUTT, LINE_CAP_ROUND, LINE_CAP_SQUARE, # LINE_JOIN_BEVEL, LINE_JOIN_MITER, LINE_JOIN_ROUND # ctx.set_dash([20/4.0, 20/4.0], 0) def after_drawing(self): dest_ctx = self.window.cairo_create() dest_ctx.set_source_surface(self.imagesurface) dest_ctx.paint() def set_circle_image(self, filename): self.circle_surface = self.cairo.ImageSurface.create_from_png(filename) self.draw_circle = self.draw_circle_image # def set_box_image(self, filename): # self.box_surface = self.cairo.ImageSurface.create_from_png(filename) # self.draw_box = self.draw_box_image def draw_circle_filled(self, clr, pt, radius, angle=0): x, y = pt clr = tools.rgb2floats(clr) self.ctx.set_source_rgb(*clr) self.ctx.move_to(x, y) self.ctx.arc(x, y, radius, 0, 2 * pi) self.ctx.fill() def draw_circle(): pass def draw_circle_image(self, clr, pt, radius, angle=0, sf=None): if sf is None: sf = self.circle_surface x, y = pt self.ctx.save() self.ctx.translate(x, y) self.ctx.rotate(-angle) image_r = sf.get_width() / 2 scale = float(radius) / image_r self.ctx.scale(scale, scale) self.ctx.translate(-0.5 * sf.get_width(), -0.5 * sf.get_height()) self.ctx.set_source_surface(sf) self.ctx.paint() self.ctx.restore() def draw_image(self, source, pt, scale=1.0, rot=0, sourcepos=(0, 0)): self.ctx.save() self.ctx.rotate(rot) self.ctx.scale(scale, scale) destx, desty = self.ctx.device_to_user_distance(pt[0], pt[1]) self.ctx.set_source_surface(source, destx - sourcepos[0], desty - sourcepos[1]) self.ctx.rectangle(destx, desty, source.get_width(), source.get_height()) self.ctx.fill() self.ctx.restore() def draw_polygon(self, clr, points): """ Draw a polygon Parameters: clr ....... color in rgb ((r), (g), (b)) points .... polygon points in normal (x,y) positions Return: - """ clr = tools.rgb2floats(clr) self.ctx.set_source_rgb(clr[0], clr[1], clr[2]) pt = points[0] self.ctx.move_to(pt[0], pt[1]) for pt in points[1:]: self.ctx.line_to(pt[0], pt[1]) self.ctx.fill() def draw_text(self, text, center, clr=(0, 0, 0), size=12, fontname="Georgia"): clr = tools.rgb2floats(clr) self.ctx.set_source_rgb(clr[0], clr[1], clr[2]) self.ctx.select_font_face(fontname, self.cairo.FONT_SLANT_NORMAL, self.cairo.FONT_WEIGHT_NORMAL) self.ctx.set_font_size(size) x_bearing, y_bearing, width, height = self.ctx.text_extents(text)[:4] self.ctx.move_to(center[0] + 0.5 - width / 2 - x_bearing, center[1] + 0.5 - height / 2 - y_bearing) self.ctx.show_text(text) def draw_lines(self, clr, closed, points): """ Draw a polygon Parameters: clr ....... color in rgb ((r), (g), (b)) closed .... whether or not to close the lines (as a polygon) points .... polygon points in normal (x,y) positions Return: - """ clr = tools.rgb2floats(clr) self.ctx.set_source_rgb(clr[0], clr[1], clr[2]) pt = points[0] self.ctx.move_to(pt[0], pt[1]) for pt in points[1:]: self.ctx.line_to(pt[0], pt[1]) if closed: pt = points[0] self.ctx.line_to(pt[0], pt[1]) self.ctx.stroke() class draw_opengl_pyglet(object): """ This class handles the drawing with pyglet """ lineWidth = 0 def __init__(self): """ Load pyglet.gl, and reference it for the drawing methods Parameters: surface .... not used with pyglet lineWidth .. """ print("* OpenGL_Pyglet selected as renderer") from pyglet import gl self.gl = gl def set_lineWidth(self, lw): self.lineWidth = lw def draw_circle(self, clr, pt, radius, a=0): clr = tools.rgb2floats(clr) self.gl.glColor3f(clr[0], clr[1], clr[2]) x, y = pt segs = 15 coef = 2.0 * pi / segs self.gl.glBegin(self.gl.GL_LINE_LOOP) for n in range(segs): rads = n * coef self.gl.glVertex2f(radius * cos(rads + a) + x, radius * sin(rads + a) + y) self.gl.glVertex2f(x, y) self.gl.glEnd() def draw_polygon(self, clr, points): clr = tools.rgb2floats(clr) self.gl.glColor3f(clr[0], clr[1], clr[2]) self.gl.glBegin(self.gl.GL_LINES) p1 = points[0] for p in points[1:]: x1, y1 = p1 x2, y2 = p1 = p self.gl.glVertex2f(x1, y1) self.gl.glVertex2f(x2, y2) x1, y1 = points[0] self.gl.glVertex2f(x2, y2) self.gl.glVertex2f(x1, y1) self.gl.glEnd() def draw_lines(self, clr, closed, points): pass def start_drawing(self): pass def after_drawing(self): pass Pippy-76/library/pippy/physics/myelements/elements.py000066400000000000000000000551671445132016300232650ustar00rootroot00000000000000#!/usr/bin/python """ This file is part of the 'Elements' Project Elements is a 2D Physics API for Python (supporting pybox2d) Copyright (C) 2008, The Elements Team, Home: http://elements.linuxuser.at IRC: #elements on irc.freenode.org Code: http://www.assembla.com/wiki/show/elements svn co http://svn2.assembla.com/svn/elements License: GPLv3 | See LICENSE for the full text This program is free software: you can 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 . """ __version__ = '0.11' __contact__ = '' # Load Box2D try: import Box2D as box2d except: print('Could not load the pybox2d library (Box2D).') print('Please run "setup.py install" to install the dependencies.') print() print('Or recompile pybox2d for your system and python version.') print("See http://code.google.com/p/pybox2d") exit() # Standard Imports from random import shuffle # Load Elements Definitions from .locals import * # Load Elements Modules from . import tools from . import drawing from . import add_objects from . import callbacks from . import camera # Main Class class Elements: """The class which handles all interaction with the box2d engine """ # Settings run_physics = True # Can pause the simulation element_count = 0 # Element Count renderer = None # Drawing class (from drawing.py) # Default Input in Pixels! (can change to INPUT_METERS) input_unit = INPUT_PIXELS line_width = 0 # Line Width in Pixels (0 for fill) listener = None # Offset screen from world coordinate system (x, y) [meter5] screen_offset = (0, 0) # Offset screen from world coordinate system (x, y) [pixel] screen_offset_pixel = (0, 0) # The internal coordination system is y+=up, x+=right # But it's possible to change the input coords to something else, # they will then be translated on input inputAxis_x_left = False # positive to the right by default inputAxis_y_down = True # positive to up by default mouseJoint = None def __init__(self, screen_size, gravity=(0.0, -9.0), ppm=100.0, renderer='pygame'): """ Init the world with boundaries and gravity, and init colors. Parameters: screen_size .. (w, h) -- screen size in pixels [int] gravity ...... (x, y) in m/s^2 [float] default: (0.0, -9.0) ppm .......... pixels per meter [float] default: 100.0 renderer ..... which drawing method to use (str) default: 'pygame' Return: class Elements() """ self.set_screenSize(screen_size) self.set_drawingMethod(renderer) # Create Subclasses self.add = add_objects.Add(self) self.callbacks = callbacks.CallbackHandler(self) self.camera = camera.Camera(self) # Gravity + Bodies will sleep on outside self.gravity = gravity self.doSleep = True self.PIN_MOTOR_RADIUS = 2 # Create the World self.world = box2d.b2World(self.gravity, self.doSleep) bodyDef = box2d.b2BodyDef() self.world.groundBody = self.world.CreateBody(bodyDef) # Init Colors self.init_colors() # Set Pixels per Meter self.ppm = ppm def set_inputUnit(self, input_unit): """ Change the input unit to either meter or pixels Parameters: input ... INPUT_METERS or INPUT_PIXELS Return: - """ self.input_unit = input_unit def set_inputAxisOrigin(self, left=True, top=False): """ Change the origin of the input coordinate system axis Parameters: left ... True or False -- x = 0 is at the left? top .... True or False -- y = 0 is at the top? Return: - """ self.inputAxis_x_left = not left self.inputAxis_y_down = top def set_drawingMethod(self, m, *kw): """ Set a drawing method (from drawing.py) Parameters: m .... 'pygame' or 'cairo' *kw .. keywords to pass to the initializer of the drawing method Return: True if ok, False if no method identifier m found """ try: self.renderer = getattr(drawing, "draw_%s" % m)(*kw) return True except AttributeError: return False def set_screenSize(self, size): """ Set the current screen size Parameters: size ... (int(width), int(height)) in pixels Return: - """ self.display_width, self.display_height = size def init_colors(self): """ Init self.colors with a fix set of hex colors Return: - """ self.fixed_color = None self.cur_color = 0 self.colors = [ "#737934", "#729a55", "#040404", "#1d4e29", "#ae5004", "#615c57", "#6795ce", "#203d61", "#8f932b" ] shuffle(self.colors) def set_color(self, clr): """ Set a fixed color for all future Elements (until reset_color() is called) Parameters: clr ... Hex '#123123' or RGB ((r), (g), (b)) Return: - """ self.fixed_color = clr def reset_color(self): """ All Elements from now on will be drawn in random colors Return: - """ self.fixed_color = None def get_color(self): """ Get a color - either the fixed one or the next from self.colors Return: clr = ((R), (G), (B)) """ if self.fixed_color is not None: return self.fixed_color if self.cur_color == len(self.colors): self.cur_color = 0 shuffle(self.colors) clr = self.colors[self.cur_color] if clr[0] == "#": clr = tools.hex2rgb(clr) self.cur_color += 1 return clr def update(self, fps=50.0, vel_iterations=10, pos_iterations=8): """ Update the physics, if not paused (self.run_physics) Parameters: fps ............. fps with which the physics engine shall work vel_iterations .. velocity substeps per step for smoother simulation pos_iterations .. position substeps per step for smoother simulation Return: - """ if self.run_physics: self.world.Step(1.0 / fps, vel_iterations, pos_iterations) def translate_coord(self, point): """ Flips the coordinates in another coordinate system orientation, if necessary (screen <> world coordinate system) """ x, y = point if self.inputAxis_x_left: x = self.display_width - x if self.inputAxis_y_down: y = self.display_height - y return (x, y) def translate_coords(self, pointlist): """Flips the coordinates in another coordinate system orientation, if necessary (screen <> world coordinate system) """ p_out = [] for p in pointlist: p_out.append(self.translate_coord(p)) return p_out def to_world(self, pos): """ Transfers a coordinate from the screen to the world coordinate system (pixels) - Change to the right axis orientation - Include the offset: screen -- world coordinate system - Include the scale factor (Screen coordinate system might have a scale factor) """ dx, dy = self.screen_offset_pixel x = pos[0] / self.camera.scale_factor y = pos[1] / self.camera.scale_factor x, y = self.translate_coord((round(x), round(y))) return(x + dx, y + dy) def to_screen(self, pos): """Transfers a coordinate from the world to the screen coordinate system (pixels) and by the screen offset """ dx, dy = self.screen_offset_pixel x = pos[0] - dx y = pos[1] - dy sx, sy = self.translate_coord((x, y)) return (sx * self.camera.scale_factor, sy * self.camera.scale_factor) def meter_to_screen(self, i): return i * self.ppm * self.camera.scale_factor def get_bodies_at_pos(self, search_point, include_static=False, area=0.01): """ Check if given point (screen coordinates) is inside any body. If yes, return all found bodies, if not found return False """ sx, sy = self.to_world(search_point) sx /= self.ppm sy /= self.ppm f = area / self.camera.scale_factor AABB = box2d.b2AABB() AABB.lowerBound = (sx - f, sy - f) AABB.upperBound = (sx + f, sy + f) query_cb = Query_CB() self.world.QueryAABB(query_cb, AABB) bodylist = [] for s in query_cb.fixtures: body = s.body if body is None: continue if not include_static: if body.type == box2d.b2_staticBody or body.mass == 0.0: continue if s.TestPoint((sx, sy)): bodylist.append(body) return bodylist def draw(self): """ If a drawing method is specified, this function passes the objects to the module in pixels. Return: True if the objects were successfully drawn False if the renderer was not set or another error occurred """ self.callbacks.start(CALLBACK_DRAWING_START) # No need to run through the loop if there's no way to draw if not self.renderer: return False if self.camera.track_body: # Get Body Center p1 = self.camera.track_body.GetWorldCenter() # Center the Camera There, False = Don't stop the tracking self.camera.center(self.to_screen((p1.x * self.ppm, p1.y * self.ppm)), stopTrack=False) # Walk through all known elements self.renderer.start_drawing() for body in self.world.bodies: xform = body.transform shape = body.fixtures angle = body.angle if shape: userdata = body.userData if 'color' in userdata: clr = userdata['color'] else: clr = self.colors[0] for shape in body.fixtures: type_ = shape.type if type_ == box2d.b2Shape.e_circle: position = box2d.b2Mul(xform, shape.shape.pos) pos = self.to_screen((position.x * self.ppm, position.y * self.ppm)) self.renderer.draw_circle( clr, pos, self.meter_to_screen(shape.shape.radius), angle) elif type_ == box2d.b2Shape.e_polygon: points = [] for v in shape.shape.vertices: pt = box2d.b2Mul(xform, v) x, y = self.to_screen((pt.x * self.ppm, pt.y * self.ppm)) points.append([x, y]) self.renderer.draw_polygon(clr, points) else: print("unknown shape type:%d" % shape.type) for joint in self.world.joints: p2 = joint.anchorA p2 = self.to_screen((p2.x * self.ppm, p2.y * self.ppm)) p1 = joint.anchorB p1 = self.to_screen((p1.x * self.ppm, p1.y * self.ppm)) if isinstance(joint, box2d.b2RevoluteJoint): self.renderer.draw_circle((255, 255, 255), p1, self.PIN_MOTOR_RADIUS, 0) else: self.renderer.draw_lines((0, 0, 0), False, [p1, p2], 3) self.callbacks.start(CALLBACK_DRAWING_END) self.renderer.after_drawing() return True def set_pin_motor_radius(self, radius): self.PIN_MOTOR_RADIUS = radius def mouse_move(self, pos): pos = self.to_world(pos) x, y = pos x /= self.ppm y /= self.ppm if self.mouseJoint: self.mouseJoint.target = (x, y) def pickle_save(self, fn, additional_vars={}): import pickle as pickle self.add.remove_mouseJoint() if not additional_vars and hasattr(self, '_pickle_vars'): additional_vars = dict((var, getattr(self, var)) for var in self._pickle_vars) save_values = [self.world, box2d.pickle_fix(self.world, additional_vars, 'save')] try: pickle.dump(save_values, open(fn, 'wb')) except Exception as s: print('Pickling failed: ', s) return print('Saved to %s' % fn) def pickle_load(self, fn, set_vars=True, additional_vars=[]): """ Load the pickled world in file fn. additional_vars is a dictionary to be populated with the loaded variables. """ import pickle as pickle try: world, variables = pickle.load(open(fn, 'rb')) world = world._pickle_finalize() variables = box2d.pickle_fix(world, variables, 'load') except Exception as s: print('Error while loading world: ', s) return self.world = world if set_vars: # reset the additional saved variables: for var, value in list(variables.items()): if hasattr(self, var): setattr(self, var, value) else: print('Unknown property %s=%s' % (var, value)) print('Loaded from %s' % fn) return variables def json_save(self, path, additional_vars={}, serialize=False): import json worldmodel = {} save_id_index = 1 self.world.groundBody.userData = {"saveid": 0} bodylist = [] for body in self.world.bodies: if not body == self.world.groundBody: body.userData["saveid"] = save_id_index # set temporary data save_id_index += 1 shapelist = body.fixtures modelbody = {} modelbody['position'] = body.position.tuple modelbody['dynamic'] = body.type == box2d.b2_dynamicBody modelbody['userData'] = body.userData modelbody['angle'] = body.angle modelbody['angularVelocity'] = body.angularVelocity modelbody['linearVelocity'] = body.linearVelocity.tuple if shapelist and len(shapelist) > 0: shapes = [] for shape in shapelist: modelshape = {} modelshape['density'] = shape.density modelshape['restitution'] = shape.restitution modelshape['friction'] = shape.friction shapename = shape.shape.__class__.__name__ if shapename == "b2CircleShape": modelshape['type'] = 'circle' modelshape['radius'] = shape.shape.radius modelshape['localPosition'] = shape.shape.pos.tuple if shapename == "b2PolygonShape": modelshape['type'] = 'polygon' modelshape['vertices'] = shape.shape.vertices shapes.append(modelshape) modelbody['shapes'] = shapes bodylist.append(modelbody) worldmodel['bodylist'] = bodylist jointlist = [] for joint in self.world.joints: modeljoint = {} if joint.__class__.__name__ == "b2RevoluteJoint": modeljoint['type'] = 'revolute' modeljoint['anchor'] = joint.anchorA.tuple modeljoint['enableMotor'] = joint.motorEnabled modeljoint['motorSpeed'] = joint.motorSpeed modeljoint['maxMotorTorque'] = joint.GetMaxMotorTorque() elif joint.__class__.__name__ == "b2DistanceJoint": modeljoint['type'] = 'distance' modeljoint['anchor1'] = joint.anchorA.tuple modeljoint['anchor2'] = joint.anchorB.tuple modeljoint['body1'] = joint.bodyA.userData['saveid'] modeljoint['body2'] = joint.bodyB.userData['saveid'] modeljoint['collideConnected'] = joint.collideConnected modeljoint['userData'] = joint.userData jointlist.append(modeljoint) worldmodel['jointlist'] = jointlist controllerlist = [] worldmodel['controllerlist'] = controllerlist if serialize: addvars = additional_vars trackinfo = addvars['trackinfo'] backup = trackinfo for key, info in backup.items(): if not info[3]: try: trackinfo[key][0] = info[0].userData['saveid'] trackinfo[key][1] = info[1].userData['saveid'] except AttributeError: pass else: addvars['trackinfo'][key][0] = None addvars['trackinfo'][key][1] = None additional_vars['trackinfo'] = trackinfo worldmodel['additional_vars'] = additional_vars f = open(path, 'w') f.write(json.dumps(worldmodel)) f.close() for body in self.world.bodies: del body.userData['saveid'] # remove temporary data def json_load(self, path, serialized=False): import json self.world.groundBody.userData = {"saveid": 0} f = open(path, 'r') worldmodel = json.loads(f.read()) f.close() # clean world for joint in self.world.joints: self.world.DestroyJoint(joint) for body in self.world.bodies: if body != self.world.groundBody: self.world.DestroyBody(body) # load bodies for body in worldmodel['bodylist']: bodyDef = box2d.b2BodyDef() if body['dynamic']: bodyDef.type = box2d.b2_dynamicBody bodyDef.position = body['position'] bodyDef.userData = body['userData'] bodyDef.angle = body['angle'] newBody = self.world.CreateBody(bodyDef) # _logger.debug(newBody) newBody.angularVelocity = body['angularVelocity'] newBody.linearVelocity = body['linearVelocity'] if 'shapes' in body: for shape in body['shapes']: if shape['type'] == 'polygon': polyDef = box2d.b2FixtureDef() polyShape = box2d.b2PolygonShape() polyShape.vertices = shape['vertices'] polyDef.shape = polyShape polyDef.density = shape['density'] polyDef.restitution = shape['restitution'] polyDef.friction = shape['friction'] newBody.CreateFixture(polyDef) if shape['type'] == 'circle': circleDef = box2d.b2FixtureDef() circleShape = box2d.b2CircleShape() circleShape.radius = shape['radius'] circleShape.pos = shape['localPosition'] circleDef.shape = circleShape circleDef.density = shape['density'] circleDef.restitution = shape['restitution'] circleDef.friction = shape['friction'] newBody.CreateFixture(circleDef) for joint in worldmodel['jointlist']: if joint['type'] == 'distance': jointDef = box2d.b2DistanceJointDef() body1 = self.getBodyWithSaveId(joint['body1']) anch1 = joint['anchor1'] body2 = self.getBodyWithSaveId(joint['body2']) anch2 = joint['anchor2'] jointDef.collideConnected = joint['collideConnected'] jointDef.Initialize(body1, body2, anch1, anch2) jointDef.userData = joint['userData'] self.world.CreateJoint(jointDef) if joint['type'] == 'revolute': jointDef = box2d.b2RevoluteJointDef() body1 = self.getBodyWithSaveId(joint['body1']) body2 = self.getBodyWithSaveId(joint['body2']) anchor = joint['anchor'] jointDef.Initialize(body1, body2, anchor) jointDef.userData = joint['userData'] jointDef.motorEnabled = joint['enableMotor'] jointDef.motorSpeed = joint['motorSpeed'] jointDef.maxMotorTorque = joint['maxMotorTorque'] self.world.CreateJoint(jointDef) self.additional_vars = {} addvars = {} for (k, v) in list(worldmodel['additional_vars'].items()): addvars[k] = v if serialized and 'trackinfo' in addvars: trackinfo = addvars['trackinfo'] for key, info in trackinfo.items(): if not info[3]: addvars['trackinfo'][key][0] = \ self.getBodyWithSaveId(info[0]) addvars['trackinfo'][key][1] = \ self.getBodyWithSaveId(info[1]) else: addvars['trackinfo'][key][0] = None addvars['trackinfo'][key][1] = None self.additional_vars = addvars for body in self.world.bodies: del body.userData['saveid'] # remove temporary data def getBodyWithSaveId(self, saveid): for body in self.world.bodies: if body.userData['saveid'] == saveid: return body class Query_CB(box2d.b2QueryCallback): def __init__(self): box2d.b2QueryCallback.__init__(self) self.fixtures = [] def ReportFixture(self, fixture): self.fixtures.append(fixture) return True Pippy-76/library/pippy/physics/myelements/locals.py000066400000000000000000000022771445132016300227200ustar00rootroot00000000000000""" This file is part of the 'Elements' Project Elements is a 2D Physics API for Python (supporting Box2D2) Copyright (C) 2008, The Elements Team, Home: http://elements.linuxuser.at IRC: #elements on irc.freenode.org Code: http://www.assembla.com/wiki/show/elements svn co http://svn2.assembla.com/svn/elements License: GPLv3 | See LICENSE for the full text This program is free software: you can 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 . """ INPUT_METERS = 0 INPUT_PIXELS = 1 CALLBACK_CONTACT_ADD = 0 CALLBACK_CONTACT_PERSIST = 1 CALLBACK_CONTACT_REMOVE = 2 CALLBACK_DRAWING_START = 3 CALLBACK_DRAWING_END = 4 FLT_EPSILON = 1.192092896e-07 Pippy-76/library/pippy/physics/myelements/menu.py000066400000000000000000000156321445132016300224060ustar00rootroot00000000000000""" This file is part of the 'Elements' Project Elements is a 2D Physics API for Python (supporting Box2D2) Copyright (C) 2008, The Elements Team, Home: http://elements.linuxuser.at IRC: #elements on irc.freenode.org Code: http://www.assembla.com/wiki/show/elements svn co http://svn2.assembla.com/svn/elements License: GPLv3 | See LICENSE for the full text This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . """ import pygame from pygame.locals import * from . import tools COLOR_HEX_BLUE1 = "6491a4" COLOR_HEX_BLUE2 = "9ec9ff" class MenuItem: # padding [px]: left, top, right, bottom padding = (5, 2, 5, 2) def empty(self, *args): pass def __init__(self, title, pos, userData, parent=None, callback=None): self.title = title self.userData = userData self.parent = parent self.childs = [] if self.parent: self.visible = False else: self.visible = True if callback: self.callback = callback else: self.callback = self.empty # Create Surface and Stuff :) self.font = pygame.font.Font(None, 32) text = self.font.render(title, 1, (255, 255, 255)) rx, ry, rw, rh = text.get_rect() pl, pt, pr, pb = self.padding s1 = pygame.Surface((rw + pl + pr, rh + pt + pb)) s1.fill(tools.hex2rgb(COLOR_HEX_BLUE1)) s1.blit(text, (pl, pt)) s2 = pygame.Surface((rw + pl + pr, rh + pt + pb)) s2.fill(tools.hex2rgb(COLOR_HEX_BLUE2)) s2.blit(text, (pl, pt)) self.rect = s1.get_rect().move(pos) self.surface_inactive = s1 self.surface_active = s2 def pos_inside(self, pos): if not self.visible: return False x, y, w, h = self.rect px, py = pos if px > x and px < x + w and py > y and py < y + h: return True else: return False class MenuClass: """ Important: Never delete an Item, just overwrite it if deleting, else the menuitem id's get messed up """ # current active menu point it focus = False # each item is stored as MenuItem items = [] # where to start drawing start_at = (0, 0) # menubar properties height = 0 # px width = 0 # px (set in set_width) # if width was set by hand (if not, increase width by adding stuff) setWidth = False def __init__(self): self.draw_at = self.start_at def set_width(self, width): self.setWidth = True self.width = width def addItem(self, title, callback=None, userData='', parent=None): # Get position for the Item if parent: draw_at = (0, 0) else: draw_at = self.draw_at # Create Items M = MenuItem(title=title, pos=draw_at, userData=userData, parent=parent, callback=callback) self.items.append(M) # Set a new position x, y, w, h = M.rect x, y = self.draw_at if parent: # Set the info that the item has a child to the parent item self.items[parent - 1].childs.append(len(self.items) - 1) else: # New next drawing position self.draw_at = (x + w, y) # Adjust the width of the menu bar if not self.setWidth: self.width = x + w # Adjust the height of the menu bar if h > self.height: self.height = h + 2 # Return array id of this item return len(self.items) def click(self, pos): """ Checks a click for menuitems and starts the callback if found Return: True if a menu item was found or hit the MenuBar, and False if not """ focus_in = self.focus found = False for i in range(len(self.items)): item = self.items[i] if item.pos_inside(pos): found = True item.callback(item.title, item.userData) # Expand the menu if necessary if len(item.childs) > 0: self.focus = i + 1 # Close any opened menu windows if clicked somewhere else if self.focus == focus_in: self.focus = False self.subwin_rect = (0, 0, 0, 0) for item in self.items: if item.parent: item.visible = False # Check if click is inside menubar x, y = pos mx, my = self.start_at if found: return True else: return False def draw(self, surface): """ Draw the menu with pygame on a given surface """ s = pygame.Surface((self.width, self.height)) s.fill(tools.hex2rgb(COLOR_HEX_BLUE1)) surface.blit(s, (0, 0)) for i in range(len(self.items)): item = self.items[i] if not item.parent: x, y, w, h = item.rect if self.focus == i + 1: surface.blit(item.surface_active, (x, y)) else: surface.blit(item.surface_inactive, (x, y)) # If a menu item is open, draw that if self.focus: width = 0 height = 0 i = [] for j in self.items: if j.parent == self.focus: i.append(j) x, y, w, h = j.rect if w > width: width = w height += h if len(i) > 0: s = pygame.Surface((width, height)) s.fill(tools.hex2rgb(COLOR_HEX_BLUE1)) # Parent Coordinates px, py, pw, ph = self.items[self.focus - 1].rect # y Counter y = 0 for item in i: item.visible = True s.blit(item.surface_inactive, (0, y)) ix, iy, iw, ih = item.rect if (ix, iy) == (0, 0): item.rect = item.rect.move((px, y + ph)) ix, iy, iw, ih = item.rect if iw < width: item.rect = (ix, iy, width, ih) y += ih surface.blit(s, (px, py + ph)) self.subwin_rect = s.get_rect().move(px, py + ph) Pippy-76/library/pippy/physics/myelements/tools.py000066400000000000000000000041051445132016300225730ustar00rootroot00000000000000""" This file is part of the 'Elements' Project Elements is a 2D Physics API for Python (supporting Box2D2) Copyright (C) 2008, The Elements Team, Home: http://elements.linuxuser.at IRC: #elements on irc.freenode.org Code: http://www.assembla.com/wiki/show/elements svn co http://svn2.assembla.com/svn/elements License: GPLv3 | See LICENSE for the full text This program is free software: you can 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 . """ # Some Hex Tools def hex2dec(hex): """ Convert and hex value in a decimal number """ return int(hex, 16) def hex2rgb(hex): """ Convert a hex color (#123abc) in RGB ((r), (g), (b)) """ if hex[0: 1] == '#': hex = hex[1:] return (hex2dec(hex[:2]), hex2dec(hex[2: 4]), hex2dec(hex[4: 6])) def rgb2floats(rgb): """Convert a color in the RGB (0..255,0..255,0..255) format to the (0..1, 0..1, 0..1) float format """ ret = [] for c in rgb: ret.append(float(c) / 255) return ret def point_in_poly(point, poly): # print ">", point, poly x, y = point n = len(poly) inside = False p1x, p1y = poly[0] for i in range(n + 1): p2x, p2y = poly[i % n] if y > min(p1y, p2y): if y <= max(p1y, p2y): if x <= max(p1x, p2x): if p1y != p2y: xinters = (y - p1y) * (p2x - p1x) / (p2y - p1y) + p1x if p1x == p2x or x <= xinters: inside = not inside p1x, p1y = p2x, p2y return inside Pippy-76/library/pippy/physics/myelements/tools_poly.py000066400000000000000000000224361445132016300236450ustar00rootroot00000000000000""" This file is part of the 'Elements' Project Elements is a 2D Physics API for Python (supporting Box2D2) Copyright (C) 2008, The Elements Team, Home: http://elements.linuxuser.at IRC: #elements on irc.freenode.org Code: http://www.assembla.com/wiki/show/elements svn co http://svn2.assembla.com/svn/elements License: GPLv3 | See LICENSE for the full text This program is free software: you can 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 . """ from functools import partial from math import fabs from math import sqrt from math import atan2 from math import degrees from math import acos from .locals import * def calc_center(points): """ Calculate the center of a polygon Return: The center (x,y) """ tot_x, tot_y = 0, 0 for p in points: tot_x += p[0] tot_y += p[1] n = len(points) return (tot_x / n, tot_y / n) def poly_center_vertices(pointlist): """ Rearranges vectors around the center Return: pointlist ([(x, y), ...]) """ poly_points_center = [] cx, cy = calc_center(pointlist) for p in pointlist: x = p[0] - cx y = cy - p[1] poly_points_center.append((x, y)) return poly_points_center def is_line(vertices, tolerance=25.0): """ Check if passed vertices are a line. Done by comparing the angles of all vectors and check tolerance. Parameters: vertices ... a list of vertices (x, y) tolerance .. how many degrees should be allowed max to be a line Returns: True if line, False if no line """ if len(vertices) <= 2: return True # Step 1: Points -> Vectors p_old = vertices[0] alphas = [] for p in vertices[1:]: x1, y1 = p_old x2, y2 = p p_old = p # Create Vector vx, vy = (x2 - x1, y2 - y1) # Check Length l = sqrt((vx * vx) + (vy * vy)) if l == 0.0: continue # Normalize vector vx /= l vy /= l # Append angle if fabs(vx) < 0.2: alpha = 90.0 else: alpha = degrees(atan2(vy, vx)) alphas.append(fabs(alpha)) # Sort angles alphas.sort() # Get maximum difference alpha_diff = fabs(alphas[-1] - alphas[0]) print("alpha difference:", alpha_diff) if alpha_diff < tolerance: return True else: return False def reduce_poly_by_angle(vertices, tolerance=10.0, minlen=20): """ This function reduces a poly by the angles of the vectors (detect lines). If the angle difference from one vector to the last > tolerance: use last point. If the angle is quite the same, it's on the line. Parameters: vertices ... a list of vertices (x, y) tolerance .. how many degrees should be allowed max Returns: (1) New Pointlist, (2) Soft reduced pointlist (reduce_poly()) """ v_last = vertices[-1] vertices = vxx = reduce_poly(vertices, minlen) p_new = [] p_new.append(vertices[0]) dir = None is_convex = True for i in range(len(vertices) - 1): if i == 0: p_old = vertices[i] continue x1, y1 = p_old x2, y2 = vertices[i] x3, y3 = vertices[i + 1] p_old = vertices[i] # Create Vectors v1x = (x2 - x1) * 1.0 v1y = (y2 - y1) * 1.0 v2x = (x3 - x2) * 1.0 v2y = (y3 - y2) * 1.0 # Calculate angle a = ((v1x * v2x) + (v1y * v2y)) b = sqrt((v1x * v1x) + (v1y * v1y)) c = sqrt((v2x * v2x) + (v2y * v2y)) # No Division by 0 :) if (b * c) == 0.0: continue # Get the current degrees # We have a bug here sometimes... try: angle = degrees(acos(a / (b * c))) except: # cos=1.0 print("cos=", a / (b * c)) continue # Check if inside tolerance if fabs(angle) > tolerance: p_new.append(vertices[i]) # print "x", 180-angle, is_left(vertices[i-1], # vertices[i], vertices[i+1]) # Check if convex: if dir is None: dir = is_left(vertices[i - 1], vertices[i], vertices[i + 1]) else: if dir != is_left(vertices[i - 1], vertices[i], vertices[i + 1]): is_convex = False # We also want to append the last point :) p_new.append(v_last) # Returns: (1) New Pointlist, (2) Soft reduced pointlist (reduce_poly()) return p_new, is_convex """ OLD FUNCTION: """ # Wipe all points too close to each other vxx = vertices = reduce_poly(vertices, minlen) # Create Output List p_new = [] p_new.append(vertices[0]) # Set the starting vertice p_old = vertices[0] alpha_old = None # For each vector, compare the angle difference to the last one for i in range(1, len(vertices)): x1, y1 = p_old x2, y2 = vertices[i] p_old = (x2, y2) # Make Vector vx, vy = (x2 - x1, y2 - y1) # Vector length l = sqrt((vx * vx) + (vy * vy)) # normalize vx /= l vy /= l # Get Angle if fabs(vx) < 0.2: alpha = 90 else: alpha = degrees(atan2(vy, vx)) if alpha_old is None: alpha_old = alpha continue # Get difference to previous angle alpha_diff = fabs(alpha - alpha_old) alpha_old = alpha # If the new vector differs from the old one, we add the old point # to the output list, as the line changed it's way :) if alpha_diff > tolerance: # print ">",alpha_diff, "\t", vx, vy, l p_new.append(vertices[i - 1]) # We also want to append the last point :) p_new.append(vertices[-1]) # Returns: (1) New Pointlist, (2) Soft reduced pointlist (reduce_poly()) return p_new, vxx # The following functions is_left, reduce_poly and convex_hull are # from the pymunk project (http://code.google.com/p/pymunk/) def is_left(p0, p1, p2): """Test if p2 is left, on or right of the (infinite) line (p0,p1). :return: > 0 for p2 left of the line through p0 and p1 = 0 for p2 on the line < 0 for p2 right of the line """ sorting = (p1[0] - p0[0]) * (p2[1] - p0[1]) - (p2[0] - p0[0]) * \ (p1[1] - p0[1]) if sorting > 0: return 1 elif sorting < 0: return -1 else: return 0 def is_convex(points): """Test if a polygon (list of (x,y)) is strictly convex or not. :return: True if the polygon is convex, False otherwise """ # assert len(points) > 2, "not enough points to form a polygon" p0 = points[0] p1 = points[1] p2 = points[2] xc, yc = 0, 0 is_same_winding = is_left(p0, p1, p2) for p2 in points[2:] + [p0] + [p1]: if is_same_winding != is_left(p0, p1, p2): return False a = p1[0] - p0[0], p1[1] - p0[1] # p1-p0 b = p2[0] - p1[0], p2[1] - p1[1] # p2-p1 if sign(a[0]) != sign(b[0]): xc += 1 if sign(a[1]) != sign(b[1]): yc += 1 p0, p1 = p1, p2 return xc <= 2 and yc <= 2 def sign(x): if x < 0: return -1 else: return 1 def reduce_poly(points, tolerance=50): """Remove close points to simplify a polyline tolerance is the min distance between two points squared. :return: The reduced polygon as a list of (x,y) """ curr_p = points[0] reduced_ps = [points[0]] for p in points[1:]: x1, y1 = curr_p x2, y2 = p dx = fabs(x2 - x1) dy = fabs(y2 - y1) l = sqrt((dx * dx) + (dy * dy)) if l > tolerance: curr_p = p reduced_ps.append(p) return reduced_ps def convex_hull(points): """Create a convex hull from a list of points. This function uses the Graham Scan Algorithm. :return: Convex hull as a list of (x,y) """ # Find lowest rightmost point p0 = points[0] for p in points[1:]: if p[1] < p0[1]: p0 = p elif p[1] == p0[1] and p[0] > p0[0]: p0 = p points.remove(p0) # Sort the points angularly about p0 as center f = partial(is_left, p0) points.sort(cmp=f) points.reverse() points.insert(0, p0) # Find the hull points hull = [p0, points[1]] for p in points[2:]: pt1 = hull[-1] pt2 = hull[-2] l = is_left(pt2, pt1, p) if l > 0: hull.append(p) else: while l <= 0 and len(hull) > 2: hull.pop() pt1 = hull[-1] pt2 = hull[-2] l = is_left(pt2, pt1, p) hull.append(p) return hull Pippy-76/library/pippy/query.py000066400000000000000000000260561445132016300167450ustar00rootroot00000000000000# Copyright (C) 2007 One Laptop per Child # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import logging import dbus import gobject from sugar3.datastore import datastore DS_DBUS_SERVICE = 'org.laptop.sugar.DataStore' DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore' DS_DBUS_PATH = '/org/laptop/sugar/DataStore' # Properties the journal cares about. PROPERTIES = ['uid', 'title', 'mtime', 'timestamp', 'keep', 'buddies', 'icon-color', 'mime_type', 'progress', 'activity', 'mountpoint', 'activity_id'] class _Cache(gobject.GObject): __gtype_name__ = 'query_Cache' __gsignals__ = { 'modified': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])) } def __init__(self, jobjects=None): gobject.GObject.__init__(self) self._array = [] self._dict = {} if jobjects is not None: self.append_all(jobjects) logging.debug('_Cache.__init__: connecting signals.') bus = dbus.SessionBus() datastore = dbus.Interface( bus.get_object(DS_DBUS_SERVICE, DS_DBUS_PATH), DS_DBUS_INTERFACE) self._datastore_created_handler = \ datastore.connect_to_signal('Created', self._datastore_created_cb) self._datastore_updated_handler = \ datastore.connect_to_signal('Updated', self._datastore_updated_cb) self._datastore_deleted_handler = \ datastore.connect_to_signal('Deleted', self._datastore_deleted_cb) def prepend_all(self, jobjects): for jobject in jobjects[::-1]: self._array.insert(0, jobject) self._dict[jobject.object_id] = jobject def append_all(self, jobjects): for jobject in jobjects: self._array.append(jobject) self._dict[jobject.object_id] = jobject def remove_all(self, jobjects): jobjects = jobjects[:] for jobject in jobjects: obj = self._dict[jobject.object_id] self._array.remove(obj) del self._dict[obj.object_id] obj.destroy() def __len__(self): return len(self._array) def __getitem__(self, key): if isinstance(key, str): return self._dict[key] else: return self._array[key] def destroy(self): logging.debug('_Cache.destroy: will disconnect signals.') self._datastore_created_handler.remove() self._datastore_updated_handler.remove() self._datastore_deleted_handler.remove() self._destroy_jobjects(self._array) self._array = [] self._dict = {} def _invalidate(self): self._destroy_jobjects(self._array) self._array = [] self._dict = {} self.emit('modified') def _destroy_jobjects(self, jobjects): for jobject in jobjects: jobject.destroy() def _datastore_created_cb(self, uid): logging.debug('_datastore_created_cb: %r' % uid) self._invalidate() def _datastore_updated_cb(self, uid): logging.debug('_datastore_updated_cb: %r' % uid) if uid in self._dict: jobject = datastore.get(uid) index = self._array.index(self._dict[uid]) self._array[index].destroy() self._array[index] = jobject self._dict[uid] = jobject self.emit('modified') def _datastore_deleted_cb(self, uid): logging.debug('_datastore_deleted_cb: %r' % uid) self._invalidate() class ResultSet(gobject.GObject): __gtype_name__ = 'ResultSet' __gsignals__ = { 'modified': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])) } _CACHE_LIMIT = 80 def __init__(self, query, sorting): gobject.GObject.__init__(self) self._total_count = -1 self._position = -1 self._query = query self._sorting = sorting self._offset = 0 self._cache = _Cache() self._cache_modified_handler = \ self._cache.connect('modified', self._cache_modified_cb) def destroy(self): self._cache.disconnect(self._cache_modified_handler) self._cache.destroy() del self._cache def get_length(self): if self._total_count == -1: jobjects, self._total_count = datastore.find( self._query, sorting=self._sorting, limit=ResultSet._CACHE_LIMIT, properties=PROPERTIES) self._cache.append_all(jobjects) self._offset = 0 return self._total_count length = property(get_length) def seek(self, position): self._position = position def read(self, max_count): logging.debug('ResultSet.read position: %r' % self._position) if max_count * 5 > ResultSet._CACHE_LIMIT: raise RuntimeError( 'max_count (%i) too big for ResultSet._CACHE_LIMIT' ' (%i).' % (max_count, ResultSet._CACHE_LIMIT)) if self._position == -1: self.seek(0) if self._position < self._offset: remaining_forward_entries = 0 else: remaining_forward_entries = \ self._offset + len(self._cache) - self._position if self._position > self._offset + len(self._cache): remaining_backwards_entries = 0 else: remaining_backwards_entries = self._position - self._offset last_cached_entry = self._offset + len(self._cache) if (remaining_forward_entries <= 0 and remaining_backwards_entries <= 0) or \ max_count > ResultSet._CACHE_LIMIT: # Total cache miss: remake it offset = max(0, self._position - max_count) logging.debug('remaking cache, offset: %r limit: %r' % (offset, max_count * 2)) jobjects, self._total_count = datastore.find( self._query, sorting=self._sorting, offset=offset, limit=ResultSet._CACHE_LIMIT, properties=PROPERTIES) self._cache.remove_all(self._cache) self._cache.append_all(jobjects) self._offset = offset elif remaining_forward_entries < 2 * max_count and \ last_cached_entry < self._total_count: # Add one page to the end of cache logging.debug('appending one more page, offset: %r' % last_cached_entry) jobjects, self._total_count = datastore.find( self._query, sorting=self._sorting, offset=last_cached_entry, limit=max_count, properties=PROPERTIES) # update cache self._cache.append_all(jobjects) # apply the cache limit objects_excess = len(self._cache) - ResultSet._CACHE_LIMIT if objects_excess > 0: self._offset += objects_excess self._cache.remove_all(self._cache[:objects_excess]) elif remaining_backwards_entries < 2 * max_count and self._offset > 0: # Add one page to the beginning of cache limit = min(self._offset, max_count) self._offset = max(0, self._offset - max_count) logging.debug('prepending one more page, offset: %r limit: %r' % (self._offset, limit)) jobjects, self._total_count = datastore.find( self._query, sorting=self._sorting, offset=self._offset, limit=limit, properties=PROPERTIES) # update cache self._cache.prepend_all(jobjects) # apply the cache limit objects_excess = len(self._cache) - ResultSet._CACHE_LIMIT if objects_excess > 0: self._cache.remove_all(self._cache[-objects_excess:]) else: logging.debug('cache hit and no need to grow the cache') first_pos = self._position - self._offset last_pos = self._position - self._offset + max_count return self._cache[first_pos:last_pos] def _cache_modified_cb(self, cache): logging.debug('_cache_modified_cb') if not len(self._cache): self._total_count = -1 self.emit('modified') def find(query, sorting=['-mtime']): result_set = ResultSet(query, sorting) return result_set if __name__ == "__main__": TOTAL_ITEMS = 1000 SCREEN_SIZE = 10 def mock_debug(string): print("\tDEBUG: %s" % string) logging.debug = mock_debug def mock_find(query, sorting=None, limit=None, offset=None, properties=[]): print("mock_find %r %r" % (offset, (offset + limit))) if limit is None or offset is None: raise RuntimeError("Unimplemented test.") result = [] for index in range(offset, offset + limit): obj = datastore.DSObject(index, datastore.DSMetadata({}), '') result.append(obj) return result, TOTAL_ITEMS datastore.find = mock_find result_set = find({}) print("Get first page") objects = result_set.read(SCREEN_SIZE) print([obj.object_id for obj in objects]) assert list(range(0, SCREEN_SIZE)) == [obj.object_id for obj in objects] print("") print("Scroll to 5th item") result_set.seek(5) objects = result_set.read(SCREEN_SIZE) print([obj.object_id for obj in objects]) assert list(range(5, SCREEN_SIZE + 5)) == [obj.object_id for obj in objects] print("") print("Scroll back to beginning") result_set.seek(0) objects = result_set.read(SCREEN_SIZE) print([obj.object_id for obj in objects]) assert list(range(0, SCREEN_SIZE)) == [obj.object_id for obj in objects] print("") print("Hit PgDn five times") for i in range(0, 5): result_set.seek((i + 1) * SCREEN_SIZE) objects = result_set.read(SCREEN_SIZE) print([obj.object_id for obj in objects]) assert list(range((i + 1) * SCREEN_SIZE, (i + 2) * SCREEN_SIZE)) == \ [obj.object_id for obj in objects] print("") print("Hit PgUp five times") for i in range(0, 5)[::-1]: result_set.seek(i * SCREEN_SIZE) objects = result_set.read(SCREEN_SIZE) print([obj.object_id for obj in objects]) assert list(range(i * SCREEN_SIZE, (i + 1) * SCREEN_SIZE)) == \ [obj.object_id for obj in objects] print("") Pippy-76/library/pippy/sound.py000066400000000000000000000313541445132016300167250ustar00rootroot00000000000000#!/usr/bin/python # -*- coding: utf-8 -*- # Copyright (C) 2007,2008 One Laptop per Child Association, Inc. # Copyright (C) 2013,14 Walter Bender (walter@sugarlabs.org) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import os from gettext import gettext as _ from sugar3 import env '''XXX: This function seems to be broken. (CSA) def quit(self): perf.Stop() perf.Join() cs.Reset() cs = None ''' orchlines = [] scorelines = [] instrlist = [] fnum = [100] class SoundLibraryNotFoundError(Exception): def __init__(self): Exception.__init__(self, _('Cannot find TamTamEdit sound library.' ' Did you install TamTamEdit?')) def finddir(): paths = ['/usr/share/sugar/activities', env.get_user_activities_path()] sound_candidate_dirs = None for path in paths: if not os.path.exists(path): continue for f in os.listdir(path): if f in ['TamTamMini.activity', 'TamTamJam.activity', 'TamTamEdit.activity', 'TamTamSynthLab.activity', 'MusicKeyboard.activity']: bundle_dir = os.path.join(path, f) tamtam_subdir = str( os.path.join(bundle_dir, 'common', 'Resources', 'Sounds')) sound_candidate_dirs = [ os.path.expandvars('$SUGAR_PATH/activities') + \ tamtam_subdir, tamtam_subdir ] if sound_candidate_dirs is not None: for directory in sound_candidate_dirs: if os.path.isdir(directory): return directory raise SoundLibraryNotFoundError() def defAdsr(attack=0.01, decay=0.1, sustain=0.8, release=0.1): ''' Define an ADSR envelope. fnum = defADSR(attack = [0.01], decay = [0.1], sustain = [0.8], release = [0.1]) ''' att = int(2048 * attack) dec = int(2048 * decay) rel = int(2048 * release) bal = 2048 - (att + dec + rel) sus = min(1., sustain) fnum[0] += 1 scorelines.append('f%ld 0 2048 7 0 %ld 1. %ld %f %ld %f %ld 0\n' % (fnum[0], att, dec, sus, bal, sus, rel)) return fnum[0] def defLineSegments(list=[0, 10, 1, 10, 0, 10, 1, 10, 0]): ''' Define a breakpoints envelope. list begin with the start value of the function and is follow by any pair values (duration, value). The number of elements in the list should be odd. ''' totalLength = 0 newlist = [] for i in range(len(list)): if (i % 2) == 1: totalLength += list[i] for i in range(len(list)): if (i % 2) == 0: newlist.append(list[i]) else: newlist.append(int(2048 * (list[i] / float(totalLength)))) fnum[0] += 1 scorelines.append('f' + str(fnum[0]) + ' 0 2048 -7 ' + ' '.join([str(n) for n in newlist]) + '\n') return fnum[0] def defComplexWave(list=[1, 0, 0, .3, 0, .2, 0, 0, .1]): ''' Define a complex waveform to be read with 'playComplex' function. list=[1, 0, 0, .3, 0, .2, 0, 0, .1] is a list of amplitude for succesive harmonics of a waveform ''' fnum[0] += 1 scorelines.append('f' + str(fnum[0]) + ' 0 2048 10 ' + ' '.join([str(n) for n in list]) + '\n') return fnum[0] def playSine(pitch=1000, amplitude=5000, duration=1, starttime=0, pitch_envelope='default', amplitude_envelope='default'): ''' Play a sine wave (pitch = [1000], amplitude = [5000], duration = [1], starttime = [0], pitch_envelope=['default'], amplitude_envelope=['default']) ''' _play(pitch, amplitude, duration, starttime, pitch_envelope, amplitude_envelope, 1) def playSquare(pitch=1000, amplitude=5000, duration=1, starttime=0, pitch_envelope='default', amplitude_envelope='default'): ''' Play a square wave (pitch = [1000], amplitude = [5000], duration = [1], starttime = [0], pitch_envelope=['default'], amplitude_envelope=['default']) ''' _play(pitch, amplitude, duration, starttime, pitch_envelope, amplitude_envelope, 2) def playSawtooth(pitch=1000, amplitude=5000, duration=1, starttime=0, pitch_envelope='default', amplitude_envelope='default'): ''' Play a sawtooth wave (pitch = [1000], amplitude = [5000], duration = [1], starttime = [0], pitch_envelope=['default'], amplitude_envelope=['default']) ''' _play(pitch, amplitude, duration, starttime, pitch_envelope, amplitude_envelope, 3) def playComplex(pitch=1000, amplitude=5000, duration=1, starttime=0, pitch_envelope='default', amplitude_envelope='default', wave='default'): ''' Play a complex wave (pitch = [1000], amplitude = [5000], duration = [1], starttime = [0], pitch_envelope = ['default'], amplitude_envelope, wave = ['default'] ) ''' if wave == 'default': wavetable = 10 else: wavetable = wave _play(pitch, amplitude, duration, starttime, pitch_envelope, amplitude_envelope, wavetable) def _play(pitch, amplitude, duration, starttime, pitch_envelope, amplitude_envelope, instrument): if pitch_envelope == 'default': pitenv = 99 else: pitenv = pitch_envelope if amplitude_envelope == 'default': ampenv = 100 else: ampenv = amplitude_envelope if not 1 in instrlist: orchlines.append('instr 1\n') orchlines.append('kpitenv oscil 1, 1/p3, p6\n') orchlines.append('aenv oscil 1, 1/p3, p7\n') orchlines.append('asig oscil p5*aenv, p4*kpitenv, p8\n') orchlines.append('out asig\n') orchlines.append('endin\n\n') instrlist.append(1) scorelines.append('i1 %s %s %s %s %s %s %s\n' % (str(starttime), str(duration), str(pitch), str(amplitude), str(pitenv), str(ampenv), str(instrument))) def playFrequencyModulation(pitch=500, amplitude=5000, duration=2, starttime=0, carrier=1, modulator=.5, index=5, pitch_envelope='default', amplitude_envelope='default', carrier_envelope='default', modulator_envelope='default', index_envelope='default', wave='default'): ''' Play a frequency modulation synthesis sound (pitch = [100], amplitude = [5000], duration = [2], starttime = [0], carrier = [1], modulator = [.5], index = [5], pitch_envelope = ['default'], amplitude_envelope = ['default'], carrier_envelope = ['default'], modulator_envelope = ['default'], index_envelope = ['default'], wave = ['default'] ) ''' if pitch_envelope == 'default': pitenv = 99 else: pitenv = pitch_envelope if amplitude_envelope == 'default': ampenv = 100 else: ampenv = amplitude_envelope if carrier_envelope == 'default': carenv = 99 else: carenv = carrier_envelope if modulator_envelope == 'default': modenv = 99 else: modenv = modulator_envelope if index_envelope == 'default': indenv = 99 else: indenv = index_envelope if wave == 'default': wavetable = 1 else: wavetable = wave if not 7 in instrlist: orchlines.append('instr 7\n') orchlines.append('kpitenv oscil 1, 1/p3, p10\n') orchlines.append('kenv oscil 1, 1/p3, p11\n') orchlines.append('kcarenv oscil 1, 1/p3, p12\n') orchlines.append('kmodenv oscil 1, 1/p3, p13\n') orchlines.append('kindenv oscil 1, 1/p3, p14\n') orchlines.append('asig foscil p5*kenv, p4*kpitenv, p6*kcarenv, ' 'p7*kmodenv, p8*kindenv, p9\n') orchlines.append('out asig\n') orchlines.append('endin\n\n') instrlist.append(7) scorelines.append('i7 %s %s %s %s %s %s %s %s %s %s %s %s %s\n' % (str(starttime), str(duration), str(pitch), str(amplitude), str(carrier), str(modulator), str(index), str(wavetable), str(pitenv), str(ampenv), str(carenv), str(modenv), str(indenv))) def playPluck(pitch=100, amplitude=5000, duration=2, starttime=0, pitch_envelope='default', amplitude_envelope='default'): ''' Play a string physical modeling sound (pitch = [100], amplitude = [5000], duration = [2], starttime = [0], pitch_envelope = ['default'], amplitude_envelope ) ''' if pitch_envelope == 'default': pitenv = 99 else: pitenv = pitch_envelope if amplitude_envelope == 'default': ampenv = 100 else: ampenv = amplitude_envelope if not 8 in instrlist: orchlines.append('instr 8\n') orchlines.append('kpitenv oscil 1, 1/p3, p6\n') orchlines.append('kenv oscil 1, 1/p3, p7\n') orchlines.append('asig pluck p5*kenv, p4*kpitenv, 40, 0, 6\n') orchlines.append('asig butterlp asig, 4000\n') orchlines.append('out asig\n') orchlines.append('endin\n\n') instrlist.append(8) scorelines.append('i8 %s %s %s %s %s %s\n' % (str(starttime), str(duration), str(pitch), str(amplitude), str(pitenv), str(ampenv))) def playWave(sound='horse', pitch=1, amplitude=1, loop=False, duration=1, starttime=0, pitch_envelope='default', amplitude_envelope='default'): ''' Play a wave file (sound = ['horse'], pitch = [1], amplitude = [1], loop = [False], duration = [1], starttime = [0], pitch_envelope=['default'], amplitude_envelope=['default']) ''' if '/' in sound: fullname = sound else: fullname = os.path.join(finddir(), sound) if loop: lp = 1 else: lp = 0 if pitch_envelope == 'default': pitenv = 99 else: pitenv = pitch_envelope if amplitude_envelope == 'default': ampenv = 100 else: ampenv = amplitude_envelope if not 9 in instrlist: orchlines.append('instr 9\n') orchlines.append('kpitenv oscil 1, 1/p3, p8\n') orchlines.append('aenv oscil 1, 1/p3, p9\n') orchlines.append('asig diskin p4, p5*kpitenv, 0, p7\n') orchlines.append('out asig*p6*aenv\n') orchlines.append('endin\n\n') instrlist.append(9) scorelines.append("i9 %f %f '%s' %s %s %s %s %s\n" % (float(starttime), float(duration), fullname, str(pitch), str(amplitude), str(lp), str(pitenv), str(ampenv))) def getSoundList(): return sorted(os.listdir(finddir())) temp_path = None def audioOut(file=None): ''' Compile a .csd file and start csound to run it. If a string is given as argument, it write a wave file on disk instead of sending sound to hp. (file = [None]) ''' global temp_path if temp_path is None: temp_path = os.path.join(env.get_profile_path(), 'pippy') if not os.path.isdir(temp_path): os.mkdir(temp_path) path = temp_path csd = open(os.path.join(path, 'temp.csd'), 'w') csd.write('\n\n') csd.write('\n') if file is None: csd.write('-+rtaudio=alsa -odevaudio -m0 -d -b256 -B512\n') else: file = os.path.join(path, '%s.wav' % file) csd.write('-+rtaudio=alsa -o%s -m0 -W -d -b256 -B512\n' % file) csd.write('\n\n') csd.write('\n\n') csd.write('sr=16000\n') csd.write('ksmps=50\n') csd.write('nchnls=1\n\n') for line in orchlines: csd.write(line) csd.write('\n\n\n') csd.write('\n\n') csd.write('f1 0 2048 10 1\n') csd.write('f2 0 2048 10 1 0 .33 0 .2 0 .143 0 .111\n') csd.write('f3 0 2048 10 1 .5 .33 .25 .2 .175 .143 .125 .111 .1\n') csd.write('f10 0 2048 10 1 0 0 .3 0 .2 0 0 .1\n') csd.write('f99 0 2048 7 1 2048 1\n') csd.write('f100 0 2048 7 0. 10 1. 1900 1. 132 0.\n') for line in scorelines: csd.write(line) csd.write('e\n') csd.write('\n\n') csd.write('\n') csd.close() os.system('csound ' + path + '/temp.csd >/dev/null 2>/dev/null') Pippy-76/notebook.py000066400000000000000000000404151445132016300146060ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2014 Walter Bender # Copyright (C) 2014 Sai Vineet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import logging import unicodedata import re import uuid from gi import require_version from gi.repository import Gtk from gi.repository import Gdk from gi.repository import GObject from gi.repository import Pango require_version('GtkSource', '3.0') from gi.repository import GtkSource from gettext import gettext as _ from sugar3.graphics.toolbutton import ToolButton from sugar3.graphics.alert import ConfirmationAlert from texteditor import TextBufferCollaberizer tab_object = list() FONT_CHANGE_STEP = 2 DEFAULT_FONT_SIZE = 12 class TabLabel(Gtk.HBox): __gsignals__ = { 'tab-close': (GObject.SignalFlags.RUN_FIRST, None, ([GObject.TYPE_PYOBJECT])), 'tab-rename': (GObject.SignalFlags.RUN_FIRST, None, ([GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT, ])), 'tab-switch': (GObject.SignalFlags.RUN_FIRST, None, ([GObject.TYPE_PYOBJECT])), } def __init__(self, child, label, path, tabs, editor_id): GObject.GObject.__init__(self) self.child = child self.label_text = label self._path = path # Hide the path in the label self.editor_id = editor_id self.tabs = tabs self.label_box = Gtk.EventBox() self._label = Gtk.Label(label=self.label_text) self._label.set_alignment(0, 0.5) self._label.show() self.label_box.add(self._label) self.label_box.connect('button-press-event', self._label_clicked) self.label_box.show_all() self.pack_start(self.label_box, True, True, 5) self.label_entry = Gtk.Entry() self.label_entry.connect('activate', self._label_entry_cb) self.label_entry.connect('focus-out-event', self._label_entry_cb) self.pack_start(self.label_entry, True, True, 0) button = ToolButton('close-tab') button.connect('clicked', self.__button_clicked_cb) self.pack_start(button, False, True, 0) button.show() self._close_button = button tab_object.append(self) def set_text(self, label): self.label_text = label self._label.set_text(self.label_text) def get_text(self): return self._label.get_text() def get_path(self): return self._path def set_path(self, path): self._path = path def update_size(self, size): self.set_size_request(size, -1) def hide_close_button(self): self._close_button.hide() def show_close_button(self): self._close_button.show() def __button_clicked_cb(self, button): self.emit('tab-close', self.child) def _label_clicked(self, eventbox, data): if self.tabs.page_num(self.child) is not self.tabs.get_current_page(): self.child.grab_focus() self.emit('tab-switch', self.child) else: self.label_entry.set_text(self.label_text) eventbox.hide() self.label_entry.grab_focus() self.label_entry.show() def _label_entry_cb(self, entry, focus=None): label = self.label_entry.get_text() if label != "": if label != self.label_text: self.label_text = label self.emit('tab-rename', self.child, label) self.label_box.show_all() self.label_entry.hide() self._label.set_text(self.label_text) class AddNotebook(Gtk.Notebook): ''' AddNotebook ----------- This subclass has a add button which emits tab-added on clicking the button. ''' __gsignals__ = { 'tab-added': (GObject.SignalFlags.RUN_FIRST, None, ([])), 'tab-renamed': (GObject.SignalFlags.RUN_FIRST, None, ([GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT, ])), 'tab-closed': (GObject.SignalFlags.RUN_FIRST, None, ([GObject.TYPE_PYOBJECT, ])), } def __init__(self): Gtk.Notebook.__init__(self) self._add_tab = ToolButton('gtk-add') self._add_tab.connect('clicked', self._add_tab_cb) self._add_tab.show() self.set_action_widget(self._add_tab, Gtk.PackType.END) def _add_tab_cb(self, button): self.emit('tab-added') class PippySourceView(GtkSource.View): def __init__(self, buffer_text, editor_id, collab): GtkSource.View.__init__(self) self._css_provider = Gtk.CssProvider() self.set_light() self.get_style_context().add_provider( self._css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) text_buffer = GtkSource.Buffer() TextBufferCollaberizer(text_buffer, editor_id, collab) lang_manager = GtkSource.LanguageManager.get_default() if hasattr(lang_manager, 'list_languages'): langs = lang_manager.list_languages() else: lang_ids = lang_manager.get_language_ids() langs = [lang_manager.get_language(lang_id) for lang_id in lang_ids] for lang in langs: for m in lang.get_mime_types(): if m == 'text/x-python': text_buffer.set_language(lang) if hasattr(text_buffer, 'set_highlight'): text_buffer.set_highlight(True) else: text_buffer.set_highlight_syntax(True) if buffer_text: text_buffer.set_text(buffer_text) text_buffer.set_modified(False) self.set_buffer(text_buffer) self.set_size_request(0, int(Gdk.Screen.height() * 0.5)) self.set_editable(True) self.set_cursor_visible(True) self.set_show_line_numbers(True) self.set_wrap_mode(Gtk.WrapMode.CHAR) self.set_insert_spaces_instead_of_tabs(True) self.set_tab_width(2) self.set_auto_indent(True) self.set_can_focus(True) # Notebook will call this with appropriate font size def set_font_size(self, font_size): self.modify_font( Pango.FontDescription( 'Monospace {}'.format(font_size))) def set_dark(self): theme = b""" textview text { background: @black; color: @white; }""" self._css_provider.load_from_data(theme) def set_light(self): theme = b""" textview text { background: @white; color: @black; }""" self._css_provider.load_from_data(theme) class SourceNotebook(AddNotebook): def __init__(self, activity, collab, edit_toolbar=None): AddNotebook.__init__(self) self.activity = activity self._collab = collab self._edit_toolbar = edit_toolbar self.set_scrollable(True) self.last_tab = 0 self._font_size = DEFAULT_FONT_SIZE def add_tab(self, label=None, buffer_text=None, path=None, editor_id=None): self.last_tab += 1 codesw = Gtk.ScrolledWindow() codesw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) if editor_id is None: editor_id = str(uuid.uuid1()) text_view = PippySourceView( buffer_text, editor_id, self._collab) text_view.set_font_size(self._font_size) codesw.add(text_view) text_view.show() text_view.grab_focus() if label: tablabel = TabLabel(codesw, label, path, self, editor_id) else: tablabel = TabLabel(codesw, _('New Source File %d' % self.last_tab), path, self, editor_id) tablabel.connect('tab-close', self._tab_closed_cb) tablabel.connect('tab-rename', self._tab_renamed_cb) tablabel.connect('tab-switch', self._tab_switched_cb) self.connect('key-press-event', self._key_press_cb) self.connect('key-release-event', self._key_release_cb) codesw.show_all() index = self.append_page(codesw, tablabel) self.props.page = index # Set new page as active tab # Show close only when tabs > 1 only_widget = self.get_nth_page(0) if self.get_n_pages() == 1: self.get_tab_label(only_widget).hide_close_button() else: self.get_tab_label(only_widget).show_close_button() def _key_press_cb(self, widget, event): key_name = Gdk.keyval_name(event.keyval) if event.get_state() & Gdk.ModifierType.CONTROL_MASK: if key_name == 'w': if self.get_n_pages() > 1: self._tab_closed_cb( None, self.get_nth_page(self.get_current_page())) elif key_name in ['1', '2', '3', '4', '5', '6', '7', '8', '9']: if int(key_name) <= self.get_n_pages(): self.set_current_page(int(key_name) - 1) elif key_name == 't': self.emit('tab-added') elif key_name == 'Tab': if self.get_current_page() == self.get_n_pages() - 1: self.set_current_page(0) else: self.next_page() elif event.get_state() & Gdk.ModifierType.SHIFT_MASK: if key_name == 'ISO_Left_Tab': if self.get_current_page() == 0: self.set_current_page(self.get_n_pages() - 1) else: self.prev_page() else: return False else: return False return True return False def update_edit_toolbar(self, text_buffer=None): if self._edit_toolbar is None: return if text_buffer is None: text_buffer = self.get_text_buffer() self._edit_toolbar.undo.set_sensitive(text_buffer.can_undo()) self._edit_toolbar.redo.set_sensitive(text_buffer.can_redo()) def _key_release_cb(self, widget, event): self.update_edit_toolbar() def set_current_label(self, label): child = self.get_nth_page(self.get_current_page()) widget = self.get_tab_label(child) widget.set_text(self.purify_name(label)) def set_current_path(self, path): child = self.get_nth_page(self.get_current_page()) widget = self.get_tab_label(child) widget.set_path(path) def get_text_buffer(self): tab = self.get_nth_page(self.get_current_page()).get_children() text_buffer = tab[0].get_buffer() return text_buffer def get_text_view(self): page = self.get_current_page() if page == -1: return None tab = self.get_nth_page(page).get_children() text_view = tab[0] return text_view def purify_name(self, label): if not label.endswith('.py'): label = label + '.py' label = label.replace(' ', '_') return label def get_all_data(self): # Returns all the names of files and the buffer contents too. names = [] python_codes = [] paths = [] modifieds = [] editor_ids = [] for i in range(0, self.get_n_pages()): child = self.get_nth_page(i) label = self.get_tab_label(child).get_text() names.append(label) path = self.get_tab_label(child).get_path() paths.append(path) text_buffer = child.get_children()[0].get_buffer() text = text_buffer.get_text(*text_buffer.get_bounds(), include_hidden_chars=True) python_codes.append(text) modifieds.append(text_buffer.get_modified()) editor_ids.append(self.get_tab_label(child).editor_id) return (names, python_codes, paths, modifieds, editor_ids) def get_current_file_name(self): child = self.get_nth_page(self.get_current_page()) label = self.get_tab_label(child).get_text() label = self.purify_name(label) return label def set_font_size(self, font_size): self._font_size = font_size for i in range(self.get_n_pages()): page = self.get_nth_page(i) children = page.get_children() children[0].set_font_size(self._font_size) def get_font_size(self): return self._font_size def set_light(self): for i in range(self.get_n_pages()): page = self.get_nth_page(i) children = page.get_children() children[0].set_light() def set_dark(self): for i in range(self.get_n_pages()): page = self.get_nth_page(i) children = page.get_children() children[0].set_dark() def child_exited_cb(self, *args): '''Called whenever a child exits. If there's a handler, runadd it.''' h, self.activity._child_exited_handler = \ self.activity._child_exited_handler, None if h is not None: h() def __tab_close(self, index): self.remove_page(index) tab_object.pop(index) # Hide close button if only one tab present if self.get_n_pages() == 1: only_widget = self.get_nth_page(0) self.get_tab_label(only_widget).hide_close_button() try: logging.debug('deleting session_data %s' % str(self.activity.session_data[index])) del self.activity.session_data[index] except IndexError: pass def _tab_closed_cb(self, notebook, child): index = self.page_num(child) page = self.get_nth_page(index) text_buffer = page.get_children()[0].get_buffer() empty = text_buffer.get_char_count() == 0 if empty: self.__tab_close(index) self.emit('tab-closed', index) return tablabel = self.get_tab_label(page) path = tablabel.get_path() example = self.activity.is_example(path) pristine = not text_buffer.get_modified() if example and pristine: self.__tab_close(index) self.emit('tab-closed', index) return alert = ConfirmationAlert() alert.props.title = _('Erase') alert.props.msg = _('Do you want to permanently erase \"%s\"?') \ % tablabel.get_text() alert.connect('response', self._tab_close_alert_response_cb, index) self.activity.add_alert(alert) def _tab_close_alert_response_cb(self, alert, response_id, index): self.activity.remove_alert(alert) if response_id is not Gtk.ResponseType.OK: return logging.debug( 'SourceNotebook._tab_close_alert_response_cb %r' % (index)) self.__tab_close(index) self.emit('tab-closed', index) def close_tab(self, index): logging.debug('SourceNotebook.close_tab %r' % (index)) self.__tab_close(index) def _tab_renamed_cb(self, tablabel, child, name): index = self.page_num(child) logging.debug('SourceNotebook._tab_renamed_cb %r %r' % (index, name)) self.emit('tab-renamed', index, name) def _tab_switched_cb(self, notebook, child): index = self.page_num(child) page = self.get_nth_page(index) text_buffer = page.get_children()[0].get_buffer() self.update_edit_toolbar(text_buffer) def rename_tab(self, index, name): logging.debug('SourceNotebook.rename_tab %r %r' % (index, name)) page = self.get_nth_page(index) tablabel = self.get_tab_label(page) tablabel.set_text(name) Pippy-76/pippy_app.py000066400000000000000000001665771445132016300150110ustar00rootroot00000000000000#!/usr/bin/python3 # -*- coding: utf-8 -*- # # Copyright (C) 2007,2008,2009 Chris Ball, based on Collabora's # "hellomesh" demo. # # Copyright (C) 2013,14 Walter Bender # Copyright (C) 2013,14 Ignacio Rodriguez # Copyright (C) 2013 Jorge Gomez # Copyright (C) 2013,14 Sai Vineet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA """Pippy Activity: A simple Python programming activity .""" import re import os import subprocess from random import uniform import locale import json import sys from shutil import copy2 from signal import SIGTERM from gettext import gettext as _ import uuid import dbus from dbus.mainloop.glib import DBusGMainLoop from gi import require_version require_version('Gdk', '3.0') require_version('Gtk', '3.0') from gi.repository import Gdk from gi.repository import Gtk from gi.repository import GLib from gi.repository import Pango try: require_version('Vte', '2.91') except: require_version('Vte', '2.90') from gi.repository import Vte from gi.repository import GObject DBusGMainLoop(set_as_default=True) bus = dbus.SessionBus() from sugar3.datastore import datastore from sugar3.activity import activity as activity from sugar3.activity.widgets import EditToolbar from sugar3.activity.widgets import StopButton from sugar3.activity.activity import get_bundle_path from sugar3.graphics.alert import Alert from sugar3.graphics.alert import ConfirmationAlert from sugar3.graphics.alert import NotifyAlert from sugar3.graphics.icon import Icon from sugar3.graphics.objectchooser import ObjectChooser from sugar3.graphics.toggletoolbutton import ToggleToolButton from sugar3.graphics.toolbarbox import ToolbarButton from sugar3.graphics.toolbutton import ToolButton from sugar3.graphics.toolbarbox import ToolbarBox from sugar3.activity.widgets import ActivityToolbarButton from jarabe.view.customizebundle import generate_unique_id from activity import ViewSourceActivity from activity import TARGET_TYPE_TEXT from collabwrapper import CollabWrapper from filedialog import FileDialog from icondialog import IconDialog from notebook import SourceNotebook, tab_object from toolbars import DevelopViewToolbar import sound_check import logging text_buffer = None # magic prefix to use utf-8 source encoding PYTHON_PREFIX = '''#!/usr/bin/python3 # -*- coding: utf-8 -*- ''' # Force category names into Pootle DEFAULT_CATEGORIES = [_('graphics'), _('math'), _('python'), _('sound'), _('string'), _('tutorials')] _logger = logging.getLogger('pippy-activity') DISTUTILS_SETUP_SCRIPT = """#!/usr/bin/python3 # -*- coding: utf-8 -*- from distutils.core import setup setup(name='{modulename}', version='1.0', py_modules=[ {filenames} ], ) """ # This is .format()'ed with the list of the file names. DISTUTILS_SETUP_SCRIPT = """#!/usr/bin/python3 # -*- coding: utf-8 -*- from distutils.core import setup setup(name='{modulename}', version='1.0', py_modules=[ {filenames} ], ) """ # This is .format()'ed with the list of the file names. def _has_new_vte_api(): try: return (Vte.MAJOR_VERSION >= 0 and Vte.MINOR_VERSION >= 38) except: # Really old versions of Vte don't have VERSION return False def _find_object_id(activity_id, mimetype='text/x-python'): ''' Round-about way of accessing self._jobject.object_id ''' dsobjects, nobjects = datastore.find({'mime_type': [mimetype]}) for dsobject in dsobjects: if 'activity_id' in dsobject.metadata and \ dsobject.metadata['activity_id'] == activity_id: return dsobject.object_id return None class PippyActivity(ViewSourceActivity): '''Pippy Activity as specified in activity.info''' def __init__(self, handle): self._pippy_instance = self self.session_data = [] # Used to manage saving self._loaded_session = [] # Used to manage tabs self._py_file_loaded_from_journal = False self._py_object_id = None self._dialog = None sys.path.append(os.path.join(self.get_activity_root(), 'Library')) ViewSourceActivity.__init__(self, handle) self._collab = CollabWrapper(self) self._collab.message.connect(self.__message_cb) self.set_canvas(self.initialize_display()) self.after_init() self.connect("notify::active", self.__active_cb) self._collab.setup() def focus(): """ Enforce focus for the text view once. """ widget = self.get_toplevel().get_focus() textview = self._source_tabs.get_text_view() if widget is None and textview is not None: textview.grab_focus() return True return False GLib.timeout_add(100, focus) def initialize_display(self): '''Build activity toolbar with title input, share button and export buttons ''' toolbar_box = ToolbarBox() activity_button = ActivityToolbarButton(self) toolbar_box.toolbar.insert(activity_button, 0) self.set_toolbar_box(toolbar_box) activity_button.show() toolbar_box.show() activity_toolbar = activity_button.page separator = Gtk.SeparatorToolItem() activity_toolbar.insert(separator, -1) separator.show() button = ToolButton('pippy-import-doc') button.set_tooltip(_('Import Python file to new tab')) button.connect('clicked', self._import_py_cb) activity_toolbar.insert(button, -1) button.show() button = ToolButton('pippy-export-doc') button.set_tooltip(_('Export as Pippy document')) button.connect('clicked', self._export_document_cb) activity_toolbar.insert(button, -1) button.show() button = ToolButton('pippy-export-library') button.set_tooltip(_('Save this file to the Pippy library')) button.connect('clicked', self._save_as_library) activity_toolbar.insert(button, -1) if not self._library_writable(): button.set_sensitive(False) button.show() button = ToolButton('pippy-export-example') button.set_tooltip(_('Export as new Pippy example')) button.connect('clicked', self._export_example_cb) activity_toolbar.insert(button, -1) button.show() button = ToolButton('pippy-create-bundle') button.set_tooltip(_('Create a Sugar activity bundle')) button.connect('clicked', self._create_bundle_cb) activity_toolbar.insert(button, -1) button.show() button = ToolButton('pippy-create-distutils') # TRANS: A distutils package is used to distribute Python modules button.set_tooltip(_('Export as a distutils package')) button.connect('clicked', self._export_distutils_cb) activity_toolbar.insert(button, -1) button.show() self._edit_toolbar = EditToolbar() button = ToolbarButton() button.set_page(self._edit_toolbar) button.props.icon_name = 'toolbar-edit' button.props.label = _('Edit') self.get_toolbar_box().toolbar.insert(button, -1) button.show() self._edit_toolbar.show() self._edit_toolbar.undo.connect('clicked', self.__undobutton_cb) self._edit_toolbar.undo.set_sensitive(False) self._edit_toolbar.redo.connect('clicked', self.__redobutton_cb) self._edit_toolbar.redo.set_sensitive(False) self._edit_toolbar.copy.connect('clicked', self.__copybutton_cb) self._edit_toolbar.paste.connect('clicked', self.__pastebutton_cb) view_btn = ToolbarButton() view_toolbar = DevelopViewToolbar(self) view_btn.props.page = view_toolbar view_btn.props.icon_name = 'toolbar-view' view_btn.props.label = _('View') view_toolbar.connect('font-size-changed', self._font_size_changed_cb) self.get_toolbar_box().toolbar.insert(view_btn, -1) self.view_toolbar = view_toolbar view_toolbar.show() actions_toolbar = self.get_toolbar_box().toolbar self._toggle_output = ToggleToolButton('tray-show') self._toggle_output.set_tooltip(_('Show output panel')) self._toggle_output.connect('toggled', self._toggle_output_cb) actions_toolbar.insert(self._toggle_output, -1) self._toggle_output.show() self._inverted_colors = ToggleToolButton(icon_name='dark-theme') self._inverted_colors.set_tooltip(_('Inverted Colors')) self._inverted_colors.set_accelerator('I') self._inverted_colors.connect( 'toggled', self.__inverted_colors_toggled_cb) actions_toolbar.insert(self._inverted_colors, -1) self._inverted_colors.show() icons_path = os.path.join(get_bundle_path(), 'icons') icon_bw = Gtk.Image() icon_bw.set_from_file(os.path.join(icons_path, 'run_bw.svg')) icon_bw.show() icon_color = Gtk.Image() icon_color.set_from_file(os.path.join(icons_path, 'run_color.svg')) icon_color.show() button = ToolButton(label=_('Run!')) button.props.accelerator = _('r') button.set_icon_widget(icon_bw) button.set_tooltip(_('Run!')) button.connect('clicked', self._flash_cb, dict({'bw': icon_bw, 'color': icon_color})) button.connect('clicked', self._go_button_cb) actions_toolbar.insert(button, -1) button.show() icon_bw = Gtk.Image() icon_bw.set_from_file(os.path.join(icons_path, 'stopit_bw.svg')) icon_bw.show() icon_color = Gtk.Image() icon_color.set_from_file(os.path.join(icons_path, 'stopit_color.svg')) icon_color.show() button = ToolButton(label=_('Stop')) button.props.accelerator = _('s') button.set_icon_widget(icon_bw) button.connect('clicked', self._flash_cb, dict({'bw': icon_bw, 'color': icon_color})) button.connect('clicked', self._stop_button_cb) button.set_tooltip(_('Stop')) actions_toolbar.insert(button, -1) button.show() icon_bw = Gtk.Image() icon_bw.set_from_file(os.path.join(icons_path, 'eraser_bw.svg')) icon_bw.show() icon_color = Gtk.Image() icon_color.set_from_file(os.path.join(icons_path, 'eraser_color.svg')) icon_color.show() button = ToolButton(label=_('Clear output panel')) button.props.accelerator = _('c') button.set_icon_widget(icon_bw) button.connect('clicked', self._clear_button_cb) button.connect('clicked', self._flash_cb, dict({'bw': icon_bw, 'color': icon_color})) button.set_tooltip(_('Clear output panel')) actions_toolbar.insert(button, -1) button.show() activity_toolbar.show() separator = Gtk.SeparatorToolItem() self.get_toolbar_box().toolbar.insert(separator, -1) separator.show() button = ToolButton('pippy-openoff') button.set_tooltip(_('Open an example')) button.connect('clicked', self._load_example_cb) self.get_toolbar_box().toolbar.insert(button, -1) button.show() separator = Gtk.SeparatorToolItem() separator.props.draw = False separator.set_expand(True) self.get_toolbar_box().toolbar.insert(separator, -1) separator.show() stop = StopButton(self) self.get_toolbar_box().toolbar.insert(stop, -1) stop.show() vpane = Gtk.Paned.new(orientation=Gtk.Orientation.VERTICAL) vpane.set_position(400) # setting initial position self.paths = [] try: if sound_check.finddir(): TAMTAM_AVAILABLE = True else: TAMTAM_AVAILABLE = False except sound_check.SoundLibraryNotFoundError: TAMTAM_AVAILABLE = False data_path = os.path.join(get_bundle_path(), 'data') # get default language from locale locale_lang = locale.getdefaultlocale()[0] if locale_lang is None: lang = 'en' else: lang = locale_lang.split('_')[0] _logger.debug(locale.getdefaultlocale()) _logger.debug(lang) # construct the path for both lang_path = os.path.join(data_path, lang) en_lang_path = os.path.join(data_path, 'en') # get all folders in lang examples all_folders = [] if os.path.exists(lang_path): for d in sorted(os.listdir(lang_path)): all_folders.append(d) # get all folders in English examples for d in sorted(os.listdir(en_lang_path)): # check if folder isn't already in list if d not in all_folders: all_folders.append(d) for folder in all_folders: # Skip sound folders if TAMTAM is not installed if folder == 'sound' and not TAMTAM_AVAILABLE: continue direntry = {} # check if dir exists in pref language, if exists, add it if os.path.exists(os.path.join(lang_path, folder)): direntry = { 'name': _(folder.capitalize()), 'path': os.path.join(lang_path, folder) + '/'} # if not try to see if it's in default English path elif os.path.exists(os.path.join(en_lang_path, folder)): direntry = { 'name': _(folder.capitalize()), 'path': os.path.join(en_lang_path, folder) + '/'} self.paths.append([direntry['name'], direntry['path']]) # Adding local examples data_path = os.path.join(get_bundle_path(), 'data') self.paths.append([_('My examples'), data_path]) self._source_tabs = SourceNotebook(self, self._collab, self._edit_toolbar) self._source_tabs.connect('tab-added', self._add_source_cb) self._source_tabs.connect('tab-renamed', self._rename_source_cb) self._source_tabs.connect('tab-closed', self._close_source_cb) if self._loaded_session: for name, content, path in self._loaded_session: self._source_tabs.add_tab(name, content, path) else: self.session_data.append(None) self._source_tabs.add_tab() # New instance, ergo empty tab vpane.add1(self._source_tabs) self._source_tabs.show() self._outbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL) self._vte = Vte.Terminal() self._vte.set_encoding('utf-8') self._vte.set_size(30, 5) self._vte.set_scrollback_lines(-1) self._vte_set_colors('#000000', '#E7E7E7') self._child_exited_handler = None self._vte.connect('child_exited', self._child_exited_cb) self._vte.connect('drag_data_received', self._vte_drop_cb) self._outbox.pack_start(self._vte, True, True, 0) outsb = Gtk.Scrollbar(orientation=Gtk.Orientation.VERTICAL) outsb.set_adjustment(self._vte.get_vadjustment()) outsb.show() self._outbox.pack_start(outsb, False, False, 0) self._load_config() vpane.add2(self._outbox) self._outbox.show() vpane.show() return vpane def _vte_set_colors(self, bg, fg): # XXX support both Vte APIs if _has_new_vte_api(): foreground = Gdk.RGBA() foreground.parse(bg) background = Gdk.RGBA() background.parse(fg) else: foreground = Gdk.color_parse(bg) background = Gdk.color_parse(fg) self._vte.set_colors(foreground, background, []) def after_init(self): self._outbox.hide() def _font_size_changed_cb(self, widget, size): self._source_tabs.set_font_size(size) self._vte.set_font( Pango.FontDescription('Monospace {}'.format(size))) def _store_config(self): font_size = self._source_tabs.get_font_size() _config_file_path = os.path.join( activity.get_activity_root(), 'data', 'config.json') with open(_config_file_path, "w") as f: f.write(json.dumps(font_size)) def _load_config(self): _config_file_path = os.path.join( activity.get_activity_root(), 'data', 'config.json') if not os.path.isfile(_config_file_path): return with open(_config_file_path, "r") as f: font_size = json.loads(f.read()) self.view_toolbar.set_font_size(font_size) self._vte.set_font( Pango.FontDescription('Monospace {}'.format(font_size))) def __active_cb(self, widget, event): _logger.debug('__active_cb %r', self.props.active) if self.props.active: self.resume() else: self.pause() def do_visibility_notify_event(self, event): _logger.debug('do_visibility_notify_event %r', event.get_state()) if event.get_state() == Gdk.VisibilityState.FULLY_OBSCURED: self.pause() else: self.resume() def pause(self): # FIXME: We had resume, but no pause? pass def resume(self): if self._dialog is not None: self._dialog.set_keep_above(True) def _toggle_output_cb(self, button): shown = button.get_active() if shown: self._outbox.show_all() self._toggle_output.set_tooltip(_('Hide output panel')) self._toggle_output.set_icon_name('tray-hide') else: self._outbox.hide() self._toggle_output.set_tooltip(_('Show output panel')) self._toggle_output.set_icon_name('tray-show') def __inverted_colors_toggled_cb(self, button): if button.props.active: self._vte_set_colors('#E7E7E7', '#000000') self._source_tabs.set_dark() button.set_icon_name('light-theme') button.set_tooltip(_('Normal Colors')) else: self._vte_set_colors('#000000', '#E7E7E7') self._source_tabs.set_light() button.set_icon_name('dark-theme') button.set_tooltip(_('Inverted Colors')) def _load_example_cb(self, widget): widget.set_icon_name('pippy-openon') self._dialog = FileDialog(self.paths, self, widget) self._dialog.show() self._dialog.run() path = self._dialog.get_path() if path: if path.endswith('physics') and not self._ensure_box2d_support(): return self._select_func_cb(path) def _ensure_box2d_support(self): try: import Box2D except ImportError: dialog = Gtk.MessageDialog( None, Gtk.DialogFlags.MODAL, Gtk.MessageType.WARNING, Gtk.ButtonsType.OK, _('Box2D is not installed on your system')) dialog.format_secondary_text( _('Box2D is required to run this example.')) from sugar3.graphics import style dialog.modify_bg(Gtk.StateType.NORMAL, style.COLOR_TOOLBAR_GREY.get_gdk_color()) dialog.modify_fg(Gtk.StateType.NORMAL, Gdk.color_parse('white')) dialog.run() dialog.destroy() return False return True def _add_source_cb(self, button, force=False, editor_id=None): if self._collab._leader or force: if editor_id is None: editor_id = str(uuid.uuid1()) self._source_tabs.add_tab(editor_id=editor_id) self.session_data.append(None) self._source_tabs.get_nth_page(-1).show_all() self._source_tabs.get_text_view().grab_focus() if self._collab._leader: self._collab.post(dict( action='add-source', editor_id=editor_id)) else: # The leader must do it first so that they can set # up the text buffer self._collab.post(dict(action='add-source-request')) # Check if dark mode enabled, apply it self._source_tabs.update_edit_toolbar() if self._inverted_colors.props.active: self._source_tabs.set_dark() def _rename_source_cb(self, notebook, page, name): _logger.debug('_rename_source_cb %r %r' % (page, name)) self._collab.post(dict(action='rename-source', page=page, name=name)) def _close_source_cb(self, notebook, page): self._source_tabs.update_edit_toolbar() _logger.debug('_close_source_cb %r' % (page)) self._collab.post(dict(action='close-source', page=page)) def __message_cb(self, collab, buddy, msg): action = msg.get('action') if action == 'add-source-request' and self._collab._leader: self._add_source_cb(None, force=True) elif action == 'add-source': self._add_source_cb( None, force=True, editor_id=msg.get('editor_id')) elif action == 'rename-source': page = msg.get('page') name = msg.get('name') _logger.debug('__message_cb rename-source %r %r' % (page, name)) self._source_tabs.rename_tab(page, name) elif action == 'close-source': page = msg.get('page') _logger.debug('__message_cb close-source %r' % (page)) self._source_tabs.close_tab(page) def _vte_drop_cb(self, widget, context, x, y, selection, targetType, time): if targetType == TARGET_TYPE_TEXT: self._vte.feed_child(selection.data) def get_data(self): return self._source_tabs.get_all_data() def set_data(self, data): # Remove initial new/blank thing self.session_data = [] self._loaded_session = [] try: self._source_tabs.remove_page(0) tab_object.pop(0) self._source_tabs.last_tab = 0 except IndexError: pass list_ = list(zip(*data)) for name, code, path, modified, editor_id in list_: self._source_tabs.add_tab( label=name, editor_id=editor_id) self.session_data.append(None) # maybe? def _selection_cb(self, value): self.save() _logger.debug('clicked! %s' % value['path']) _file = open(value['path'], 'r') lines = _file.readlines() self._add_source_cb(None) text_buffer = self._source_tabs.get_text_buffer() text_buffer.set_text(''.join(lines)) text_buffer.set_modified(False) self._pippy_instance.metadata['title'] = value['name'] self._stop_button_cb(None) self._reset_vte() self._source_tabs.set_current_label(value['name']) self._source_tabs.set_current_path(value['path']) self._source_tabs.get_text_view().grab_focus() def _select_func_cb(self, path): values = {} values['name'] = os.path.basename(path) values['path'] = path self._selection_cb(values) def _timer_cb(self, button, icons): button.set_icon_widget(icons['bw']) button.show_all() return False def _flash_cb(self, button, icons): button.set_icon_widget(icons['color']) button.show_all() GObject.timeout_add(400, self._timer_cb, button, icons) def _clear_button_cb(self, button): self.save() self._stop_button_cb(None) self._reset_vte() self._source_tabs.get_text_view().grab_focus() def _write_all_buffers(self, tmp_dir): data = self._source_tabs.get_all_data() zipdata = list(zip(data[0], data[1])) for name, content in zipdata: name = self._source_tabs.purify_name(name) with open(os.path.join(tmp_dir, name), 'w') as f: # Write utf-8 coding prefix if there's not one already if re.match(r'coding[:=]\s*([-\w.]+)', '\n'.join(content.splitlines()[:2])) is None: f.write(PYTHON_PREFIX) f.write(content) def _reset_vte(self): self._vte.grab_focus() self._vte.feed(b'\x1B[H\x1B[J\x1B[0;39m') def __undobutton_cb(self, button): text_buffer = self._source_tabs.get_text_buffer() if text_buffer.can_undo(): text_buffer.undo() self._edit_toolbar.redo.set_sensitive(True) if not text_buffer.can_undo(): button.set_sensitive(False) def __redobutton_cb(self, button): text_buffer = self._source_tabs.get_text_buffer() if text_buffer.can_redo(): text_buffer.redo() self._edit_toolbar.undo.set_sensitive(True) if not text_buffer.can_redo(): button.set_sensitive(False) def __copybutton_cb(self, button): text_buffer = self._source_tabs.get_text_buffer() if self._vte.get_has_selection(): self._vte.copy_clipboard() elif text_buffer.get_has_selection(): clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) text_buffer.copy_clipboard(clipboard) def __pastebutton_cb(self, button): text_buffer = self._source_tabs.get_text_buffer() clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) text_buffer.paste_clipboard(clipboard, None, True) def _go_button_cb(self, button): self._stop_button_cb(button) # Try stopping old code first. self._reset_vte() # FIXME: We're losing an odd race here # Gtk.main_iteration(block=False) if self._toggle_output.get_active() is False: self._outbox.show_all() self._toggle_output.set_active(True) pippy_tmp_dir = '%s/tmp/' % self.get_activity_root() self._write_all_buffers(pippy_tmp_dir) current_file = os.path.join( pippy_tmp_dir, self._source_tabs.get_current_file_name()) # Write activity.py here too, to support pippy-based activities. copy2('%s/activity.py' % get_bundle_path(), '%s/tmp/activity.py' % self.get_activity_root()) # XXX Support both Vte APIs if _has_new_vte_api(): vte_run = self._vte.spawn_sync else: vte_run = self._vte.fork_command_full self._pid = vte_run( Vte.PtyFlags.DEFAULT, get_bundle_path(), ['/bin/sh', '-c', 'python3 %s; sleep 1' % current_file, 'PYTHONPATH=%s/library:%s' % (get_bundle_path(), os.getenv('PYTHONPATH', ''))], ['PYTHONPATH=%s/library:%s' % (get_bundle_path(), os.getenv('PYTHONPATH', ''))], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None,) def _stop_button_cb(self, button): try: if self._pid is not None: os.kill(self._pid[1], SIGTERM) except: pass # Process must already be dead. def _library_writable(self): return os.access(os.path.join(get_bundle_path(), 'library'), os.W_OK) def _save_as_library(self, button): library_dir = os.path.join(get_bundle_path(), 'library') file_name = self._source_tabs.get_current_file_name() text_buffer = self._source_tabs.get_text_buffer() content = text_buffer.get_text( *text_buffer.get_bounds(), include_hidden_chars=True) if not os.path.isdir(library_dir): os.mkdir(library_dir) with open(os.path.join(library_dir, file_name), 'w') as f: f.write(content) success = True if success: alert = NotifyAlert(5) alert.props.title = _('Python File added to Library') IMPORT_MESSAGE = _('The file you selected has been added' ' to the library. Use "import {importname}"' ' to import the library for using.') alert.props.msg = IMPORT_MESSAGE.format(importname=file_name[:-3]) alert.connect('response', self._remove_alert_cb) self.add_alert(alert) def _export_document_cb(self, __): self.copy() alert = NotifyAlert() alert.props.title = _('Saved') alert.props.msg = _('The document has been saved to journal.') alert.connect('response', lambda x, i: self.remove_alert(x)) self.add_alert(alert) def _remove_alert_cb(self, alert, response_id): self.remove_alert(alert) def _import_py_cb(self, button): chooser = ObjectChooser() result = chooser.run() if result is Gtk.ResponseType.ACCEPT: dsitem = chooser.get_selected_object() if dsitem.metadata['mime_type'] != 'text/x-python': alert = NotifyAlert(5) alert.props.title = _('Error importing Python file') alert.props.msg = _('The file you selected is not a ' 'Python file.') alert.connect('response', self._remove_alert_cb) self.add_alert(alert) elif dsitem.object_id in self.session_data: alert = NotifyAlert(5) alert.props.title = _('Error importing Python file') alert.props.msg = _('The file you selected is already ' 'open') alert.connect('response', self._remove_alert_cb) self.add_alert(alert) else: name = dsitem.metadata['title'] file_path = dsitem.get_file_path() content = open(file_path, 'r').read() self._source_tabs.add_tab(name, content, None) self._source_tabs.set_current_label(name) self.session_data.append(dsitem.object_id) _logger.debug('after import py: %r' % self.session_data) chooser.destroy() def _create_bundle_cb(self, button): from shutil import rmtree from tempfile import mkdtemp # Get the name of this pippy program. title = self._pippy_instance.metadata['title'].replace('.py', '') title = title.replace('-', '') if title == 'Pippy Activity': alert = Alert() alert.props.title = _('Save as Activity Error') alert.props.msg = _('Please give your activity a meaningful name ' 'before attempting to save it as an activity.') ok_icon = Icon(icon_name='dialog-ok') alert.add_button(Gtk.ResponseType.OK, _('Ok'), ok_icon) alert.connect('response', self._dismiss_alert_cb) self.add_alert(alert) return alert_icon = Alert() ok_icon = Icon(icon_name='dialog-ok') alert_icon.add_button(Gtk.ResponseType.OK, _('Ok'), ok_icon) alert_icon.props.title = _('Activity icon') alert_icon.props.msg = _('Please select an activity icon.') self._stop_button_cb(None) # try stopping old code first. self._reset_vte() self._outbox.show_all() self._vte.feed(_("Creating activity bundle...").encode()) self._vte.feed(b'\r\n') TMPDIR = 'instance' app_temp = mkdtemp('.activity', 'Pippy', os.path.join(self.get_activity_root(), TMPDIR)) sourcefile = os.path.join(app_temp, 'xyzzy.py') # invoke ourself to build the activity bundle. _logger.debug('writing out source file: %s' % sourcefile) def internal_callback(window=None, event=None): icon = '%s/activity/activity-default.svg' % (get_bundle_path()) if window: icon = window.get_icon() self._stop_button_cb(None) # Try stopping old code first. self._reset_vte() self._vte.feed(_('Creating activity bundle...').encode()) self._vte.feed(b'\r\n') TMPDIR = 'instance' app_temp = mkdtemp('.activity', 'Pippy', os.path.join(self.get_activity_root(), TMPDIR)) sourcefile = os.path.join(app_temp, 'xyzzy.py') # Invoke ourself to build the activity bundle. _logger.debug('writing out source file: %s' % sourcefile) # Write out application code self._write_text_buffer(sourcefile) try: # FIXME: vte invocation was raising errors. # Switched to subprocss output = subprocess.check_output( ['/usr/bin/python3', '%s/pippy_app.py' % get_bundle_path(), '-p', '%s/library' % get_bundle_path(), '-d', app_temp, title, sourcefile, icon]) self._vte.feed(output) self._vte.feed(b'\r\n') self._bundle_cb(title, app_temp) except subprocess.CalledProcessError: rmtree(app_temp, ignore_errors=True) # clean up! self._vte.feed(_('Save as Activity Error').encode()) self._vte.feed(b'\r\n') raise def _alert_response(alert, response_id): self.remove_alert(alert) def _dialog(): dialog = IconDialog() dialog.connect('destroy', internal_callback) GObject.idle_add(_dialog) alert_icon.connect('response', _alert_response) self.add_alert(alert_icon) def _write_text_buffer(self, filename): text_buffer = self._source_tabs.get_text_buffer() start, end = text_buffer.get_bounds() text = text_buffer.get_text(start, end, True) with open(filename, 'w') as f: # Write utf-8 coding prefix if there's not one already if re.match(r'coding[:=]\s*([-\w.]+)', '\n'.join(text.splitlines()[:2])) is None: f.write(PYTHON_PREFIX) for line in text: f.write(line) def _export_distutils_cb(self, button): app_temp = os.path.join(self.get_activity_root(), 'instance') data = self._source_tabs.get_all_data() for filename, content in zip(data[0], data[1]): fileobj = open(os.path.join(app_temp, filename), 'w') fileobj.write(content) fileobj.close() filenames = ','.join([("'" + name[:-3] + "'") for name in data[0]]) title = self._pippy_instance.metadata['title'] if title is _('Pippy Activity'): alert = Alert() alert.props.title = _('Save as distutils package error') alert.props.msg = _('Please give your activity a meaningful ' 'name before attempting to save it ' 'as an distutils package.') ok_icon = Icon(icon_name='dialog-ok') alert.add_button(Gtk.ResponseType.OK, _('Ok'), ok_icon) alert.connect('response', self._dismiss_alert_cb) self.add_alert(alert) return found = next(( name for name in data[0] if name != self._source_tabs.purify_name(name)), None) if found is not None: example = self._source_tabs.purify_name(found) alert = Alert() alert.props.title = _('Save as distutils package error') alert.props.msg = _('Please give your source files a proper ' 'name, for example "%s", before attempting to ' 'save it as an distutils package.') % example ok_icon = Icon(icon_name='dialog-ok') alert.add_button(Gtk.ResponseType.OK, _('Ok'), ok_icon) alert.connect('response', self._dismiss_alert_cb) self.add_alert(alert) return setup_script = DISTUTILS_SETUP_SCRIPT.format(modulename=title, filenames=filenames) setupfile = open(os.path.join(app_temp, 'setup.py'), 'w') setupfile.write(setup_script) setupfile.close() os.chdir(app_temp) subprocess.check_output( ['/usr/bin/python3', os.path.join(app_temp, 'setup.py'), 'sdist', '-v']) # Hand off to journal os.chmod(app_temp, 0o777) jobject = datastore.create() metadata = { 'title': '%s distutils bundle' % title, 'title_set_by_user': '1', 'mime_type': 'application/x-gzip', } for k, v in list(metadata.items()): # The dict.update method is missing =( jobject.metadata[k] = v tarname = 'dist/{modulename}-1.0.tar.gz'.format(modulename=title) jobject.file_path = os.path.join(app_temp, tarname) datastore.write(jobject) def _export_example_cb(self, button): # Get the name of this pippy program. title = self._pippy_instance.metadata['title'] if title == _('Pippy Activity'): alert = Alert() alert.props.title = _('Save as Example Error') alert.props.msg = \ _('Please give your activity a meaningful ' 'name before attempting to save it as an example.') ok_icon = Icon(icon_name='dialog-ok') alert.add_button(Gtk.ResponseType.OK, _('Ok'), ok_icon) alert.connect('response', self._dismiss_alert_cb) self.add_alert(alert) return self._stop_button_cb(None) # Try stopping old code first. self._reset_vte() self._vte.feed(_('Creating example...').encode()) self._vte.feed(b'\r\n') local_data = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'], 'data') local_file = os.path.join(local_data, title) if os.path.exists(local_file): alert = ConfirmationAlert() alert.props.title = _('Save as Example Warning') alert.props.msg = _('This example already exists. ' 'Do you want to overwrite it?') alert.connect('response', self._confirmation_alert_cb, local_file) self.add_alert(alert) else: self.write_file(local_file) self._reset_vte() self._vte.feed(_('Saved as example.').encode()) self._vte.feed(b'\r\n') self._add_to_example_list(local_file) def _child_exited_cb(self, *args): '''Called whenever a child exits. If there's a handler, run it.''' h, self._child_exited_handler = self._child_exited_handler, None if h is not None: h() def _bundle_cb(self, title, app_temp): '''Called when we're done building a bundle for a source file.''' from sugar3 import profile from shutil import rmtree try: # Find the .xo file: were we successful? bundle_file = [f for f in os.listdir(app_temp) if f.endswith('.xo')] if len(bundle_file) != 1: _logger.debug("Couldn't find bundle: %s" % str(bundle_file)) self._vte.feed(b'\r\n') self._vte.feed(_('Error saving activity to journal.').encode()) self._vte.feed(b'\r\n') return # Something went wrong. # Hand off to journal os.chmod(app_temp, 0o755) jobject = datastore.create() metadata = { 'title': '%s Bundle' % title, 'title_set_by_user': '1', 'buddies': '', 'preview': '', 'icon-color': profile.get_color().to_string(), 'mime_type': 'application/vnd.olpc-sugar', } for k, v in list(metadata.items()): # The dict.update method is missing =( jobject.metadata[k] = v jobject.file_path = os.path.join(app_temp, bundle_file[0]) datastore.write(jobject) self._vte.feed(b'\r\n') self._vte.feed(_('Activity saved to journal.').encode()) self._vte.feed(b'\r\n') self.journal_show_object(jobject.object_id) jobject.destroy() finally: rmtree(app_temp, ignore_errors=True) # clean up! def _dismiss_alert_cb(self, alert, response_id): self.remove_alert(alert) def _confirmation_alert_cb(self, alert, response_id, local_file): # Callback for conf alert self.remove_alert(alert) if response_id is Gtk.ResponseType.OK: self.write_file(local_file) self._reset_vte() self._vte.feed(_('Saved as example.').encode()) self._vte.feed(b'\r\n') else: self._reset_vte() def _add_to_example_list(self, local_file): entry = {'name': _(os.path.basename(local_file)), 'path': local_file} _iter = self.model.insert_before(self.example_iter, None) self.model.set_value(_iter, 0, entry) self.model.set_value(_iter, 1, entry['name']) def is_example(self, path): if path is None: return False for name in self.paths: if path.startswith(name[1]): return True return False def _get_pippy_object_id(self): ''' We need the object_id of this pippy instance to save in the .py file metadata''' if self._pippy_instance == self: return _find_object_id(self.metadata['activity_id'], mimetype='application/json') else: return self._pippy_instance.get_object_id() def write_file(self, file_path): pippy_id = self._get_pippy_object_id() data = self._source_tabs.get_all_data() zipped_data = list(zip(*data)) session_list = [] app_temp = os.path.join(self.get_activity_root(), 'instance') tmpfile = os.path.join(app_temp, 'pippy-tempfile-storing.py') if not self.session_data: self.session_data.append(None) for zipdata, content in zip(zipped_data, self.session_data): _logger.debug('Session data %r', content) name, python_code, path, modified, editor_id = zipdata if content is not None and content == self._py_object_id: _logger.debug('saving to self') self.metadata['title'] = name self.metadata['mime_type'] = 'text/x-python' if pippy_id is not None: self.metadata['pippy_instance'] = pippy_id __file = open(file_path, 'w') __file.write(python_code) __file.close() session_list.append([name, content]) elif content is not None and content[0] != '/': _logger.debug('Saving an existing dsobject') dsobject = datastore.get(content) dsobject.metadata['title'] = name dsobject.metadata['mime_type'] = 'text/x-python' if pippy_id is not None: dsobject.metadata['pippy_instance'] = pippy_id __file = open(tmpfile, 'w') __file.write(python_code) __file.close() dsobject.set_file_path(tmpfile) datastore.write(dsobject) session_list.append([name, dsobject.object_id]) elif modified: _logger.debug('Creating new dsobj for modified code') if len(python_code) > 0: dsobject = datastore.create() dsobject.metadata['title'] = name dsobject.metadata['mime_type'] = 'text/x-python' if pippy_id is not None: dsobject.metadata['pippy_instance'] = pippy_id __file = open(tmpfile, 'w') __file.write(python_code) __file.close() dsobject.set_file_path(tmpfile) datastore.write(dsobject) session_list.append([name, dsobject.object_id]) # If there are multiple Nones, we need to find # the correct one. if content is None and \ self.session_data.count(None) > 1: i = zipped_data.index(zipdata) else: i = self.session_data.index(content) self.session_data[i] = dsobject.object_id elif content is not None or path is not None: _logger.debug('Saving reference to sample file') if path is None: # Should not happen, but just in case... _logger.error('path is None.') session_list.append([name, content]) else: session_list.append([name, path]) else: # Should not happen, but just in case... _logger.debug('Nothing to save in tab? %s %s %s %s' % (str(name), str(python_code), str(path), str(content))) self._pippy_instance.metadata['mime_type'] = 'application/json' pippy_data = json.dumps(session_list) # Override file path if we created a new Pippy instance if self._py_file_loaded_from_journal: file_path = os.path.join(app_temp, 'pippy-temp-instance-data') _file = open(file_path, 'w') _file.write(pippy_data) _file.close() if self._py_file_loaded_from_journal: _logger.debug('setting pippy instance file_path to %s' % file_path) self._pippy_instance.set_file_path(file_path) datastore.write(self._pippy_instance) self._store_config() def read_file(self, file_path): # Either we are opening Python code or a list of objects # stored (json-encoded) in a Pippy instance, or a shared # session. # Remove initial new/blank thing self.session_data = [] self._loaded_session = [] try: self._source_tabs.remove_page(0) tab_object.pop(0) self._source_tabs.last_tab = 0 except IndexError: pass if self.metadata['mime_type'] == 'text/x-python': _logger.debug('Loading Python code') # Opening some Python code directly try: text = open(file_path).read() except: alert = NotifyAlert(10) alert.props.title = _('Error') alert.props.msg = _('Error reading data.') def _remove_alert(alert, response_id): self.remove_alert(alert) alert.connect("response", _remove_alert) self.add_alert(alert) return self._py_file_loaded_from_journal = True # Discard the '#!/usr/bin/python3' and 'coding: utf-8' lines, # if present python_code = re.sub(r'^' + re.escape(PYTHON_PREFIX), '', text) name = self.metadata['title'] self._loaded_session.append([name, python_code, None]) # Since we loaded Python code, we need to create (or # restore) a Pippy instance if 'pippy_instance' in self.metadata: _logger.debug('found a pippy instance: %s' % self.metadata['pippy_instance']) try: self._pippy_instance = datastore.get( self.metadata['pippy_instance']) except: _logger.debug('Cannot find old Pippy instance: %s') self._pippy_instance = None if self._pippy_instance in [self, None]: self._pippy_instance = datastore.create() self._pippy_instance.metadata['title'] = self.metadata['title'] self._pippy_instance.metadata['mime_type'] = 'application/json' self._pippy_instance.metadata['activity'] = 'org.laptop.Pippy' datastore.write(self._pippy_instance) self.metadata['pippy_instance'] = \ self._pippy_instance.get_object_id() _logger.debug('get_object_id %s' % self.metadata['pippy_instance']) # We need the Pippy file path so we can read the session data file_path = self._pippy_instance.get_file_path() # Finally, add this Python object to the session data self._py_object_id = _find_object_id(self.metadata['activity_id']) self.session_data.append(self._py_object_id) _logger.debug('session_data: %s' % self.session_data) if self.metadata['mime_type'] == 'application/json' or \ self._pippy_instance != self: # Reading file list from Pippy instance _logger.debug('Loading Pippy instance') if len(file_path) == 0: return data = json.loads(open(file_path).read()) for name, content in data: # content is either a datastore id or the path to some # sample code if content is not None and content[0] == '/': # a path try: python_code = open(content).read() except: _logger.error('Could not open %s; skipping' % content) path = content elif content != self._py_object_id: try: dsobject = datastore.get(content) if 'mime_type' not in dsobject.metadata: _logger.error( 'Warning: %s missing mime_type' % content) elif dsobject.metadata['mime_type'] != 'text/x-python': _logger.error( 'Warning: %s has unexpected mime_type %s' % (content, dsobject.metadata['mime_type'])) except: # Could be that the item has subsequently been # deleted from the datastore, so we skip it. _logger.error('Could not open %s; skipping' % content) continue try: python_code = open(dsobject.get_file_path()).read() except: # Malformed bundle? _logger.error('Could not open %s; skipping' % dsobject.get_file_path()) continue path = None # Queue up the creation of the tabs... # And add this content to the session data if content not in self.session_data: self.session_data.append(content) self._loaded_session.append([name, python_code, path]) # Create tabs from the datastore, else add a blank tab if self._loaded_session: for name, content, path in self._loaded_session: self._source_tabs.add_tab(name, content, path) else: self._source_tabs.add_tab() # TEMPLATES AND INLINE FILES ACTIVITY_INFO_TEMPLATE = ''' [Activity] name = %(title)s bundle_id = %(bundle_id)s exec = sugar-activity3 %(class)s icon = activity-icon activity_version = %(version)d mime_types = %(mime_types)s show_launcher = yes %(extra_info)s ''' PIPPY_ICON = """ ]> """ # ACTIVITY META-INFORMATION # this is used by Pippy to generate a bundle for itself. def pippy_activity_version(): '''Returns the version number of the generated activity bundle.''' return 39 def pippy_activity_extra_files(): '''Returns a map of 'extra' files which should be included in the generated activity bundle.''' # Cheat here and generate the map from the fs contents. extra = {} bp = get_bundle_path() for d in ['po', 'data', 'post']: # everybody gets library for root, dirs, files in os.walk(os.path.join(bp, d)): for name in files: fn = os.path.join(root, name).replace(bp + '/', '') extra[fn] = open(os.path.join(root, name), 'r').read() return extra def pippy_activity_news(): '''Return the NEWS file for this activity.''' # Cheat again. return open(os.path.join(get_bundle_path(), 'NEWS')).read() def pippy_activity_icon(): '''Return an SVG document specifying the icon for this activity.''' return PIPPY_ICON def pippy_activity_class(): '''Return the class which should be started to run this activity.''' return 'pippy_app.PippyActivity' def pippy_activity_bundle_id(): '''Return the bundle_id for the generated activity.''' return 'org.laptop.Pippy' def pippy_activity_mime_types(): '''Return the mime types handled by the generated activity, as a list.''' return ['text/x-python'] def pippy_activity_extra_info(): return ''' license = GPLv2+ update_url = http://activities.sugarlabs.org ''' # ACTIVITY BUNDLER def main(): '''Create a bundle from a pippy-style source file''' from optparse import OptionParser from pyclbr import readmodule_ex from tempfile import mkdtemp from shutil import copytree, copy2, rmtree from sugar3.activity import bundlebuilder parser = OptionParser(usage='%prog [options] [title] [sourcefile] [icon]') parser.add_option('-d', '--dir', dest='dir', default='.', metavar='DIR', help='Put generated bundle in the specified directory.') parser.add_option('-p', '--pythonpath', dest='path', action='append', default=[], metavar='DIR', help='Append directory to python search path.') (options, args) = parser.parse_args() if len(args) < 3: parser.error('The title, sourcefile and icon arguments are required.') title = args[0] sourcefile = args[1] icon_path = args[2] pytitle = re.sub(r'[^A-Za-z0-9_]', '', title) if re.match(r'[0-9]', pytitle) is not None: pytitle = '_' + pytitle # first character cannot be numeric # First take a gander at the source file and see if it's got extra info # for us. sourcedir, basename = os.path.split(sourcefile) if not sourcedir: sourcedir = '.' module, ext = os.path.splitext(basename) f = open(icon_path, 'r') icon = f.read() f.close() # Things we look for: bundle_info = { 'version': 1, 'extra_files': {}, 'news': 'No news.', 'icon': icon, 'class': 'activity.VteActivity', 'bundle_id': ('org.sugarlabs.pippy.%s%d' % (generate_unique_id(), int(round(uniform(1000, 9999), 0)))), 'mime_types': '', 'extra_info': '', } # Are any of these things in the module? try_import = False info = readmodule_ex(module, [sourcedir] + options.path) for func in list(bundle_info.keys()): p_a_func = 'pippy_activity_%s' % func if p_a_func in info: try_import = True if try_import: # Yes, let's try to execute them to get better info about our bundle oldpath = list(sys.path) sys.path[0:0] = [sourcedir] + options.path modobj = __import__(module) for func in list(bundle_info.keys()): p_a_func = 'pippy_activity_%s' % func if p_a_func in modobj.__dict__: bundle_info[func] = modobj.__dict__[p_a_func]() sys.path = oldpath # Okay! We've done the hard part. Now let's build a bundle. # Create a new temp dir in which to create the bundle. app_temp = mkdtemp('.activity', 'Pippy') # Hope TMPDIR is set correctly! bundle = get_bundle_path() try: copytree('%s/library' % bundle, '%s/library' % app_temp) copy2('%s/activity.py' % bundle, '%s/activity.py' % app_temp) # create activity.info file. bundle_info['title'] = title bundle_info['pytitle'] = pytitle # put 'extra' files in place. extra_files = { 'activity/activity.info': ACTIVITY_INFO_TEMPLATE % bundle_info, 'activity/activity-icon.svg': bundle_info['icon'], 'NEWS': bundle_info['news'], } extra_files.update(bundle_info['extra_files']) for path, contents in list(extra_files.items()): # safety first! assert '..' not in path dirname, filename = os.path.split(path) dirname = os.path.join(app_temp, dirname) if not os.path.exists(dirname): os.makedirs(dirname) with open(os.path.join(dirname, filename), 'w') as f: f.write(contents) # Put script into $app_temp/pippy_app.py copy2(sourcefile, '%s/pippy_app.py' % app_temp) # Invoke bundle builder olddir = os.getcwd() oldargv = sys.argv os.chdir(app_temp) sys.argv = ['setup.py', 'dist_xo'] print('\r\nStarting bundlebuilder\r\n') bundlebuilder.start() sys.argv = oldargv os.chdir(olddir) # Move to destination directory. src = '%s/dist/%s-%d.xo' % (app_temp, pytitle, bundle_info['version']) dst = '%s/%s-%d.xo' % (options.dir, pytitle, bundle_info['version']) if not os.path.exists(src): print('Cannot find %s\r\n' % (src)) else: copy2(src, dst) finally: rmtree(app_temp, ignore_errors=True) print('Finally\r\n') if __name__ == '__main__': from gettext import gettext as _ if False: # Change this to True to test within Pippy sys.argv = sys.argv + ['-d', '/tmp', 'Pippy', '/home/olpc/pippy_app.py'] print(_('Working...')) sys.stdout.flush() main() print(_('done!')) sys.exit(0) Pippy-76/po/000077500000000000000000000000001445132016300130265ustar00rootroot00000000000000Pippy-76/po/Pippy.pot000066400000000000000000000126071445132016300146610ustar00rootroot00000000000000# SOME 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. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-03-10 10:37+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python\"." msgstr "" #: activity.py:67 #, python-format msgid "%s Source" msgstr "" #: collabwrapper.py:196 msgid "Joining activity..." msgstr "" #: collabwrapper.py:197 collabwrapper.py:209 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:208 msgid "Resuming shared activity..." msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" #: library/pippy/sound.py:41 sound_check.py:26 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: notebook.py:253 #, python-format msgid "New Source File %d" msgstr "" #: notebook.py:435 msgid "Erase" msgstr "" #: notebook.py:436 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "" #: pippy_app.py:98 msgid "graphics" msgstr "" #: pippy_app.py:98 msgid "math" msgstr "" #: pippy_app.py:98 msgid "python" msgstr "" #: pippy_app.py:98 msgid "sound" msgstr "" #: pippy_app.py:99 msgid "string" msgstr "" #: pippy_app.py:99 msgid "tutorials" msgstr "" #: pippy_app.py:192 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:198 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:204 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:212 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:218 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:225 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:235 msgid "Edit" msgstr "" #: pippy_app.py:249 msgid "View" msgstr "" #: pippy_app.py:259 pippy_app.py:520 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:533 msgid "Inverted Colors" msgstr "" #: pippy_app.py:280 pippy_app.py:283 msgid "Run!" msgstr "" #: pippy_app.py:281 msgid "r" msgstr "" #: pippy_app.py:296 pippy_app.py:302 msgid "Stop" msgstr "" #: pippy_app.py:297 msgid "s" msgstr "" #: pippy_app.py:312 pippy_app.py:318 msgid "Clear output panel" msgstr "" #: pippy_app.py:313 msgid "c" msgstr "" #: pippy_app.py:329 msgid "Open an example" msgstr "" #: pippy_app.py:404 msgid "My examples" msgstr "" #: pippy_app.py:516 msgid "Hide output panel" msgstr "" #: pippy_app.py:528 msgid "Normal Colors" msgstr "" #: pippy_app.py:754 msgid "Python File added to Library" msgstr "" #: pippy_app.py:755 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:765 msgid "Saved" msgstr "" #: pippy_app.py:766 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:780 pippy_app.py:787 msgid "Error importing Python file" msgstr "" #: pippy_app.py:781 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:788 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:813 pippy_app.py:872 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:814 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:817 pippy_app.py:824 pippy_app.py:919 pippy_app.py:961 msgid "Ok" msgstr "" #: pippy_app.py:825 msgid "Activity icon" msgstr "" #: pippy_app.py:826 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:831 pippy_app.py:846 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:912 pippy_app.py:954 msgid "Pippy Activity" msgstr "" #: pippy_app.py:914 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:915 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:956 msgid "Save as Example Error" msgstr "" #: pippy_app.py:958 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:967 msgid "Creating example..." msgstr "" #: pippy_app.py:973 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:974 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:981 pippy_app.py:1039 msgid "Saved as example." msgstr "" #: pippy_app.py:1003 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:1023 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1176 msgid "Error" msgstr "" #: pippy_app.py:1177 msgid "Error reading data." msgstr "" #: pippy_app.py:1500 msgid "Working..." msgstr "" #: pippy_app.py:1503 msgid "done!" msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" Pippy-76/po/ach.po000066400000000000000000000160511445132016300141240ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-05-16 09:21+0000\n" "Last-Translator: Olot \n" "Language-Team: LANGUAGE \n" "Language: ach\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1494926467.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippi" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "Tye kayenyo luteka me goyo purugram! Itwere tic ki lapor kany wek i cak " "nongo ngec mabup ma kompiuta ni twero nyang maber kilwongo ''nyalo.''" #: filedialog.py:79 msgid "Choose an example to open" msgstr "Yer lapor acel wek yab" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Tye kadonyo i tic..." #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "Tim ber i kur pi kube..." #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Tye kadugo tic maonongo ginywako..." #: toolbars.py:42 msgid "Zoom in" msgstr "Deng ie" #: toolbars.py:48 msgid "Zoom out" msgstr "Deng woko" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Kama oaa ie" #: icondialog.py:116 msgid "Select an icon" msgstr "Yer boc acel" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "Kama fayil Manyen oaa ie %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Pe onongo twero nongo kagwoko dwon me TamTamEdit. Iketo TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "goc mapol" #: pippy_app.py:97 msgid "math" msgstr "cura" #: pippy_app.py:97 msgid "python" msgstr "nyalo" #: pippy_app.py:97 msgid "sound" msgstr "dwon" #: pippy_app.py:98 msgid "string" msgstr "tol" #: pippy_app.py:98 msgid "tutorials" msgstr "pwonyere" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Kel Python pail itab manyen" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Cwal acalo Pippy dokiomen" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Gwok pail ni iPippy library" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Cwal acalo lanyut Pippy manyen" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "Yik idur me gin atima a sugar " #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Cwal acalo iboc me a distutils " #: pippy_app.py:228 msgid "Edit" msgstr "Yiki" #: pippy_app.py:242 msgid "View" msgstr "Neni" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Nyut kan ame kato iye" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Ngweci!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Cungi" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Jwa" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "Yab lanyut ne" #: pippy_app.py:389 msgid "My examples" msgstr "Lanyuta" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Kan oko gicwalo ooko" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Gin me atima" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "Python pail omedo i library" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "Pail iyero otyeko medo i library. Ti kede \"import {import name}\" me kelo " "library me keto itic." #: pippy_app.py:719 msgid "Saved" msgstr "Otyeko gwoko" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "Dokiomen no otyeko gwoko i janol." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Bal me omo Python pail" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "Pail ame iyero pe obedo Python pail." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "Pail ame iyero dong oyabere oko" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Gwok acalo Bal ikom Gin me atia" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Myero imi gin itimo nying ateloke tye ame pwodi igwoko acalo gin ame itimo." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "Alama me gin atima" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "Myero iyer alama me gin atima." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Yiko iboc me gin atima..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Gin atima me Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Gwok acalo iboc me bal me distutils" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "Myero imi tici nying ateloke tye maber ame pwod ru itemo me gwoko acalo iboc " "me distutils." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Gwok macalo Lanyut me Bal" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Myero imi tici nying ateloke ber ame pwod ru itemo me gwoko macalo lanyut." #: pippy_app.py:921 msgid "Creating example..." msgstr "Tye kayiko lanyut..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Gwok macalo Lok me angea pa Lanyut" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Lanyuti dong tye. Imito coyo gin mukene iwie?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Ogwoko acalo lanyut." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Bal igwoko tic me atima i janol." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Tic me atima ogwoko oko i janol." #: pippy_app.py:1119 msgid "Error" msgstr "Bal" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Bal ikwano ngec omio." #: pippy_app.py:1448 msgid "Working..." msgstr "Tye atic..." #: pippy_app.py:1451 msgid "done!" msgstr "otum!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "OCUNG" #: notebook.py:428 msgid "Erase" msgstr "Jwa" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Imito jwayo matwal \"%s\"?" Pippy-76/po/af.po000066400000000000000000000124471445132016300137640ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2011-03-31 15:44+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: af\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.1\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Reg" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" #: notebook.py:428 msgid "Erase" msgstr "Uitwis" Pippy-76/po/am.po000066400000000000000000000125321445132016300137660ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 20:51+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: am\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s ምንጭ" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "አቁም" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "ሰርዝ" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s ድርጊት" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "እሺ" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" #: notebook.py:428 msgid "Erase" msgstr "አጥፋው" Pippy-76/po/ar.po000066400000000000000000000143571445132016300140020ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Khaled Hosny , 2011. msgid "" msgstr "" "Project-Id-Version: pippy-activity\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 20:47+0200\n" "Last-Translator: Chris \n" "Language-Team: Arabic \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "بِبِي" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "مصْدر %s" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "تعثر العثور على مكتبة TamTamEdit، هل ثبّتها؟" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "حرّر" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "شغّل" #: pippy_app.py:266 msgid "r" msgstr "ش" #: pippy_app.py:281 pippy_app.py:287 #, fuzzy msgid "Stop" msgstr "أوقِف" #: pippy_app.py:282 msgid "s" msgstr "ف" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "امسح" #: pippy_app.py:298 msgid "c" msgstr "م" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "أمثلتي" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "نشاط %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "عطل في الحفظ كنشاط" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "من فضلك أعطِ لنشاطك اسما ذا معنى قبل أن تحاول حِفظه كنشاط." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "موافق" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "ينشئ حزمة النشاط..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "نشاط ببي" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "عطل في الحفظ كمثال" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "من فضلك أعطِ لنشاطك اسما ذا معنى قبل أن تحاول حِفظه كمثال." #: pippy_app.py:921 msgid "Creating example..." msgstr "ينشئ المثال..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "تحذير في الحفظ كمثال" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "المثال موجود مسبقًا. هل تريد الكتابة عليه؟" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "حُفظ كمثال." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "حُفِظ النشاط في اليوميّات" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "متوقف" #: notebook.py:428 msgid "Erase" msgstr "امسح" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "أتريد إزالة \"%s\" نهائيًا؟" Pippy-76/po/ayc.po000066400000000000000000000154061445132016300141500ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-10-14 03:44+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: ayc\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" # "Peppy" #: activity/activity.info:2 msgid "Pippy" msgstr "Peppy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" # "%s Fuente" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Tunu" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" # "No se pudo encontrar la librería de audio de la Actividad TamTamEdit. ¿Ha " # "instalado la Actividad TamTamEdit?" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Tam TamEdit istañanaka jani utkiti. ¿Tam TamEdit uchastati?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" # "Editar" #: pippy_app.py:228 msgid "Edit" msgstr "Chiqachaña" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" # "¡_Empieza!" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "¡Jasma!" # "r" #: pippy_app.py:266 msgid "r" msgstr "r" # "_Parar" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Sayt'ayaña" # "s" #: pippy_app.py:282 msgid "s" msgstr "s" # "_Limpiar" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Q'umachaña" # "c" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" # "Mis ejemplos" #: pippy_app.py:389 msgid "My examples" msgstr "Uñanchaja" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" # "%s Actividad" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Luräwi" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" # "Guardar como error de la Actividad" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Luräwi pantjatkipana imtata" # "Por favor de a su actividad un nombre con significado antes de intentar " # "guardarlo como una actividad." #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "Mira suma, luräwima suma sutichata ukhat imtata luräwijama." # "Bien" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Waliki" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" # "Creando una actividad empaquetada..." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Luräwinaka lurapji..." # "Actividad Pippy" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Peppy luräwi" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" # "Guardar como Ejemplo Erróneo" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Pantjatjama imtjata" # "Por favor de a su actividad un nombre con significado antes de intentar " # "guardarlo como un ejemplo." #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "Mira suma, luräwima suma sutichata ukhat imtata luräwijama." # "Generando ejemplo..." #: pippy_app.py:921 msgid "Creating example..." msgstr "Uñanchayapjiwa..." # "Guardar como Ejemplo de Advertencia" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Imañtata ma sañjama" # "Este ejemplo ya existe. Deseas sobreescribirlo?" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Uñanchaña utjiwa. ¿Cchaqayañacha?" # "Guardado como ejemplo." #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Ma uñanchajama imtataskiwa." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" # "Actividad guardada en el diario." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Luräwi sapüru luräwiru imtataskiwa." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" # "PAUSADO" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Suyt'ayaña" #: notebook.py:428 msgid "Erase" msgstr "Chhaqtayaña" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "¿Sapa kutiti chhaqtayaña munta \"%s\" ukxa?" Pippy-76/po/aym.po000066400000000000000000000110021445132016300141460ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-06-19 00:34-0400\n" "PO-Revision-Date: 2012-08-22 23:26+0200\n" "Last-Translator: EdgarQuispeChambi \n" "Language-Team: LANGUAGE \n" "Language: aym\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" # "Peppy" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" # "%s Fuente" #: activity.py:49 #, python-format msgid "%s Source" msgstr "%s Tunu" # "Copiar el texto seleccionado al portapapeles" #: activity.py:91 msgid "Copy selected text to clipboard" msgstr "Talliqaña ajllita qillqanaka laphi k'ipiru" # "Editar" #: activity.py:96 pippy_app.py:113 pippy_app.py:118 msgid "Edit" msgstr "Chiqachaña" # "PAUSADO" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Suyt'ayaña" # "No se pudo encontrar la librería de audio de la Actividad TamTamEdit. ¿Ha " # "instalado la Actividad TamTamEdit?" #: library/pippy/sound.py:54 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Tam TamEdit istañanaka jani utkiti. ¿Tam TamEdit uchastati?" #: pippy_app.py:90 msgid "Export as Pippy Document" msgstr "Peppy sutini wakichata qillqata apayaña" #: pippy_app.py:96 msgid "Export as Pippy Example" msgstr "Peppy sutini wakichata qillqatjama apayaña" #: pippy_app.py:102 msgid "Create Activity Bundle" msgstr "Maya luräwi wakichaña" # "Acciones" #: pippy_app.py:111 msgid "Actions" msgstr "Lurañanaka" # "¡_Empieza!" #: pippy_app.py:138 pippy_app.py:141 msgid "Run!" msgstr "¡Jasma!" # "r" #: pippy_app.py:139 msgid "r" msgstr "r" # "_Parar" #: pippy_app.py:152 pippy_app.py:158 msgid "Stop" msgstr "Sayt'ayaña" # "s" #: pippy_app.py:153 msgid "s" msgstr "s" # "_Limpiar" #: pippy_app.py:167 pippy_app.py:173 msgid "Clear" msgstr "Q'umachaña" # "c" #: pippy_app.py:168 msgid "c" msgstr "c" # "Ejemplos" #: pippy_app.py:197 msgid "Examples" msgstr "Uñancha" # "Mis ejemplos" #: pippy_app.py:229 msgid "My examples" msgstr "Uñanchaja" # "%s Actividad" #: pippy_app.py:358 #, python-format msgid "%s Activity" msgstr "%s Lurawi" # "Guardar como error de la Actividad" #: pippy_app.py:438 msgid "Save as Activity Error" msgstr "Lurawi pantjatkipana imtata" # "Por favor de a su actividad un nombre con significado antes de intentar " # "guardarlo como una actividad." #: pippy_app.py:439 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "Mira suma, lurawima suma sutichata ukhat imtata lurawijama." # "Bien" #: pippy_app.py:442 pippy_app.py:486 msgid "Ok" msgstr "Waliki" # "Creando una actividad empaquetada..." #: pippy_app.py:448 msgid "Creating activity bundle..." msgstr "Lurawinaka lurapji..." # "Actividad Pippy" #: pippy_app.py:479 msgid "Pippy Activity" msgstr "Pippy lurawi" # "Guardar como Ejemplo Erróneo" #: pippy_app.py:483 msgid "Save as Example Error" msgstr "Pantjatjama imtjata" # "Por favor de a su actividad un nombre con significado antes de intentar " # "guardarlo como un ejemplo." #: pippy_app.py:484 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "Mira suma, lurawima suma sutichata ukhat imtata lurawijama." # "Generando ejemplo..." #: pippy_app.py:492 msgid "Creating example..." msgstr "Uñanchayapjiwa..." # "Guardar como Ejemplo de Advertencia" #: pippy_app.py:499 msgid "Save as Example Warning" msgstr "Imañtata ma sañjama" # "Este ejemplo ya existe. Deseas sobreescribirlo?" #: pippy_app.py:500 msgid "This example already exists. Do you want to overwrite it?" msgstr "Uñanchaña utjiwa. ¿Cchaqayañacha?" # "Guardado como ejemplo." #: pippy_app.py:506 pippy_app.py:562 msgid "Saved as example." msgstr "Ma uñanchajama imtataskiwa." # "Actividad guardada en el diario." #: pippy_app.py:546 msgid "Activity saved to journal." msgstr "Lurawi sapüru luräwiru imtataskiwa." # "Como documento Pippy" #~ msgid "As Pippy Document" #~ msgstr "Pippy qillqatajama" # "Como Actividad empaquetada" #~ msgid "As Activity Bundle" #~ msgstr "Wakichäwinakajama" # "Como el ejemplo de Pippy" #~ msgid "As Pippy Example" #~ msgstr "Pippy uñanchajama" Pippy-76/po/bg.po000066400000000000000000000135051445132016300137620ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 20:55+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 #, fuzzy msgid "Pippy" msgstr "Пипи" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format #, fuzzy, python-format msgid "%s Source" msgstr "%s изходен код" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Старт!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Изтриване" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Занятие %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 #, fuzzy msgid "Save as Activity Error" msgstr "Запазване като грешка на занятието" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "Моля, задайте разумно име преди да запазите като дейност." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "ОК" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Създаване на съвкупност от дейности..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "Моля, задайте разумно име преди да запазите като дейност." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Дейността е запазена в дневника." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" #: notebook.py:428 msgid "Erase" msgstr "Изтриване" Pippy-76/po/bn.po000066400000000000000000000141221445132016300137650ustar00rootroot00000000000000# SOME 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: xo-bundled\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 20:52+0200\n" "Last-Translator: Chris \n" "Language-Team: Bengali \n" "Language: bn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "পিপ্পি" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s উৎস" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "সম্পাদনা" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "চালাও!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "থামাও!" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "মুছো" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s সক্রিয়তা" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "সক্রিয়তার সমস্যা হিসাবে সংরক্ষন" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "অনুগ্রহ করে সংরক্ষন করার পুর্বে আপনার সক্রিয়তার একটি অর্থবহ নাম দিন।" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "ঠিক আছে" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "সক্রিয়তার গুচ্ছ তৈরি করছি..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "অনুগ্রহ করে সংরক্ষন করার পুর্বে আপনার সক্রিয়তার একটি অর্থবহ নাম দিন।" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "জার্নালে সক্রিয়তাটি সংরক্ষন করা হয়েছে।" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "স্থগিত" #: notebook.py:428 msgid "Erase" msgstr "মোছো" Pippy-76/po/bn_IN.po000066400000000000000000000141111445132016300143510ustar00rootroot00000000000000# SOME 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: xo-bundled\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 20:53+0200\n" "Last-Translator: Chris \n" "Language-Team: Bengali \n" "Language: bn_IN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "পিপ্পি" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s সোর্স" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "চালাও!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "থামাও!" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format #, fuzzy msgid "%s Activity" msgstr "%s অ্যাক্টিভিটি" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "অ্যাক্টিভিটির ত্রুটি হিসাবে সংরক্ষণ করুন" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "আপনার অ্যাক্টিভিটিকে একটি বোধগম্য নাম দিয়ে সংরক্ষণ করুন" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "ঠিক আছে" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "অ্যাক্টিভিটি গুচ্ছ তৈরী করা হচ্ছে..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "আপনার অ্যাক্টিভিটিকে একটি বোধগম্য নাম দিয়ে সংরক্ষণ করুন" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "জার্নালে অ্যাক্টিভিটি সংরক্ষণ করা হয়েছে" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "স্থগিত" #: notebook.py:428 msgid "Erase" msgstr "মুছে ফেলো" Pippy-76/po/br.po000066400000000000000000000124361445132016300137770ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 20:54+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: br\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Arsaviñ" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Skarzhañ" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Oberiantiz" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" Pippy-76/po/ca.po000066400000000000000000000144301445132016300137530ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2015-09-23 13:31+0000\n" "Last-Translator: Robert \n" "Language-Team: LANGUAGE \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1443015084.000000\n" # well-spelled: Pippy #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s codi font" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" # well-spelled: TamTamEdit #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "No es pot trobar la biblioteca de sons del TamTamEdit. Vàreu instal·lar el " "TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Edita" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Executa!" # well-spelled: r #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Atura" # well-spelled: s #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Neteja" # well-spelled: c #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Els meus exemples" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s l'activitat" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Desa-ho com un error de l'activitat" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Si us plau, doneu a l'activitat un nom significatiu abans d'intentar de " "desar-la com una activitat." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "D'acord" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "S'està creant el paquet de l'activitat..." # well-spelled: Pippy #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Activitat Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Desa-ho com un exemple d'error" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Si us plau, doneu a l'activitat un nom significatiu abans d'intentar de " "desar-la com un exemple." #: pippy_app.py:921 msgid "Creating example..." msgstr "S'està creant l'exemple..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Desa-ho com un exemple d'advertència" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Aquest exemple ja existeix, voleu sobreescriure'l?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Es va desar com un exemple." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "L'activitat s'ha desat al diari." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ATURAT" #: notebook.py:428 msgid "Erase" msgstr "Esborra" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Voleu esborrar \"%s\" de forma permanent?" Pippy-76/po/cs.po000066400000000000000000000125701445132016300140000ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-07-02 13:03+0200\n" "Last-Translator: jui \n" "Language-Team: LANGUAGE \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Zdroj" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Upravit" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Zastavit" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Smazat" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Činnost" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "POZASTAVIT" #: notebook.py:428 msgid "Erase" msgstr "Odstranit" Pippy-76/po/da.po000066400000000000000000000163551445132016300137640ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2018-10-22 18:23+0000\n" "Last-Translator: scootergrisen \n" "Language-Team: LANGUAGE \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1540232583.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "Søger efter programmører! Her kan du bruge eksempler for at begynde at lære " "sproget som din computer forstår, kaldet \"Python\"." #: filedialog.py:79 msgid "Choose an example to open" msgstr "Vælg et eksempel som skal åbnes" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Deltager i aktivitet..." #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "Vent venligst på forbindelsen..." #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Genoptager delt aktivitet..." #: toolbars.py:42 msgid "Zoom in" msgstr "Zoom ind" #: toolbars.py:48 msgid "Zoom out" msgstr "Zoom ud" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Kilde" #: icondialog.py:116 msgid "Select an icon" msgstr "Vælg et ikon" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "Ny kildefil %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Kan ikke finde lydbiblioteket for TamTamEdit. Har du installeret TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "grafik" #: pippy_app.py:97 msgid "math" msgstr "matematik" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "lyd" #: pippy_app.py:98 msgid "string" msgstr "streng" #: pippy_app.py:98 msgid "tutorials" msgstr "vejledninger" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Importér Python-fil til nye faneblad" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Eksportér som Pippy-dokument" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Gem filen til Pippy-biblioteket" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Eksportér som nyt Pippy-eksempel" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "Opret en Sugar-aktivitspakke" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Eksportér som en distutils-pakke" #: pippy_app.py:228 msgid "Edit" msgstr "Redigér" #: pippy_app.py:242 msgid "View" msgstr "Vis" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Vis outputpanel" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Kør!" #: pippy_app.py:266 msgid "r" msgstr "k" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Stop" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Ryd" #: pippy_app.py:298 msgid "c" msgstr "r" #: pippy_app.py:314 msgid "Open an example" msgstr "Åbn et eksempel" #: pippy_app.py:389 msgid "My examples" msgstr "Mine eksempler" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Skjul outputpanel" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Aktivitet" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "Python-fil blev tilføjet til bibliotek" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "Filen du har valgt er blevet tilføjet til biblioteket. Brug \"import " "{importname}\" til at importere biblioteket for at bruge det." #: pippy_app.py:719 msgid "Saved" msgstr "Gemt" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "Dokumentet er blevet gemt til journalen." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Fejl ved import af Python-fil" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "Filen du valgte er ikke en Python-fil." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "Filen du valgte er allerede åben" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Gem som aktivitetsfejl" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Giv venligst din aktivitet et meningsfuldt navn før du forsøger at gemme det " "som en aktivitet." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "Aktivitetsikon" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "Vælg venligst et aktivitsikon." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Opretter aktivitetsbundt..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Pippy-aktivitet" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Fejl ved gem som distutils-pakke" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "Giv venligst din aktivitet et meningsfyldt navn inden du forsøger at gemme " "den som en distutils-pakke." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Gem som Eksempel-fejl" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Giv venligst din aktivitet et meningsfuldt navn før du forsøger at gemme det " "som et eksempel." #: pippy_app.py:921 msgid "Creating example..." msgstr "Opretter eksempel..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Gem som Eksempel-advarsel" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Dette eksempel eksisterer allerede. Ønsker du at overskrive det?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Gemt som eksempel." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Fejl ved forsøg på at gemme aktivitet til journal." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Aktivitet gemt i journal." #: pippy_app.py:1119 msgid "Error" msgstr "Fejl" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Fejl ved læsning af data." #: pippy_app.py:1448 msgid "Working..." msgstr "Arbejder..." #: pippy_app.py:1451 msgid "done!" msgstr "færdig!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PÅ PAUSE" #: notebook.py:428 msgid "Erase" msgstr "Slet" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Vil du foretage permanent sletning af \"%s\"?" Pippy-76/po/de.po000066400000000000000000000143001445132016300137540ustar00rootroot00000000000000# SOME 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: Fructose-de\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2013-06-03 21:03+0200\n" "Last-Translator: Markus \n" "Language-Team: Deutsch \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Quelltext" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Kann die TamTamEdit-Klangbibliothek nicht finden. Hast du TamTamEdit " "installiert?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Bearbeiten" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Los!" #: pippy_app.py:266 msgid "r" msgstr "l" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Stopp" #: pippy_app.py:282 msgid "s" msgstr "s" # (Markus S.) war '_Säubern', später 'Leeren' #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Löschen" # (Markus S.) sollte zu 'Leeren' passen, aber 'l' ist schon zuvor belegt. #: pippy_app.py:298 msgid "c" msgstr "e" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Meine Beispiele" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Aktivität" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Als Aktivitätsfehler speichern" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Gib deiner Aktivität einen aussagekräftigen Namen, bevor du sie als solche " "abspeicherst." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Erstelle Aktivitätspaket..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Pippy-Aktivität" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Als Beispielfehler speichern" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Gib deiner Aktivität einen aussagekräftigen Namen, bevor du sie als Beispiel " "abzuspeichern versuchst." #: pippy_app.py:921 msgid "Creating example..." msgstr "Erstelle Beispiel..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Als Beispielwarnung speichern" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Dieses Beispiel existiert bereits. Willst du es überschreiben?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Als Beispiel gespeichert." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Aktivität ins Tagebuch gespeichert." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ANGEHALTEN" #: notebook.py:428 msgid "Erase" msgstr "Löschen" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Möchtest Du \"%s\" dauerhaft löschen?" Pippy-76/po/dz.po000066400000000000000000000125311445132016300140050ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2011-03-25 14:42+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: dz\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.0.1\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s འབྱུང་ཁུངས།" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" #: notebook.py:428 msgid "Erase" msgstr "ཀྲེག་གཏང་།" Pippy-76/po/el.po000066400000000000000000000156451445132016300140010ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 21:54+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" # Τι να μεταφράσεις από αυτό;;;;το αφήνω ίδιο #: activity/activity.info:2 msgid "Pippy" msgstr "Πίπης" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "Κώδικας του %s" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Αδυναμία εύρεσης της βιβλιοθήκης ήχων του TamTamEdit. Έχετε εγκαταστήσει το " "TamTamEdit;" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Επεξεργασία" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Τρέξε!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Διακοπή" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Καθαρισμός" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Τα δικά μου παραδείγματα" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Δραστηριότητα %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Αποθήκευση ως σφάλμα δραστηριότητας" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Παρακαλώ δώσε στη δραστηριότητα σου ένα όνομα με κάποιο νόημα πριν " "προσπαθήσεις να την αποθηκεύσεις σαν δραστηριότητα." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Εντάξει" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Δημιουργώ πακέτο δραστηριότητας..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Δραστηριότητα του Πίπη" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Αποθήκευση ως σφάλμα παραδείγματος" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Παρακαλώ δώσε στη δραστηριότητα σου ένα όνομα με κάποιο νόημα πριν " "προσπαθήσεις να την αποθηκεύσεις ως παράδειγμα." #: pippy_app.py:921 msgid "Creating example..." msgstr "Δημιουργία παραδείγματος..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Αποθήκευση ως προειδοποίηση παραδείγματος" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Το παράδειγμα υπάρχει ήδη. Θέλετε να το αντικαταστήσετε;" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Αποθηκεύτηκε ως παράδειγμα." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Η Δραστηριότητα αποθηκεύτηκε στο Ημερολόγιο." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ΣΕ ΠΑΥΣΗ" #: notebook.py:428 msgid "Erase" msgstr "Διαγραφή" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Θέλετε να διαγράψετε μόνιμα το \"%s\";" Pippy-76/po/en.po000066400000000000000000000156231445132016300137770ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-03-26 00:08+0000\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1490486933.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" #: filedialog.py:79 msgid "Choose an example to open" msgstr "Choose an example to open" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Joining activity..." #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "Please wait for the connection..." #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Resuming shared activity..." #: toolbars.py:42 msgid "Zoom in" msgstr "Zoom in" #: toolbars.py:48 msgid "Zoom out" msgstr "Zoom out" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Source" #: icondialog.py:116 msgid "Select an icon" msgstr "Select an icon" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "New Source File %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "graphics" #: pippy_app.py:97 msgid "math" msgstr "math" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "sound" #: pippy_app.py:98 msgid "string" msgstr "string" #: pippy_app.py:98 msgid "tutorials" msgstr "tutorials" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Import Python file to new tab" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Export as Pippy document" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Save this file to the Pippy library" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Export as new Pippy example" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "Create a Sugar activity bundle" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Export as a distutils package" #: pippy_app.py:228 msgid "Edit" msgstr "Edit" #: pippy_app.py:242 msgid "View" msgstr "View" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Show output panel" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Run!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Stop" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Clear" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "Open an example" #: pippy_app.py:389 msgid "My examples" msgstr "My examples" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Hide output panel" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Activity" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "Python File added to Library" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." #: pippy_app.py:719 msgid "Saved" msgstr "Saved" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "The document has been saved to journal." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Error importing Python file" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "The file you selected is not a Python file." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "The file you selected is already open" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Save as Activity Error" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Please give your activity a meaningful name before attempting to save it as " "an activity." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "Activity icon" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "Please select an activity icon." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Creating activity bundle..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Pippy Activity" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Save as distutils package error" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Save as Example Error" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Please give your activity a meaningful name before attempting to save it as " "an example." #: pippy_app.py:921 msgid "Creating example..." msgstr "Creating example..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Save as Example Warning" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "This example already exists. Do you want to overwrite it?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Saved as example." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Error saving activity to journal." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Activity saved to journal." #: pippy_app.py:1119 msgid "Error" msgstr "Error" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Error reading data." #: pippy_app.py:1448 msgid "Working..." msgstr "Working..." #: pippy_app.py:1451 msgid "done!" msgstr "done!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PAUSED" Pippy-76/po/en_GB.po000066400000000000000000000156261445132016300143520ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-03-26 01:42+0000\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1490492572.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" #: filedialog.py:79 msgid "Choose an example to open" msgstr "Choose an example to open" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Joining activity..." #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "Please wait for the connection..." #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Resuming shared activity..." #: toolbars.py:42 msgid "Zoom in" msgstr "Zoom in" #: toolbars.py:48 msgid "Zoom out" msgstr "Zoom out" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Source" #: icondialog.py:116 msgid "Select an icon" msgstr "Select an icon" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "New Source File %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "graphics" #: pippy_app.py:97 msgid "math" msgstr "math" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "sound" #: pippy_app.py:98 msgid "string" msgstr "string" #: pippy_app.py:98 msgid "tutorials" msgstr "tutorials" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Import Python file to new tab" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Export as Pippy document" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Save this file to the Pippy library" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Export as new Pippy example" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "Create a Sugar activity bundle" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Export as a distutils package" #: pippy_app.py:228 msgid "Edit" msgstr "Edit" #: pippy_app.py:242 msgid "View" msgstr "View" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Show output panel" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Run!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Stop" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Clear" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "Open an example" #: pippy_app.py:389 msgid "My examples" msgstr "My examples" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Hide output panel" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Activity" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "Python File added to Library" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." #: pippy_app.py:719 msgid "Saved" msgstr "Saved" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "The document has been saved to journal." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Error importing Python file" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "The file you selected is not a Python file." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "The file you selected is already open" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Save as Activity Error" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Please give your activity a meaningful name before attempting to save it as " "an activity." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "Activity icon" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "Please select an activity icon." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Creating activity bundle..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Pippy Activity" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Save as distutils package error" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Save as Example Error" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Please give your activity a meaningful name before attempting to save it as " "an example." #: pippy_app.py:921 msgid "Creating example..." msgstr "Creating example..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Save as Example Warning" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "This example already exists. Do you want to overwrite it?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Saved as example." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Error saving activity to journal." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Activity saved to journal." #: pippy_app.py:1119 msgid "Error" msgstr "Error" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Error reading data." #: pippy_app.py:1448 msgid "Working..." msgstr "Working..." #: pippy_app.py:1451 msgid "done!" msgstr "done!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PAUSED" Pippy-76/po/en_US.po000066400000000000000000000101731445132016300144010ustar00rootroot00000000000000# SOME 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. # SOME 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. # English translations for PACKAGE package. # Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # root , 2007. msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-06-19 00:34-0400\n" "PO-Revision-Date: 2012-06-23 20:39+0200\n" "Last-Translator: Chris \n" "Language-Team: English\n" "Language: en_US\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity.py:49 #, python-format msgid "%s Source" msgstr "%s Source" #: activity.py:91 msgid "Copy selected text to clipboard" msgstr "Copy selected text to clipboard" #: activity.py:96 pippy_app.py:113 pippy_app.py:118 msgid "Edit" msgstr "Edit" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PAUSED" #: library/pippy/sound.py:54 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" #: pippy_app.py:90 msgid "Export as Pippy Document" msgstr "Export as Pippy Document" #: pippy_app.py:96 msgid "Export as Pippy Example" msgstr "Export as Pippy Example" #: pippy_app.py:102 msgid "Create Activity Bundle" msgstr "Create Activity Bundle" #: pippy_app.py:111 msgid "Actions" msgstr "Actions" #: pippy_app.py:138 pippy_app.py:141 msgid "Run!" msgstr "Run!" #: pippy_app.py:139 msgid "r" msgstr "r" #: pippy_app.py:152 pippy_app.py:158 msgid "Stop" msgstr "Stop" #: pippy_app.py:153 msgid "s" msgstr "s" #: pippy_app.py:167 pippy_app.py:173 msgid "Clear" msgstr "Clear" #: pippy_app.py:168 msgid "c" msgstr "c" #: pippy_app.py:197 msgid "Examples" msgstr "Examples" #: pippy_app.py:229 msgid "My examples" msgstr "My examples" #: pippy_app.py:358 #, python-format msgid "%s Activity" msgstr "%s Activity" #: pippy_app.py:438 msgid "Save as Activity Error" msgstr "Save as Activity Error" #: pippy_app.py:439 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Please give your activity a meaningful name before attempting to save it as " "an activity." #: pippy_app.py:442 pippy_app.py:486 msgid "Ok" msgstr "Ok" #: pippy_app.py:448 msgid "Creating activity bundle..." msgstr "Creating activity bundle..." #: pippy_app.py:479 msgid "Pippy Activity" msgstr "Pippy Activity" #: pippy_app.py:483 msgid "Save as Example Error" msgstr "Save as Example Error" #: pippy_app.py:484 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Please give your activity a meaningful name before attempting to save it as " "an example." #: pippy_app.py:492 msgid "Creating example..." msgstr "Creating example..." #: pippy_app.py:499 msgid "Save as Example Warning" msgstr "Save as Example Warning" #: pippy_app.py:500 msgid "This example already exists. Do you want to overwrite it?" msgstr "This example already exists. Do you want to overwrite it?" #: pippy_app.py:506 pippy_app.py:562 msgid "Saved as example." msgstr "Saved as example." #: pippy_app.py:546 msgid "Activity saved to journal." msgstr "Activity saved to journal." #~ msgid "_Run!" #~ msgstr "_Run!" #~ msgid "_Stop" #~ msgstr "_Stop" #~ msgid "_Clear" #~ msgstr "_Clear" #~ msgid "As Pippy Document" #~ msgstr "As Pippy Document" #~ msgid "As Activity Bundle" #~ msgstr "As Activity Bundle" #~ msgid "As Pippy Example" #~ msgstr "As Pippy Example" #~ msgid "Please install TamTamEdit's sound library." #~ msgstr "Please install TamTamEdit's sound library." #~ msgid "Stop!" #~ msgstr "Stop!" Pippy-76/po/es.po000066400000000000000000000166631445132016300140110ustar00rootroot00000000000000# Spanish translations for PACKAGE package. # Copyright (C) 2007 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # root , 2007. msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-03-28 01:39+0000\n" "Last-Translator: Alan \n" "Language-Team: Spanish\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1490665173.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Peppy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "¡Buscando programadores! Aquí puedes usar ejemplos para empezar aprendiendo " "el lenguaje que tu computadora entiende llamado \"Python\"." #: filedialog.py:79 msgid "Choose an example to open" msgstr "Elige un ejemplo para abrir" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Uniéndose a actividad..." #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "Por favor espera por la conexión..." #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Resumiendo actividad compartida..." #: toolbars.py:42 msgid "Zoom in" msgstr "Acercar" #: toolbars.py:48 msgid "Zoom out" msgstr "Alejar" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Fuente" #: icondialog.py:116 msgid "Select an icon" msgstr "Selecciona un icono" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "Nuevo Archivo Fuente %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "No se pudo encontrar la librería de audio de la Actividad TamTamEdit. ¿Ha " "instalado la Actividad TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "gráficos" #: pippy_app.py:97 msgid "math" msgstr "matemáticas" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "sonido" #: pippy_app.py:98 msgid "string" msgstr "texto" #: pippy_app.py:98 msgid "tutorials" msgstr "tutoriales" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Importar archivo Python en una nueva pestaña" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Exportar como documento Peppy" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Guardar este archivo a la librería Peppy" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Exportar como ejemplo de Peppy" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "Crea un paquete de actividad Sugar" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Exportar como un paquete de distutils" #: pippy_app.py:228 msgid "Edit" msgstr "Editar" #: pippy_app.py:242 msgid "View" msgstr "Vista" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Mostrar panel de salida" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "¡Empieza!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Parar" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Limpiar" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "Abrir un ejemplo" #: pippy_app.py:389 msgid "My examples" msgstr "Mis ejemplos" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Ocultar panel de salida" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Actividad" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "Archivo Python agregado a la Librería" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "El archivo que has seleccionado ha sido agregado a la librería. Usa \"import " "{nombreimportado}\" para importar la librería para usarla." #: pippy_app.py:719 msgid "Saved" msgstr "Guardado" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "El documento ha sido guardado al diario." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Error importando archivo Python" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "El archivo que seleccionaste no es un archivo Python." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "El archivo que seleccionaste ya está abierto" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Guardar como error de la Actividad" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Por favor de a su actividad un nombre con significado antes de intentar " "guardarlo como una actividad." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Bien" #: pippy_app.py:779 msgid "Activity icon" msgstr "Icono de la actividad" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "Por favor selecciona un icono para la actividad" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Creando una actividad empaquetada..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Actividad Peppy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Guardar como paquete de error de distutils" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "Por favor dale a tu actividad un nombre significativo antes de intentar " "guardarla como un paquete de distutils." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Guardar como Ejemplo Erróneo" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Por favor de a su actividad un nombre con significado antes de intentar " "guardarlo como un ejemplo." #: pippy_app.py:921 msgid "Creating example..." msgstr "Generando ejemplo..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Guardar como Ejemplo de Advertencia" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Este ejemplo ya existe. Deseas sobreescribirlo?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Guardado como ejemplo." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Error guardando actividad al diario." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Actividad guardada en el diario." #: pippy_app.py:1119 msgid "Error" msgstr "Error" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Error leyendo datos." #: pippy_app.py:1448 msgid "Working..." msgstr "Trabajando..." #: pippy_app.py:1451 msgid "done!" msgstr "¡hecho!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PAUSADO" #: notebook.py:428 msgid "Erase" msgstr "Borrar" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "¿Deseas borrar permanentemente \"%s\"?" Pippy-76/po/fa.po000066400000000000000000000134551445132016300137640ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-03-18 22:05+0000\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1489874735.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "بران" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s فعالیت" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "بحیث یک اشتباه فعالیتی ثبت شود" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "لطفاً فغالیت خود را قبل از ثبت آن بحیث یک فعالیت یک نام پرمعنی بدهید." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "درست است" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "در حال ساختن مجموعه فعالیتی..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "لطفاً فغالیت خود را قبل از ثبت آن بحیث یک فعالیت یک نام پرمعنی بدهید." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "فعالیت بحیث یک یادداشت ثبت گردید." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "مکث شده" #: notebook.py:428 msgid "Erase" msgstr "پاک کن" Pippy-76/po/fa_AF.po000066400000000000000000000076611445132016300143340ustar00rootroot00000000000000# SOME 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. # SOME 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. # SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-06-19 00:34-0400\n" "PO-Revision-Date: 2012-06-26 21:51+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: fa_AF\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "پیپی" #: activity.py:49 #, python-format msgid "%s Source" msgstr "منبع %s" #: activity.py:91 msgid "Copy selected text to clipboard" msgstr "متن انتخاب شده را به تخته رسم انتقال بده" #: activity.py:96 pippy_app.py:113 pippy_app.py:118 msgid "Edit" msgstr "تنظیم کردن" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "مکث شده" #: library/pippy/sound.py:54 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:90 msgid "Export as Pippy Document" msgstr "" #: pippy_app.py:96 msgid "Export as Pippy Example" msgstr "" #: pippy_app.py:102 msgid "Create Activity Bundle" msgstr "" #: pippy_app.py:111 msgid "Actions" msgstr "" #: pippy_app.py:138 pippy_app.py:141 msgid "Run!" msgstr "اجراکن!" #: pippy_app.py:139 msgid "r" msgstr "" #: pippy_app.py:152 pippy_app.py:158 msgid "Stop" msgstr "توقف" #: pippy_app.py:153 msgid "s" msgstr "" #: pippy_app.py:167 pippy_app.py:173 msgid "Clear" msgstr "پاک کردن" #: pippy_app.py:168 msgid "c" msgstr "" #: pippy_app.py:197 msgid "Examples" msgstr "مثال ها" #: pippy_app.py:229 msgid "My examples" msgstr "" #: pippy_app.py:358 #, python-format msgid "%s Activity" msgstr "فعالیت: %s" #: pippy_app.py:438 msgid "Save as Activity Error" msgstr "بحیث یک خطای فعالیتی ثبت شود" #: pippy_app.py:439 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "لطفاً فعالیت خود را قبل از ثبت آن بحیث یک فعالیت یک نام پرمعنی بدهید." #: pippy_app.py:442 pippy_app.py:486 msgid "Ok" msgstr "درست است" #: pippy_app.py:448 msgid "Creating activity bundle..." msgstr "در حال ساختن مجموعه فعالیتی..." #: pippy_app.py:479 msgid "Pippy Activity" msgstr "" #: pippy_app.py:483 msgid "Save as Example Error" msgstr "" #: pippy_app.py:484 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "لطفاً فعالیت خود را قبل از ثبت آن بحیث یک فعالیت یک نام پرمعنی بدهید." #: pippy_app.py:492 msgid "Creating example..." msgstr "" #: pippy_app.py:499 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:500 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:506 pippy_app.py:562 msgid "Saved as example." msgstr "" #: pippy_app.py:546 msgid "Activity saved to journal." msgstr "فعالیت در ژورنال ثبت گردید." #~ msgid "As Pippy Document" #~ msgstr "بحیث سند پیپی" #~ msgid "As Activity Bundle" #~ msgstr "بحیث مجموعه فعالیتی" #~ msgid "Please install TamTamEdit's sound library." #~ msgstr "لطفا مجموعه صداهای تمتم ویرایش را بارگذاری کنید." Pippy-76/po/fi.po000066400000000000000000000124031445132016300137640ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 21:50+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 #, fuzzy msgid "Clear" msgstr "Tyhjennä" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" Pippy-76/po/fil.po000066400000000000000000000124141445132016300141420ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2011-03-25 14:01+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: fil\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Pootle 2.0.1\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Pinagmulan" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Baguhin" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" Pippy-76/po/fr.po000066400000000000000000000171721445132016300140050ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-05-30 12:26+0000\n" "Last-Translator: François \n" "Language-Team: LANGUAGE \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1496147177.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "On recherche des programmeurs ! Ici tu peux utiliser des exemples pour " "commencer à apprendre le langage que ton ordinateur comprend, et qui " "s'appelle \"Python\"." #: filedialog.py:79 msgid "Choose an example to open" msgstr "Choisis un exemple à ouvrir" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Joindre l'activité..." #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "S'il te plaît, attends la connexion..." #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Reprise de l'activité partagée..." #: toolbars.py:42 msgid "Zoom in" msgstr "Zoom avant" #: toolbars.py:48 msgid "Zoom out" msgstr "Zoom arrière" #: activity.py:65 #, python-format msgid "%s Source" msgstr "Source %s" #: icondialog.py:116 msgid "Select an icon" msgstr "Sélectionne une icône" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "Nouveau fichier source %s" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Bibliothèque audio TamTamEdit introuvable. Avez-vous installé TamTamEdit ?" #: pippy_app.py:97 msgid "graphics" msgstr "graphiques" #: pippy_app.py:97 msgid "math" msgstr "math" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "son" #: pippy_app.py:98 msgid "string" msgstr "chaîne" #: pippy_app.py:98 msgid "tutorials" msgstr "tutoriels" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Importer le fichier Python dans un nouvel onglet" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Exporter en tant que document Pippy" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Sauvegarder ce fichier dans la bibliothèque Pippy" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Exporter en tant que nouvel exemple Pippy" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "Créer un paquet d'activité Sugar" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Exporter en tant que paquet distutils" #: pippy_app.py:228 msgid "Edit" msgstr "Editer" #: pippy_app.py:242 msgid "View" msgstr "Voir" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Afficher le panneau de visualisation" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Démarrer !" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Arrêt" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Effacer" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "Ouvrir un exemple" #: pippy_app.py:389 msgid "My examples" msgstr "Mes exemples" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Cacher le panneau de visualisation" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Activité %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "Fichier Python ajouté à la bibliothèque" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "Le fichier que tu as sélectionné a été ajouté à la bibliothèque. Utilise \"" "import {importname}\" pour importer la bibliothèque à utiliser." #: pippy_app.py:719 msgid "Saved" msgstr "Enregistré" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "Ce document a été sauvegardé dans le journal." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Erreur d'importation de fichier Python" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "Le fichier que tu as sélectionné n'est pas un fichier Python." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "Le fichier que tu as sélectionné est déjà ouvert." #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Erreur de sauvegarde comme activité" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "Pour enregistrer votre activité, choisissez un nom d'activité parlant." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "Icône d'activité" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "S'il te plaît, sélectionne une icône d'activité." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Création de paquet activité en cours..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Activité Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Erreur d'enregistrement de paquet distutils" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "S'il te plaît donne à ton activité un nom explicite avant de tenter de " "l'enregistrer en tant que paquet distutils." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Enregistrer comme exemple d'erreur" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Pour enregistrer votre activité comme exemple, choisissez un nom d'activité " "parlant." #: pippy_app.py:921 msgid "Creating example..." msgstr "Création d'un exemple..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Enregistrer comme exemple d'avertissement" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Cet exemple existe déjà. Voulez-vous le remplacer ?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Enregistré comme exemple." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Erreur lors de l'enregistrement de l'activité dans le journal." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "L'activité a été enregistrée dans le journal." #: pippy_app.py:1119 msgid "Error" msgstr "Erreur" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Erreur lors de la lecture de données (fichier code source Python)" #: pippy_app.py:1448 msgid "Working..." msgstr "En cours..." #: pippy_app.py:1451 msgid "done!" msgstr "fait!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PAUSE" #: notebook.py:428 msgid "Erase" msgstr "Supprimer" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Faut-il supprimer \"%s\" définitivement ?" Pippy-76/po/gn.po000066400000000000000000000072171445132016300140010ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-06-19 00:34-0400\n" "PO-Revision-Date: 2016-05-21 23:15+0000\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: gn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1463872522.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Peppy" #: activity.py:49 #, python-format msgid "%s Source" msgstr "%s Ypy" #: activity.py:91 msgid "Copy selected text to clipboard" msgstr "Kopia moñe'erã portapeles-pe" #: activity.py:96 pippy_app.py:113 pippy_app.py:118 msgid "Edit" msgstr "Moambue" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Mbegue" #: library/pippy/sound.py:54 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Ndoikatúi ojetopa librería de audio mba'apo TamTamEdit rehegua. Remoĩma " "Mba'apo TamTamEdit?" #: pippy_app.py:90 msgid "Export as Pippy Document" msgstr "Emondo kuatia'arandu Peppyicha" #: pippy_app.py:96 msgid "Export as Pippy Example" msgstr "Ñemondo Peppy techapyrãicha" #: pippy_app.py:102 msgid "Create Activity Bundle" msgstr "Jejapo peteĩ mba'apo" #: pippy_app.py:111 msgid "Actions" msgstr "Tembiapo" #: pippy_app.py:138 pippy_app.py:141 msgid "Run!" msgstr "Eñepyrũ!" #: pippy_app.py:139 msgid "r" msgstr "r" #: pippy_app.py:152 pippy_app.py:158 msgid "Stop" msgstr "Epyta" #: pippy_app.py:153 msgid "s" msgstr "s" #: pippy_app.py:167 pippy_app.py:173 msgid "Clear" msgstr "Mopotĩ" #: pippy_app.py:168 msgid "c" msgstr "c" #: pippy_app.py:197 msgid "Examples" msgstr "Techapyrãkuéra" #: pippy_app.py:229 msgid "My examples" msgstr "Che techapyrãkuéra" #: pippy_app.py:358 #, python-format msgid "%s Activity" msgstr "%s Tembiapo" #: pippy_app.py:438 msgid "Save as Activity Error" msgstr "Ñongatu Tembiapo jejavývaicha" #: pippy_app.py:439 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "Ikaturámo embohéra nde mba'apo japekandive eñongatumboye mba'apóicha." #: pippy_app.py:442 pippy_app.py:486 msgid "Ok" msgstr "Ok" #: pippy_app.py:448 msgid "Creating activity bundle..." msgstr "Ojejapohina peteĩ mba'apo mbohyrupapyre" #: pippy_app.py:479 msgid "Pippy Activity" msgstr "Mba'apo Peppy" #: pippy_app.py:483 msgid "Save as Example Error" msgstr "Ñongatu techapyrã oĩvaívaicha" #: pippy_app.py:484 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Ikatumíramo embohéra nde mba'apo japekándive eñongatumboyve techapyrãicha." #: pippy_app.py:492 msgid "Creating example..." msgstr "Ojejapohína techapỹra..." #: pippy_app.py:499 msgid "Save as Example Warning" msgstr "Ñongatu techapyrã ñemomarandúicha" #: pippy_app.py:500 msgid "This example already exists. Do you want to overwrite it?" msgstr "Ko techapyrã oĩma. Rehaisejey?" #: pippy_app.py:506 pippy_app.py:562 msgid "Saved as example." msgstr "Oñeñongatu techapyrãicha." #: pippy_app.py:546 msgid "Activity saved to journal." msgstr "Mba'apo oñeñongatu tembiapokuérañeñongatuha." #: notebook.py:428 msgid "Erase" msgstr "Mbogue" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Emboguese opyta haguãicha \"%s\"?" Pippy-76/po/gug.po000066400000000000000000000171571445132016300141630ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-08-18 19:31+0000\n" "Last-Translator: MartínOesterreich \n" "Language-Team: LANGUAGE \n" "Language: gug\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1503084667.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Peppy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "buscando programador kuera ! ápe oikatu kuera puru techapyrã kuera opyta " "empezar aprendiendo pe lenguaje hina nde kombutadóra oikũmby lla " #: filedialog.py:79 msgid "Choose an example to open" msgstr "oiporavo peteĩ techapyrã opyta mboty'o " #: collabwrapper.py:178 msgid "Joining activity..." msgstr "uniéndose actividadpe . . . " #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "rehe pytyvõ oha'arõ rehe pe joapy . . . " #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "resumiendo actividad compartida. . ." #: toolbars.py:42 msgid "Zoom in" msgstr "mboja " #: toolbars.py:48 msgid "Zoom out" msgstr "momombyry " #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Ypy" #: icondialog.py:116 msgid "Select an icon" msgstr "selecciona peteĩ icono " #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "pyahu ñongatuha fuente %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Ndoikatúi ojetopa librería de audio mba'apo TamTamEdit rehegua. Remoĩma " "Mba'apo TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "gráfico kuera " #: pippy_app.py:97 msgid "math" msgstr "matemática kuera " #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "pu " #: pippy_app.py:98 msgid "string" msgstr "texto " #: pippy_app.py:98 msgid "tutorials" msgstr "tutoriale kuera " #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "gueru ñongatuha python peteĩ pyahu topea me/pe " #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "mondo akaru kuatia'arandu peppy " #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "ñongatu ko ñongatuha lape librería peppy " #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "mondo akaru techapyrã peppy mba'e " #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "ojapo peteĩ jokuapy actividad mba'e sugar" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "mondo akaru peteĩ jokuapy distutil kuera mba'e " #: pippy_app.py:228 msgid "Edit" msgstr "Moambue" #: pippy_app.py:242 msgid "View" msgstr " techa " #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "hechauka panel salida mba'e " #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Eñepyrũ!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Epyta" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Mopotĩ" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "mboty'o peteĩ techapyrã " #: pippy_app.py:389 msgid "My examples" msgstr "Che techapyrãkuéra" #: pippy_app.py:496 msgid "Hide output panel" msgstr "mo'ã panel salida mba'e " #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Tembiapo" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "ñongatuha python mbojo'ava/papyre lape librería" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "pe ñongatuha hina ha kuera seleccionado ha sido mbojo'ava/papyre lape " "librería. oipuru \"import {nombreimportado}\" opyta gueru pe librerí " #: pippy_app.py:719 msgid "Saved" msgstr "ñongatupy " #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "pe kuatia'arandu ha sido ñongatupy pe kuatiahaipyre . " #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "jejavy importando ñongatuha python" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "pe ñongatuha hina seleccionaste nahániri ha'e peteĩ ñongatuha python. " #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "pe ñongatuha hina seleccionaste oĩ jái ma " #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Ñongatu Tembiapo jejavývaicha" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "Ikaturámo embohéra nde mba'apo japekandive eñongatumboye mba'apóicha." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "icono actividad " #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "rehe pytyvõ selecciona peteĩ icono opyta pe actividad " #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Ojejapohina peteĩ mba'apo mbohyrupapyre..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Mba'apo Peppy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "ñongatu akaru jokuapy jejavy mba'e distutil kuera " #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "rehe pytyvõ dale tupe actividad peteĩ téra significativo mboyve intentar " "mba'e guardarla akaru peteĩ jokuapy distutil kuera. " #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Ñongatu techapyrã oĩvaívaicha" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Ikatumíramo embohéra nde mba'apo japekándive eñongatumboyve techapyrãicha." #: pippy_app.py:921 msgid "Creating example..." msgstr "Ojejapohína techapỹra..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Ñongatu techapyrã ñemomarandúicha" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Ko techapyrã oĩma. Rehaisejey?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Oñeñongatu techapyrãicha." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "jejavy guardando actividad pe kuatiahaipyre . " #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Mba'apo oñeñongatu tembiapokuérañeñongatuha." #: pippy_app.py:1119 msgid "Error" msgstr "jejavy " #: pippy_app.py:1120 msgid "Error reading data." msgstr "jejavy leyendo amoarange kuera. " #: pippy_app.py:1448 msgid "Working..." msgstr "ñemba,apo" #: pippy_app.py:1451 msgid "done!" msgstr "¡oikova!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Mbegue" #: notebook.py:428 msgid "Erase" msgstr "Mbogue" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Emboguese opyta haguãicha \"%s\"?" Pippy-76/po/he.po000066400000000000000000000151651445132016300137720ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2018-06-14 13:45+0000\n" "Last-Translator: Yaron \n" "Language-Team: LANGUAGE \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1528983927.000000\n" #: activity/activity.info:2 #, fuzzy msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "נא לבחור דוגמה לפתיחה" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "הצטרפות לפעילות…" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "נא להמתין לחיבור…" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "פעילות משותפת ממשיכה…" #: toolbars.py:42 msgid "Zoom in" msgstr "התקרבות" #: toolbars.py:48 msgid "Zoom out" msgstr "התרחקות" #: activity.py:65 #, python-format msgid "%s Source" msgstr "" #: icondialog.py:116 msgid "Select an icon" msgstr "נא לבחור סמל" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "קובץ מקור חדש %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "ייבוא קובץ Python ללשונית חדשה" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "יצירת מאגד פעילויות לסוכר" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "ייצוא כחבילת distutils" #: pippy_app.py:228 msgid "Edit" msgstr "עריכה" #: pippy_app.py:242 msgid "View" msgstr "תצוגה" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "הצגת לוח פלט" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "ריצה!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "עצור" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "נקה" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "פתיחת דוגמה" #: pippy_app.py:389 msgid "My examples" msgstr "הדוגמאות שלי" #: pippy_app.py:496 msgid "Hide output panel" msgstr "הסתרת לוח פלט" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "פעילות %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "נוסף קובץ Python לספריה" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 #, fuzzy msgid "Save as Activity Error" msgstr "שמור כשגיאת פעילות" #: pippy_app.py:768 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "יש לתת שם בעל משמעות לפעילות לפני שמנסים לשמור אותה בתור פעילות." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 #, fuzzy msgid "Ok" msgstr "אישור" #: pippy_app.py:779 msgid "Activity icon" msgstr "סמל פעילות" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "נא לבחור סמל לפעילות." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "נוצר מאגד פעילות…" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "יש לתת שם בעל משמעות לפעילות לפני שמנסים לשמור אותה בתור פעילות." #: pippy_app.py:921 msgid "Creating example..." msgstr "נוצרת דוגמה…" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "נשמר כדוגמה." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "שגיאה בשמירת פעילות ליומן." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "פעילות נשמרה ביומן." #: pippy_app.py:1119 msgid "Error" msgstr "שגיאה" #: pippy_app.py:1120 msgid "Error reading data." msgstr "שגיאה בקריאת הנתונים." #: pippy_app.py:1448 msgid "Working..." msgstr "בהליכי עיבוד…" #: pippy_app.py:1451 msgid "done!" msgstr "בוצע!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "מושהה" #: notebook.py:428 msgid "Erase" msgstr "למחוק" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "למחוק את „%s“ לצמיתות?" Pippy-76/po/hi.po000066400000000000000000000157141445132016300137760ustar00rootroot00000000000000# translation of pippy-activity.po to Hindi # G Karunakar , 2007. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. msgid "" msgstr "" "Project-Id-Version: pippy-activity\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 21:58+0200\n" "Last-Translator: Chris \n" "Language-Team: Hindi \n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "पिप्पी" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s स्रोत" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "टमटम आवाज़ कोष नहीं मिला, क्या आपने यह कम्पूटर में अवस्थापन किया है ?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "संपादन" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "दोडो!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "रुकें" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "साफ" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "मेरे उदहारण" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s क्रिया" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "क्रिया त्रुटि जैसे सहेजें" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "अपनी क्रिया को सहेजने की कोशिश करने से पहले कृपया इसे कोई अर्थयुक्त नाम दें." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "ठीक है" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "क्रिया संग्रह बनाया जा रहा है..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Pippy गतिविधि" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "उदाहरण त्रुटि के रूप में सहेजें" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "अपनी क्रिया को सहेजने की कोशिश करने से पहले कृपया इसे कोई अर्थयुक्त नाम दें." #: pippy_app.py:921 msgid "Creating example..." msgstr "उदहारण बना रहा (रही) हूँ..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "उदहारण गलती की तरह सहेजें" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "यहाँ उदहारण पहेले से मौजूद है, क्या आप इसे बदलना चाहेंगे ?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "उदहारण की तरह सहेजा गया." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "क्रिया दैनिकी में सहेजा गया." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "विराम" #: notebook.py:428 msgid "Erase" msgstr "मिटाएँ" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "आप स्थायी रूप से \"%s\" को मिटाना चाहते हैं?" Pippy-76/po/hr.po000066400000000000000000000163011445132016300140000ustar00rootroot00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the Pippy package. # Božidar Putanec , 2017. msgid "" msgstr "" "Project-Id-Version: Pippy\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-05-16 14:59-0700\n" "Last-Translator: Božidar Putanec \n" "Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.1\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the language your computer understands " "called \"Python.\"" msgstr "" "Tražimo programere! Ovdje su primjeri na kojima možeš započeti učiti jezik koji tvoje računalo razumije, a zove se " "„Python“." #: filedialog.py:79 msgid "Choose an example to open" msgstr "Odaberi primjer za učitavanje" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Pridruživanje aktivnosti..." #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "Pričekaj na povezivanje..." #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Nastavljanje zajedničke aktivnosti..." #: toolbars.py:42 msgid "Zoom in" msgstr "Povećavanje" #: toolbars.py:48 msgid "Zoom out" msgstr "Smanjivanje" #: activity.py:65 #, python-format msgid "%s Source" msgstr "Izvorni kȏd %s" #: icondialog.py:116 msgid "Select an icon" msgstr "Odaberi ikonu" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "Nova izvorna datoteka %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Zvučnu biblioteku TamTamEdit nije moguće naći. Instalirao si TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "grafika" #: pippy_app.py:97 msgid "math" msgstr "matematika" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "zvuk" #: pippy_app.py:98 msgid "string" msgstr "string" #: pippy_app.py:98 msgid "tutorials" msgstr "priručnici" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Uvezi (import) Python datoteku u novu karticu" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Izvezi (eksport) kao Pippy dokument" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Spremi ovu datoteku u Pippy biblioteku" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Izvezi (eksport) kao novi Pippy primjer" #: pippy_app.py:211 msgid "Create activity bundle" msgstr "Stvori paket aktivnosti za Sugar" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Izvezi (eksport) kao distutils paket" #: pippy_app.py:228 msgid "Edit" msgstr "Uredi" #: pippy_app.py:242 msgid "View" msgstr "Pregled" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Otvori okno za izlazne rezultate" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Izvrši!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Stop" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Izbriši" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "Učitaj jedan od primjera" #: pippy_app.py:389 msgid "My examples" msgstr "Moji primjeri" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Zatvori okno za izlazne rezultate" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Aktivnost %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "Python datoteka dodana je biblioteci" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import {importname}\" to import the library for using." msgstr "" "Datoteku koju si odabrao već je biblioteci. Rabi naredbu „import {importname}“ da uvezeš biblioteku za upotrebu." #: pippy_app.py:719 msgid "Saved" msgstr "Spremljeno" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "Dokument je spremljen u dnevnik." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Pogreška pri uvozu Python datoteke" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "Datoteka koju si odabrao nije Python datoteka." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "Datoteka koju si odabrao već je učitana" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Spremi kao grešku u Aktivnosti" #: pippy_app.py:768 msgid "Please give your activity a meaningful name before attempting to save it as an activity." msgstr "Prije nego pokušaš spremiti svoju aktivnost trebaš joj dati smisleno ime." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "U redu" #: pippy_app.py:779 msgid "Activity icon" msgstr "Ikona za Aktivnost" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "Odaberi ikonu za aktivnost." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Stvaranje paketa aktivnosti..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Aktivnost Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Spremi kao distutils paketa grešku" #: pippy_app.py:869 msgid "Please give your activity a meaningful name before attempting to save it as an distutils package." msgstr "Prije nego pokušaš spremiti svoju aktivnost kao distutils paket trebaš joj dati smisleno ime." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Spremi kao primjer greške" #: pippy_app.py:912 msgid "Please give your activity a meaningful name before attempting to save it as an example." msgstr "Prije nego pokušaš spremiti svoju aktivnost kao primjer trebaš joj dati smisleno ime." #: pippy_app.py:921 msgid "Creating example..." msgstr "Stvaranje primjera..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Spremi kao primjer upozorenja" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Ovaj primjer već postoji. Želiš ga prebrisati?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Spremi kao primjer." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Dogodila se greška pri spremanju aktivnosti u dnevnik." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Aktivnost je spremljena u dnevnik." #: pippy_app.py:1119 msgid "Error" msgstr "Greška" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Dogodila se greška pri čitanju podataka." #: pippy_app.py:1448 msgid "Working..." msgstr "Radimo..." #: pippy_app.py:1451 msgid "done!" msgstr "gotovo!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ZAUSTAVLJENO" #: notebook.py:428 msgid "Erase" msgstr "Izbrisati" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Želiš trajno izbrisati „%s“?" Pippy-76/po/ht.po000066400000000000000000000131401445132016300140000ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 21:55+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: ht\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n !=1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Sous" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Korije" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Fè mache!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Pwòp" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Aktivite" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Sove kòm Aktivite Erè" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Souple bay aktivite ou-a yon non siyifikatif avan ou tante sove-l kòm yon " "aktivite." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "pakè aktivite an kreyasyon..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Souple bay aktivite ou-a yon non siyifikatif avan ou tante sove-l kòm yon " "aktivite." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Aktivite sove nan jounal." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Poze" #: notebook.py:428 msgid "Erase" msgstr "Efase" Pippy-76/po/hu.po000066400000000000000000000127371445132016300140140ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2016-02-06 21:58+0000\n" "Last-Translator: ursus \n" "Language-Team: LANGUAGE \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1454795921.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Forrás" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Nem található a TamTamEdit hangkönyvtár. Telepítetted a TamTamEditet?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Szerkesztés" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Futtat!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Állj" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Töröl" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Aktivitás" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Mentés Aktivitás hibaként" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Szünet" Pippy-76/po/hus.po000066400000000000000000000147311445132016300141730ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 21:58+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: hus\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" # Si se acepta mi sugerencia de "Tsán", deberán cambiar todas las cadenas que contengan "Pippy" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Elel" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Yab i ejtow ki ela' an dhaykol ats'at dhuchlab xin k'al an t'ojlab " "TamTamEdit. ¿A punk'uyámal an t'ojlab TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Jalk'uy" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "¡Tujuw!" # Aquí la traducción no es literal, porque se debe tomar en cuenta la letra que lleva antepuesta el guion bajo _ # Esto es difícil de explicar, son cuestiones de programación. Zurik #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Kuba'" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "T'oka'" #: pippy_app.py:298 msgid "c" msgstr "o" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "U t'iplabilchik" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s T'ojlab" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Ka dhaya' etil jun i k'ibts'ontaláb ti t'ojláb" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Ka t'aja' an alwa'talab abal ok'xidh ti ka dhaya' etil jun i t'ojlab ka " "punchij jun in éxbadh bij." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Alwa'" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Dhayk'al jun i t'ojlab axi dhayk'adh ti yan..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "T'ojlab Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Ka dhaya' etil jun i uk'pidh t'ojlab" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Ka t'aja' an alwa'talab abal ok'xidh ti ka dhaya' jun i t'ojlab etil jun i " "t'iplab ka punchij jun in éxbadh bij." #: pippy_app.py:921 msgid "Creating example..." msgstr "Dhayk'andhal jun i t'iplab..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Ka dhaya' etil jun i T'ipodh Ok'xidh olchixtaláb" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Axi t'iplab wa'tsits. a le' ka. A le' ka wichk'ow ka dhucha'?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Dhayach etil i t'iplab." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "T'ojláb dhayach ti chudhel dhuchadh úw." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "TONK'IDH" #: notebook.py:428 msgid "Erase" msgstr "Pakuw" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "¿A le' ka pákuw abal etsey \"%s\"?" Pippy-76/po/hy.po000066400000000000000000000151121445132016300140060ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 20:48+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: hy\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Պիտոն Պիպպի" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Աղբյուր" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "TamTamEdit -ի ձայնդարանը չեմ գտնում: Դուք տեղադրե՞լ եք TamTamEdit - ը:" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Խմբագրել" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "մեկնարկիր!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Կանգ" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Մաքրել" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Իմ օրինակները" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Գործունեություն" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Հիշել որպես գործունեության խափանում" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Տվեք Ձեր գործունեությանն իմաստալից անվանում` մինչև այն որպես գործունեություն " "պահպանելը:" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "OK" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Գործունեություների փաթեթի ստեղծում..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Պիպպիի գործունեություն" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Պահպանել որպես Օրինակի Սխալ" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Տվեք Ձեր գործունեությանը իմաստալից անվանում` մինչև այն որպես օրինակ " "պահպանելը:" #: pippy_app.py:921 msgid "Creating example..." msgstr "Օրինակի ստեղծում..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Պահպանել որպես նախազգուշացման օրինակ:" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Այս օրինակն արդեն կա: Ուզո՞ւմ եք այն փոխարինել նորով:" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Պահպանված է որպես օրինակ:" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Գործունեությունը պահված է մատյանում:" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ԴԱԴԱՐԵՑՎԱԾ" #: notebook.py:428 msgid "Erase" msgstr "Ջնջել" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Ցանկանում ես ընդմիշտ ջնջել \"%s\"?" Pippy-76/po/id.po000066400000000000000000000140741445132016300137700ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-24 22:24+0200\n" "Last-Translator: andika \n" "Language-Team: LANGUAGE \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "Sumber %s" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Tak bisa temukan pustaka suara TamTamEdit. Apakah Anda telah memasang " "TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Sunting" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Jalankan!" #: pippy_app.py:266 msgid "r" msgstr "j" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Hentikan" #: pippy_app.py:282 msgid "s" msgstr "h" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Bersihkan" #: pippy_app.py:298 msgid "c" msgstr "b" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Contohku" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Aktivitas %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Simpan sebagai Galat Aktivitas" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Harap beri nama aktivitas Anda suatu nama yang berarti sebelum mencoba " "menyimpannya sebagai aktivitas." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Membuat bendel aktivitas..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Aktivitas Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Simpan sebagai Galat Contoh" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Harap beri nama aktivitas Anda suatu nama yang berarti sebelum mencoba " "menyimpannya sebagai contoh." #: pippy_app.py:921 msgid "Creating example..." msgstr "Membuat contoh..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Simpan sebagai Peringatan Contoh" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Contoh ini telah ada. Apakah Anda hendak menimpanya?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Tersimpan sebagai contoh." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Aktivitas disimpan ke jurnal." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "DITAHAN" #: notebook.py:428 msgid "Erase" msgstr "Hapus" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Apakah Anda hendak menghapus \"%s\" secara permanen?" Pippy-76/po/is.po000066400000000000000000000127751445132016300140150ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-04-15 19:56+0000\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: is\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1492286173.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippi" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Keyra!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 #, fuzzy msgid "Stop" msgstr "Stöðva" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" #: notebook.py:428 msgid "Erase" msgstr "Eyða" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Ertu viss um að þú viljir endanlega eyða \"%s?" Pippy-76/po/it.po000066400000000000000000000140711445132016300140050ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2013-11-11 16:57+0200\n" "Last-Translator: arosella \n" "Language-Team: LANGUAGE \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Sorgente" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Libreria sonora TamTamEdit non trovata. Hai installato TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Modifica" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Vai!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Stop" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Cancella" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "I miei esempi" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Attività" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Salva come Errore dell'Attività" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Per favore assegna un nome significativo alla Attività prima di salvarla." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Creazione di una attività integrata..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Attività Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Salva come Esempio Sbagliato" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Per favore assegna un nome significativo alla Attività prima di salvarla " "come un esempio." #: pippy_app.py:921 msgid "Creating example..." msgstr "Esempio in creazione..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Salva come Esempio di Avvertimento" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" "Esiste già un esempio con questo nome. Vuoi cancellare il vecchio e scrivere " "il nuovo?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Salvato come Esempio." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Attività salvata nel diario." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "INPAUSA" #: notebook.py:428 msgid "Erase" msgstr "Elimina" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Vuoi cancellare definitivamente \"%s\"?" Pippy-76/po/ja.po000066400000000000000000000133661445132016300137710ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:21+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s ソース" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "編集" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "実行!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "止まれ!" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s アクティビティ" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "「アクティビティとして保存」のエラー" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "わかりやすい名前を付けてから、アクティビティとして保存してください。" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "了解" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "アクティビティバンドルを生成中..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "わかりやすい名前を付けてから、アクティビティとして保存してください。" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "ジャーナルにアクティビティを保存しました。" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "一時停止中" #: notebook.py:428 msgid "Erase" msgstr "消去する" Pippy-76/po/km.po000066400000000000000000000135431445132016300140030ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:35+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: km\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s ប្រភព" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "កែ" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "រត់!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "បញ្ឈប់" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "ជម្រះ" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s សកម្មភាព" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "សកម្មភាពមានកំហុសរក្សាទុកជា" #: pippy_app.py:768 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "មេត្តាផ្តល់សកម្មភាពរបស់អ្នក" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "យល់ព្រម" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "បង្កើតសកម្មភាពទាំមូល..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "មេត្តាផ្តល់សកម្មភាពរបស់អ្នក" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "រក្សាទុកសកម្មភាពក្នុងសៀវភៅទានានុប្បវត្តិ" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "បញ្ឈប់" #: notebook.py:428 msgid "Erase" msgstr "លុប" Pippy-76/po/ko.po000066400000000000000000000132041445132016300137770ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2016-05-28 01:41+0000\n" "Last-Translator: mimibg \n" "Language-Team: LANGUAGE \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1464399679.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "피삐" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s 소스" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "편집" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "실행!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "중지" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "지우기" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s 활동" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "활동 에러 저장하기" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "활동을 저장하기 전에 당신의 활동을 의미 있는 이름으로 지어 주세요." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "완료" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "활동 묶음 만들기" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "활동을 저장하기 전에 당신의 활동을 의미 있는 이름으로 지어 주세요." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "일지에 활동 저장" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "잠시 멈춤" Pippy-76/po/lt.po000066400000000000000000000155051445132016300140130ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-11-12 20:14+0000\n" "Last-Translator: Moo \n" "Language-Team: LANGUAGE \n" "Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "(n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1510517641.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippi" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "Ieškome programuotojų! Čia galėsite naudoti pavyzdžius, kad pradėtumėte " "mokytis jūsų kompiuteriui suprantamos kalbos, pavadinimu \"Python\"." #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "Didinti" #: toolbars.py:48 msgid "Zoom out" msgstr "Mažinti" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s šaltinis" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Nepavyksta rasti TamTamEdit garso bibliotekos. Ar įdiegėte TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "grafika" #: pippy_app.py:97 msgid "math" msgstr "matematika" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "garsas" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Importuoti Python failą į naują kortelę" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Eksportuoti kaip Pippy dokumentą" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Įrašyti šį failą į Pippy biblioteką" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Eksportuoti kaip naują Pippy pavyzdį" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Redaguoti" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Rodyti išvesties skydelį" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Vykdyti!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Stabdyti" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Išvalyti" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "Atverti pavyzdį" #: pippy_app.py:389 msgid "My examples" msgstr "Mano pavyzdžiai" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Slėpti išvesties skydelį" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s veikla" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "Įrašyta" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "Dokumentas įrašytas į žurnalą." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Klaida, importuojant Python failą" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "Jūsų pasirinktas failas nėra Python failas." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "Jūsų pasirinktas failas jau yra atvertas" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Klaida, įrašant kaip veiklą" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Prašome, prieš bandant įrašyti kaip veiklą, suteikti savo veiklai prasmingą " "pavadinimą." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Gerai" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Kuriamas veiklos rinkinys..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Pippi veikla" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Klaida, įrašant kaip pavyzdį" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Prašome, prieš bandant įrašyti kaip pavyzdį, suteikti savo veiklai prasmingą " "pavadinimą." #: pippy_app.py:921 msgid "Creating example..." msgstr "Kuriamas pavyzdys..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Įspėjimas, įrašant kaip pavyzdį" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Šis pavyzdys jau yra. Ar norite jį perrašyti?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Įrašyta kaip pavyzdys." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Klaida, įrašant veiklą į žurnalą." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Veikla įrašyta į žurnalą." #: pippy_app.py:1119 msgid "Error" msgstr "Klaida" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Klaida, skaitant duomenis." #: pippy_app.py:1448 msgid "Working..." msgstr "Dirbama..." #: pippy_app.py:1451 msgid "done!" msgstr "atlikta!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PRISTABDYTA" #: notebook.py:428 msgid "Erase" msgstr "Ištrinti" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Ar norite negrįžtamai ištrinti \"%s\"?" Pippy-76/po/messages.mo000066400000000000000000000026171445132016300152000ustar00rootroot00000000000000,   ),3X9*Y 4@Gau# T,>k    %s Activity%s SourceActivity saved to journal.As Activity BundleAs Pippy DocumentCopy selected text to clipboardCreating activity bundle...EditExamplesOkPAUSEDPippyPlease give your activity a meaningful name before attempting to save it as an activity.Please install TamTamEdit's sound library.Save as Activity Error_Run!Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2008-05-27 00:30-0400 PO-Revision-Date: 2008-09-15 13:25-0400 Last-Translator: lacrete Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Pootle 1.1.0rc2 %s Aktivite% SousAktivite sove nan jounal.Kòm pakè aktiviteKòm dokiman PippyKopye tèks ou chwazi a sou ekritwapakè aktivite an kreyasyon...KorijeEgzanp yoOkPozPippySouple bay aktivite ou-a yon non siyifikatif avan ou tante sove-l kòm yon aktivite.Souple enstale korektè TamTam librèri son.Sove kòm Aktivite Erè_Fè mache!Pippy-76/po/mg.po000066400000000000000000000132321445132016300137720ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:38+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: mg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pipay" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s loharano" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Ovao" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Alefa!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Ajanony" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Fafao" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Sahanasa" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Tehirizo ho Sahanasa Diso" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Azafady omeo anarana misy dikany ny sahanasanao alohan'ny hitehirizana azy " "ho sahanasa." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Eo am-pamoronana tamba-tsahanasa..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Azafady omeo anarana misy dikany ny sahanasanao alohan'ny hitehirizana azy " "ho sahanasa." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Voatahiry ao amin'ny firaketana ny sahanasa." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Mijanona" #: notebook.py:428 msgid "Erase" msgstr "Soloy" Pippy-76/po/mi.po000066400000000000000000000137601445132016300140020ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: mi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Translate Toolkit 1.1.1rc4\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pipi" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Pūtake" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Kāore e taea te kite i te puna oro TamTamEdit. I tāuta koe i te TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Whakatika" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Whakahaere!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Tū" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Ūkui" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Aku tauira" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Hohe" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Tiaki hei Hapa Hohe" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Hoatu koa i tētahi ingoa whai mana ki tō hohe i mua i te ngana ki te tiaki " "hei hohe." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Āe" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Waihanga ana i te pūkai hohe..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Hohe Pipi" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Tiaki hei Hapa Tauira" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Hoatu koa i tētahi ingoa whai mana ki tō hohe i mua i te ngana ki te tiaki " "hei tauira." #: pippy_app.py:921 msgid "Creating example..." msgstr "Waihanga ana i tētahi tauira..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Tiaki hei Tauira Whakatūpato" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Kei te tīari kē tēnei tauira. Tuhirua anō?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Kua tiakina hei tauira." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Hohe kua tiakina ki te tuhitaka." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "KUA TĀRIA" #: notebook.py:428 msgid "Erase" msgstr "Muku" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "E hiahia ana koe kia muku i \"%s\" mō ake tonu atu?" Pippy-76/po/mk.po000066400000000000000000000136031445132016300140000ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:37+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: mk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==1 || n%10==1 ? 0 : 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Пипи" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Изврши!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 #, fuzzy msgid "Stop" msgstr "Стоп" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Исчисти" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Активност" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Сними како грешка во активност" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Доделете осмислено име на активноста пред да пробате да ја снимите како " "таква." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Во ред" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Создавам сноп на активности..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Доделете осмислено име на активноста пред да пробате да ја снимите како " "таква." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Активноста е снимена во дневникот." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ПАУЗИРАНО" #: notebook.py:428 msgid "Erase" msgstr "Избриши" Pippy-76/po/mn.po000066400000000000000000000137351445132016300140110ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:40+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: mn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Пиппи" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Эх үүсвэр" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Засварлах" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Гүйцэтгэх!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Зогсоох" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Арилгах" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Үйл ажиллагаа" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Үйл ажиллагаагаар хадгалхад алдаа гарлаа" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Үйл ажиллагаагаар хадгалахын өмнө өөрийн үйл ажиллагаанд утгатай нэр өгөөрэй." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "За" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Үйл ажиллагааны бүрдэл бүтээгдэж байна..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Үйл ажиллагаагаар хадгалахын өмнө өөрийн үйл ажиллагаанд утгатай нэр өгөөрэй." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Үйл ажиллагаа бүртгэлийн дэвтэрт хадгалагдлаа." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ТҮР ЗОГССОН" #: notebook.py:428 msgid "Erase" msgstr "Арилгах" Pippy-76/po/mr.po000066400000000000000000000137471445132016300140200ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:38+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: mr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "पिपी" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s स्त्रोत्रा" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "संपादन करा" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "धावा!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "थांबा" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s उद्योग" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "अँक्टिवीटीमधील चुक नोंदवा" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "कृपया तुमच्या अँक्टिवीटीला नोंदविण्यापुर्वी योग्य नाव द्या" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "ओ के" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "अँक्टिवीटी बंडल बनवा" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "कृपया तुमच्या अँक्टिवीटीला नोंदविण्यापुर्वी योग्य नाव द्या" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "अँक्टिवीटी जनरलमध्य़े टाका" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "थोडा वेळ थांबा" #: notebook.py:428 msgid "Erase" msgstr "खोडा" Pippy-76/po/nb.po000066400000000000000000000074351445132016300137760ustar00rootroot00000000000000# SOME 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. # SOME 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. # translation of pippy-activity.po to Norsk bokmål # Kent Dahl , 2008. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. msgid "" msgstr "" "Project-Id-Version: pippy-activity\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-06-19 00:34-0400\n" "PO-Revision-Date: 2012-06-26 22:41+0200\n" "Last-Translator: Chris \n" "Language-Team: Norsk bokmål \n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity.py:49 #, python-format msgid "%s Source" msgstr "%s Kilde" #: activity.py:91 msgid "Copy selected text to clipboard" msgstr "Kopier valgt tekst til utklippstavlen" #: activity.py:96 pippy_app.py:113 pippy_app.py:118 msgid "Edit" msgstr "Endre" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PAUSET" #: library/pippy/sound.py:54 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:90 msgid "Export as Pippy Document" msgstr "" #: pippy_app.py:96 msgid "Export as Pippy Example" msgstr "" #: pippy_app.py:102 msgid "Create Activity Bundle" msgstr "" #: pippy_app.py:111 msgid "Actions" msgstr "" #: pippy_app.py:138 pippy_app.py:141 msgid "Run!" msgstr "Kjør!" #: pippy_app.py:139 msgid "r" msgstr "" #: pippy_app.py:152 pippy_app.py:158 msgid "Stop" msgstr "Stans" #: pippy_app.py:153 msgid "s" msgstr "" #: pippy_app.py:167 pippy_app.py:173 #, fuzzy msgid "Clear" msgstr "Tøm" #: pippy_app.py:168 msgid "c" msgstr "" #: pippy_app.py:197 msgid "Examples" msgstr "Eksempler" #: pippy_app.py:229 msgid "My examples" msgstr "" #: pippy_app.py:358 #, python-format msgid "%s Activity" msgstr "%s aktivitet" #: pippy_app.py:438 #, fuzzy msgid "Save as Activity Error" msgstr "Lagre som aktivitetsfeil" #: pippy_app.py:439 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Vennligst gi aktiviteten din et meningsfylt navn før du prøver å lagre det " "som en aktivitet." #: pippy_app.py:442 pippy_app.py:486 msgid "Ok" msgstr "Ok" #: pippy_app.py:448 msgid "Creating activity bundle..." msgstr "Lager aktivitetspakke..." #: pippy_app.py:479 msgid "Pippy Activity" msgstr "" #: pippy_app.py:483 msgid "Save as Example Error" msgstr "" #: pippy_app.py:484 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Vennligst gi aktiviteten din et meningsfylt navn før du prøver å lagre det " "som en aktivitet." #: pippy_app.py:492 msgid "Creating example..." msgstr "" #: pippy_app.py:499 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:500 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:506 pippy_app.py:562 msgid "Saved as example." msgstr "" #: pippy_app.py:546 msgid "Activity saved to journal." msgstr "Aktivitet lagret til dagbok." #, fuzzy #~ msgid "As Pippy Document" #~ msgstr "Som Pippy-dokument" #, fuzzy #~ msgid "As Activity Bundle" #~ msgstr "Som aktivitetspakke" #~ msgid "Please install TamTamEdit's sound library." #~ msgstr "Vennligst installer TamTamEdit sitt lydbibliotek." #: notebook.py:428 msgid "Erase" msgstr "Slett" Pippy-76/po/ne.po000066400000000000000000000157711445132016300140030ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:41+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: ne\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "पिप्पी" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s श्रोत" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "ताम्ताम्सम्पादन ध्वनि पुस्तकालयमा भेतिएन । ताम्ताम्सम्पादन इ‍‍‍न्स्तल " "गर्नुभयो ?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "सम्पादन" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "चलाउ!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "रोक" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "सफा गर" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "मेरो उदाहरणहरु" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s क्रियाकलाप" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "क्रियाकलाप त्रुटिको रुपमा बचत गर" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "क्रियाकलापको रुपमा बचत गर्नु अघि कृपया आफ्नो क्रियाकलापलाई उचित नाम देऊ।" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "हुन्छ" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "क्रियाकलाप बंडल बनाउँदै..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "पिप्पी क्रियाकलाप" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "उदाहरण त्रुटि भनेर सेभ गर" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "कृपया तिम्रो क्रियाकलापलाई उदाहरणमा सेभ गर्नु अघि त्यसलाई उचित नाम देऊ ।" #: pippy_app.py:921 msgid "Creating example..." msgstr "उदाहरण सिर्जना गरिदै..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "उदाहरण चेतावनी भनेर सेभ गर" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "यो उदाहरण पहिल्यै रहिआएको छ। के तिमी यसलाई अधिलेखन गर्न चाहन्छौ?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "उदाहरण भनेर सेभ भयो ।" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "क्रियाकलाप खातामा बचत भयो।" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "रोकिएको छ" #: notebook.py:428 msgid "Erase" msgstr "मेट" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "के तिमीलाई \"%s\" स्थायी रुपमा मेटाउन मन छ?" Pippy-76/po/nl.po000066400000000000000000000164101445132016300140010ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-03-27 15:50+0000\n" "Last-Translator: whe \n" "Language-Team: LANGUAGE \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1490629832.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "Op zoek naar programmeurs! Hier kun je voorbeelden gebruiken on de taal te " "leren die je computer begrijpt, genaamd \"Python.\"" #: filedialog.py:79 msgid "Choose an example to open" msgstr "Kies een te openen voorbeeld" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Deelnemen aan een activiteit..." #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "Wacht op de verbinding..." #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Doorgaan met gedeelde activiteit..." #: toolbars.py:42 msgid "Zoom in" msgstr "Zoom in" #: toolbars.py:48 msgid "Zoom out" msgstr "Zoom uit" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Bron" #: icondialog.py:116 msgid "Select an icon" msgstr "Selecteer een icon" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "Nieuw Bronbestand %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Kan TamTamEdit geluidsbibliotheek niet vinden. Heb je TamTamEdit " "geïnstalleerd?" #: pippy_app.py:97 msgid "graphics" msgstr "grafisch" #: pippy_app.py:97 msgid "math" msgstr "wiskunde" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "geluid" #: pippy_app.py:98 msgid "string" msgstr "snaar" #: pippy_app.py:98 msgid "tutorials" msgstr "oefeningen" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Importeer Python bestand in nieuwe tab" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Uitvoer als Pippy document" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Bewaar dit bestand in de Pippy bibliotheek" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Uitvoer als nieuw Pippy voorbeeld" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "Maak een Sugar activiteit bundel" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Exporteer als een distutils package" #: pippy_app.py:228 msgid "Edit" msgstr "Bewerken" #: pippy_app.py:242 msgid "View" msgstr "Bekijk" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Toon uitvoerpaneel" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Uitvoeren!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Stop" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Wissen" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "Open een voorbeeld" #: pippy_app.py:389 msgid "My examples" msgstr "Mijn voorbeelden" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Verberg uitvoerpaneel" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Activiteit" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "Python Bestand aan Bibliotheek toegevoegd" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "Het geselecteerde bestand is aan de bibliotheek toegevoegd. Gebruik \"import " "{importnaam}\" om de bibliotheek te importeren voor gebruik." #: pippy_app.py:719 msgid "Saved" msgstr "Bewaard" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "Het document is in het logboek bewaard." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Fout bij importeren Python bestand" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "Het geselecteerde bestand is geen Python bestand." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "Het geselecteerde bestand is al open" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Fout bij bewaren als Activiteit" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Geef je activiteit een betekenisvolle naam voordat je hem bewaart als " "activiteit." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "Activiteit icon" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "Selecteer een activiteit icon." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Bezig met activiteit bundel maken..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Pippy Activiteit" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Bewaar als distutils package fout" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "Geef je activiteit een zinvolle naam voor het bewaren als een distutils " "package." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Bewaar als Voorbeeld Fout" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Geef je activiteit een betekenisvolle naam voordat je hem bewaart " "alsvoorbeeld." #: pippy_app.py:921 msgid "Creating example..." msgstr "Voorbeeld aanmaken..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Bewaar als Voorbeeld Waarschuwing" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Dit voorbeeld bestaat al. Wil je het overschrijven?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Bewaard als voorbeeld." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Fout bij bewaren van activiteit in het logboek." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Activiteit is bewaard in je dagboek." #: pippy_app.py:1119 msgid "Error" msgstr "Fout" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Fout bij lezen van data." #: pippy_app.py:1448 msgid "Working..." msgstr "Bezig..." #: pippy_app.py:1451 msgid "done!" msgstr "klaar!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "GEPAUZEERD" #: notebook.py:428 msgid "Erase" msgstr "Wissen" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Wil je permanent verwijderen \"%s\"?" Pippy-76/po/pap.po000066400000000000000000000134101445132016300141450ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2013-07-07 01:09+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: pap\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Fuente" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Edita" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Prosesá!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Stòp" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Aktividat" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Warda komo Eròr Aktividat" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Por fabor, duna bo aktividat un nòmber signifikativo promé ku bo ward'é komo " "un aktividat." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Kreando pakkete di aktividat..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Por fabor, duna bo aktividat un nòmber signifikativo promé ku bo ward'é komo " "un aktividat." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Aktividat ta wardá den bo diario." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Den pausa" #: notebook.py:428 msgid "Erase" msgstr "Paga" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Bo ke paga \"%s\" permanentemente?" Pippy-76/po/pbs.po000066400000000000000000000140331445132016300141530ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-08-29 01:58+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: pbs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Peppy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format #, python-format, msgid "%s Source" msgstr "%skiñgye'" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Kad-ep makejé ravu se makjaat se vatei' ne ngutajap re Tam TamEdit ¿nduma'ai " "ndukjuat ne ngutajap Tam TamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Malejeiñ" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "¡vipiúp!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Ndama'ai" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Matseiñ'" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Peuk tu'uei tutsjaú" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format #, python-format, msgid "%s Activity" msgstr "%s ndul'ajau" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Makjat ndich'u ne ngul'ajau" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "Vichjaut majau kutap lamejep majau ngunjiu' ne ngul'ajau kjup kikjiat." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Majau" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Manaja vatsjau nda ngul'ajau matseu' makjat..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Ngul'ajau pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Makjat k'ua lanu peuk vakja se ndich'u" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "vichjaut majau lamejep ngunjiu pu ngul'ajau kutap statjum kikjiat k'ua lanu " "peuk me'ei matsjau." #: pippy_app.py:921 msgid "Creating example..." msgstr "Mata'au peuk k'ua le'ei lanu peuk mane'ei ma natsjau..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Makjat k'ua lanu sania' maljús" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" "Nanji ndanu peuk me'ei mantsjau limi makjat se kimieng tsukuet ma nad-ets'" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Makjat k'ua lanú peuk me'ei matsjau." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Ngul'ajau makjat pu nguk'uix xiñi'iu me'ets." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "MAMA'AI" Pippy-76/po/pl.po000066400000000000000000000142651445132016300140110ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:46+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" # Źródło czegoś, tak? #: activity.py:65 #, python-format msgid "%s Source" msgstr "Źródło %s" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Nie mogę znaleźć biblioteki dźwięków TamTamEdytora. Czy zainstalowałeś " "TamTamEdytor?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Edytuj" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Uruchom!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Stop" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Wyczyść" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Moje przykłady" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Czynność %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" # kapitalizacja #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Zapisz jako błąd Aktywności" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Proszę nadaj swojej czynności nazwę, która ją dobrze opisuje, zanim " "zapiszesz ją jako czynność." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Tworzę pakiet aktywności..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Aplikacja Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Zapisz jako przykład błędu" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Proszę nadaj swojej aktywności nazwę która ją dobrze opisuje, zanim " "zapiszesz ją jako przykład." #: pippy_app.py:921 msgid "Creating example..." msgstr "Tworzę przykład..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Zapisz jako przykład ostrzeżenia" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Ten przykład już istnieje. Czy chcesz go zmienić?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Zapisane jako przykład." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Aktywność zapisana w dzienniku." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PAUZA" #: notebook.py:428 msgid "Erase" msgstr "Usuń" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Czy chcesz trwale wykasować \"%s\"?" Pippy-76/po/ps.po000066400000000000000000000136001445132016300140100ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2011-09-17 09:25+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: ps\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.1\n" #: activity/activity.info:2 msgid "Pippy" msgstr "پپي" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s سرچينه" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "سمون" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "وځغلوه!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s چارندتیا" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "ساتل د چارندتیا د تیروتنو په څیر" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "مخکې له دې، چې خپله چارندتیا د یوې چارند په څېر وساتۍ، مهرباني وکړﺉ یو مانا " "لرونکې نوم ورکړﺉ." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "هو" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "د چارندتیا بنډل پنځونه..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "مخکې له دې، چې خپله چارندتیا د یوې چارند په څېر وساتۍ، مهرباني وکړﺉ یو مانا " "لرونکې نوم ورکړﺉ." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "د ورځپاڼې چارندتیا وساتل شوه. " #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ځنډول شوی" #: notebook.py:428 msgid "Erase" msgstr "لرې کول" Pippy-76/po/pt.po000066400000000000000000000141121445132016300140100ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-25 02:11+0200\n" "Last-Translator: Luis \n" "Language-Team: LANGUAGE \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "Código-fonte de %s" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Não foi possível encontrar a biblioteca de som TamTamEdit. Instalaste o " "TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Editar" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Corre!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Parar" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Limpar" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Os meus exemplos" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Atividade %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Erro a Guardar como Atividade" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Por favor dá à tua atividade um nome relevante antes de tentares guardá-la " "como uma atividade." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "A criar pacote de atividade..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Atividade Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Erro a Guardar como Exemplo" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Por favor dá à tua atividade um nome relevante antes de tentares guardá-la " "como um exemplo." #: pippy_app.py:921 msgid "Creating example..." msgstr "A criar exemplo..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Aviso ao Guardar como Exemplo" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Este exemplo já existe. Queres substituí-lo?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Guardado como exemplo." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Atividade guardada no diário." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "EM PAUSA" #: notebook.py:428 msgid "Erase" msgstr "Apagar" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Tem a certeza que pretende eliminar permanentemente \"%s\"?" Pippy-76/po/pt_BR.po000066400000000000000000000170421445132016300144000ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2019-03-09 00:55+0000\n" "Last-Translator: Paulo Francisco \n" "Language-Team: LANGUAGE \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1552092953.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "Procurando por programadores! Aqui você pode usar exemplos para aprender a " "linguagem que seu computador compreende, que é chamada \"Python.\"" #: filedialog.py:79 msgid "Choose an example to open" msgstr "Escolha o exemplo para abrir" # The same could be translated as "Juntando-se". "Aderindo", or "Participando".... #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Aderindo à atividade..." #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "Por favor espere pela conexão..." #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Reiniciar atividade compartilhada..." #: toolbars.py:42 msgid "Zoom in" msgstr "Aumentar o zoom" #: toolbars.py:48 msgid "Zoom out" msgstr "Diminuir o zoom" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Fonte" #: icondialog.py:116 msgid "Select an icon" msgstr "Selecionar um ícone" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "Novo Arquivo Fonte %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Não foi possível encontrar a biblioteca de som TamTamEdit. Você já instalou " "o TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "gráficos" #: pippy_app.py:97 msgid "math" msgstr "matemática" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "som" #: pippy_app.py:98 msgid "string" msgstr "linha" #: pippy_app.py:98 msgid "tutorials" msgstr "tutoriais" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Importar arquivo Python para nova aba" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Exportar como documento Pippy" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Salvar este arquivo na biblioteca Pippy" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Exportar como um novo exemplo Pippy" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "Crie um grupo de atividades Sugar" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Exportar como um pacote distutils" #: pippy_app.py:228 msgid "Edit" msgstr "Editar" #: pippy_app.py:242 msgid "View" msgstr "Visualizar" # I need context to better translate this phrase. #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Mostrar painel de resultados" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Executar!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Parar" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Limpar" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "Abrir um exemplo" #: pippy_app.py:389 msgid "My examples" msgstr "Meus exemplos" # I need context to better translate this phrase. #: pippy_app.py:496 msgid "Hide output panel" msgstr "Ocultar painel de resultados" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Atividade %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "Arquivo Python adicionado à Biblioteca" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "O arquivo selecionado foi adicionado à biblioteca. Caso queira importar " "arquivos da biblioteca, use \"import {nome do arquivo importado}\"." #: pippy_app.py:719 msgid "Saved" msgstr "Salvo" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "O documento foi salvo no Diário." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Erro ao importar arquivo Python" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "O arquivo selecionado não é um arquivo Python." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "O arquivo selecionado já está aberto" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Salvar como Erro de Atividade" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "Por favor dê à sua atividade um nome antes de tentar salvá-la." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Confirma" #: pippy_app.py:779 msgid "Activity icon" msgstr "Ícone de atividade" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "Por favor selecione um ícone para a atividade." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Criando pacote de atividade..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Atividade Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Salve os pacotes de erro como distutils" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "Por favor de um nome significativo para sua atividade antes de tentar salvá-" "la para o pacote distutils." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Salvar como Exemplo de Erro" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Por favor dê à sua atividade um nome significativo antes de tentar salvá-la " "como um exemplo." #: pippy_app.py:921 msgid "Creating example..." msgstr "Criando exemplo..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Salvar como Exemplo de Alerta" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Este exemplo já existe. Você quer sobrescrevê-lo?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Salvo como exemplo." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Erro ao salvar a atividade para o Diário." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Atividade salva no Diário." #: pippy_app.py:1119 msgid "Error" msgstr "Erro" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Erro na leitura de dados." #: pippy_app.py:1448 msgid "Working..." msgstr "Trabalhando..." #: pippy_app.py:1451 msgid "done!" msgstr "feito!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PAUSADO" #: notebook.py:428 msgid "Erase" msgstr "Apagar" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Você deseja apagar permanentemente \"%s\"?" Pippy-76/po/quz.po000066400000000000000000000153631445132016300142150ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-07-16 01:28+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: quz\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" "X-Generator: Pootle 2.0.5\n" # "Peppy" #: activity/activity.info:2 msgid "Pippy" msgstr "Amarucha" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" # "%s Fuente" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Código fuente nisqa" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" # "No se pudo encontrar la librería de audio de la Actividad TamTamEdit. ¿Ha " # "instalado la Actividad TamTamEdit?" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Actividad TamTamEdit sutiyuqpiqa manam maypin uyarinakuna kasqantaqa " "tarikunchu. Churarankichu chay Actividad TamTamEdit nisqata?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" # "Editar" #: pippy_app.py:228 msgid "Edit" msgstr "Allinchay" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" # "¡_Empieza!" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Qallariy!" # "r" #: pippy_app.py:266 msgid "r" msgstr "r" # "_Parar" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Sayachiy" # "s" #: pippy_app.py:282 msgid "s" msgstr "s" # "_Limpiar" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Pichay" # "c" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Qhawarichisqaykuna" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" # "%s Actividad" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Ruwana" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" # "Guardar como error de la Actividad" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Ruwanap pantaynintahina waqaychay" # "Por favor de a su actividad un nombre con significado antes de intentar " # "guardarlo como una actividad." #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "Ruwanaykita manaraq waqaychaspaqa, allin sutitaraq churay." # "Bien" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Chaskiy" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" # "Creando una actividad empaquetada..." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Q'ipichasqa ruwana kamarikuchkan..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Amarucha Ruwana" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Pantay qhawarichina hinata waqaychay" # "Por favor de a su actividad un nombre con significado antes de intentar " # "guardarlo como una actividad." #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "Ruwanaykita manaraq waqaychaspaqa, allin sutiwanraq churay." #: pippy_app.py:921 msgid "Creating example..." msgstr "Qhawarichinam kamarikuchkan..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Qhawarichina hinata waqaychay" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Kay qhawarichinaqa kanña. Kay pataman qillqayta munankichu?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Qhawarichinata waqaychay." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" # "Actividad guardada en el diario." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Ruwanaqa p'anqapim waqaycharikun." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" # "PAUSADO" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "SAYARICHISQA" #: notebook.py:428 msgid "Erase" msgstr "Pichay" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "¿Sapa kutichu pichayta munanki kay kaq \"%s\" nisqataqa?" Pippy-76/po/ro.po000066400000000000000000000133141445132016300140100ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:48+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2);;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "Sursa %s" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Pornește!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Oprește" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Șterge" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Activitatea %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Salvează ca eroare de activitate" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Înainte de a încerca să salvaţi ca activitate daţi un nume sugestiv " "activităţii voastre." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Se crează pachetul activităţii..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Înainte de a încerca să salvaţi ca activitate daţi un nume sugestiv " "activităţii voastre." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Activitate salvată în jurnal." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PAUZĂ" #: notebook.py:428 msgid "Erase" msgstr "Șterge" Pippy-76/po/ru.po000066400000000000000000000153561445132016300140260ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2016-04-21 01:31+0000\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1461202318.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Питон Пиппи" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Источник" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Невозможно найти звуковую библиотеку TamTamEdit. Вы установили TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Редактировать" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Пуск!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Стоп" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Очистить" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Мои образцы" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format #, python-format, fuzzy msgid "%s Activity" msgstr "%s Активность" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Сохранить как Ошибку Упражнения" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Пожалуйста дайте своему упражнению разумное название прежде чем пытаться " "сохранить его как упражнение" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ок" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Создается упражнение..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Упражнение Пиппи" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Сохранить как Образец Ошибки" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Пожалуйста дайте своему упражнению разумное название прежде чем пытаться " "сохранить его как упражнение." #: pippy_app.py:921 msgid "Creating example..." msgstr "Создается образец..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Сохранить Как Предупреждение Образца" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Этот образец уже существует. Заменить?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Сохранено как образец." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Упражнение сохранено в журнале." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ПАУЗА" #: notebook.py:428 msgid "Erase" msgstr "Удалить" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Вы действительно хотите навсегда удалить \"%s\"?" Pippy-76/po/rw.po000066400000000000000000000135651445132016300140300ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:33+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: rw\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1) ;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Isooko" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Hindura" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Gukoresha!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Guhagarara" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Gusiba" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 #, fuzzy msgid "My examples" msgstr "Ingero zange" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Igikorwa" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Bika nkaho ari Ikosa ry`Igikorwa" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Banza utange izina risobanutse ku gikorwa cyawe mbere yo kugerageza kubika " "nk'igikorwa." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Rema ihuriro ry'ibikorwa..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Banza utange izina risobanutse ku gikorwa cyawe mbere yo kugerageza kubika " "nk'igikorwa." #: pippy_app.py:921 #, fuzzy msgid "Creating example..." msgstr "Kora urugero..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 #, fuzzy msgid "Saved as example." msgstr "Byabitswe nkurugero." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Igikorwa kibitswe mu kinyamakuru." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Bihagaritswe by'akanya gato" #: notebook.py:428 msgid "Erase" msgstr "Gusiba" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Ushaka gusiba burundu \"%s\"?" Pippy-76/po/si.po000066400000000000000000000150051445132016300140020ustar00rootroot00000000000000# translation of pippy-activity.po to Sinhalese # 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: pippy-activity\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:52+0200\n" "Last-Translator: Chris \n" "Language-Team: Sinhalese \n" "Language: si\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "පිපී" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s මූලය" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "TamTamEdit ශබ්ද පුස්තකාලය සොයාගැනීමට නොහැක. ඔබ TamTamEdit ස්ථාපනය කලාද?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "සකසන්න" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "දුවන්න!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "නවත්වන්න" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s ක්‍රියාකාරකම" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "ක්‍රියාකාරකම් දෝෂයක් ලෙස සුරකින්න" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "ක්‍රියාකාරකමක් ලෙස සුරකීමට පෙර කරුණාකර ඔබගේ ක්‍රියාකාරකමට අර්ථවත් නමක් දෙන්න." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "හරි" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "ක්‍රියාකාරකම් පොදියක් සාදයි..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "ක්‍රියාකාරකමක් ලෙස සුරකීමට පෙර කරුණාකර ඔබගේ ක්‍රියාකාරකමට අර්ථවත් නමක් දෙන්න." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "ක්‍රියාකාරකම ජ'නලයට සුරකින ලදි." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "විරාමයක් ගෙන ඇත" #: notebook.py:428 msgid "Erase" msgstr "මකන්න" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "ඔබට \"%s\" ස්ථිරවම මැකීමට අවශ්‍යද?" Pippy-76/po/sk.po000066400000000000000000000131541445132016300140070ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:50+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Zdroj" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Upraviť" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Spustiť!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Vyčistiť" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format #, fuzzy msgid "%s Activity" msgstr "%s Aktivity" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Uložiť ako chybu Aktivity" #: pippy_app.py:768 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Uveďte, prosím, zmysluplný názov vašej činnosti, predtým, než ju uložíte." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 #, fuzzy msgid "Creating activity bundle..." msgstr "Vytváram balík Activity..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Uveďte, prosím, zmysluplný názov vašej činnosti, predtým, než ju uložíte." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Aktivita uložená do denníka." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Pauza" Pippy-76/po/sl.po000066400000000000000000000136761445132016300140210ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:57+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " "n%100==4 ? 2 : 3);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Izvora" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Zvočne knjižnice TamTamEdit ni mogoče najti. Ali je program TamTamEdit " "ustrezno nameščen?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Uredi" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Zaženi!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Zaustavi" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Počisti" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Moji primeri" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s Aktivnosti" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Shrani kot napako aktvinosti" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Prosim daj tvoji aktivnosti primerno ime, preden jo poskušaš shraniti kot " "aktivnost." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "V redu" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Ustvarjam paket aktivnosti..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Dejavnost Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Shrani kot primer napake" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "Dejavnost je kot primer treba pred shranjevanjem pomensko poimenovati." #: pippy_app.py:921 msgid "Creating example..." msgstr "Ustvarjanje primera..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Shrani kot primer opozorila" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Primer že obstaja. Ali ga želite prepisati?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Shranjeno kot primer." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Aktivnost je shranjena v beležko." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "USTAVLJENO" #: notebook.py:428 msgid "Erase" msgstr "Izbriši" Pippy-76/po/sq.po000066400000000000000000000167701445132016300140240ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2018-02-04 10:33+0000\n" "Last-Translator: Besnik_b \n" "Language-Team: LANGUAGE \n" "Language: sq\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1517740438.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pipi" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "Kërkim për programues! Këtu mund të përdorni shembuj për të filluar të " "mësoni gjuhën që kupton kompjuteri juaj, të quajtur \"Python\"." #: filedialog.py:79 msgid "Choose an example to open" msgstr "Zgjidhni një shembull të hapet" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Po hyhet në veprimtari…" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "Ju lutemi, pritni për lidhjen…" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Po rimerret veprimtari e përbashkët…" #: toolbars.py:42 msgid "Zoom in" msgstr "Zmadhoje" #: toolbars.py:48 msgid "Zoom out" msgstr "Zvogëloje" #: activity.py:65 #, python-format msgid "%s Source" msgstr "Burim %s" #: icondialog.py:116 msgid "Select an icon" msgstr "Përzgjidhni një ikonë" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "Kartelë e Re Burim %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "S’gjendet dot libraria e tingujve TamTamEdit. E keni instaluar TamTamEdit-in?" #: pippy_app.py:97 msgid "graphics" msgstr "grafika" #: pippy_app.py:97 msgid "math" msgstr "llogaritje" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "tingull" #: pippy_app.py:98 msgid "string" msgstr "varg" #: pippy_app.py:98 msgid "tutorials" msgstr "përkujdesore" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Importoni kartelë Python te një skedë e re" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Eksportoje si dokument Pippy" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Ruaje këtë kartelë te biblioteka Pippy" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Eksportoje si një shembull Pippy" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "Krijoni një paketë veprimtarish Sugar" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Eksportoje si paketë distutils" #: pippy_app.py:228 msgid "Edit" msgstr "Përpunojeni" #: pippy_app.py:242 msgid "View" msgstr "Shiheni" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Shfaq panel përfundimesh" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Xhiroje!" #: pippy_app.py:266 msgid "r" msgstr "x" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Ndale" #: pippy_app.py:282 msgid "s" msgstr "r" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Pastroje" #: pippy_app.py:298 msgid "c" msgstr "k" #: pippy_app.py:314 msgid "Open an example" msgstr "Hapni një shembull" #: pippy_app.py:389 msgid "My examples" msgstr "Shembujt e mi" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Fshih panel përfundimesh" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Veprimtaria %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "Kartela Python u shtua te Libraria" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "Kartela që keni përzgjedhur u shtua te biblioteka. Përdorni urdhrin \"import " "{importname}\" që të importoni bibliotekën për ta përdorur." #: pippy_app.py:719 msgid "Saved" msgstr "U ruajt" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "Dokumenti u ruajt në ditar." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Gabim në importimin e kartelës Python" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "Kartela që përzgjodhët s’është kartelë Python." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "Kartela që përzgjodhët është e hapur tashmë" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Ruaje si Gabim Veprimtarie" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Ju lutemi, përpara se të provoni ta ruani si një veprimtari, jepini " "veprimtarisë suaj një emër që ka kuptim." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "Ikonë veprimtarie" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "Ju lutemi, përzgjidhni një ikonë veprimtarie." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Po krijohet grup veprimtarish…" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Veprimtaria Pipi" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Gabim në ruajtjen si paketë distutils" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "Ju lutemi, jepini veprimtarisë tuaj një emër me kuptim, përpara se të " "përpiqeni ta ruani si paketë distutils." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Ruaje si Gabim Shembulli" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Ju lutemi, përpara se të provoni ta ruani si një shembull, jepini " "veprimtarisë suaj një emër që ka kuptim." #: pippy_app.py:921 msgid "Creating example..." msgstr "Po krijohet shembull…" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Ruaje si Paralajmërim Shembulli" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Ka tashmë një shembull të tillë. Doni të mbishkruhet?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "U ruajt si shembull." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Gabim gjatë ruajtjes së veprimtarisë në ditar." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Veprimtaria u ruajt në ditar." #: pippy_app.py:1119 msgid "Error" msgstr "Gabim" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Gabim gjatë leximit të të dhënave." #: pippy_app.py:1448 msgid "Working..." msgstr "Po punohet…" #: pippy_app.py:1451 msgid "done!" msgstr "u bë!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "E PUSHUAR" #: notebook.py:428 msgid "Erase" msgstr "Fshije" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Doni të fshihet \"%s\" përgjithmonë?" Pippy-76/po/sr.po000066400000000000000000000147001445132016300140140ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:48+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Пипи" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s извор" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Не могу да пронађем ТамТамЕдит звучну библиотеку. Да ли сте је инсталирали?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Уреди" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Покрени!" #: pippy_app.py:266 msgid "r" msgstr "р" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Заустави" #: pippy_app.py:282 msgid "s" msgstr "с" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Очисти" #: pippy_app.py:298 msgid "c" msgstr "ц" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Моји примери" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s активност" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Сачувај као грешку активности" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Молим дајте вашој активности неки препознатљив назив пре него што покушате " "да је сачувате као активност." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "У реду" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Правим скуп активности..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Активности Пипија" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Сачувај као грешку примера" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Молим дајте вашој активности неки препознатљив назив пре него што покушате " "да је сачувате као пример." #: pippy_app.py:921 msgid "Creating example..." msgstr "Правим пример..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Сачувај као упозорење примера" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Овај пример већ постоји. Да ли желите да га замените?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Сачувано као пример." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Активност је сачувана у дневник." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ПАУЗИРАНО" Pippy-76/po/sv.po000066400000000000000000000162621445132016300140250ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-03-29 11:24+0000\n" "Last-Translator: Anders \n" "Language-Team: LANGUAGE \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1490786653.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "Söker efter programmerare! Här kan du använda exempel för att börja lära dig " "språket \"Python\" som din dator förstår." #: filedialog.py:79 msgid "Choose an example to open" msgstr "Välj ett exempel att öppna" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Går med i aktivitet..." #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "Vänta på anslutningen..." #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Återupptar delad aktivitet..." #: toolbars.py:42 msgid "Zoom in" msgstr "Zooma in" #: toolbars.py:48 msgid "Zoom out" msgstr "Zooma ut" #: activity.py:65 #, python-format msgid "%s Source" msgstr "Källkod för %s" #: icondialog.py:116 msgid "Select an icon" msgstr "Välj en ikon" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "Ny källfil %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Kan inte hitta TamTamEdit-ljudbibliotek. Har du installerat TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "grafik" #: pippy_app.py:97 msgid "math" msgstr "matematik" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "ljud" #: pippy_app.py:98 msgid "string" msgstr "sträng" #: pippy_app.py:98 msgid "tutorials" msgstr "guider" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Importera Python-fil till ny flik" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Exportera som Pippy-dokument" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Spara denna fil till Pippy-biblioteket" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Exportera som nytt Pippy-exempel" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "Skapa ett Sugar-aktivitetspaket" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Exportera som ett distutils-paket" #: pippy_app.py:228 msgid "Edit" msgstr "Redigera" #: pippy_app.py:242 msgid "View" msgstr "Visa" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Visa utmatningspanel" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Kör!" #: pippy_app.py:266 msgid "r" msgstr "k" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Stoppa" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Rensa" #: pippy_app.py:298 msgid "c" msgstr "r" #: pippy_app.py:314 msgid "Open an example" msgstr "Öppna ett exempel" #: pippy_app.py:389 msgid "My examples" msgstr "Mina exempel" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Dölj utmatningspanel" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s-aktivitet" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "Python-fil tillagd till bibliotek" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "Filen som du valde har lagts till i biblioteket. använd \"import {importnamn}" "\" för att importera biblioteket för användning." #: pippy_app.py:719 msgid "Saved" msgstr "Sparat" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "Dokumentet har sparats till dagboken." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Fel vid import av Python-fil" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "Filen som du valt är inte en Python-fil." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "Filen som du valt är redan öppen" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Spara som aktivitetsfel" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Ge din aktivitet ett betydelsefullt namn innan du försöker spara den som en " "aktivitet." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "Aktivitetsikon" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "Välj en aktivitetsikon." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Skapar en aktivitet..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Pippy-aktivitet" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Fel vid sparande som distutils-paket" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "Ge din aktivitet ett betydelsefullt namn innan du försöker spara den som ett " "distutils-paket." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Fel vid sparande som exempel" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Ge din aktivitet ett betydelsefullt namn innan du försöker spara den som ett " "exempel." #: pippy_app.py:921 msgid "Creating example..." msgstr "Skapar exempel..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Spara som exempel-varning" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Detta exempel finns redan. Vill du skriva över det?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Sparad som exempel." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Fel då aktivitet skulle sparas i dagboken." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Aktiviteten har sparats i dagboken." #: pippy_app.py:1119 msgid "Error" msgstr "Fel" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Fel vid läsning av data." #: pippy_app.py:1448 msgid "Working..." msgstr "Arbetar..." #: pippy_app.py:1451 msgid "done!" msgstr "färdig!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "PAUSAD" #: notebook.py:428 msgid "Erase" msgstr "Ta bort" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Vill du permanent ta bort \"%s\"?" Pippy-76/po/sw.po000066400000000000000000000124541445132016300140250ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2011-03-20 05:17+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: sw\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.1\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Hariri" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Sawa" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" #: notebook.py:428 msgid "Erase" msgstr "Futa" Pippy-76/po/ta.po000066400000000000000000000163001445132016300137720ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 23:05+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: ta\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "பிப்பி" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s வளம்" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "ஒலிக்கான TamTamEdit library காணவில்லை. TamTamEdit யை நிறுவி உள்ளீர்களா?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "திருத்துக" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "ஓடு!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "நிறுத்து" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "நீக்கு" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "என்னுடைய உதாரணங்கள்" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s செயற்பாடு" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "செயற்பாட்டு தவறை மாற்றிசேமிக்கவும்" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "தயவுசெய்து உங்கள்செயற்பாட்டிற்கு அர்த்தமுள்ளபெயரை வழங்கியபின்னர் முயற்சித்து " "அச்செயற்பாட்டை சேமிக்க" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "சரி" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "ஆக்கபூர்வ செயற்பாட்டுத்தொகுதி" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "பிப்பியின் செயற்பாடு" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "உதாரண தவறாக சேமி" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "தயவுசெய்து உங்கள்செயற்பாட்டிற்கு அர்த்தமுள்ளபெயரை வழங்கியபின்னர் முயற்சித்து " "அச்செயற்பாட்டை சேமிக்க" #: pippy_app.py:921 msgid "Creating example..." msgstr "உதாரணங்கள் உருவாக்கம்..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "எச்சரிக்கான உதாரணமாக சேமி" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "இந்த உதாரணம் ஏற்கனவேயுள்ளது. உங்களுக்கு மீண்டும் மாற்றி எழுத வேண்டுமா?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "உதாரணமாக சேமி." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "செயற்பாட்டைநாட்குறிப்பேட்டில்சேமி" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "இடைநிறுத்து" #: notebook.py:428 msgid "Erase" msgstr "அழி" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "உங்களுக்கு நிரந்திரமாக அழிக்க விருப்பமா \"%s\"?" Pippy-76/po/te.po000066400000000000000000000137441445132016300140070ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 23:01+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: te\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "పిప్పీ" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s మూలం" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "కూర్చు" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "నడుపు !" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s వ్యాపకం" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "వ్యాపకంలో పొరబాటుగా బద్రపరచు" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "మీ వ్యాపకాన్ని దాచేమొందు దానికి ఒక అర్దవంతమైన పేరుఇవ్వండి." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "సరి" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "వ్యపకాల కట్టని తయారు చేస్తున్నా" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "మీ వ్యాపకాన్ని దాచేమొందు దానికి ఒక అర్దవంతమైన పేరుఇవ్వండి." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "వ్యపకాన్ని పద్దులో దాచా" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ఆగినది" #: notebook.py:428 msgid "Erase" msgstr "చెరిపివేయి" Pippy-76/po/th.po000066400000000000000000000150061445132016300140030ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:53+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: th\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Source" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "ไม่พบ ไลบารี่เสียงของ TamTamEdit คุณได้ติดตั้ง TamTamEdit แล้วหรือยัง?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "แก้ไข" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "รัน!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "หยุด" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "ล้าง" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "ตัวอย่างของฉัน" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "กิจกรรม %sx" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "บันทึกเป็นข้อผิดพลาดกิจกรรม" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "โปรดใส่ชื่อกิจกรรมก่อนจะบันทึกเป็นกิจกรรม" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "กำลังสร้างชุดกิจกรรม..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "กิจกรรม Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "บันทึกเป็นตัวอย่างของ error" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "โปรดใส่ชื่อกิจกรรมก่อนจะบันทึกเป็นตัวอย่าง" #: pippy_app.py:921 msgid "Creating example..." msgstr "สร้างตัวอย่าง..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "บันทึกเป็นตัวอย่างสำหรับเตือน" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "ตัวอย่างนี้มีอยู่แล้ว คุณต้องการจะบันทึกซ้ำหรือไม่" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "เก็บเป็นตัวอย่าง" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "บันทึกกิจกรรมลงบันทึกประจำวันแล้ว" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "หยุดการทำงาน" #: notebook.py:428 msgid "Erase" msgstr "ลบ" Pippy-76/po/to.po000066400000000000000000000133021445132016300140070ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:53+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: to\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 #, fuzzy msgid "Pippy" msgstr "Pipi" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Ma'u'anga" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "'Oku 'ikai ke ma'u e Tam TamEdit ia 'ihe laipeli ongo. Na'ake fokotu'u e Tam " "TamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "'Etita" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Lele!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Ta'ohi" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Fakama'a" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s 'Ekitiviti" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Seivi koe 'Ekitiviti Fehalaaki" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Kataki 'ai ha hingoa mahuinga ki ho'o 'ekitivti kimu'a pea ke toki feinga ke " "seivi ia koe 'ekitiviti." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Ok" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Ko hono fokotu'u ha falukunga 'ekitiviti..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Kataki 'ai ha hingoa mahuinga ki ho'o 'ekitivti kimu'a pea ke toki feinga ke " "seivi ia koe 'ekitiviti." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Kuo Seivi'i e 'Ekitiviti ki he Senolo." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "POOSI" Pippy-76/po/tr.po000066400000000000000000000132251445132016300140160ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 23:06+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s kaynak" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "düzenleyiniz." #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 #, fuzzy msgid "Run!" msgstr "çalıştırınız!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Dur" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Temizle" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s aktivite" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "aktivite hatası olarak kaydediniz." #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "lütfen aktivitenize anlamlı bir isim verip öyle aktivite olarak kaydediniz." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "tamam" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "aktivite kümesi oluşturuluyor." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "lütfen aktivitenize anlamlı bir isim verip öyle aktivite olarak kaydediniz." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "aktivite günlüğe kaydedilmiştir." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Ara" #: notebook.py:428 msgid "Erase" msgstr "Silme" Pippy-76/po/tzm.po000066400000000000000000000124421445132016300142030ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 23:03+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: tzm\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "ⴱⴷⴷⴻⵍ" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "ⴱⴷ" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "ⵎⵃⵓ" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s ⴰⵎⵓⵙⵙⵓ" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" Pippy-76/po/ug.po000066400000000000000000000124221445132016300140020ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-02-27 06:38+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: ug\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "مەنبە %s" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 #, fuzzy msgid "Edit" msgstr "تەھرىرلەش" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "" Pippy-76/po/uk.po000066400000000000000000000216611445132016300140130ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-04-07 13:01+0000\n" "Last-Translator: yurchor \n" "Language-Team: LANGUAGE \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1491570088.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" "Шукаємо програмістів! Тут ви можете скористатися прикладами для того, щоб " "почати вчити мову, яку розуміє ваш комп’ютер і яка називається «Python»." #: filedialog.py:79 msgid "Choose an example to open" msgstr "Виберіть приклад, який слід відкрити" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "Долучаємося до дії…" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "Будь ласка, зачекайте, доки буде встановлено з’єднання…" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "Відновлюємо спільні дії…" #: toolbars.py:42 msgid "Zoom in" msgstr "Збільшити" #: toolbars.py:48 msgid "Zoom out" msgstr "Зменшити" #: activity.py:65 #, python-format msgid "%s Source" msgstr "Код %s" #: icondialog.py:116 msgid "Select an icon" msgstr "Вибрати піктограму" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "Новий файл коду %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" "Не вдалося знайти бібліотеки для роботи зі звуком TamTamEdit. Чи встановлено " "TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "графіка" #: pippy_app.py:97 msgid "math" msgstr "математика" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "звук" #: pippy_app.py:98 msgid "string" msgstr "рядок" #: pippy_app.py:98 msgid "tutorials" msgstr "підручники" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "Імпортувати файл Python до нової вкладки" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "Експортувати як документ Pippy" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "Зберегти цей файл до бібліотеки Pippy" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "Експортувати як новий приклад Pippy" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "Створити пакунок дії Sugar" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "Експортувати як пакунок distutils" #: pippy_app.py:228 msgid "Edit" msgstr "Зміни" #: pippy_app.py:242 msgid "View" msgstr "Перегляд" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "Показати панель виведення" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Виконати!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Зупинити" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Спорожнити" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "Відкрити приклад" #: pippy_app.py:389 msgid "My examples" msgstr "Мої приклади" #: pippy_app.py:496 msgid "Hide output panel" msgstr "Приховати панель виведення" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Дія %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "До бібліотеки додано файл Python" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" "Позначений вами файл було додано до бібліотеки. Скористайтеся командою «" "import {importname}», щоб імпортувати бібліотеку для використання." #: pippy_app.py:719 msgid "Saved" msgstr "Збережено" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "Документ було збережено до журналу." #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "Помилка під час спроби імпортувати файл Python" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "Вибраний вами файл не є файлом коду Python." #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "Вибраний вами файл вже відкрито" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Зберегти як помилку дії" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Будь ласка, надайте цій дії змістовної назви, перш ніж намагатися зберегти " "її як дію." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Гаразд" #: pippy_app.py:779 msgid "Activity icon" msgstr "Піктограма дії" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "Будь ласка, виберіть піктограму дії." #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Створюємо пакунок дії…" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Дія Pippy" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "Помилка під час спроби зберегти як пакунок distutils" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" "Будь ласка, надайте цій дії змістовної назви, перш ніж намагатися зберегти " "її як пакунок distutils." #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Помилка під час збереження прикладу" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Будь ласка, надайте цій дії змістовної назви, перш ніж намагатися зберегти " "її як приклад." #: pippy_app.py:921 msgid "Creating example..." msgstr "Створюємо приклад…" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Попередження під час збереження прикладу" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Цей приклад вже існує. Ви дійсно хочете перезаписати його?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Збережено як приклад." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "Помилка під час спроби зберегти дію до журналу." #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Дію збережено до журналу." #: pippy_app.py:1119 msgid "Error" msgstr "Помилка" #: pippy_app.py:1120 msgid "Error reading data." msgstr "Помилка під час спроби прочитати дані." #: pippy_app.py:1448 msgid "Working..." msgstr "Працюємо…" #: pippy_app.py:1451 msgid "done!" msgstr "Готово!" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "ПРИЗУПИНЕНО" #: notebook.py:428 msgid "Erase" msgstr "Стерти" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Бажаєте повністю стерти \"%s\"?" Pippy-76/po/ur.po000066400000000000000000000137611445132016300140240ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 22:54+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: ur\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "پپی" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s ذريعہ" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "تبديل کريں" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "چلاو!" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "روک دو" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s سرگرمی" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "سرگرمی غلطی کے طور پر محفوظ کریں" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "اپنی سرگرمی کو محفوظ کرنے سے پہلے براہ مہربانی اسے کوئی بامعانی نام دیں۔" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "ٹھیک ہے" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "سرگرمی کا بنڈل بنا رہا ہے..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "اپنی سرگرمی کو محفوظ کرنے سے پہلے براہ مہربانی اسے کوئی بامعانی نام دیں۔" #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "سرگرمی جریدے میں محفوظ ہو گئی۔" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "رکا ہوا" #: notebook.py:428 msgid "Erase" msgstr "مٹائيں" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "کیا آپ \"%s\" ہمیشہ کے لیے ختم کرنا چاہتے ہیں؟" Pippy-76/po/vi.po000066400000000000000000000135671445132016300140200ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 23:02+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.0.5\n" # Tên: không nên dịch #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "Nguồn %s" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Sửa" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Chạy !" #: pippy_app.py:266 msgid "r" msgstr "" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Dừng" #: pippy_app.py:282 msgid "s" msgstr "" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "" #: pippy_app.py:298 msgid "c" msgstr "" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "Hoạt động %s" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Lưu dạng Lỗi hoạt động" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Hãy đặt một tên có ý nghĩa cho hoạt động trước khi thử lưu nó dạng hoạt động." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "OK" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Đang tạo bộ hoạt động..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "" #: pippy_app.py:912 #, fuzzy msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Hãy đặt một tên có ý nghĩa cho hoạt động trước khi thử lưu nó dạng hoạt động." #: pippy_app.py:921 msgid "Creating example..." msgstr "" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Hoạt động đã được lưu vào nhật ký." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "BỊ TẠM DỪNG" #: notebook.py:428 msgid "Erase" msgstr "Xoá" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Xác nhận việc xoá: bạn có muốn xoá hẳn \"%s\" không?" Pippy-76/po/yo.po000066400000000000000000000142571445132016300140260ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2016-09-23 23:35+0000\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: yo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1474673719.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "Pippy" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s Orisun" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "Ko le ri TamTamEdit ohun ìkàwé. Nje o fi sori ẹrọ TamTamEdit?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "Ṣatunkọ" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "Ṣiṣe awọn!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "Duro" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "Parẹ́" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "Mi apeere" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s aṣayan iṣẹ-ṣiṣe" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "Fi bi aṣayan iṣẹ-ṣiṣe aṣiṣe" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "" "Jọwọ fun ṣiṣe kan ti o nilari orukọ ṣaaju ki o to pinnu lati fi o bi ohun-" "ṣiṣe." #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "Dara" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "Ṣiṣẹda aṣayan iṣẹ-ṣiṣe lapapo..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "Pippy aṣayan iṣẹ-ṣiṣe" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "Fi bi Apere aṣiṣe" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "" "Jọwọ fun ṣiṣe kan ti o nilari orukọ ṣaaju ki o to pinnu lati fi o bi ohun " "apẹẹrẹ." #: pippy_app.py:921 msgid "Creating example..." msgstr "Ṣiṣẹda apẹẹrẹ..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "Fi bi Apere Ikilọ" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "Yi apẹẹrẹ tẹlẹ wa. Ṣe o fẹ lati ìkọlélórí o?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "Ti o ti fipamọ bi awọn apẹẹrẹ." #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "Aṣayan iṣẹ-ṣiṣe ti o ti fipamọ to akosile." #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "Bii" #: notebook.py:428 msgid "Erase" msgstr "nu" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "Ṣe o fẹ lati patapata nu \"%s\"?" Pippy-76/po/zh_CN.po000066400000000000000000000160101445132016300143650ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2017-08-03 04:58+0000\n" "Last-Translator: Liang <1656703453@qq.com>\n" "Language-Team: LANGUAGE \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.5.1.1\n" "X-POOTLE-MTIME: 1501736304.000000\n" #: activity/activity.info:2 msgid "Pippy" msgstr "小蟒" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "寻找程序员!在这里你可以运用示例开始学习你的电脑理解的语言,这种语言称作“Python”。" #: filedialog.py:79 msgid "Choose an example to open" msgstr "选择一个示例打开" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "参加活动……" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "请等待连接……" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "恢复共享活动……" #: toolbars.py:42 msgid "Zoom in" msgstr "放大" #: toolbars.py:48 msgid "Zoom out" msgstr "缩小" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s 源码" #: icondialog.py:116 msgid "Select an icon" msgstr "选择一个图标" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "新的源码文件 %d" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "找不到TamTamEdit声音库,你有安装TamTamEdit吗?" #: pippy_app.py:97 msgid "graphics" msgstr "绘图" #: pippy_app.py:97 msgid "math" msgstr "数学" #: pippy_app.py:97 msgid "python" msgstr "python" #: pippy_app.py:97 msgid "sound" msgstr "声音" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "教程" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "在新标签导入Python文件" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "导出为Pippy文档" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "将这个文件保存到Pippy库中" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "编辑" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" # literally, "go/begin" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "执行!" #: pippy_app.py:266 msgid "r" msgstr "r" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "停止" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "清除" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "我的示例" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s 活动" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "已保存" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "这个文档已经保存到日记中" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "导入Python文件时出错" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "你选择的这个文件不是一个Python文件。" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "你选择的这个文件已经打开了" # This is a bad translation - literally, "mistake in preserving as activity." #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "活动保存错误" # "First give your activity a name, afterwards, save it." #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "在进行储存前,请为活动取一个有意义的名字。" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "确定" #: pippy_app.py:779 msgid "Activity icon" msgstr "活动的图标" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "请选择一个活动图标。" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "创建活动套件包中..." #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "小蟒活动" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "另存为distutils包错误" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "在你试图保存你的活动为distutils包之前,请给它取一个有意义的名字。" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "保存为范例时出错" # "First give your activity a name, afterwards, save it." #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "在保存为范例前,请为你的活动取一个有意义的名字。" #: pippy_app.py:921 msgid "Creating example..." msgstr "创建范例..." #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "保存为范例时的警告" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "该范例已存在。要覆盖它吗?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "保存为示例。" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "保存活动到日记时出错。" # Using the existing words for "activity" and "journal" here. #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "活动已经保存到日记。" #: pippy_app.py:1119 msgid "Error" msgstr "错误" #: pippy_app.py:1120 msgid "Error reading data." msgstr "读取数据时出错" #: pippy_app.py:1448 msgid "Working..." msgstr "工作中……" #: pippy_app.py:1451 msgid "done!" msgstr "完成!" # literally, "suspended." #: library/pippy/game.py:36 #, fuzzy msgid "PAUSED" msgstr "暂停" #: notebook.py:428 msgid "Erase" msgstr "删除" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "你想永久删除“%s”?" Pippy-76/po/zh_TW.po000066400000000000000000000136471445132016300144340ustar00rootroot00000000000000# SOME 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: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-03-24 17:39+1100\n" "PO-Revision-Date: 2012-06-26 20:59+0200\n" "Last-Translator: Chris \n" "Language-Team: LANGUAGE \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Pootle 2.0.5\n" #: activity/activity.info:2 msgid "Pippy" msgstr "小蟒軟體開發" #: activity/activity.info:3 msgid "" "Searching for programmers! Here you can use examples to begin learning the " "language your computer understands called \"Python.\"" msgstr "" #: filedialog.py:79 msgid "Choose an example to open" msgstr "" #: collabwrapper.py:178 msgid "Joining activity..." msgstr "" #: collabwrapper.py:179 collabwrapper.py:191 msgid "Please wait for the connection..." msgstr "" #: collabwrapper.py:190 msgid "Resuming shared activity..." msgstr "" #: toolbars.py:42 msgid "Zoom in" msgstr "" #: toolbars.py:48 msgid "Zoom out" msgstr "" #: activity.py:65 #, python-format msgid "%s Source" msgstr "%s 原始碼" #: icondialog.py:116 msgid "Select an icon" msgstr "" #: notebook.py:219 #, python-format msgid "New Source File %d" msgstr "" #: sound_check.py:27 library/pippy/sound.py:41 msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" msgstr "找不到TamTamEdit聲音庫,安裝TamTamEdit了嗎?" #: pippy_app.py:97 msgid "graphics" msgstr "" #: pippy_app.py:97 msgid "math" msgstr "" #: pippy_app.py:97 msgid "python" msgstr "" #: pippy_app.py:97 msgid "sound" msgstr "" #: pippy_app.py:98 msgid "string" msgstr "" #: pippy_app.py:98 msgid "tutorials" msgstr "" #: pippy_app.py:185 msgid "Import Python file to new tab" msgstr "" #: pippy_app.py:191 msgid "Export as Pippy document" msgstr "" #: pippy_app.py:197 msgid "Save this file to the Pippy library" msgstr "" #: pippy_app.py:205 msgid "Export as new Pippy example" msgstr "" #: pippy_app.py:211 msgid "Create a Sugar activity bundle" msgstr "" #. TRANS: A distutils package is used to distribute Python modules #: pippy_app.py:218 msgid "Export as a distutils package" msgstr "" #: pippy_app.py:228 msgid "Edit" msgstr "編輯" #: pippy_app.py:242 msgid "View" msgstr "" #: pippy_app.py:252 pippy_app.py:500 msgid "Show output panel" msgstr "" #: pippy_app.py:265 pippy_app.py:268 msgid "Run!" msgstr "執行!" #: pippy_app.py:266 msgid "r" msgstr "F" #: pippy_app.py:281 pippy_app.py:287 msgid "Stop" msgstr "停止" #: pippy_app.py:282 msgid "s" msgstr "s" #: pippy_app.py:297 pippy_app.py:303 msgid "Clear" msgstr "清除" #: pippy_app.py:298 msgid "c" msgstr "c" #: pippy_app.py:314 msgid "Open an example" msgstr "" #: pippy_app.py:389 msgid "My examples" msgstr "我的範例" #: pippy_app.py:496 msgid "Hide output panel" msgstr "" #: pippy_app.py:598 #, python-format msgid "%s Activity" msgstr "%s 活動" #: pippy_app.py:708 msgid "Python File added to Library" msgstr "" #: pippy_app.py:709 #, python-brace-format msgid "" "The file you selected has been added to the library. Use \"import " "{importname}\" to import the library for using." msgstr "" #: pippy_app.py:719 msgid "Saved" msgstr "" #: pippy_app.py:720 msgid "The document has been saved to journal." msgstr "" #: pippy_app.py:734 pippy_app.py:741 msgid "Error importing Python file" msgstr "" #: pippy_app.py:735 msgid "The file you selected is not a Python file." msgstr "" #: pippy_app.py:742 msgid "The file you selected is already open" msgstr "" #: pippy_app.py:767 pippy_app.py:826 msgid "Save as Activity Error" msgstr "儲存為活動時發生錯誤" #: pippy_app.py:768 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an activity." msgstr "在進行儲存前,請先為你的活動取一個有意義的名字。" #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 msgid "Ok" msgstr "確定" #: pippy_app.py:779 msgid "Activity icon" msgstr "" #: pippy_app.py:780 msgid "Please select an activity icon." msgstr "" #: pippy_app.py:785 pippy_app.py:800 msgid "Creating activity bundle..." msgstr "建立活動套件包中…" #: pippy_app.py:866 pippy_app.py:908 msgid "Pippy Activity" msgstr "小蟒活動" #: pippy_app.py:868 msgid "Save as distutils package error" msgstr "" #: pippy_app.py:869 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an distutils package." msgstr "" #: pippy_app.py:910 msgid "Save as Example Error" msgstr "儲存為錯誤範例" #: pippy_app.py:912 msgid "" "Please give your activity a meaningful name before attempting to save it as " "an example." msgstr "在儲存為範例之前,請先為你的活動取一個有意義的名字。" #: pippy_app.py:921 msgid "Creating example..." msgstr "建立範例" #: pippy_app.py:927 msgid "Save as Example Warning" msgstr "儲存為警告範例" #: pippy_app.py:928 msgid "This example already exists. Do you want to overwrite it?" msgstr "這個範例已經存在,覆寫它嗎?" #: pippy_app.py:935 pippy_app.py:993 msgid "Saved as example." msgstr "儲存為範例" #: pippy_app.py:957 msgid "Error saving activity to journal." msgstr "" #: pippy_app.py:977 msgid "Activity saved to journal." msgstr "活動已存入日誌。" #: pippy_app.py:1119 msgid "Error" msgstr "" #: pippy_app.py:1120 msgid "Error reading data." msgstr "" #: pippy_app.py:1448 msgid "Working..." msgstr "" #: pippy_app.py:1451 msgid "done!" msgstr "" #: library/pippy/game.py:36 msgid "PAUSED" msgstr "暫停" #: notebook.py:428 msgid "Erase" msgstr "刪除" #: notebook.py:429 #, python-format msgid "Do you want to permanently erase \"%s\"?" msgstr "你想永久删除“%s”嗎?" Pippy-76/screenshots/000077500000000000000000000000001445132016300147505ustar00rootroot00000000000000Pippy-76/screenshots/1.png000066400000000000000000002060111445132016300156160ustar00rootroot00000000000000PNG  IHDR8gVbKGD IDATxw\Sg+*UQl{GW:;ֺVEUkUqY{l$?N!$<Ϲ\s333bwwkΜ9+hZl|rB!=} Ν;gˆ2b ECj-X*:2V+"#yכ4iRF@k繩GzsG9ydoʕ+?#CZխ[wŊDZlYBo׮ݫ4zFuԩ[n[l?SWJDDDDDDTy{{wI0t=&r*[f9ܞȒ> yF.688xŊݻw>|8à077i%deex7-Zgqvv^nBXn74n YaifgΜYhQDDH$:rȑ#G,X0a„{}2DDDDDDD/!oo͛73xĈ#Fw2-Go"Ay|eJ[ 'Y=~T%6^.cww)S@?7Nmd8es+W433{ty…'N+_Yٳwu V?LrJ77;w.]TYB <<`V˖-׬Y?jԨSN 'ϟ5tPJr})))&B+Q qU>~BhZ^Tw߰z_Ȯ^+Ei5†٧0NU<<<7ocd~Ʃ \ge~G[n?CCjgΜ٫W3fd2SU?33 6nܹs3gsVf&NѣG WaԮ]Ussoӧ>uD"YT*xbӦM.]ZfMOOϏ?.\0NDDDDDDDNIgAשS@UU/WJ>b! N~'g>ۊ'GwOp R}Y7Bm㯿Z>L8Db'XŔc,Xxƍ=z̙3BJT%D"HLRmL6SN裏lkckkqFX={Ǐ \f-YdݭZ1uիW_|y\\\V=zQ??gv944444jݥNDDDDDDTa.}T /ůD}CPD6{oYl ;nr-$쀋۩E"@EDDj^zu-toQZ5XTT|dbe/5jTgE~ޚ={H$*zVڹsgOH$233kُ֬?ejK$00ދ;vljjL<|pwwwZc:Ka֬Y?A#\r~T*-Zt͞={hBHOO/瓈YfgAΠ_>}$77k8Zs5GnqfduPEw:4iQ,.66M85k֐!C >}渂t0`@֭kժeii)Hrrr222"""NR텖V-7̓X46Kg;vU*8uڵk±oj՞?sPP˫s铐p钮VgϞ- @xܼy Z-DbccP(4i/XXXiԨVKwԨQoZObۍ7 ZBBB eR}fƉ'&Mtʕov&L0aB||'~wDDDDDDDE)YPU3߂Cc\@w$'3enR۫kP8^7N+WDs7`֬Y㴴?84dȐsM4Yɓ/^8a#V ynJJȑ#sk׮iӦM65hРwQTӧO߻w2 >0h4-,,Z$R-5kdy:tHY~~~9`aD" SSSߺuK*޿ȑ#dggO4vΝZ d/@{Ž.ـNPҽ:vޚgo#=&N;ߋnbEZ&+*ϲJ:ve6mLDܹ8Uӽ{ D---ǏݻJAP9rB۪U۷/YãD7˛5ʲf6u_"b;^2fs.j.i7[d1  J,Ybmm]Rܻwܯ_ &*ʂì,Y$vE&ɓ7oн{{N>D^^ƍ=Rjg͚զMɓ'b!633+VOdҥXhb-,,G9/$$$6mrƍ^8sƍlԨCCCk֬bŊ 6mڴ}F~/DDDDDDDYǎ sǎ Uf*)'=}a±jD,ew N̖?)xɹsZh!ڵT*U*͛7 ۻwoVV1 kڴƍryWϝ;7zhMw^M [ҌU" 6O>k׮ |ںidM]"T+x633 !veV"hܹ-[vڔ)SSX~kNN;3+ׯ߈# bwtkǎclmm׭[P(N89R߿~XܴiӅ N2۶m'Nl۶Jh1`ԩU)e֡P`Qppf;ԶQϓ/i6\.X_|űcDŽ$|ʔ)s̙3g& mSN-j+@&3f͚֭S*C駟 ͠r֭[ϟoG)vډD"[[۠nǎ[n ڵkn2\AkN:bĈ5kl߾TVHDp;X,D% X>̙ӷo_Ryԩ{OY-ZhӦZ0aBLLpiӦgϊnadbX )8u ">>^.ٳJuŻw֭[@VVVbb~KDDDDDDT%%%%EEEabLjqH%q_fC}"]O=rs8O"MV+ !!СC]t^0`ѢEڵ  1ٳgE]U*FкuUVik?̙3.\H$DiӦթS8yJ:sLV~~Mj&Mڶm ..ΠO-u֬Y .}zo.tL;~Jbapoտwխm۶~a^^^ZZ @^^޲e˄֫WvppظqZ?!^r%//eݺuÆ kժZ.J?~…ƌcnn~q#ODDDDDDDUOV;j660~̡_buuG|s$Ӆx0S?C~Kk֬lT4~Aw 44ѣ r|ѫW @ڵE&NXƂVwXZmFFFDfffKRRAk?cstVvq  `Va%JnjP(͛P.PNŋM:uzΒ-Ϛj ԭ[ng.vÇׯ_?~x''Sfee5l\REGG6&BXy*+v՟6Q\qi˞={v߾}.HMM]nq ݻwÄ^6j*jڵ<|uziӦ7nS*˘1cjԨ@. ݻ=zdX!w޾}iӦ۷/%᠌-8eoo?x`=7;O0nnn0X QP,\PY$ر&##C-2eJݻ7qDY&L|˗/߻w͛Ϟ=KIIJ>>>Λo)7}tu&""""""T;%ͱOHtW5oumjk}Z\<+NTwkc̵P47J\3 kݲeرcOƍ7~7jԨqB*v!!!FHϞ= 1bЙZ=;v5#ܽ[phYl/[] fmm 22믿.j eeen:WW۷oܸQk׮{4}6 0vhBBBvݭ[:4j77 ##ٶmӧMR!U /E {k՟6ATzdVW<_&5;m[n>q9LeA~7mK,1bT*^QK1cD"y뭷tѣׯ_(˵/eeem޼@Ϟ=u~3gN-ݻw ϣp u(5%%ܺukvv!Uܫutt:t>N6M{|677_ti?>sL'~goZ/4f̘GĔK&cǎ;v}NTFGG'$$TDDDDDDDTT\%zB&R%[?t߃;j{Nt',G@dy{]ZvG>a.2]zd&|/x13ZgmӧOOMM (j@RRV^ɠ333Ǐ%ڵkׯ7I#ׯ7lذAv2ZrXssswܹlٲĢh0 csέQ'[^|Y{L-hm۶yg}ڣG_^|ժU&MrJWqddddddTT**@˲^}WM$dISe'uOhnac-RŹyfQ-e"=״ ;:88;۷o7rͻw̙356TiӦC9se˖G]vXXئM . RT_~] oըQ#&&ƘG7o^˫GaOOO!zܾ}{ӦMƔ<ɓ'~aFF|||^7^tD"]z={^KJ zhgB)T;%;z{Ǵ3Sr^g[g[tP3FE߿￟̙3β J*Λ7}r<''GT*J̀a>}jaa!RSSCCCgϞ]^=srƍVZZ?ѣ>ٳg|O>}}}tRj;w9bΝr<55_xbx={6m4j)'hS(CADDDDDD2l%D\bagkk_1R橃_ :mllخ]nݺ -/ '''gر;v7oMRk׮]vսHRRԩS?{XT/}:0 mBRj%ٳ 6OɩW_ T˗/뎭Rmf֬Y#JԷo_='4(==]89eʔ={>z( ++UԨQF@T6iD`~I&1&""""""*#G9ɩ9R*@k?GԨu3Eǝ"܎ĺٚ\6sNZfP[7m$ׯﯝ;w?5jTݺu5'BBBz|-; -Z2d'|R0!==}ʕ7o6XisΝ~-iӦi2۷+ 4H8V*7߿AeMbiɓEB؜m۶X"55D:t^^v̙3]v'ONN>qė_~ijE6n(4OիW^J4]VGq$$$5>ߞ8qb|||ffX,֑,]V"])""bذa[lqqq͔n IDAT)ߕ>}:rȈ]քN-/{}LToԚJiJ,![,")"9O2SB%g;>s%EjfQҜm|-}cHڝG-PQ.g ]sQتiӦiNN8СCkv*U*†hܽ2 غuL&[vرc >N4)ߏMW @7ELXmNJ?SYjի7nxbH4y2>s$ӧOHR\=fŊJ!FyeU5}FU sAyR|G:e[˟˓Ӭd)\$K27˶%pIp5hp&ψTV;yt8~ZDftmѢ+ׯiGGGĸիWnݺaaay[q^^۷ ]0[F%eTynyU[ZʷZ//:u?~\G^͛xIjjj:u֯_/͛WmƧV?~o[XKӳn?d|quj:̑-,X+gn[Q:F(8%%ҥK~~~ovz;V^N:D̀|9bnns}EEEuڵvo=|p6l ~zY4D\.u{B a;pt˗]]]ׯ_okkzRWb4*Jg? =b1w@dU;}F 䊕Wjos{iSJ"R]>vX3 G&͓Ȥ,ҳU✰GYcG޷o_j^}W_}w;jԨ|>K[s>,,lҤIFw?mڴiҤUkkk{xxw1bDppBظqȑ#o,/? >ڂ!رJ:rHI'6nK6l }**<333= T*wpp`MDDDDDDTJAWU/8^qjZ-eX)RJ +:<3c[):v8y^z)+WL>]1<ؽ{~$99y۶mk׮5rBhР:bQxxQ6olgggcc?>:}֧˗/ڋ<22:::^z5>>Dr3#FT^СCf*K%$spvv6KK%KڮYƐtJA 3j-HR`jo޼9x`SU۾}{33R2ի_r/D[KZLҨQ#G\ҐAީS'}:t(""%\U5rۻ!:::::U۷ǎqFkkkGG 6 >CZD/^4} }cbb|||J4AXXرc juI{@7j(<<|ʔ)*ʐ"""6l`**QM]Q 4%b۶me~zKKKiiiIIIWJe٨L&D ௿:uq6Vj_LV鱱+b'$'̙32LOuD"B ɄJ2,%%eH_/hJŋǏ_nL&~.>>U{С5kbP``˳KOO׾)@MZNMMdDDDDDDDd4 *s}k֬ZShh1gA/(*6mژ""""""""]@U,OԩBP(B*?$Ϋ\1&p>}SSWU-U=KPT0Z򵻭*`IDDDDDDDDDrTPgL[UQXZ*`IDDDDDDDDDrBN*$pVׯ_~l:NOO1u!DDDDDDDDD¶t0?~޾}EUm m6SBDDDDDDDd/hoVQV|h"""""""M]iTxQehS@DDDDDDDDDU_BBBfffvvZVLD"޾D{Iw@a'O|~WVVV^{'N~ܹYf5kL&׭[wyw^yq[k6p 3f߈#:wꪣR(u JP;sѳg'H;w5!!… ȷzsΞ=;Ξ=ѣG))) ,ڵ+'Nt޽{"'FFF~gΜ9pI4G޽owwizkܹ>LII7oj zCDDDDDDDDDdZr<ߙRbϧe˖/ǏxdݫyR9s櫯ЧOӧ7n_~e5Җ/_|rHTvQF>G >|XZb+WVÇZmAs""""""""""*=vڑ[vdee鞢o3eʔe˖ 8Ps2&&f̘1b=zdee;v>ԩÇu4JV9">//'O糳e2𮜜-9 PhP^Tzzz3mڴH${@h"\T}UݢE|iw.^-8_͂m۶͙3v^z/?SL?W_}?\088G'Nl޳gϗ_~:}={oܸ(=<{2eɓ' z{o̙ǏdQdmmY={T^ѱ-[TmڴѱTJJJfP2vڙ"""""""""|rӧOw]vLD"OOƍרQC,.sFVVVppprr>yxxQ%&HX_h"""""""""JNϑIII?͛7Kq{_^YS{@Ub jZYYY{z:wϔÇA XlooDDDDDDDDDD}zkܽ{7,,N: 4[u1J2<<իo3<4Q䔜RVD"eVVVjjjjj'OJ wwRLTqqq7w.!$"""""""""r\.׼dMDDDDDDDDDT899igmm}4Q)HLrkDRz|'@Ummm]<h"""""""""*Ә }""""""""""2'''++ǏT*MdžkDDDDDDDDDDU\.SNBBBrrrb^0DDDDDDDDDDUSRRRrrrNNNH$vvvFDDDDDDDDDDU'%%eggjZ\H$,,,̝77$$4aU^bS@DDDDDDDDDDUSC||B||L]F興 62@UQQQr|ȑ\8(z9疗5=`WI8N`_l?Ջ8@Q؛R`4V*$s{rȑrѣG]*ЫW={)/e:=cƌZjZKG`8 r_J? !p 3x<ZTp'AR [/ `VZUV3f"""""""2?À<<< TM>Cnrq?/]Ҳ r9J@5ls,m?K (FQ@5l>L{`*^k `&P6ۀP`OUﯥE~駧OۢDDDDDDDT9Νmkz+8GǏY^Y8|#FGоoUҢE.]=0zz` 5/`ȀfnXT,_FC'@к 4+L;}C@?_/#`VF0od/h:.{0/ގeĀ\eQG۽{w??m۶DDDDDDDTQ!ƏzJL}Դi.pxԨsKߏ;>7++3.._XQN%ȑ# *DEsn9ta`0:V<gx`-CC FW_,Lw!O,`+]t]& ThS`DÀU aE'mыW{;C3@>onU =9hРÇ|]"""""""| @Ԫj֦M֮m6 u(cpɧ6;tP)  \ Lg0F3d Zx5|M/O0 <)aٝv.@[ u8  ,7q + 8@Q-#_&6 I5V[p)-=N:]*H"""""""D!!!6dȐB'_PEݻmk޽=Y{ >lYZQwKo=*wvH,|z|B(e[ .y֙V 8.be7u&x |28'jIo@??0Rj`5|f>@܋s = 0Ḱpzm X c35=ߔ77"""""""t Z{z,)Kҭ,e2jJ@߹0(gZ0i@@ |vch}U IDATⲘ ^1w>ɂ=u.r |bg{ pz z; 3 K1iӦ|:Ve 3A \N(F6zZqhaZM64j(D9U؂-]/ht \Ys oY7 _@u n֬ """""""c0l gQA`>_W\?p`I'Сï?*@g ]Z ,,- vm` s>$j@4pNpP]` h${xǴ'Ɂ`! ? M0 (>`~5/& >X|gZ`ϧ=>>o.U$˰a;ADDDDDDDUPw@2dȐ!:_G,x{{?RYBͿұQ#TZC 9{@  |͛Ϟ=߿Y[ -[/#HVM]Q 5k6mjaavZ???gĉtG)H 6VX;fKDDDDDDDDDr*AcjgkbbbQx?+ұ2~M4mMS"Ѿp_}~)F'Ӟ{:w S~no`z>>!&)ۚܔ]tDqqqwvv^tҡCgoooaaQ^*;;[3ʕ+oL&[34W\vo߾vvv2Yf;wԾ#G|M+++++v;vL:88̜9{kI!!.\hҤIQWG\%We?{wWUq}PP0awMC0wSlѴWc98NJc5K)(x^|Ϲ6|U׎.X~sOTzk>_V ~dr^YنU|j~UaߊC{l@;_V뵦ZBLΎܱcGff^ׯΝ;O>f͚Ç{u֥Km۶/\055511Եk׮޽{gff߿Ȑ!4Oo}Aeggggg0O>iii̙3'11qȐ!ƍs Ɏ?kթSk5Ăޒ6)0],ly*Goso|yYmd/I:S{{wθp4JxY{}5C`7n܈#92??:yiܹs~]u떕%m۶}ͽo+bz a=:wl;q 6,[̴S CժUM=8'Ǝۿ]ܽ sF">*:yW ~b6* Uk<FcRRRVUf0 C͚5-]v~{mc7nhۧO7oVe8sH=zh׮]67~a,,fu{> uۅ"kIUꖫH71>x7{x9f5jXwss+,O8a0_" syU,o+W-Zp.j=J V+dzɌ36mԨQ#s˞={l\VZG_ȑ#k>>>v ח}DŽ7m+&&ƥgIV_Y{N2~M+=3;< W.\{]ܼ-[}]FFF :}֭[/]Բwɒ%mڴq4RNۮ\rܹ?pdd2~ A+t0ҏ_*{U A+J:Ϫb ܲ^J睒߿3<;geeV92$$$tۻ{K.=zwĈ={VZ=$-_ʕ+:)9sHZzի-jժY __̮n^aڅ7ιU2nY,wvXۿCI^O>p^R{*\nnyۧLq,K_OGٳWΟ?{חIRCʴmXJrRz`0ʨE O@ř6mjyk +Jݺ [Pa[%/<<ֽvIN{Μ'\.|ĈvqƎ޻|l_gOo^~9y$ۦ$HׯJEN n6v'F㯿?$''DGG[}sdey^(=YY--__I0`g-ףH~IKe-oi4e4v/ʿ{)oDIY2y!ۇ#5 O|||f͚UbZүYYVxb_ nn~Mϒ*xxH2:.<)xe ʿrL )`5%Ǐ/^% vlC ~<`4OddӨQjʳXXXx[Ŋ핪WpD=Q *&)[\I%<:u + N{b΂lTGRڵ*Zv˖5 ;3HIY7h-UdUcu!MŎУFXf3gddd̝;'(qHIxT0O$߶ջͷ7|7Yv7|>aá l4''=#MK'hR/jKu ic5  vaGz_|'|믿V^A/Bhhh}_[ 5GE~͚9%hI᯾z̙c۶]>޲;$]ϯ׬Yh\-U4FzL:(yKϥJhm#EH]@d'.rՀ4$.A$.A$.HٳÆ sz4׍`!2 oO! ''3>>>C uip?[}, -k${zzrȗ_~c"h ׉͝;w^^^7:છT&L0gΜǏXߨ5k"3 K, ѣǏ?h5āqqq-ZHIIqXܳgc?[Qc4iM޺ܵn^K֘2ɡ3>W__rER~?Y|_ Jڞwr<&Nn4cf7ߚ5. xw}LxɏǎY-qAM=99UVQQQ|g. `۷o{hbCݷo_fff>}c5e.cڵk׸qܑ#Go߾sU+"g>Ԏ׾_XΧO59uj$Ә.t/mز忕qۢ]_سGn4\z{̧ӨQ'۵֯_S.l1TOі>)S#EKXJrRdOxEKJJl)[ l[,N2RSWv@+E&K T)jWy]R[ʔKCV~A&)O.--OT歭.IMMgEgr}+W̙ӧOQyO:8wrMHH1#˃KX0=O_ԭkyqХKE>2]g{9ub7vJJOO7nS]+KHMFI\,%*A,~tV]4w50i̞E:KO_6vʮd~7jS4VRQ+;D*^-iE{6&Mrrv_|qE'=p}Ze]zSO=eբF1*JXYJJ՜ޝb*XQsjR ׫I9NyW\ㇼ<9/,oj_P`ۨeoN=p:kTK]R[ з^gZzhodOÆ}Q]䱥ze+Bעa{^k)<{yMPPPnn3W'-ZnǔN:V, ;<رc!!!V. jGl}c;oQpeIJ7ԩs//?<aIe;ެayf0ZT)rLNcΕS*=*,IZP,oXحguLi;e밓blb!e+BnR|G'Jz^[_MώTǙ3gMw$MѣV2~~~VG\}^ 1*%%g^={y ̥ R:uY}5z44tIf_ {{WPpYۚWVjI۵a %3_ޣn?+?0Ϧ :̧XG$;貕|GJz^J\mrrrN#\e9hŖ˗/(˗;SJp`Tٲݭ[][-Omiqf?Gv6ػ Weg[Mtw?ri7mUU3p"lriذ5yJ%&[KK,8#+WNHٽe(yV(XyOmjs-k׮m֬k(^OFٳۊ+z/sG߫Wڵk>|xݺu3fظF־g֤1Z_}we?5):n mwGu[Jz`X7뭴_<~aaϬI٩q͚'Ο_=[ϰQswؤ{I#"",X0|p4B*,HSrVHoIh)JʗzI:i=eIsk!I=$I˥J+_8Wn.} (x2e+w uRTmR{C|I˹y 0i66:k֬ ~'+Wlܸ˲Eu0ʘѾ}Ul2%%eLximG>]\}ʴ?wso:ud =~\kN@^ihx{յfuNJ>x ?=+۸o'{۵زէLǫ?w͕'N.qӸUe)VԽ#IIRPDZ)5(JR{RJi5#K,Yti/->K"'qI,bl-Ci[|Ga*iP ޗ>5\6i }%(jIOI= VXsapn X'pi̅%/ͥ[ <8--m^^^m^?E % 8̙3͛7o۶̙3ot,uƝ 111++U8vJN^Ç۷oԨQ7:pG k@Nt9'/j|HN^&ٳgϞ=FGt[<54et.g Wp24,[6UsnԀmNn$Is=/}%8ZurtƭƝڿeIqN\`0fsrrBCCcbbf͚UB%K?@Gp]V8[:nܯ{(n !!!IIImǤ.!!a̙mSNw۾sͧw__{?;Y^^ܹs?s///W_"// &뭷ުUus݆5MՐKlj4UXܱ]u Ò%K===}||z?Z 0q`nvvv\\G-RRR'Y;h%nj|''j***)\zX :::<<| fbwzذa :t)S:䊘nZ:t}233gsh,ss8Ю]ƍ92>>~ ˡCs7o|y~:ׯJ IDAT)kDOzt}gIAAA}͠\57o{ngrSc?رc!!! 999NYCY+e4o݆/!tE=zf͚WPP`,ʕ+N<{$itILg999l P-[œoŖ˗/(˗;%BkڴeF^EVj)ٚڵk5kn=ztdddƍWe˖˗+ %5jwϞ=VX[o}aʘ;z訨^zծ]֭1cƍKWRDDĂ ǤR#͛7`zy !pt=꫿ z77hetf͚ܰaO>dʕ76u7[]27000555##}UVmٲeJJӕ(...---%%őɕXRwX"===&&Ƒ} N\.66։T m3ғRTY/=*myitTY K_ع_6y)jM.C\ώh0a©S^}?_~pG0%I)@drJ_I )Cz^6w&-NJW7v(=bwԒd,g^1)E:%͓>,6O. 6on?1Έ 3 kڏf'+iiaѲ]v9>H- )ΰ}Lyri ;ܾ"87DEE.[`ؾ}{߾}=<<5jpsoSYQkժ`ˑK.mѢGջw?Xfggzxxh"%%F5j>O>?]=p@v7n;r۷_?22233sǎݻ>ڷoߩS6lйs#Gc,?넴Z+ yj)M{ԕ*JNgKJUG\O>d͚5Ӵi *ddd̞=g}caܹqqq]vu-++K@07 SN U. &LK/'N8ロ?z3ܛhѢEYn4nܸ#FXu5k:%U%8dKR#c&-*0tRS)OZ*VIMmXY !u*Jҟ%)¾۷cǎUTiٲ.]n-]IΌۢjժ^^^3gXO>BW~ꩧ,{nj?^|ӦMƮ\2??8͌wʖ7>K2Jaid۬$|9a,Z_&?/Sǂң}]ңi̵ׇ h//MlҤɾ}-FnnnO, m5N:'N0];v,$$`?''j񠠠;.\nݺYfzQFO^~^A IsMIޔ*ٿWzI6ԽhKu9 耀q{+ѣG-o9k+((:|*VX|z͚5ѣO^x?tR֥1r/qҳ[tRd' u@9ؑ{ӋܹsgppC ٳDzeժUO_xe:ud^|y9ëRJxxa֬YqF[ܼ%8J8i@Nj`Hc?Y\8`ζQE[K;/lJLL4M6uww߹sG}n{gLҸq'N\rѶOOLLٳg};[5z訨^zծ]֭1c-y𸸸N:ggg?s!/ik$oҟ!m'=-EH|i۶-O!RG_:"-K+m;\j/REKVgHNN}Ç͛k׮/ݻe˖bcc`0OJϝ;7f̘Koo$6xഴ͛7{yyb}+78{l-Zn=sn 0)))N\˛;wɓO0aœ9s?~c-[jԨѰaC'Fszg d?dȐ볻`͍Qɓ]֭իW5*W… Y۷o۷GF̽vѳgOf͚-^rwСJ*UTر ,߿͚5G]V 84hPݺu+WX-;22fqqq-ZHIIܪU(?17^\ti-<<f͚˒)ݺuҥ˶m.\hڵkWttt޽333?dȐ'~>A ЧO4x̙8dȐq ?nڴ)//o-PF׌h4v}8Ю]ƍ92>>~+_>&&ˈ$|g}v?s>}~]vJ 0`޽}Ѿ}N:aÆΝ;9jnLLLjj;5?a„I&UPN}ȑ:,[B =zذaC@@-K;k{0nܸ#F\sd~~]wuIӬsZ[r׮]ݺuʒԿm۾޷~W^1EգGΝ;[N8qÆ ˖-3|)PjUE@@@AA-2hР7x'-#沣\g[3f%99yѢEI^qv\b0Ʋ?I0a„^zy;өd[b.u5kieddt=;;ac9~ۣ֭G;9-o}}6m\} ޽{CBBڍF{N@.N8QF Š+^rE͛ׯo 1%F}}}nj۪U\]͟F777Ӆik K+RveGeHo|wu%//E3xyy/ժU+k&$ Cvvv ,uֿ1i׮]ժU_|6mXFn ̙3 Α[nԩӣյm۶Zj3lTqĈ|ow+WsY;rnnnܴ'NԩSDz@ɓ'[X26/{MǎW^ʈٖرc!!! 999\v̶(,'N+9 .[k֬Y~zhԨQ6aI@[uUTqz4iӦ&%%>P Xb3f|ݺuwssgUѣG-[9b)cW%=tcsU:wA{c.1cnRy}}}mYrի7k֬G>}zŏ?ҥKk5,''hp;}ʕuEGG"[4qĉ'N:Jc,ECrsslywmiU:O?5_nzҥK,qʹ.]̝;ױ剪}/_^ M6u|V*j*ۧ/^vٲek-1_S*UÇ f͚7Z]Yf1w{'lڴ)((nݺuӧWZUccc7o|cωgyw}]r:wݽ{¥K=;bĈ={VVT|?W\iWxSV{xxO&MRyy*{ѣGGEEիvڇ^n݌3,s ,>|oү_gyfʔ)7>qʕ+-?g[ٳg};[KשSPww?cV͛7`ۣЫWڵ+B 6,::cǎۇz6l؍j„ M6}GWޱcǏ76 [jŋ6l/\?_~gϞh"nРW_}?hѢVZO=TϞ=m[vTM9){ԌWZe˖)))Ǐ=...---%%ŮMLLСc=VzժUg͚{5lpɒ%W =$%%O}QF```|||g̘a9fŊ111G ;Ƴ6ujeiii7oѱ֙3g7o޶mۙ3gXpr%Jeo[7jԨnj'.A$.A&ܤIr&7: pwۇׯ[_~TvȈp=䄆̚5Y t]ln]v$̙O֯__ҁ>?e&sqMOHH IJJkVRRw}0sLp{_xᅰ0~ NpayyysΝ礤Gyur6<; /^<mՀԧ:vr͛/?.77s޼NuRZ~}LLLiӦٳǜ3gݻ7&&&55YqG|7->`C 2oM#Gݸqׇ5kf9zÆN~3˖ǙԺ.Z{9'OYn5ѱƍ+^REuСe˖*T=z x4iّ^zO?/ݻwϞ={Ѯ^kK 1bE^?d5رj>rO|GkXbW@@G}?> (>&(((77Yؑ^fͰaL͚5zI@Uɭ$\y;),CԶmjժIjӦmÎǏoРeK ˱NGyez~ݻwiNƃ2݃[_*X#,kw  >ܪӱӧOZӧn޼J*͛7`۷pt׮]cbb,Y / K,}]-k6iV]w׿ïϾGun*907...---%%Ū}ذa;v4>C?a,ǬX"===&&Ʊ N\.66։BLǖ:z|ٳcƌ 6mԩS5j4f̘_8QrNHH IJJoki+eHIƫ{)mRRRHHHBB -[ݿۥ ]n]&MzaٳC֭[׭[7x'ȸ͝;?cRI]TnׄXRKiiw0aB^zZj|?gG vYo>==!ݒLgw^3iydg޽_>'-[ZY6ݖxxrϞ- _y̘gZZ-b_ɭZ-x5lzTE"u6Yv#yHͤeFr֢Gs)h}R+yH- 7 Sّ>|pppeKppC-ls߱Sy۶Y H}ߥ3g]ˡCs7o|y~:I!k111v]|#-}oGAR- HiR_" ,e7ғR-C3_zXJrRݶ*&&&55';;gΜRQF%&&JZs1ީSSi#qׇZ ް?eK\Fe jw_Ƿl/vmk{xGDD5EJK'%H%_zZ4ֶQ+`O- (%5YiծXK)i{ִR-ޖJv^m]@H@W^k!);ֽ{zڻr#jv 0@٣G@6'M6J#mw}J(IKī]UGWo̧WKO]*JZ,(((77 aTrooѣ;5ziәhTɭ$V[t!XXXp׫-"]5% R|zO["_T]dqJz$iE IǤb8O0lbGnݺl9p@z-# հrq>#mJ-CS)_ ]>YtIMW\Gؑnڴ7|c_?mr.7w|BCϾ<<$G6mԑKJ޶mY"7RZV2#ɒ^EVj)մh ֮]۬Y(9bĈ>,22Rڵkxvuޥ:olˬ&MJu5Žm߾{'JX`m"IݤR7)Q_ Y&GH=jRIrJzΒ]*voТI#ɢ()_%ՖKe.f޼y cp+t\\\\\光ȑ#w?󙙙?<<<_7O٤[Ŋw_>69ֽUܸgΖ%)LJ_j/->K"3eIRC)Hz_֕^K#,JmR TUj)Hx+V1\llW-u1xഴ͛7{y?{w^Uu|m! "p& h/(WbE, K0]ELR|Hu`qj8ʕz(J !\mA/N@kogꮥEDܪO>ر\VPsT'O޸qFWa]J馛}oր:SVwU$-Eя?yGy*j4t8NߨTw,@h@D5׿.]p;ޯaʿ={ƍ?={L7LPUg9sիװa޽{[iii۷o4hPƍO<kvvvӦMիw>'.]o߾7[駟hϞ= شiS~Ზ;j۷8tɹ{ソ/W\qE=|rdggw}Æ چ ⍛6mܹg?y?egM8񪫮z7>{߿馛ʍnݺ|;'N:thY 70wÞx≫*/-$*?'8p`V@q~|-Zڂ` 26m{Ν;WyA G@3fڵk,ӟ_J aAp{GݻwW5Cڼy5egg'P̜9s4h4hPUWq teUP3 B @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @h@ ! 4AB @hH{j o@ ! m۶Uw ̙So߾;vٳnݺM6׾iӦjWGԩ5ٳg˖-Qp {---={6jԨ[nYYY۽{ vYnR4GN:-[8p`z;s|w}~ё~0uM_sJBTdɒ>}deemvȐ!/r*TR,AՎ\V9rd222:v8|u%{ 2M6mڴ:t￟ػnݺǷnݺE߿?//Gm۶m۶m=>wS'OKpEQn*q֭[Ȕo޻woE{}衇n{ T&=_g>svi3gμێ_N/rvv'o~s3g~o۵kכo9==aÆ#GԩS^^^?ڶm[q׿yW~{g~C_;_ݎ;(JrLwǎ)п/k׮}FQt֩S痿e|έ7|sm۶̼K.\؛|͛7=sȸ,XػiӦveffٳk5jTb#FdeeM:uРAgqF⼇:E/!C222:w|w駉%%mŊkժUV⊢eرo:3Νo6mZݺuEѣ>gϞ#G8Wʘ:ujnnAN8O={w֭gy?jԨQE}۷oE5ڵkW*U|ͧrJ޽[nݺu޽{gdd|ͩ[xPQ-Ŏz!ڹGᬳZxM6uԩ\ ^`A˖-:g?!##eΝ={\zu|>[bEQQWZեKᄏI&7xN:)o}k˖-=#8pG~O>7mݺ5Qk/^s?effV<=?lٍ7֮]{׾{=6mt˜;wa'tRAx㍫zܸq>7lp׮]M6-[d׮]w9sy߽Koc@'q{ ',_~ U^'v1ũU)zZxqii7xU.qƽ{cg?xgW.۷~7ٳ?~|t>VZ=ӟ}Y#GN6߹sΝ;͛7cƌDwp 999^{mޜ_~y֬Y3g\rA5jԒ%K=z#R9GGBB[~]wUTT{c6,~s۴iӔ)S vպuQFׯ>>}ҥKoߞ޹s!CQ\mQQч~X^38kꪫ'&;o7(ڽ{}3lݺA1nܸݻ{ꊋoze]~/~oٲAm֥Ks &N߿ܘ/ԩSoo~]tIf̘1cWɼIl۶-%^z\jժU 0tW^y%vҥpٲee[%#E5\s.Y䭷޺/_>mڴxWeц {YXXf͚QF6oܷoO?=??{/뭮'*i|,ǹ[PPдi(סCO>9~>bĈΝꫯΚ5+1cƴhb„ e[\ySq5srrvzuו̙3GI}'9FNXQ/|cجY 6\s5+W*wFѱc={wܑs5z[n#WԜ9s(4iR&O7}>S–-[&fy]vY={\|y|{ٲeىݺu[n]{֬YӫWĖ^zYӧOC޽{iyveъ+]o޽S,_LVRW;rrrEт ۬Yr%%%풒N:VT?~|ޣVZZZ͛GG4I'h6l[VǷ+svUzS,PkCW(ؓ.8/++iӦEEE{]d_ػ}r5op 6lE[lyZzzz?#N:F>*s7n\zSI&IVr>9@R (c;v())yꩧf͚5nܸx׭:cƌzh֭{}͛2=VZ=ӟ}Y#GN6߹sΝ;͛7cƌ_< )|g۷$MPכ\eѸqfϞOر#//o);~G}t֬Y[n_}*2OPyi@bIVE;֭[WnSx3flذnݺ:uڵkWv|0}Kn߾===sC 9S󦢠`ĉ]K/4u^{-ۏ?K.7|[ou$MP{j+s֯_]w޽;++kرÆ |%+ٴiӔ)S vպuQFׯ̙EѤI6yb̙3{ゥS&6&ϬA@:vs˫LqGxj6l8f̘-K2/ǻX,>vXOTT$l]#Tvj&4A|]ZZzgbj|=mڴݻWK)$_7nOzU 5'C iѢEuU@QlkٲeٳjgM4iر[5ÿ~xϞ=C b9@O6m„ uԩj1@GEQTG_!ܶm[bk,+GVu@$  @h@ ! QbCuo۶S%+mVrcy++Nw jG_:kXPeb'Mŗz2Kpp,+(G-V袋۱XlѢE^zi˖-۶m~ă7mڔۮ]̞={M.#}+Vׯ_VZjuWXU;v<̹sVG[\\}ڴi /cƌ3fLqqq̛Ķmon\bի>pUVZjC}WRLnnn.] -[VvU2QH~Q]s5^x%KzӦMwUmذ!;;gϞk֬5jA h}=󋋋zr{M6h߾}:t?~#F(;~ܹY(3fL-&LP;|%7Z9''k׮]w]Y˜9syG8qȑ#n5R·:1͚5+1ݰa5\rʨrhĈ;vLٳgq9A͙3'I&%?lQo@۷SO=-,,lٲebwe%߳g˗Ƿ-[ۭ[uUɼGm͚5zJlիך5kh>}9ݻ'vi7ooWX;Œ^|$o%9 uS<.''gṹQ-X͚5+[RR.))ԩSjJ=jjn޼G}tDtIFaÆjڿ|2h׮]7ŒJJJ6t%=9@R󲲲6mZTTw%K\~剽۷o/ۨQ 'aÆm_e˖*>HOO?Aԩhc2q7y4id/.:帅 &>s;wo}+Sby^z{ޡCE%,ZcǎF_'|rA&qM2k׮/NlygS<[nQU\e ݻwQQo~:uc=cǎzj֬Yƍwz3fx衇nݺw޼y/|jժO?gk9ri;wܹs޼y3f̨Eg}v^^޾}:H$uU7nO>dIIɎ;OǏGg͚u֏?W_Q*Vn X,dU;#//oݺuuM<1cƆ ֭۩Sn]ve|ӧO_t;wo=wܼwk^w^бXaÆcƌi߾}Ђ$rbcǎ@uI5NF7B/AMjW f@ nݺǷn:UcA ?9rdje[X55B @h@ ! 4AN܉b۶m@K* 4AB @h@D(bءmv {+9ﱼ;_/f5,(]NY1 vW%88RݣGĖUV]tEX,hѢK/e˖m۶Y~}6mm׮]fffϞ= u&>W+VׯUVZ+Rl;vxYYYgyܹsjs-..6lYgyL2O?-={Eћo9xmfff^r% .Xء޼yѣ9県/xU%:'''///g+vG5xիWkРA7nwmٲO>mڴy^1cƌ3JMb۶mn}.wÇ8pUVZ5`C+\&77K.˖-+*($( /pɒ%o߿|iӦŻ*s6lؐݳg5k5ꠅUy}~sO~~~You=9@UIKcq?=܂MFQo߾:|Sn#F?wW_}u֬YQ3E&L(?~~~>xϛCӵk뮻eΜ9EEE}BwO;͛7Ƿ+sVXQz{bI/bO)3|(,Xпf͚-))otԩhjr57o>:AN:@#аaZj߿?]{k׮כbI%%%ZUEDu%L㎿HmƒZ X(T-ԲAa[SRk AqJ"+OP2Dzقm,#Fcgo^~ý99}rsrJy&ippnǎ^Eٮ.]jXsJƝ4JsOOJPy(4sf/^j>|l;1l9(ʜZZZ?~bxyy:t( @OOOqqիW{{{U*Uhh={6nܨ<1U`0ܿxxa^ׯ_/,,{ aaa#D6hkkGWx3[i3kzacd[1xf^PP`0V\gu02ArssF=z+,,6׬Ę/ք О޻w\9$k\vEQ\pF tiB3d\v(TLv.J 2l WM.A)@dgg\RE7&SNKK[l^wc69~e0ܘ` hKPhKPhKPhKPFEEww2 ?+@SqLh{ IDATKPhKPhKx xӘ'W:9t.93Z+δؓ/߫L/_2t,)*@Aظe۵(󎯯իjukkԀHPW(ş8<{L&Y}k֬)//ȓklڴӧI |MRRի}||mVSS3:x7/_uji[vVu:… ;wߦ'%%ݾ}h4FEE޽ouuvvĬZ/5F1S2nW?޾};%%e׮]{s玒vaaaF>)< !11ުkkk;v͛7l]άbIHH4MMMj:==}F舍}7zl>r^k*/)qÆ [ ^^OoY h^}Տ?[UU?&'?㝉Vgo)++3L'OT9'''--mrkQ(VV`-Kbb[h+W>>>}јݻsL\_@˱[+m߾]|dd͛7m ވ)wҚ-QQQMMM ȮoKoWXavf0k׮|<3w<>VSRRRSSA~íj][֐hJP~Ir^l? "… ökgh```|dZ;ɬ)-{{{L;vH{{{{n-Zd^tb)wT*C===*jBA̙͛5Zx*wɒ%2'̝@9hAt:ݍ7֯_o/Ho/_j޼y+WIQf?'OFJ[jkksB,XѣoYK.I[.^݈*Wde M&өS Ϝ9gZ+++ZmVV%%%'N|AEEc}!???{̡=--ٳ%%%QpF^nN3|+ϙ5*--=wjt >}Vzass 糲qfpKg (s*B~~NkiirrС===W^UT{ٸq,W say]~ݻ fgg),Rl68pmdddt^wlάQkkÇM&Ǐ333mٿfV+FyW?c{oUU^_Jw&Z߷od2۷SLθg@?}t:S%cSRR>O07xJoDQ_oݺ/˴#~twwwWWWss~W_osWZ^ziٲevj'NpKN9`! Tsɸ课׿tKcbb UWWgdddgg79iw#G{{{7)++۰a{^ ׯ_~{S% 3(@\4%(@\4%(@\SQd>zVqs)G7 <:XpMǞ̘E^%f|qeqHQw5 Җ-[خEQ}w|}}W^V[[[DFF:DQ}G,၆8?????{d2)?_fMyyTEl6''']gӦMO>NzAoV^m۶щMwGGGFFƛo|[VWWK{ݲsLEhZ-.\عs6===))F1**j~3&&fժU_~_h4lqetww۾)))vjlllll߻w;wDKMM 3NII oV]]][[۱cn޼YTTdrf,KBBBddhljjRc&6ZGGGllof#Gz];TyIɏ6l0 ނ _'|~ZVFꫯ~ު*^矿09qLdZo>{KYYd:y999iii,XrEQZkXoݺ%8Fη4??_ɾ裏ƌޝ`Leee ?'(_F___i-o###o޼iOHHFDDLɸ%mjjjPEv~[zbŊ۵3k0h)]vM䙹s(9Z*Buu/}WnVj8DPN?e˾ y\.\(];F0%:Nf%lPNi9d2 رCph"ҥK-KuvvNɸRrQT 2o<EfάŋGWK,9idf)-@ nܸ~z{}٦Fz{P͛\L2ZYYjl],))9qDWW***,? ?ٳgiiiEEEgϞﯨ())0ut:ИA{e7_yάQVVViisVk__N+..V8nvvӧZmWWÇm'f83;^r8AESu:]KKǏX,//C)..zjooJ ݳgƍg9J ;녅w!000;;;,,Lydfmmm###ocf+mtfZ[[>l2?~l<L ʕ+n9TVV&BnncyyyG~wFs\9ԚPSy{t:gwَ( .h4.MhNEJEiZ =0Wspw4%(@\y1---((h)))--- 0=/@޺u+++ CrrFt{^? ?///mhhѣG?FFF/7,]TT__Ӟ`G/]e˖L0x~sMs69c/wu!??O078Ν;ݒ`nYh4ܹOSbb )@ݻ?ǻ1!}ر?jݛ`nx^9~sVսf)O۟nc<^G.A.A 8^www4&3IգN;K9ziNL)9 3m:d,*1 #80(@ `466nٲv-bmm;zjZ*}=555 '22!ԤǕ';b'444{&IaV}}}~5k˧*pf999yڵ>>>6m*((xwk$7|zjm۶ԌNlo;::222|˗oݺZ떝`(*@jN'mpΝ;IIIo6QQQwom]111V/kFhf+mOoNIIٵkWcccccc||޽{ܹ$]jjjXXhwJ"O|AHLL|뭷ڎ;v͢"[3kdX"##FcSSZNOO3:::bccx ^o699KJ~,ܰa`ahh(((H׿W>۟///onnj h4W_}?VUU?ɏxg"}[L&ɓ'GIKK\dÚ'}x/jXŒx-5ڿpptJUFFG}4fdc*++!77WyMu}}}BB7""eJƝ(iKTTTSSӄĸ(++VtttخYFGG+Lڵk2_%̝@9OϩꔔTA}i+pkZmV5$$!?w~-[O(kȮpB魇ڙ5=_)YΆv2+e;rJy&ippnǎ^Eٮ.]jXsJƝ4JsOOJPy(4sf/^j>|l;1l9(ʜZZZ?~bxyy:t( @OOOqqիW{{{U*Uhh={6nܨ<1U`0ܿxxa^ׯ_/,,{ aaa#D6hkkGWx3[i3kzacd[1xf^PP`0V\gu02ArssF IDAT=z+,,6׬Ę/ք О޻w\9$k\vEQ\pF tiB3d\v(TLv.J 2l WM.A)@?y򤠠`ƍ˗/tv ###IIIV/g={ֽf5O۟ .,^öۀSN/+ {qk&9yݻ |+VXbE\\ܵkܙ`{^Ȉu֝;wۧh79iܵkwȧ~e7%ݞ_j۶mҎ0۹L+ܛ`y^o[WW'hhhXf;Rπ޻woLLȶm͛g4?>|ؽf_@/]ԩS.]ڴiڵk׿FFF79iZrɓ'ݗ `Npw4%(@\4%(@\4%<AEqiLfGo{w:rpӜSys gtɌYUb/Gp`:P~}] millܲeZwywjUp{{{jjj@@OddCI+OEwOhhh{L&¬>C5k֔OUy|fsrrڵk}||6mTPPS{Ho&))i>>>۶mxtwttddd˗/ߺukuu-;TQTV:Nr…;woӓn߾m4vں:;;cbbVZ_~Fј)WFwwH{o߾k׮{޹sGId԰0X__oD [oյ;v͛EEE.gb$$$DFFƦ&Z>fbuttƾzl69rD{ݵsLX܏?a-PPP^m|'?_^^ܬjAh4lﭪ WDVL'O*65O(^EQJ+%11֭[sk`|KKK쫌 >h9TVV&Bnncyyy/_~Jۭho.}>22͛ioDDDKK˔;iMMMQQQҖ qQdWx+V];F 󍎎VҵkdJ;r S))) TWWW^yjڮVkHHC4?~(?9/[￟P^{E]a…[a۵3k4000z SZ dVv唖M&`]]ݎ;-]/]bt\gg甌;i*!瞞J5 sQi-^x|dFf III:ƍׯחmjjj/_ ]o޼ʕ+Τ(3 ͟?ɓ'ۃjkk-9 ,xxA{e7_yάQxxK-/^TnDDDUU+qfp &ԩS]gΜZZ6++u'Ntuu >x𠢢B1㾐={ОVTTtѿ(8 #[N DWxeee;wjtbfgg>}Zvuu=|vbY8s8%3DQ9!??_ӵxyyI_9~xIIb 9tP@@WT={lܸQyc`ɹü_^XXx]A”GG)l686222:|;fFg֨&ɶc,ͤ`0 \2===..Ɲ`Leee ?'.@;zw}WXX(mYO1^L =ǽw^yyNs&Ip׸9{)-@pBF҄fȸDQTT]ep>s;p;w'(@\4%/vZgg5k?DDD79}IIICCC׿ݻo>/_,mݰag}}v  ONg*d@}}}JJ|0 O([/|sϾjnnO꫿oJ 09K/-[l׮]Zĉn 0#AAAә `.W_׿TstLL_|ꌌl&)< !11ުkkk;v͛7l]άbIHH4MMMj:==}F舍}7zl>r^k*/)qÆ [ ^^OoY h^}Տ?[UU?&'?㝉Vgo)++3L'OT9'''--mrkQ(VV`-Kbb[h+W>>>}јݻsL\_@˱[+m߾]|dd͛7m ވ)wҚ-QQQMMM ȮoKoWXavf0k׮|<3w<>VSRRRSSA~íj][֐hJP~Ir^l? "… ökgh```|dZ;ɬ)-{{{L;vH{{{{n-Zd^tb)wT*C===*jBA̙͛5Zx*wɒ%2'̝@9hAt:ݍ7֯_o/Ho/_j޼y+WIQf?'OFJ[jkksB,XѣoYK.I[.^݈*Wde M&өS Ϝ9gZ+++ZmVV%%%'N|AEEc}!???{̡=--ٳ%%%QpF^nN3|+ϙ5*--=wjt >}Vzass 糲qfpKg (s*B~~NkiirrС===W^UT{ٸq,W say]~ݻ fgg),Rl68pmdddt^wlάQkkÇM&Ǐ333m>>&=U'5k׮ٴiSAAӧO^#A曤իWl۶ftb}ёo._|֭^SEQZVt:i˅ viMOOOJJ}hڽ{~k쌉Yj՗_~_k4Fc6d\ݶn"}vJJʮ]{%RSSŒFc}}}Sy+Bbb[oUWWvر7oٺY#Œi4juzzoz|^ou0U^Rcq?   CCCAAAz_'߿|yyyssVAѼJ/LN~\%;YV۷RVVf2N<1#wSYY  ~ccc+++mFWZ۾}ț7oڮ---S2555EEEI[&$&&E]ߖޮXv54487::ZaJ׮]*yfy*|NV P]]K{_y[jZ!!!<<?8lٲ~BA^{5Ev Jo=<p@[[82ƛJYÇLǏgff&''"yij4VYNJڪܹQDd88 Lm7Źc ,#fmd 2 ,CH,?D*f!mt#0WJr[^<{ۿyrѢEӦMvЦ  +,, Z[ĉEEE3uKމ{ر7].:9е CPԂnuՅBŋh琍=@= H 4IquCB.nzՏ=X@wӟ-[Um|!կ~5{tU5tW;| +O@/NMMڂ.^8{.-Jz˗ӧk۸@?~AvºP(tU \]]ݓh;v hB @RH 4I! )$E Bе:/nຝS^ n/f,(ٶ-?~o"nAg'x4G\B]v= 2dHnnnuuu  :4###;;ڽn|P(qsW 8xi233333O^^^`UϞ=ӟ4++ܸq㍚}tUUUs6lXFFw^xoݿQG2dHFFƤIvٺk=}{'NcǎvW  йp8eO>dvѢEyyy*++|HשSL2x~>ϯ!QWWys7o3|8,X0nܸ}E{Cfn `֬YwKXzu#QMM̙3*++sss-Zfap@z߾"/ ^IDAT}3gΌ0a‘#GnȺVYYےSYYy]L2%I3'c={o~ɓFj'ONqgHUAwrss͛` vSO}W644Dƌsl={&[SSU5s=ϟI%id߿mϞ=/_oz p;XUw@H4JOO///5j޽{_߈#iiiׯ_ꋿn_9s&55&ӧOfdMwyg]]ݠAnxU I 1bD4_عsg={Ǝ~Gz뭎g/շoߋ/n9r]b[v5jԨy]3&ǵ_G~޽;7L&Lضm[2n@O<^1cU]EEE6m:{lCC֭[ׯ_dɒHײe֮]+>}ҥK?7oޜ1R_>ӫ.\z?Ν;w͛׮]=P8niiisq\ku7ZdɆ lpp8f͚]t믿~ӧO_pދAP(tUK+W#G~ڵkkjjRRRƌ_bСgΜYf;S__:vٳg?ÉW溉(--}?˗/_w}`K.7n\3g?ه~g'~oo6v7^jUyyysssVVŋΝ#c+}JKKEM6-t@APPPXaaa:oݺu'N(**m\ud@' ;qp8ܑڡ# CPԂnuD8l$ ܢzvutOhB @R|!ޱcԩSxo{IҪP(z5t6m|rKWZu㏋gϞ .fŊ^@WTTz `o ԙ1_?~Vw^{'?I$}zg6mZfffffcG=zh^^ސ!C222&Ms8?OVTT<  :4###;;t+tEEѣ5СC{g******f̘1gΜÇ'[SS3s첲EJSSӡC.\i ñcoOFO:5eʔ|A~~~~~~UUU n#322ӧAǏ} W_5*wÆ +W}aԷ7x+_J|ѣKKKӃ hii9rdIIɽA~~/_mJJJ^~}%\Cqqq'?ؾ"ѧ#rrr*++=xU'O\UU믿~… ۦNumYY٠A"s9sfT&L8rHm9wu׿hk$655}ݱ{Ο?Hoccc6K;'N/6nڴ)rcǎz*0f̘PaÆ>}:}dW#FDYn-55>̙3q{4lذSNEo/]wѮ/,]J襗^jiiisȑ#w۲k׮QF%;~ݻwq :qDZZZlK^^^8޿#nh#<[oř .;gĉ۷o5kҥK|/|ҥƍzժUYYY/;wnd{ ۷gΜףG*W\9~̙5kּ;cǎ={?|c#" (((?0 of֭;qDQQQW?ޝQQ;vlƍ3=%t(߿~~û@'ZolM @;$@hB @RH 4I! )$@hB @RH 4I! )$E 꺺 O@hB @RH 4I! )$*%%%8c")))hAuuu1t4իWz42R @jkkl:nnn޲eKcccZZZmmm.)[ԥKRRR> &dee۷1%%ҥKAj5AڧOsεvҥ < lii9{ŋSRR{U[[)BZIENDB`Pippy-76/screenshots/2.png000066400000000000000000000653401445132016300156270ustar00rootroot00000000000000PNG  IHDR8gVbKGD IDATxy\TekffEE=rԬ\2m4MQq[̽ŭ4s4MŰ_iK暻i((3?NC0 3,~ޯ^s5_nWJ/,"W.BB]*&hU@¾ iӦ~~~...]DDD)yG[qĻ\TuQm\lڵ~~~cƌ)4>|7|ӳgO}z```߾}FcbbŋE$11T+L+R,"^^^+WBjuj|9oczؾ.?\'KI\~IlS7o޼=H-ay'N|g>#GGҪrvvv3glذ'NhᬦM9RD^*"֫xj֬[{{?֭[{޻wF^V=|p&MΝ[z7|ŋm*)jP2ZjY +%m~kO+s\*[FP㵻|w TLvut2xؠ6777|PwyG9PTj`J0}V̞={O?=eʔZgggh4T-quŋommܖ/_Vȵk׬\f͙3gZ*`̣>Zjƶjjǎ7nܱcGf8бcǍ7nܸeK2x鳢gO|tFT/k kxl{5HcA?O>ܫIQlj"""L&r\Nڵk;\rl0FX^s tb֬Y~r /L.#aw裏>&333555""bϞ=k׮MMM-˜y'Jdeɤl%իt=--?AvvvK,RF1j?[ԩSmPmtiȑo=4ս{̪U޼y3##êZB c~Gן+*p?"ZITRvR˕[kg MuvWgEKm\nÕƍW\ƍ94hРzaaa)nBBB飴+00M6Ǐv7|j, nݺ۷Lɓ';99="+ Ym^]I ~> "Fu )u…*jʔ)L4|O?٦sQF-}oч1b j+\]]CCC<711qwsk֬bŊ+Vԯ_w1Ǐ߰a288^j"b*ʒ%Um/^qڴi[npVf}] Sfh42RJIIIߟ9sF^xqyddd5~hժU޽v:{ .t5<<<442dgEQGTia#zcK6T?p.3k_HLGkNXhݾJ.X&"׽F}FΝ;/[nɄ9~6USO:t>E<|C=SV\"6pv*nV֬Y3g"(;;{ѿRjZlYƍYC6rnnnK.Zb7|c,///ӕ`HVccc?ק~ZRݻw111:x`߾}#""ƍo߾ѣG5]v-z,X`DJ6}V(yE.]]SDNUϫk*g.\nO~}gXk7m=[Iqy-:uw<|)gc9sز0jsty 6=܈#6nh0ts utQgƼMƍO.`doSO=aÆ)^|r\UZRIZn=zhZdvvvE]RZH̝;F۬Y,V׬Yp+]UT޶m\WlҤIxxS>S̩SzooٲAǏ߸qc,X0s&Mm}*U*Uj߾Ψu=cTҤ:wb&T6SqƍhBy٩S'Vk0<==7onaÆt[֤I˗;99{69wܖ-[4Mhhhfoٲ޽{ ra+G6m|}}7lؐ33ST;vX~>^s [ԌUׯ[n_|Exx.9A6EbIJg;;;!J:uj˖-O81f K.ѣGVVr0`@|||Pjuwe˖_~eڵ9Ǹ-YDggg޽|h4n޼yjI&3g3fLϞ=W^=r{F%`۶m+`رc+R\@IDdO~5N9JzgbMLo%&}m׋Q>ھXyvܩ$qcƌ2eʔ)SQ`VVVΝ6`ػw+b-Znd21&ML<9++w޹[w S9?c}Q^M''_5xsծ][Do߾m_P!GEE0 55fŔ@Y*?/w{U#"botPgkT*S}J*""qqq[n}'ݻw5kV6mmy/ݮ Aȣ>矛k >|!!!F;WR7VZӍF[jUJ_|yQF=ZI%N4gϞ3gܿ#oZZ`%oذj ꫯv]DZaÊ:}ɒ%;vP.\j'Lp^Rvo߾gϞ˖-[~Cnܸa֭c)F<==ccc]9*~y/>`ß9Iq ͨJuO_u?m$v;vlv픜o1?,##>Y%ԩSnݚ3}GGEl`0رÜK/[%Y]lٲӳnݺou&"WEX$۷oƌgϞwL;~(je|ƍ3:?=V[{_NN.ŸtF,"SNtEyzz._!;v,;;gɒ%kժLV%"9s 2~׮]6T<?RCUjlq}=~طUo~'"$j..M5?o/%554;Wŋ>+8}7NNN^hƍ ESNf9r=\(?T\JճgO;;o6>>ު5XZEUVk׮fΜ7|ڜKT̿/~~~C ӦM+j PVٳgٍ;vrrr2oy6?TSVϘ1vڻv@ 6yB\reҥÇ;vlzz>mooo4ٳgN7nܸ~ڵ4NӴg*?t'鏿35ہz2҅huQD.5zɩ?e3Jɓ'?쳹z$%%-Y6uڵaJ/x ߫5k+WN.]VXqԩ"Ydo2dKjDIINׯ_Uk`yjyZSOmvܸq6muI9ݻGWREDb>>>_~^9sJZvkjj Z1f̘v]paȑʳ˝ō1bIIIGpӧܹjzO899mڴi *@{:@sE?TLU?ѭʼnn-3}v\ .>V3<==ѱM6bҥHɓ>`֭[g%feeͻ}Ƙ0 `SNVZ@@Zѣ9cy?;};cyO+`ҥ&Q;V" UeM 3<ϛI3tm쳵~qR2u*ZǽIi7T?Rwq#FQӳGk֬qӦMpĉ`NZvŊ}ݿ˖-\fϯXByh[hh"/8a„uY w}WZׯ2ܷ>))(3_gwpȑO?ܮBX;wޝd >K.ofrrabbb,j*;;K.IF|6mZp=f%*jر͚5+Ҭ=zXE Rj׃8.d·Gk\o6z^MЉHGWrfVjMֶm[''L`0<==233MvvvK.u떃]RRƍ'O\R=sԩSZ>LD5kvС;vlܸʕ+]ti۶>o۶޲ƾƍ?%ٖ-[{/+C/_mڴzp?䔔ԳgO-ӧȝ;wƍgV-E5rZip?=zoQ///S*Pzo',YlidED%.1?6mrssA>@9zjӦMΝ֓9tO65UV۩SN:H||رcwU{d49?ج\Z}MHH;ܹlٲb19-`E7nn0G-8j6mxbV믿z{{?N zSRRcƌҥիWӋ]U 4hРA"b05jTࠠёb۾}6˫s\\ۋ[ZSqhj8igtyCDFuAl}o5 Sl?CR[WXǖ-[ի׳gϜIAծ]|2===<<<**k׮͚5?~ޖְm۶-Z筷C %%e…+WZiwN7ΜAY&غuʱ`6mZ={_fNZngϞTBիW/X ))RTڵ˹5=q;udI@{ &XZe˗+ӟygyHM&oq%a Tf/ IDAT9͛iiijd/h4y,ѯ_ǧdWu#""JvRTq ?ܵ5^tHJJTݠMLvIuOsHVe bT;exܩʤ5ʶTDdYwCxzz*fhh3W^~rl2F-"G'|ɸ8eܹs;w<};'e2\o˅˗.% .>|i26m4{쨨bHR?W^-bacƌsNv ;7))믿T9::feeVU6lعsr{oVrrСC }ciСɓ333'M4x5jܹs'NleCŋg̘ѭ[5j^{/ ֭[ pBI-XT:l[EoG£6]V+jrwDknݺLٳgO?>..Nu7nٳg=<… J:ujΝjuPPЉ']sNaaaaaaZG[~\\\Z`HJJtҞ={֮]i˪ʸZqÆ ;x`ޑV*v %۷rӦMfͲ^aĉ{?~\xqĉU;ȨQ6mTvvv6m۶&Mz뭷Μ9Sbl`֬Yvvvvvv#/OYvmhh>[fYP^l]!gHAR?mL5Jv64T"R-¶Ie9`)d7nȑ#n*"9wVk0 ѥr(&&&88xժU~~~_|СC%>oܸqԨQ6%^&终=VۡCiV@@d:~4lp*jIkh4nRft9hZ''\]],X "vvvYIe5}@^|>[w< +O=@:;)N .SYFMhoxO%Ynl\%b׮]&IRM4E"rdׯWRN:k>r^V}YkrUV( dܒnk)jkժk׮|5o\DnܸTVK:99M6ۨmd2]v>dyCшZf4%3 >K Ԇ5WE萩Ӧ7Y=7kWogLLK ׽_:T^jަ&ݠI<]3b=N_˶JzzzG3cǎ?>csڲeSO='ԫWO$$$^/qe^_~ V ^.]4hР+W~/_:N-6!!ѣ"v^^^7>~͛74ɩRJ"2`UnݺuҤIR-)=|,!"sqss[x5KS ~HЊxxe7jݓ;gxh zmNLjԙIN17gnl3FqӧOp|TTT~ZRe_k\rʕ+EWM\hOݻwiU۶m[;;bhܸVZرc^9\J=f̘ l߾}…, /;t`[FDDXRWh,!\iW[.*ٳC]|NZlY\J0a+j\U8_~=((HyC,3LEݠAK.3h4Z4S˖-+*UzJ^~.!W͚5[t$''j0FQ/2vXl-k_ŞӫW)r7ߜ;::J98::*OV蘘سg˗/C/v@ÇdGGGN󹈖e,eڭ[V^CBBl>߻l씔Ҕ_( 0LIII"2gg`3@r^{m]ڸq-gE+ʋ֭[v !ʖ}uAimSj:T*+_2֭[n**,U-KW^'t2F-@veA, (]WfIzrt-@DDV.2XP:88OI/88ɓ'O,#SRRzJlQٖVR^k׮={+*_~YDV^]څXZDΞ=- )( ???Q}T TT}iP:W>Ζ̼yf\\w JKKvh& ~~~NNNwƽ(...**J鳙hhPn߾mݾ};***KPqDDDiiiy@@Y*̻*8})---W?hh(lnn߾3/R%ڵkŞ⒚PJjժ@@g4:+ QFuy&''_pرcEZh4y{{ 4wEO0F5nܸq111ŋ-_?!!A CjӦMi\OIIpFygtjNװaC//K.egg[2d2j'''B͚u:]HHHӦMq  2ݽHU@@9i0N7p@__b+$$dFyW<==6 33_~׭[qazo߾4>>ʫ4Kuܹϻw>|p\\ܱcǶmVHOOnݺYrdh( حlجY\z|U|N:F d*tLǎhdMJUЖ:sLiQhPTRZ C]8rgWFr c_3g޽{С9s3gXtz!C:uTrepСzr力ׯ_wj^D>+(ڵk[oeJUBhsN>}曒+gϾ~aâz}-^{ be6P(-VZ\UT)661Г&M}]t)%Z=lذݻ}ԩiii7o~/\ "?uDVZyΝsNo޼O<$"o޸qƍKZvȑ<믳f2 g3gO>`ʕ+?vvv?/^zj }y{osff֭[/]*ϟ󪝝];v󼻻{t=&N駟Ny<#F={<"ﻸ?{\<8iҤM:::ꫯ֮]G=z[a ի׃>("C i֬ـ:v[@PRU\gvq7oW<:;;;ո?~˵N+Bx曹οK'Ozjbb3:u$"wV]fdd1g/ԩS\8mڴLp(]NNNDGG{k׮~.P̛7oݵkÇ'VaK("E[nǏ6lؚ5k7ndʙX/H``7ʻε8&&&009[m1:`U)))δnZ}usjs^Uz@h"j9;Gˢ/Yz)SԬYSԩSg?c̘1?/w~ȑտ |}}}}}Ǐ믿*O:?iҤ?ƍ+ڢ*usQT-Zݻw2?KOD<<jggWXZ_/]4K8|Hwo+}*6l0f̘={]mѢEĉn޼k׮ѣG+{o͚5"q%K('N8eʔC޺ukٲe۷Ϸ˗;999;;/Zju-B;{@JHHHNN.Qœj]q7zY(?KP;w=\ƍ ]',,,""B9\򬾂;vlݺu)B @r1+|B@@yR S}]JE UA{Ÿm6ThmP^988:ŋ'N(x<`>Yf/\p)Kj+<M:.--akժU6e˖&)""" u,X͵y{{[2VզM.@t֭Begg;w.((n;U*U@@@Æ UVߵsFzzzXXXBB%ӂ1Fcɰ۷oFWE 嘻#ӧO..\Xt鳹*z@@9g2,שScǎ*Ud۷mfSj@@yQΝ;|Zׯ_vmNw`tϞ=kamf~!4o F)&ϟWT*UrwwwqqqvvNOOOJJJJJqF4W? 4T~~~QQQŘh2bcc-o\*Uy!{NNN]xzz:99_@@E3=N 4TTnhV$4T5j԰>hNWF B e?hOOϼ{6+`...׮]3ֻ}*U pM SZJ>>!!!33h4F h<<<8>>>999##d2L&KT*J,̝77<<8E޽Kp}kf| TLe:  **QgϞ]nEd{wؘVmٲeRR_Je'R8wޣ_D1!ҡoQ,HK|n,դINwpoE=yd%}. :]F ;;Hdb\_|(2C7V!22޾F]Pn-_oRsTSJ|YF뛖_⋗-DyTYH']RhJ|(Z>>%N κ!9|'C{ǍyH ޵+3%+xCbc ,." _69"E 2PXQV"EDDyAes+}/<)Y"E^9-,Y$J< r^VK *rY "E{ED"EDvt +z'@Wt[?aB̾}gVԴin5k>`[ZNN9+7 հaq㴮s~1&ޭ}NoV|$"/I,7mڿ+$|"s.ȳ"DډTE"wD1 g^CdH e]?+E{asNNuԘjZ,M $2迃9\;c=>+V$HHesrD>i!QDJ"yGg"w_q/RN"x:Z$Wn3՜e,Y#Ͽ_sݱ z߼K'*#,HOuyvLHg<p_n}d7bcL."uXvfv"r|*|N%) Ӌ$jKu=H+˪'.q`vc"繯::b?H }H<4yMdLDLRRR" ۔;/k~HFكw{`^u;W|'&$$x{{&<)/Heh"E%b"^+ڵ IDAT^"PJȻ"#"EnlcD'Dt"/8,2-^"CDf\gC]$*Zg"[LH{:""".4p_|h\kxO}5̚OՠZjLLh)nl9%ND6G$TD#o|>& j"DVx."ox|$2RdW'9+򢈇@"ˊPhwT_.޽{+ʶe,u֭ZѣGͻY۵kWJugE\*2lNxzz6jڵkq n̊ή^ziRNH!"ovIZjYYY]PntEb0vUUy|"2@Y["J_v @9cL5@1i_(}^(9@ܧ=F hU@` X4*VA hU@` X4*VA hU@` X4*VA hU@` X4*VA hU@` X4*VA hwYo+jhC̭ 5"ɖm\c(5D !F627bTcb@?x@T"$*¡%Z3C!Ѽ,;u羮<' !@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@!@qЫ/8hƍ{ghii\744l߾C9#>?rÀC8wk^~}Q~mۺ R__5xr\[[e˖?pٲerH}}}WW n8p`WWװaƍW[[3X[[;rrg **/!,J;>e;bwgK/4vr|'777Xb/o͗vKCCCgg{q cΜ9?8゙kB:::(S.z꩎jO2m۶s~zCCȑ#'N].~ܣg~cǞx/ڵkM6mڴ[oM0aܸqVZjե^z5׼;|vĈsݳu?/^bŚ5k'O/\pe>䓅 nذaƌ}2yѣGK.Ol'}ԩSǏz+W655]qqԔ)Sϙ3筷ZnݢE~Ϛ5k `s:wgvڴis-R_hѳ>;o޼7J~zW_}Yg]wu+Wo[[['Lp{zQ< N2N4iReꡇ]ꫯ~~ԭ:u]sRuK'Vf[ZZ֬YEqqǭYfR̙3n+qK^y啽?^W^{i|O~W?<䓍_͛?#cƌ\?yw 'JRT.>;vl5kUowyojjqp K,ꫯLU/!ܼyO~>55՞ݏ:G]}B0`@cccl2s̛os96og~K.1cȑ# RSS=lذ>W>uw˞|p֬Yc=g?ĉ&TU>_{AۿWFQz~?kjj佻!C6m4tH{{{z>+#|Ɏ+8pُ]g[[ې!Cz9{(ofݺuWZOMT_1}/.o4h?ݚy+oo{Rɏ=>/\dIzg[=~n=\?_xѣGya6bĈ Vy @BUo={_ 6l۶ǣ> (8N:Zpaggggg磏>:{*7o޼ŋwuu}+V4iҵ^3{L>}ڵݛ6mZ`^78w܇~/|'̙S oO?>馛/^\͖.׽뮻,Xѱy{o~3u9<k׮onݺnݺ?O;R=z}K,ioo5jTssgʔ)~O˗y^Q#F馛vUN曏<ʕ+SN9e]vY-['|rÆ uuu?OO_tkk7xc۶mr-rW_([{k-Z~}]]ݙg9cƌѣGN]*J;yTJy͞=g\.<^p7mTWWwq]r%ǏZZZ9sfvmE%@nݺ7ktUGp.⧟~zƍ[lyO>a„)ǀfsկ~u衇^{^7p]v@1z*` (v՗)D DDDDDDDDDDDDDDDDD (T*mpq@ B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B 7 qIDATB B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B BkǨqCaE&FHk%2)76W2&$8%iW  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H$h4  @B !@H|8084_50 yht: ð,>A,Rui۶krl6MӺɉ|>?>>><<~^eٶm8ap>ay}}u0Mqooo0 ///8|:u9L(IENDB`Pippy-76/setup.py000077500000000000000000000014711445132016300141300ustar00rootroot00000000000000#!/usr/bin/python3 # Copyright (C) 2006, Red Hat, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA from sugar3.activity import bundlebuilder bundlebuilder.start() Pippy-76/sound_check.py000066400000000000000000000041231445132016300152470ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013,14 Walter Bender (walter@sugarlabs.org) # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import os from gettext import gettext as _ from sugar3 import env class SoundLibraryNotFoundError(Exception): def __init__(self): Exception.__init__(self, _('Cannot find TamTamEdit sound library.' ' Did you install TamTamEdit?')) def finddir(): paths = ['/usr/share/sugar/activities', env.get_user_activities_path()] paths.append(os.path.join(os.path.expanduser('~'), 'Activities')) sound_candidate_dirs = None for path in paths: if not os.path.exists(path): continue for f in os.listdir(path): if f in ['TamTamMini.activity', 'TamTamJam.activity', 'TamTamEdit.activity', 'TamTamSynthLab.activity', 'MusicKeyboard.activity']: bundle_dir = os.path.join(path, f) tamtam_subdir = str( os.path.join(bundle_dir, 'common', 'Resources', 'Sounds')) sound_candidate_dirs = [ os.path.expandvars('$SUGAR_PATH/activities') + tamtam_subdir, tamtam_subdir ] if sound_candidate_dirs is not None: for directory in sound_candidate_dirs: if os.path.isdir(directory): return directory raise SoundLibraryNotFoundError() Pippy-76/texteditor.py000066400000000000000000000173171445132016300151660ustar00rootroot00000000000000# Copyright (C) 2015, Batchu Venkat Vishal # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301 USA import logging from gi.repository import Gtk ''' The texteditor module provides a text editor widget which can be included in any activity and then multiple users can collaborate and edit together in the editor. ''' class CollabTextEditor(Gtk.TextView): ''' A CollabTextEditor widget is a adjustable text editor which can be placed on an activity screen. The `changed` signal is usually emitted when the text in the editor is changed by a user. The `message` signal is usually emitted when another user makes changes in the text editor, so they are reflected in your editor. The widget can be embedded in a window which can be displayed. Example usage: editorinstance = CollabTextEditor(self) scrolled_window.add(editorinstance) scrolled_window.show() ''' def __init__(self, activity, editor_id, collab): Gtk.TextView.__init__(self) self.set_editable(True) self.set_cursor_visible(True) self.set_wrap_mode(Gtk.WrapMode.WORD) self.textbuffer = self.get_buffer() self._collaberizer = TextBufferCollaberizer( self.textbuffer, editor_id, collab) self.textbuffer.set_text("") self.show() class TextBufferCollaberizer(object): def __init__(self, textbuffer, editor_id, collab): self._id = editor_id self._buffer = textbuffer self._callbacks_status = True self.has_initialized = False self._collab = collab self._collab.connect('message', self.__message_cb) self._collab.connect('joined', self.__joined_cb) self._buffer.connect('insert-text', self.__text_buffer_inserted_cb) self._buffer.connect('delete-range', self.__text_buffer_deleted_cb) self._buffer.set_text('') if not self._collab._leader: # We must be joining an activity and just made the buffer self._collab.post(dict( action='init_request', res_id=self._id )) ''' The message callback is called whenever another user edits something in the text editor and the changes are reflected in the editor or when a new buddy joins and we send them the latest version of the text buffer. Args: buddy : another user who sent the message message : updates send over from other users ''' def __message_cb(self, collab, buddy, message): action = message.get('action') if str(message.get('res_id')) != self._id: return if action == 'init_response' or action == 'sync_editors': self.has_initialized = True self._callbacks_status = False self._buffer.set_text(message.get('current_content')) self._callbacks_status = True if action == 'entry_inserted': start_iter = self._buffer.get_iter_at_line_offset( message.get('start_iter_line'), message.get('start_iter_offset')) self._callbacks_status = False self._buffer.insert(start_iter, message.get('new_text')) self._callbacks_status = True if action == 'entry_deleted': start_iter = self._buffer.get_iter_at_line_offset( message.get('start_iter_line'), message.get('start_iter_offset')) end_iter = self._buffer.get_iter_at_line_offset( message.get('end_iter_line'), message.get('end_iter_offset')) self._callbacks_status = False self._buffer.delete(start_iter, end_iter) self._callbacks_status = True if action == 'init_request': text = self._buffer.get_text( self._buffer.get_start_iter(), self._buffer.get_end_iter(), True) self._collab.post(dict( action='init_response', res_id=self._id, current_content=text )) def __joined_cb(self, sender): if self._collab._leader: return self._collab.post(dict( action='init_request', res_id=self._id )) ''' This will send a message to all your buddies to set their editors to sync with the text specified as an argument. Args: text : Text to be set in all the editors ''' def __set_text_synced(self, text): if self._callbacks_status is False: return if self.has_initialized is False: self.has_initialized = True self._callbacks_status = False self._buffer.set_text(text) self._callbacks_status = True self._collab.post(dict(action='sync_editors', res_id=self._id, current_content=text)) ''' The text buffer inserted callback is called whenever text is inserted in the editor, so that other users get updated with these changes. Args: textbuffer (:class:`Gtk.TextBuffer`): text storage widget start (:class:`Gtk.Iterator`): a pointer to the start position ''' def __text_buffer_inserted_cb(self, textbuffer, start, text, length): if self._callbacks_status is False: return if self.has_initialized is False: self.has_initialized = True logging.debug('Text inserted is %s' % (text)) logging.debug('Text has been updated, %s' % (textbuffer.get_text( textbuffer.get_start_iter(), textbuffer.get_end_iter(), True))) self._collab.post(dict(action='entry_inserted', res_id=self._id, start_iter_offset=start.get_line_offset(), start_iter_line=start.get_line(), new_text=text)) ''' The text buffer deleted callback is called whenever any text is removed in the editor, so that other users get updated with these changes. Args: textbuffer (:class:`Gtk.TextBuffer`): text storage widget start (:class:`Gtk.Iterator`): a pointer to the start position end (:class:`Gtk.Iterator`): a pointer to the end position ''' def __text_buffer_deleted_cb(self, textbuffer, start, end): if self._callbacks_status is False: return if self.has_initialized is False: self.has_initialized = True logging.debug('Text deleted is %s' % (textbuffer.get_text(start, end, True))) logging.debug('Text has been updated, %s' % (textbuffer.get_text( textbuffer.get_start_iter(), textbuffer.get_end_iter(), True))) self._collab.post(dict(action='entry_deleted', res_id=self._id, start_iter_offset=start.get_line_offset(), start_iter_line=start.get_line(), end_iter_offset=end.get_line_offset(), end_iter_line=end.get_line())) Pippy-76/toolbars.py000066400000000000000000000042751445132016300146170ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2014 Walter Bender # Copyright (C) 2014 Sai Vineet # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA from gi.repository import Gtk from gi.repository import GObject from gettext import gettext as _ from sugar3.graphics.toolbutton import ToolButton from notebook import FONT_CHANGE_STEP, DEFAULT_FONT_SIZE class DevelopViewToolbar(Gtk.Toolbar): __gsignals__ = { 'font-size-changed': (GObject.SIGNAL_RUN_FIRST, None, (int,)), } def __init__(self, _activity): GObject.GObject.__init__(self) self._activity = _activity self.font_size = DEFAULT_FONT_SIZE self.font_plus = ToolButton('zoom-in') self.font_plus.connect('clicked', self._font_size_increase) self.font_plus.set_tooltip(_('Zoom in')) self.insert(self.font_plus, -1) self.font_plus.show() self.font_minus = ToolButton('zoom-out') self.font_minus.connect('clicked', self._font_size_decrease) self.font_minus.set_tooltip(_('Zoom out')) self.insert(self.font_minus, -1) self.font_minus.show() self.show() def set_font_size(self, font_size): self.font_size = font_size self.emit('font-size-changed', self.font_size) def _font_size_increase(self, button): self.font_size += FONT_CHANGE_STEP self.emit('font-size-changed', self.font_size) def _font_size_decrease(self, button): self.font_size -= FONT_CHANGE_STEP self.emit('font-size-changed', self.font_size)