pax_global_header00006660000000000000000000000064132361121150014505gustar00rootroot0000000000000052 comment=352ab2fa5f32cbbddfb66546c974edd3053b1b70 anki-2.1.0+dfsg~b36/000077500000000000000000000000001323611211500140575ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/.travis.yml000066400000000000000000000003021323611211500161630ustar00rootroot00000000000000language: python python: - "3.6" install: - sudo apt-get update - sudo apt-get install portaudio19-dev - pip install -r requirements.txt - pip install nose script: nosetests ./tests anki-2.1.0+dfsg~b36/LICENSE000066400000000000000000001061111323611211500150640ustar00rootroot00000000000000Anki is licensed under the GNU Affero General Public License, version 3 or later. A full copy of the version 3 license is included below. You are free to make changes to Anki and distribute those changes under the terms of the AGPL listed below. If you would like to contribute changes back to the official distribution, I ask that you license your code under the BSD three-clause (no advertising) license, as portions of this code are also used in the closed-source AnkiWeb. Before sending a patch or pull request for the first time, please post a private ticket on our support site that states you are happy to license all contributions you submit to the Anki project under the three-clause BSD license. * Please see LICENSE.logo for the copyright and license of Anki's logo. * The translations are under BSD copyright, as mandated by Launchpad. * The icons are under a mix of GPL and more liberal licenses; most were taken from standard icons installed on a Linux system. * The anki/template/ folder is based off pystache, and a separate license is included within. * The Javascript files in js.py are subject to their respective licenses. * The SuperMemo importer was user-contributed and is GPL3 licensed. * Some third-party packages are distributed in the thirdparty/ folder. Please see the README file in that folder for more information. The AGPL3 license follows. GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 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 Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are 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. 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. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. 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 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 work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero 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 Affero 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 Affero 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 Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. 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 AGPL, see . anki-2.1.0+dfsg~b36/LICENSE.logo000066400000000000000000000020201323611211500160150ustar00rootroot00000000000000Anki's logo is copyright Alex Fraser, and is licensed under the AGPL3 like the rest of Anki's code. The logo is also available under a limited alternative license for inclusion in books, blogs, videos and so on. If the following conditions are met, you may use the logo in your work without the need to license your work under an AGPL3-compatible license: * The logo must be used to refer to Anki, AnkiMobile or AnkiDroid, and a link to https://apps.ankiweb.net must be provided. When your content is focused specifically on AnkiDroid, a link to https://play.google.com/store/apps/details?id=com.ichi2.anki&hl=en may be provided instead of the first link. * The work must make it clear that the text/video/etc you are publishing is your own content and not something originating from the Anki project. * The logo must be used unmodified - no cropping, changing of colours or adding or deleting content is allowed. You may resize the image provided the horizontal and vertical dimensions are resized equally. anki-2.1.0+dfsg~b36/Makefile000066400000000000000000000022731323611211500155230ustar00rootroot00000000000000PREFIX=/usr all: @echo "You can run Anki with ./runanki" @echo "If you wish to install it system wide, type 'sudo make install'" @echo "Uninstall with 'sudo make uninstall'" install: rm -rf ${DESTDIR}${PREFIX}/share/anki mkdir -p ${DESTDIR}${PREFIX}/share/anki cp -av * ${DESTDIR}${PREFIX}/share/anki/ cd ${DESTDIR}${PREFIX}/share/anki && (\ mv tools/runanki.system ${DESTDIR}${PREFIX}/local/bin/anki;\ test -d ${DESTDIR}${PREFIX}/share/pixmaps &&\ mv anki.xpm anki.png ${DESTDIR}${PREFIX}/share/pixmaps/;\ mv anki.desktop ${DESTDIR}${PREFIX}/share/applications;\ mv anki.1 ${DESTDIR}${PREFIX}/share/man/man1/) xdg-mime install anki.xml --novendor xdg-mime default anki.desktop application/x-anki xdg-mime default anki.desktop application/x-apkg @echo @echo "Install complete." uninstall: rm -rf ${DESTDIR}${PREFIX}/share/anki rm -rf ${DESTDIR}${PREFIX}/local/bin/anki rm -rf ${DESTDIR}${PREFIX}/share/pixmaps/anki.xpm rm -rf ${DESTDIR}${PREFIX}/share/pixmaps/anki.png rm -rf ${DESTDIR}${PREFIX}/share/applications/anki.desktop rm -rf ${DESTDIR}${PREFIX}/share/man/man1/anki.1 -xdg-mime uninstall ${DESTDIR}${PREFIX}/share/mime/packages/anki.xml @echo @echo "Uninstall complete." anki-2.1.0+dfsg~b36/README.contributing000066400000000000000000000055331323611211500174530ustar00rootroot00000000000000Contributing Code ================== For info on contributing things other than code, such as translations, decks and add-ons, please see http://ankisrs.net/docs/manual.html#contributing The goal of Anki 2.1.x is to bring Anki up to date with Python 3 and Qt 5, while maintaining compatibility with Anki 2.0.x. Some users will be stuck on Anki 2.0 for a while due to unported add-ons or old hardware, so it's important that 2.1 doesn't make breaking changes to the file format. Also of consideration is that the Anki code is indirectly used by the mobile clients, which try their best to keep as close to the Anki code as possible so that future updates can be ported more easily. Refactoring code makes it harder for the mobile clients to track changes, so refactoring should be limited to times when it is necessary to address an important issue. Before sending a pull request or a patch, please check the following to increase your changes of the changes being accepted. Primarily Bugfixes ------------------- Small patches that fix a specific problem and don't affect other functionality are likely to be merged if they meet the other requirements below. Larger changes are less likely to be accepted for 2.1.x - if in doubt, please ask before you begin work on them so your work does not go to waste. Examples of changes that are unlikely to be accepted: - Altering existing code unnecessarily. Your code may be more elegant than what already exists, but it takes time for us to review the changes, may harbour unnoticed bugs, and makes maintaining the mobile clients more difficult. - Adding code that is not used within Anki but it only for the benefit of add-ons - such code is difficult to test and maintain. - Adding code that addresses niche issues - they are better handled in an add-on. Maintaining Style ------------------ For consistency, changes should maintain the existing code style - camelCaps, <80 column lines, succinct variable names and so on. Tests Must Pass ---------------- Please check that tools/tests.sh passes all tests prior to submitting a change. If your change is not covered by existing tests, ideally you'll add a new test. Do One Thing ------------- A patch or pull request should be the minimum necessary to address one issue. Please don't make a pull request for a bunch of unrelated changes, as they are difficult to review and will be rejected - split them up into separate requests instead. License ------- As mentioned in the LICENSE file, we are only able to accept non-trivial patches or pull requests from people who have sent us a private message indicating that they license their changes under the BSD license. Add-ons ======== If you'd like to make more extensive changes, please consider writing an add-on instead, as add-ons have none of these restrictions and can implement whatever functionality in whatever style you wish. anki-2.1.0+dfsg~b36/README.development000066400000000000000000000064601323611211500172660ustar00rootroot00000000000000Running from source -------------------- For non-developers who want to try this development code, the easiest way is to use a binary package - please see: https://anki.tenderapp.com/discussions/beta-testing You are welcome to run Anki from source instead, but it is expected that you can sort out all dependencies and issues by yourself - we are not able to provide support for problems you encounter when running from source. Anki requires: - Python 3.6+ - Qt 5.9+ and a PyQT that supports it - mpv - lame It also requires a number of Python packages, which you can grab via pip: $ pip3 install -r requirements.txt You will also need PyQt development tools (specifically pyrcc5 and pyuic5). These are often contained in a separate package on Linux, such as 'pyqt5-dev-tools' on Debian/Ubuntu. To use the development version: $ git clone https://github.com/dae/anki.git $ cd anki $ ./tools/build_ui.sh If you get any errors, you will not be able to proceed, so please return to the top and check the requirements again. ALL USERS: Make sure you rebuild the UI every time you git pull, otherwise you will get errors down the road. The translations are stored in a bazaar repo for integration with Launchpad's translation services. If you want to use a language other than English: $ cd .. $ mv anki dtop # i18n code expects anki folder to be called dtop $ bzr clone lp:anki i18n $ cd i18n $ ./update-mos.sh $ cd ../dtop And now you're ready to run Anki: $ ./runanki If you get any errors, please make sure you don't have an older version of Anki installed in a system location. Before contributing code, please read README.contributing. If you'd like to contribute translations, please see the translations section of http://ankisrs.net/docs/manual.html#_contributing Windows & Mac users --------------------- The following was contributed by users in the past and will need updating for the latest version. It is left here in case it is any help: Windows: I have not tested the build scripts on Windows, so you'll need to solve any problems you encounter on your own. The easiest way is to use a source tarball instead of git, as that way you don't need to build the UI yourself. If you do want to use git, two alternatives have been contributed by users. As these are not official solutions, I'm afraid we can not provide you with any support for these. A powershell script: https://gist.github.com/vermiceli/108fec65759d19645ee3 Or a way with git bash and perl: 1) Install "git bash". 2) In the tools directory, modify build_ui.sh. Locate the line that reads "pyuic4 $i -o $py" and alter it to be of the following form: "" "" $i -o $py These two paths must point to your python executable, and to pyuic.py, on your system. Typical paths would be: = C:\\Python27\\python.exe = C:\\Python27\\Lib\\site-packages\\PyQt4\\uic\\pyuic.py Mac: These instructions may be incomplete as prerequisites may have already been installed. Most likely you will need to have installed xcode (https://developer.apple.com/xcode/) Install homebrew (http://brew.sh/) and then install Anki prerequisites: $ brew install python PyQt mplayer lame portaudio $ pip install sqlalchemy Now you can follow the development commands at the start of this document. anki-2.1.0+dfsg~b36/README.md000066400000000000000000000007151323611211500153410ustar00rootroot00000000000000Anki ------------------------------------- This is the development branch of Anki. For stable builds, please see https://apps.ankiweb.net. For non-developers who want to try this development code, the easiest way is to use a binary package - please see https://anki.tenderapp.com/discussions/beta-testing To run from source, please see README.development. [![Build Status](https://travis-ci.org/dae/anki.svg?branch=master)](https://travis-ci.org/dae/anki) anki-2.1.0+dfsg~b36/anki.1000066400000000000000000000042441323611211500150670ustar00rootroot00000000000000.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH ANKI 1 "August 11, 2007" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME anki \- flexible, intelligent flashcard program .SH DESCRIPTION \fBAnki\fP is a program designed to help you remember facts (such as words and phrases in a foreign language) as easily, quickly and efficiently as possible. To do this, it tracks how well you remember each fact, and uses that information to optimally schedule review times. With a minimal amount of effort, you can greatly increase the amount of material you remember, making study more productive, and more fun. Anki is based on a theory called \fIspaced repetition\fP. In simple terms, it means that each time you review some material, you should wait longer than last time before reviewing it again. This maximizes the time spent studying difficult material and minimizes the time spent reviewing things you already know. The concept is simple, but the vast majority of memory trainers and flashcard programs out there either avoid the concept all together, or implement inflexible and suboptimal methods that were originally designed for pen and paper. .SH OPTIONS .B \-b ~/.anki Use ~/.anki instead of ~/Anki as Anki's base folder .B \-p ProfileName Load a specific profile .B \-l Start the program in a specific language (de=German, en=English, etc) .SH SEE ALSO Anki home page: .SH AUTHOR Anki was written by Damien Elmes . .PP This manual page was written by Nicholas Breen , for the Debian project (but may be used by others), and has been updated for Anki 2 by Damien Elmes. anki-2.1.0+dfsg~b36/anki.desktop000066400000000000000000000004311323611211500163720ustar00rootroot00000000000000[Desktop Entry] Name=Anki Comment=An intelligent spaced-repetition memory training program GenericName=Flashcards Exec=anki %f TryExec=anki Icon=anki Categories=Education;Languages;KDE;Qt; Terminal=false Type=Application Version=1.0 MimeType=application/x-apkg;application/x-anki; anki-2.1.0+dfsg~b36/anki.png000066400000000000000000001034431323611211500155140ustar00rootroot00000000000000PNG  IHDR^ pHYs  "iCCPPhotoshop ICC profilexڭYy4Uo۾> 8cy2X,A0}U@ 7%W ~Dјa@M>FpB i9@t(NؿiդƿzuD|l4m ?5$H2fHnxo:eo`9x OO$DyY80#h rx+_^JoSp pufӘtuδF:y2ܽ@Y; lL `P !*a3Df`R'Vx/NR0 TD1SsL1s 0?{}M]!>_oHg04OkNj.c `O%(pqݸN\ TU\3׎k~O ! !L(/7ʥ¥  h["C%!"o&ic%fb@1QPt03Ì1]_w@&$BC&İBYVc0#YT5F_?G{@ H`1$o)o8]BO`&0<7P@$A@Al`-'FC8 vB&A8EPp h6[pCx0S0`A"‰#"""ڈb N;"aI@R $CH-riA:dy!gdšdJ *@QO4 CtDQt N'Sp.8\(ۆ*pV\7n7?F1cX ۇaF6a32/W0|>__?ďA"A`O#DJ kkW"(BT%]4"I\|wE= M Š)G8̔* QʥUP]pb~UTUO5BTu@ fPP{NVPOT?>!ᤑѤq*UVuZՌ֬|ŧV+]U볶6]X{h5jW7Q 93˯묻GKwIO_W7/_؀bj!paO#=#OQukׄZDƄfrdԔjhZn:j&mF30{e.kl^mB"GKMKeVFViV׬qv}6|6^6E6/lellOmfw?dAP0VmdG"WN*NLVgyau\sWE8+n7WbZ<'.pB} r* [яҧ̓'CLBBޅN 7 /(,UC ia176KnN<;gw$nȬGYV,7A)awXibq$喇ɼɌ-*[nybrr++U:ugXEډmȶm]e>nǩ;vKLKѺKb׎]w>ɕ|xOYշwc{h,ﻳ_kܾz$d|tЩ<޼ׇ7St@(фN*}S,sv9/:_~}-"?N4=3n!iXԺ<Kchh(N?\~/7Lpڸ O#(fͤ}laf2'7GWO߈,$,tX^WtB$IJ*/)c*"(XtA*^ޱUkhNn>ʐeTiܻ) ŖێdbajKA[MNwpO`yy{'lXvC}@M'heAU! a-##_DUc^Y! щqI[Zښ6\b 4vf1ͲkW'ACȟ.&%w0g~Z8.{\|-5P^xryUS^+Җz, vzoOC/|$籣o6S1s/Z_O}[cmiQc [^>b  R!j F" H"R!P6T ]W8*wC0sl+v +iRS0PHxJ k$cR"[ *^=dCN.aBnQr%C|()Ő2,,(*.$L>'/(F#.i,]25AZOz^9WyjE2[vգjW Z|ա]:M렧/k `a7Fր jJ44Ǜ[X[=~`cenкӀغd7Ywc/8||e׻lpaD mSP qoS؞𮈥(f|Y\s%؟d+!6}ǭt-Yf{{ޡD=^4QBřgO5uWܓ /n<׼5M}j}guzwS$gߍNM~(#sUvXnJ"UY_C5NzkM>-GCt5ŒM$\45(nmd'baqSO^||m VBgN >2"}L4cl\ܗ$|bZȖ[d=ܱ']?=Yٛr>O? ||#YG BKefO+XU\'kj,NK;#yZCy .y_^jjqlv%n}HS;>xhxI3K/_~zx|ۉ ĔtÇOԙ5Vs~e~?Y?ΛW/p./Z^Y,_XZڲԵ4,찜\ܻcEnueJ @|jm@Ȗ++s [[[sVs97Y)ŧ?i>V~$r >y#-];'>'БHPhr3`o|o[[[GAJ`0@JI$ C$3::u|?/}mmmCƘ:/MS~~7Mb$ϧ3CTđ`<$v=Ͼ6C6:)FecW2)$IsځN7~7Ր+_?sFQ%25o~{!DymeyYkqΑ)'N8[`sy߁DvDbƝ%Fn\}w="̘1)qdt3(pDQG?Qvvv}z=!B8f<)Yͽ7z5~z=>~| _Ox\Sכ?[F{)ee\mk;NqgC=z~cѽoy nf9tDQDGqdH#NWw7ylˡED,F6\~)%B,yWz~,˪n%MӅcp8~o{gfY+pﺈ\d+<B竫q|L #9ȱVIIn Y;fOqg7o߾̃gx n;GBCXs哟$??)8Zzoֽ~<گ/~n yYϙ9)euclllTx %׆:Jq2"QXzDP߹7_1qE/ivXk9{,'yӛTRSA{ckkU7__w -rrngt-E }+siiH;DuF<euh2"#.܀ǯibw4EQy|gcc}(n{(1^vwwoẀRl{E_oþ!>h,mg]huGQ@.Jxn26tLjsVywr~O:ʰ+<5;]0XcG:pV[>O1T {G]E "~ܱ76o\g؇ċ•y> u:c1,7VW#"GJ#tśWx>2DC m::T?0HӔ^^e~3T U00F|/a1AVEaBB2 XIpƺr\#:<9Ž“:b^>O3t:VJ1I2yzs 7~7aEEhE)EqCȪ(*>Gfa!\`H-OsFQ婝svv(m'XoAx[e ێyxsHdf&qdFc[s;%(Q((E.cطkSrİ?HxҀf5iV(??F=.Z3Emλwk~hȹ.JJK)QJռA"7X42#x3"8>r;|\IL#el5)h\Z0i(!H+ČH/ !F$dց+xM&c1 ~_mw#1VWW+߽ڲ~ www7׀>ē!amD{y>v V[ɸ&7(:42k na/|ų΋<; r1v'\ 9#1z=1$38Llw/"{{{dYVp{WBO(":^& c[`kv }^8 D :؀!% U#>OH?O1[H40AG7`>wޅ:f04^}ooK/$ +++lllLߧ뱲B߯8ڿ1Sx'_tZ;›)޶mxR.,+JӔ~sS$ *̪:\+FunuF> Kk 1_{DYr95"ydA|XV<7Y%7s|೟+Uӕ+Wr PT xY]]ĉlllT8o>+aTIA[zx0F|gZH^̾h8R!lHp@y GD D!ƌwq ?{yrq n&E<\q? MIynؿy/677#m~ ﳵ/\R3gΰ 7{g)[1k3YF1Kǭ,إs` E幨y)%Y@Z Sz?|*"Z{(3BYqĒ@~_駟w3o^Y/ v/h ^"4c.9 sps' d:# ݮvqDA_N),1ӊ㘍 /ۿۼ dYV|yBE>l_x {'d`e8իW+Oɓ'9y$z=8 `7 o;;;\r{g}K.qMvwwEY>5zH5y~&ܳjog}}}fT w)@` d˗ vS?`0& __YY;\z՞twM:zksR3 `e}._\UN>ͩS*t*.ϾZ g5gZх@H7eTV}|jؤpG7NH7?cߴĉNeXRP'>>~ *9A.$ Pn\2 9ccc󬮮/Fy"^NapM]t =(YԐl^1xѳ7=vwwy*MΝ̙3Vi&?RcHtHo[PgB^ ԍڹ !(BXg}gR$""uvXSK|) "V.??:_߯OU:<4siΝ;ٳg9uyW •6+\0A{)ߩS8{,묭MUό|#G5Nqbbčfl+Ye̚ !6?9#G$,E).QҲk:37Y.7bDơpƳC.\|r|2={ӧOs n ﶳSzQ=x;KULmzc C]O?Mǜ>}5Ξ=ɓ'+ßC3sq<=DoXXsDH8t BB>@b>4abhrX .[+y<#( DGþŷ//s͚t:5{qQ81qc`ܳ aȴ%8{'OBx`CJɓO> Nܹs>} )Qrm08xV(l0)8}n.8"3dTj\Wd]b̏tb)",0Ou:ss|0Xf>y! w)2PR*7pu\SO=^ロ5666lnd N0@Q vU;W駆7)N̶Fї.Ǭs1(r)cਹУ9\X@a ~?c a[iToP^C 5{{{qe(bmm;n jxtB9i/`ej-b 'BڴmaGTp-ջF|ڵk<裬psΞ=K׫؊}V#`Cue>EZ.2Z[@y}%qm04Zk677y&O?4^(~YVWWc #mbT1 OgTIM NԍP,EK\BE,Ds\au;uv+,ug (|DYn[4H\myy@g2}Kc#p+&ʝ#%ylbȒb: ی̘x)R J:dK$΁s"^G4ܪjE| kc 7odkk^x;9q.\`ơbo*໗UybWBA`k<BШˠ0|t"86]}9',R,NYJ@)oIopYs)!x<`ŋYZZ{%qQ2+5XPbeFJomB CIj4#Z˟/FB_pB?40\"8ȸ8T5Zk/X^z&YWyi*C`H0Sɷrnmwv9x)঍)F;ʁ>ۙ`gg]VJb8J\ 8u֗jBɇDDD&Azf1 9nڰ*Z Xh*qiɫ4ju2SLc^5yq[ҍ9prùU1d$(*"I 7 { '-t*Jq Ρ 8` CDCaQ 7kT*e5Rt_$^F Rx=x֣}S4S[XJY|*@+P5a@sr2)µ^9qemKpOSb@;\6@" Bsc%Fj ~)#X G-,X0ig r2#KTu|g pX8Dx7B^ZGY[[o?BZ^faQj,[{'zHK$%*TY^9 jGpz;7gK/JmYm]GJEY<0"KMr >02HA."8'ၜgb'|O9a!ge,OٳS J;FX 'Y2u)N[E?m@5tR{yVV;F/#L4))WݸU LTZZI1e)R8-N$Ѡ j=DZ (4lz[ìq Սjv.f2Ʀ*CiˢAGĊ+ST cgN. ]gזs 0c,hCܷ)em% !ƍFc@eNA h3Pt$ڕa1)pJVgDz&x7G g!/Jor'?msIQ\ H+\jI(n r kYqs/:E<_r_sz 'z,=7fO;JDմ$),C%(e%|@memiS) Ps"-Gea((aZI6{twϽ'Uk.Mo*YUwwwY__*! n! b 坬I|(ە?e sz,XSUI,ADln^g8bK\A CfsrT("#SӆL8%̴6gzߣ$(Kv {z^~KKK|C҇ ,YT*_Jq8QBN05abG 'SFVo\ZJÚY،ɅũH$IĺEFO C4W-&`A;lt9Gyo,vww&J)y[ i -9rxf!d)f"MH]tq-ι0$qBn8PȤ󜭱6 8˸qMM"c{( :g|M7 tbB(?ȢAOBVi9^9gϞs_ب vh}8WȵïgmV0B^-FRT%K"@sYyv7 +wtq#EDDH)NL,1w )+bCynU{dqxocX^^]z ;1v >lh0DDlQla1rDʑ QDAWKlֲ%BΊ 6RUsᱫb-F7u}ù-Aw#,Adѭ$ ~mڣB{qb'/C?:jeߝg>g#}g4tԧ>Ň?*6Ov sxMA]u,da<)x..FtæA璍~VI˨$H:!egK%?9-GuŰo{pvpaMqaYUnD]0s%NZP Nb'ebo 8j}<0;D`*Ty ,//C}{,O$_v.IGNt`MʈE[zofM6&H"1\prc9D?]r$N+t k4Ί#RCiYZ=*k<gfN ??_y}vYX/*2 ^:RlpF!U3U3s!;?3no'k(Í>E睯7O$Qamibew^͸7涵.׻l$YCf5N :+qg"#33q R;kRjx<&I~>rYN81eG5ޅ؈:CsD"GItEPfpA.|LlqU P&@Jpo`rieQ2 v,/ nqj+ =EGrvڕ<駧 pys&:a*7ĞwO|uJ'Hb4ꯚ#VChZ"4O<^'m45ਏ A>U )c5ߚU% qyPybq&'! 6Jɝ⩭1qj+}n_H#" r(Er;qe,1p,ӧyyGx] l>3)%wy'ЇЇ>w] o_d{7 SkHqf5Pb0$@8x܃Wnt%wiɁIY{$߽ߟ뢽S*]cЪNJD.&#Tpm-KyBK .]tOtŲ9*2mnhgq)IFڲ; 4#.8]߳8m0{X:d P׈xQ7FyG?QwuMfZW%(}Y|^0'P(h7.gǮئIGLv:Jƽ6 Fu,Z[bHL+槪=O\t *lMDe N VQ'/¦}.u8X w+$ƚ"!]ױz,//~Oecn6x>p~ܕauKmP ފI"mw?Bƕ}1(IңE JaQ[FokBNFZGV)]--8 '2yQ4hpu\{u6Ve ,Y VDc;uOuD +5,krހW KAkwy'>ƅ jlE 4 VG|nQܰLpD\w.|/g/\vk, +2C'M+*GL<)ɜ^]F9N6Լ5lሂ1 $ȋd2yYP(Y1!h{Z2m[Sz)뽔4s3^ '1n7O}~vP VKI^={?y קYg"^ǹ!>ri'LPPV̧-5  5c=vu6+Sً͉6%V_ 9ig7ۆh]qN+柃kBzE DK#ևS:ш`@$z=1Yt*mX~xYYYdRWvoѰC ["g It"q$|n}FN,6Е0}7:hGCVMχ|u-Ff &usn]d#1F. vZrfû y7oJC<+C .?|#a}}}&t-i'%E1TAkJ w #+g/+{\w}\=c,Ŏש\zgz09/,xܩaNZM\=w~}kS|f*iR%ƒ E/۲oq>?Ӝ9sl, auOa>@# .2c$)As -#Ϟɡb<*d\u&BjF Wәz1 R ENg!0J4w 1Վ*ڇO͉QV*U\!\Nn,,b8iVJJ4||3<&\O6EXvd2^d=ZK_{*Kxu:= :QL$6S Q\K]{^@ cEhŸJ'+4L+矟las&-wRJpwIoyyh}s}陼fzaO7=kၝLatҋX@:kžňI#VCrGҍSlM$ʘ[RU vx3:4rɁwZrHs" $x;9}4??OOT̂7Z‚ɰ9$bEK007-߼S\>F0$J DFBHb0bdQ29QyPM%<#Paiؚw O]'<;êZ<8.wq=:gӲ!dQWguO۫a=E> ??V Ml;k\eqweYF(p DX!##cRXG.,7:U a|歷VmzfIhtNԼ:< [".+$# p-uXSuTSY~_y[x6wu4Mn|G6T]ZF8.FH "-mԕ\-*"DNWsj ɚlg`G߲2#fUb_5XlȖc,3uMJ{P  ʕS-D n;WSug*cG?ʯrI1i\WуHƠlvȐŖnIRq-o_|kk6YYYa0O|Us\5BkvHo_yqגILL_ f9Fʰ |D QUL]Pg:iִpv&s8?;hޙ=,T^Q ]RT.17MS;ɟɚoaqB[ EeiXlq/:~CT$CVټ\($*"K&X$JϦ&"&-:%@ܸrb B17S/5Y$ 1dM+Uˎ#f{F 8%9oL\VR/j^ф]%3Ko֚~χ>!N8ql5#&eNb\@F$IF~~1O^$l2s"E(ZSE͕$Q''sD#8ijЀ L@*t /t7T]Ŗ3Y1wTM 4v[ig mC懹*3pi>яV88:k6B*).Gcp*fOD<#717\,cDF1RIiI frҹ-=DϭG̲5%[{TŻrNn/ePbTCLiE=%gk<C#oJ)j2o}ԇE Q!wed] cbx%vyn1]"աgD5J(ݲ(#%&D96wySs=cO0vz΄9mUtSzηRklcF^J͛78=DFܿ N"jUc;&uJַY,T!¶ Q{13S\T @Nգ([`BςFlhB?oYGs7_ܲ,c}}7S}3oaG<(:kUr?F+}N-uѣMȰΡ"A:R {b%(3B15URG+̆$W%IQ'j=QKpռV\ dharQ#G9S߳օ+Ͽ<;wDs`cu~ѷ}^VWWbp4V8e8 3EtE&.p"s=='8(bbr #ELz8VEbd9dʘ>/RP.Yde "0:/i56#vUЈ &s7.!QqCJcϕյQ:x' H29|{x}ַE)I￿ }qAkD fEZT;V,E22Z)Ҳ \[$ЉUIBΗlϸE"nB4 0|,8Vϖf\esϒbM<8?&^:oCy_ἱкCyϽg}sQEQ.+կ7=F}>;ΒR  :l $QtT[M8ƒjyg  DD=$v=߂x\Ѳ:;IW  ^XΔ)N$DN _;'j|nOٟ!3֚J(fo (|l^F&3!B&EgDSs iz/8WJ>W\fccjqm0gɭ-JĽ [HH1VD=a-Tl4dh' @G:[ngCHA:$z=ǭ`󰡀 6񞲪4a} ν H=ġjxs&iOp9#!6 oj ܱjl=P߿71` GW^e8r]w\JGّ2T`BLTdE1Yk BĐs]|v'z,EE7ͱqdV(P+Ko,l Aʹv[*k`RUgצ&v09U H]ٵ絅Dl? ciB gqկ~:N SiBت z顔(z cK/.?q#ksDž>oj.m x*YSI]I @u&)*n_ᇜ|u.mZ׺`':;CQ/ܐ/^|(m!fӔ.USu }TͯYTwôq8MJŋFvm3l zEDTR^ R袒IV֊**GB9:p'g#M1: mɈdLB77#rS!r}c w'ux*Q3rRTTE3Z.=};AlӮ)(JTɂLQq䈕CbW$ `L9\)5vrU&*y\ꞮG40!SVaԤfy&8Y~<֣y:т[xxn?4yy';v8F R!vra=+qx'$qcjkA P2"euE%n6J助G-qk:t Mkśx\Ҡ*Lμ&m saqU+N~.\Q>8fss~F#nv~V |5$ J} n))$.]bmms!?5dx#֔TE4JZPHpnX|8Z;EHIqe JFO75(r W劚BL[g\ҵKՌdݪ^"H|v021D/LWvC8(3_?9/_gooSN\x5|sh-1LH2Y̨؜3])֗@`rX֕^!W8PSr͠[8ߵ3Va74tZ?3i U 5a!* ZUv@a>:xӐCqZ^y}Q{9$̙35L"^ȡjVD =D|rAuuYfu2Aˑ ˒7JN'3Z0)Jx͐Y*NIEf{8ּ[RzydvA^+e]/e z{!,5"RI\f ҂('vXgZ5˻xd'|w?ҥK<<裤iJC]?|q:1W"VR*!C%cdNu3 x3K8a:d &*k5 \; SŤ`V<â>ޙ6Ya7?&T˗/o}^z 5KKKr^<j0tB)%P:Yܾ)eCDh3bƪCjC AmŜ,<$ 0!/D6mB*X !MOhZy fwnBpcB,#%:iZ RhT?h4b}}^z.a6PYC$,p#V1Z&傑X$fnEoҶEYbrmz"p9 gPp Cmr&Jڔo4Xf !/|dgJ)<jdmE裏կ~+WrZWwY}'[vH)mыY (fh](:aA5QtEaܓmȐS%?M dOyn<$l0beym~k0j Vn޸=>x74h)%> =x;8u?tX8D) ([rgO\ޘt4p-k~p7b?(",d/^&.]""VWWhSޥf'>& 8W,%8ʗhU8Lc5˛\}{&LUqZtP7@SmALCC=Ņcg}Qǵ~8y7Lwvv~׿ux 1kkk,--X`s` #hIqBr}^j(!xZT !$1Ι<IJ/ݬخrjOxol k[w:>oy衇ͳ$E> ay\zVRzϞ//0KQa&Q FS`kECyMHulv>\ymöM ]Eg쯝|qfM1W-Jc~gwSANz= 1K s } rs&E2.7i{ 4)UiAv(ÿ ~Wq́'͆ݍ6]^T46ss ;moAyy$Q(CnRJ|ueW\'_*/^$sVVVjY0I)1q fvLr0^*E1I1A9Ȱ5߬ f5.i4rSFAL`ΐN5K\M,S2O<ۼA޶ML+g|CxL_9wo}[y{=P +ܲ=>}5)L,gW8rq[#!<զwpRAPcWZeT(Av 4.t-9Z*tXd5ouE |I~i .wlllT/e3cIlltY YI݀ۺK^^%lфoj^}};Wc=T<؜mo{t8L 7Oqz-rS7)xK/c=׾5^~esKAF+ОQVȴ\9'y׾ֳEi6vA[)WLjf6Q;fRHٙp=:2ĩQ=dz g%Ppf,ЅIQK`E}˞ tY!103=U=(Kj=9an,Dz׻'>["M<#\)/KZZ}pMAيMC!J͸À9/ou)nb:V,`$;h9~?PGf^4Iq\V珽4S)UFo<<?c.^?A>ZCy1 j$Brܶ0\sj@=l2`ۅɇZ& 2aas@}&ݤ+"l62'x?oE+/jl3a8^\U)uh,#I$(_|h>1N<9[/աX_D]LˇR@sD# BHNԓ9 |p1<ۘ5> [/r^x+\aw\ÜdYV%;֌F 'IW|SsXѹ:˃XBRV}6}BJWbGwt ,յFe3ŮtN8Ag0z?nu6A޽IZ$qzC}ROOy]x'ΐzw%Wy8); Eo-iA ˸H`x;Җх{zydX $НX$ԡW. fvY'#_xޢzy_:ԗqXMwf{1kzgR@ $cbe04 cRDJґбTHLLbbbēpQu02kpI֊4ϼ@z&EMPWx$իKq P`Rմi2 `ΡJKAd?}Zc2F4v*1lM\Ch;pXkX]ZjSӦR@OWtYR!,A~y>_)>_PJUTq}8 w|eYVsBpR> 2Dmrwv53cn~v}Kʲ/!q,9n"޸l9!4(KđU?9D$GCk[׷s=<dYvs\ã=gl_R4D!+ױg\t&crb$Q-`kYjz7 T0ɛ)AVQ)BXqj%ErK" D ccz{O#k }Aڇ =uJJUNYqeώ⹏>ZkEk]9#`ɚ%tneV-tl33F KE%ghT$ȣ.\ӓ7lpdB*9."fC㡇ҫGx}"e0a=k-[[[U{\$V(Yp.(r3a}84d%J)e>!Ա|_*VN : s]v˰,- ǰonnw~~JK駟8!xGQ-Cj{{5N 8UD: =ˢZYb 1vr.d5Ta)H%XwXGMA(AfZsblq +ܳ.XPQ<n-'N;GW^xg;.|PC wa]FѱzTA,D1w2<[܁נ)i2ص9~j<䪀HRD8Ipv:x/T-RatmK&sxa e1Ѓ>s{Ba02H " ڈr%T\1e9;E!e(A;v%dhge-+䈲My$ _җ`0 M: | 02 Xˆc*#RZ qx?./.g.8[ BJзF8Wŀ~~M[V\RMt:f e:M9ԽZH),ۤHH`p 3OX0T)Ҭ #OԠ֚=ά(EJKy8t&9R*y677yꩧ tݪQ Mv4> ;UA56%p+xB ]ܘ^d1u".lcj*ax!n;v8.<v< .]ƍ9uT31XkVVS)',5MɏbΟ??cRYƒ]gh҃j18MgŌ#5է ]#5Xs~Ir}c*H‚-z&".]bgg|w&KKKlllpmO??>ݿwҥKlnnp84{5>x}@Un'NnWW_oX) #IENDB`anki-2.1.0+dfsg~b36/anki.xml000066400000000000000000000005501323611211500155230ustar00rootroot00000000000000 Anki 1.2 deck Anki 2.0 deck anki-2.1.0+dfsg~b36/anki.xpm000066400000000000000000000142641323611211500155360ustar00rootroot00000000000000/* XPM */ static char * anki_xpm[] = { "32 32 256 2", " c None", ". c #525252", "+ c #515151", "@ c #505050", "# c #4F4F4F", "$ c #4D4D4D", "% c #4B4B4B", "& c #4A4A4A", "* c #494949", "= c #484848", "- c #474747", "; c #464646", "> c #454545", ", c #444444", "' c #424242", ") c #404040", "! c #595959", "~ c #5E5E5E", "{ c #707070", "] c #787878", "^ c #7C7C7C", "/ c #7B7B7B", "( c #7A7A7A", "_ c #797979", ": c #777777", "< c #767676", "[ c #757575", "} c #747474", "| c #737373", "1 c #727272", "2 c #6D6D6D", "3 c #606060", "4 c #636363", "5 c #828282", "6 c #808080", "7 c #7F7F7F", "8 c #7E7E7E", "9 c #7D7D7D", "0 c #6C6C6C", "a c #616161", "b c #898989", "c c #888888", "d c #868686", "e c #848484", "f c #818181", "g c #989898", "h c #656565", "i c #646464", "j c #8A8A8A", "k c #8E8E8E", "l c #8C8C8C", "m c #858585", "n c #838383", "o c #929292", "p c #A7A7A7", "q c #949494", "r c #C7C7C7", "s c #E8E9E9", "t c #6E6E6E", "u c #696969", "v c #959595", "w c #939393", "x c #919191", "y c #8F8F8F", "z c #999999", "A c #F6FBFE", "B c #DFEFFB", "C c #E6F1F9", "D c #BADEF5", "E c #D4E9F7", "F c #A5A5A5", "G c #575757", "H c #979797", "I c #969696", "J c #8D8D8D", "K c #8B8B8B", "L c #878787", "M c #E5EFF5", "N c #97CDF1", "O c #8DC8EF", "P c #7ABFED", "Q c #D4EAF9", "R c #C6C6C6", "S c #5B5B5B", "T c #9E9E9E", "U c #9C9C9C", "V c #9B9B9B", "W c #E5E7E8", "X c #B4DAF5", "Y c #90C9F0", "Z c #94CBF1", "` c #ABD6F3", " . c #E4F2FB", ".. c #D6D7D7", "+. c #5F5F5F", "@. c #A2A2A2", "#. c #A0A0A0", "$. c #9F9F9F", "%. c #9D9D9D", "&. c #9A9A9A", "*. c #B5B5B5", "=. c #E8F3FA", "-. c #AED8F4", ";. c #A9D5F3", ">. c #ADD7F4", ",. c #CDE7F8", "'. c #EAF5FC", "). c #E7E7E7", "!. c #626262", "~. c #909090", "{. c #A1A1A1", "]. c #D8D8D8", "^. c #EFF2F3", "/. c #ECF1F4", "(. c #E8F3FC", "_. c #F0F0F0", ":. c #B6B6B6", "<. c #666666", "[. c #010101", "}. c #686868", "|. c #A9A9A9", "1. c #B0B0B0", "2. c #E9EAEA", "3. c #F7FBFD", "4. c #D7D7D7", "5. c #6A6A6A", "6. c #000000", "7. c #5D5D5D", "8. c #585858", "9. c #A8A8A8", "0. c #E1E1E1", "a. c #ACACAC", "b. c #5A5A5A", "c. c #717171", "d. c #EEF0F1", "e. c #CCCCCC", "f. c #565656", "g. c #676767", "h. c #C9C9C9", "i. c #AAD6F4", "j. c #DBEBF6", "k. c #ADADAD", "l. c #6F6F6F", "m. c #ECF3F7", "n. c #4CA9E7", "o. c #4EAAE7", "p. c #D2E9F9", "q. c #319CE3", "r. c #118CDF", "s. c #E4E4E4", "t. c #C2C2C2", "u. c #C0C0C0", "v. c #C8C8C8", "w. c #EEEFF0", "x. c #9DD0F2", "y. c #2998E2", "z. c #1C91E0", "A. c #92CBF0", "B. c #96CDF1", "C. c #98CEF1", "D. c #99CEF1", "E. c #F0F8FD", "F. c #5C5C5C", "G. c #ECECEC", "H. c #EEF5F9", "I. c #C1E1F7", "J. c #93CBF0", "K. c #58AEE9", "L. c #3BA0E5", "M. c #2F9AE3", "N. c #2596E2", "O. c #1990E0", "P. c #108BDF", "Q. c #0686DD", "R. c #47A6E7", "S. c #E9EFF3", "T. c #171717", "U. c #DBEDFA", "V. c #70BAEB", "W. c #67B6EA", "X. c #5BB0E8", "Y. c #52ABE7", "Z. c #45A5E6", "`. c #3CA1E5", " + c #309BE3", ".+ c #2796E2", "++ c #50ABE8", "@+ c #DCEDF9", "#+ c #A5A6A6", "$+ c #4C4C4C", "%+ c #0F0F0F", "&+ c #ECEDEE", "*+ c #E1F1FB", "=+ c #94CBF0", "-+ c #7ABEED", ";+ c #6EB9EB", ">+ c #64B4EA", ",+ c #58AEE8", "'+ c #4FAAE7", ")+ c #43A4E5", "!+ c #3FA2E5", "~+ c #CBE6F8", "{+ c #D0D0D0", "]+ c #101010", "^+ c #F1F6FA", "/+ c #B7DCF5", "(+ c #84C4EE", "_+ c #7BBFED", ":+ c #6FB9EB", "<+ c #66B5EA", "[+ c #5AAFE8", "}+ c #5BAFE8", "|+ c #F1F5F7", "1+ c #6B6B6B", "2+ c #D1D1D1", "3+ c #E2F1FB", "4+ c #8EC8F0", "5+ c #82C2EE", "6+ c #78BEED", "7+ c #6CB8EB", "8+ c #63B3EA", "9+ c #D5EBF9", "0+ c #B9B9B9", "a+ c #545454", "b+ c #111111", "c+ c #C5C5C5", "d+ c #E7F4FC", "e+ c #A5D3F3", "f+ c #AAD5F4", "g+ c #ACD7F4", "h+ c #8FC9F0", "i+ c #CACACA", "j+ c #ECF6FC", "k+ c #C2E1F6", "l+ c #CBE5F7", "m+ c #F0F7FD", "n+ c #F9FCFE", "o+ c #C7E4F7", "p+ c #B1D9F4", "q+ c #F1F8FC", "r+ c #121212", "s+ c #CFCFCF", "t+ c #F5FAFD", "u+ c #EFF7FC", "v+ c #F3F3F4", "w+ c #F1F1F1", "x+ c #0D0D0D", "y+ c #BFBFBF", "z+ c #FDFEFE", "A+ c #EBEBEB", "B+ c #AEAEAE", "C+ c #040404", "D+ c #1B1B1B", "E+ c #A3A3A3", "F+ c #0E0E0E", "G+ c #020202", " ", " . + @ # $ $ % & * = - ; > , ' ' ) ", " ! ~ { ] ^ / ( _ _ ] : < [ } | | 1 2 3 $ ' ", " 4 / 5 6 7 8 9 ^ / ( ( _ ] : < [ } } | 0 % ", " a ^ b c d e 5 f 6 7 8 9 ^ / ( _ 9 g f < [ h & ", " i j k l j c d m n 5 f 6 o p q j r s g _ ] t + ", " u v w x y k l j b d m n z A B C D E F ^ / } G ", " 0 z H I q o x y J K b L j M N O P Q R 6 8 < S ", " { T U V z H I q o x y J y W X Y Z ` ...o ( +. ", " } @.#.$.%.U &.g H v w x *.=.-.;.>.,.'.).T 9 !. ", " @ ~.o g T {.$.%.U &.g %.].^./.(.Q _.:.K L 6 <. ", " [.+.!.}.2 ] c T #.T U %.|.1.1.2.3.4.o J K e 5. ", " 6.3 ~ 7.S ! 8.S t L w T T %.V 9.0.a.q w x b t ", " 6.4 !.3 +.7.S b.c.! a { e U $.%.9.V g H v J 1 ", " 6.<.h 4 !.3 +.~.d.e.0 G f.! } w T $.%.U &.o < ", " 6.5.}.g.h 4 !.h.i.j.k.b.! G f.3 [ &.@.#.$.I ( ", " 6.2 0 5.u g.l.m.n.o.=.m 7.b.! G f.! 1 w {.V 8 ", " 6.{ l.2 0 5.z p.q.r.Z s.t.u.u.a.l.G f.~ : V 5 ", " 6.} [ J T v.w.x.y.z.z.A.B.C.D.E.*.S b.8.G G F. ", " 6./ 1.G.H.I.J.K.L.M.N.O.P.Q.R.S.~.~ 7.S b.* T. ", " 6.d ].U.O V.W.X.Y.Z.`. +.+++@+#+h !.3 ~ 7.$+%+ ", " 6.8 &.&+*+=+-+;+>+,+'+)+!+~+{+2 g.h i !.3 # ]+ ", " 6.f 6 K v.^+/+(+_+:+<+[+}+|+z 1+5.}.g.h i . ]+ ", " 6.e n f m 2+3+N 4+5+6+7+8+9+0+l.2 1+5.}.g.a+b+ ", " 6.c L m e c+d+-.e+f+g+h+_+g+2.} c.l.t 0 1+8.b+ ", " 6.K j c L i+j+k+l+m+n+ .o+p+q+b } 1 c.l.t b.r+ ", " 6.7 J l j s+t+u+v+0+~.*.4._.w+L ] < } | c.G x+ ", " 6.a x y J y+z+A+B+d e 5 L V V 8 / _ ] < [ & C+ ", " D+[ o x H E+y K b c d e n f 6 8 ^ / _ g.F+ ", " G+D+4 n o x y k l K b c d m n 5 7 | $ D+6. ", " 6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6. ", " "}; anki-2.1.0+dfsg~b36/anki/000077500000000000000000000000001323611211500150015ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/anki/__init__.py000066400000000000000000000010171323611211500171110ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import sys if sys.version_info[0] < 3 or sys.version_info[1] < 5: raise Exception("Anki requires Python 3.5+") if sys.getfilesystemencoding().lower() in ("ascii", "ansi_x3.4-1968"): raise Exception("Anki requires a UTF-8 locale.") version="2.1.0beta36" # build scripts grep this line, so preserve formatting from anki.storage import Collection __all__ = ["Collection"] anki-2.1.0+dfsg~b36/anki/cards.py000066400000000000000000000127731323611211500164610ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import pprint import time from anki.hooks import runHook from anki.utils import intTime, timestampID, joinFields from anki.consts import * # Cards ########################################################################## # Type: 0=new, 1=learning, 2=due # Queue: same as above, and: # -1=suspended, -2=user buried, -3=sched buried # Due is used differently for different queues. # - new queue: note id or random int # - rev queue: integer day # - lrn queue: integer timestamp class Card: def __init__(self, col, id=None): self.col = col self.timerStarted = None self._qa = None self._note = None if id: self.id = id self.load() else: # to flush, set nid, ord, and due self.id = timestampID(col.db, "cards") self.did = 1 self.crt = intTime() self.type = 0 self.queue = 0 self.ivl = 0 self.factor = 0 self.reps = 0 self.lapses = 0 self.left = 0 self.odue = 0 self.odid = 0 self.flags = 0 self.data = "" def load(self): (self.id, self.nid, self.did, self.ord, self.mod, self.usn, self.type, self.queue, self.due, self.ivl, self.factor, self.reps, self.lapses, self.left, self.odue, self.odid, self.flags, self.data) = self.col.db.first( "select * from cards where id = ?", self.id) self._qa = None self._note = None def flush(self): self.mod = intTime() self.usn = self.col.usn() # bug check if self.queue == 2 and self.odue and not self.col.decks.isDyn(self.did): runHook("odueInvalid") assert self.due < 4294967296 self.col.db.execute( """ insert or replace into cards values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""", self.id, self.nid, self.did, self.ord, self.mod, self.usn, self.type, self.queue, self.due, self.ivl, self.factor, self.reps, self.lapses, self.left, self.odue, self.odid, self.flags, self.data) self.col.log(self) def flushSched(self): self.mod = intTime() self.usn = self.col.usn() # bug checks if self.queue == 2 and self.odue and not self.col.decks.isDyn(self.did): runHook("odueInvalid") assert self.due < 4294967296 self.col.db.execute( """update cards set mod=?, usn=?, type=?, queue=?, due=?, ivl=?, factor=?, reps=?, lapses=?, left=?, odue=?, odid=?, did=? where id = ?""", self.mod, self.usn, self.type, self.queue, self.due, self.ivl, self.factor, self.reps, self.lapses, self.left, self.odue, self.odid, self.did, self.id) self.col.log(self) def q(self, reload=False, browser=False): return self.css() + self._getQA(reload, browser)['q'] def a(self): return self.css() + self._getQA()['a'] def css(self): return "" % self.model()['css'] def _getQA(self, reload=False, browser=False): if not self._qa or reload: f = self.note(reload); m = self.model(); t = self.template() data = [self.id, f.id, m['id'], self.odid or self.did, self.ord, f.stringTags(), f.joinedFields()] if browser: args = (t.get('bqfmt'), t.get('bafmt')) else: args = tuple() self._qa = self.col._renderQA(data, *args) return self._qa def note(self, reload=False): if not self._note or reload: self._note = self.col.getNote(self.nid) return self._note def model(self): return self.col.models.get(self.note().mid) def template(self): m = self.model() if m['type'] == MODEL_STD: return self.model()['tmpls'][self.ord] else: return self.model()['tmpls'][0] def startTimer(self): self.timerStarted = time.time() def timeLimit(self): "Time limit for answering in milliseconds." conf = self.col.decks.confForDid(self.odid or self.did) return conf['maxTaken']*1000 def shouldShowTimer(self): conf = self.col.decks.confForDid(self.odid or self.did) return conf['timer'] def timeTaken(self): "Time taken to answer card, in integer MS." total = int((time.time() - self.timerStarted)*1000) return min(total, self.timeLimit()) def isEmpty(self): ords = self.col.models.availOrds( self.model(), joinFields(self.note().fields)) if self.ord not in ords: return True def __repr__(self): d = dict(self.__dict__) # remove non-useful elements del d['_note'] del d['_qa'] del d['col'] del d['timerStarted'] return pprint.pformat(d, width=300) def userFlag(self): return self.flags & 0b111 def setUserFlag(self, flag): assert 0 <= flag <= 7 self.flags = (self.flags & ~0b111) | flag anki-2.1.0+dfsg~b36/anki/collection.py000066400000000000000000000762311323611211500175170ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import pprint import re import time import os import random import stat import datetime import copy import traceback from anki.lang import _, ngettext from anki.utils import ids2str, fieldChecksum, stripHTML, \ intTime, splitFields, joinFields, maxID, json, devMode from anki.hooks import runFilter, runHook from anki.models import ModelManager from anki.media import MediaManager from anki.decks import DeckManager from anki.tags import TagManager from anki.consts import * from anki.errors import AnkiError from anki.sound import stripSounds import anki.latex # sets up hook import anki.cards import anki.notes import anki.template import anki.find defaultConf = { # review options 'activeDecks': [1], 'curDeck': 1, 'newSpread': NEW_CARDS_DISTRIBUTE, 'collapseTime': 1200, 'timeLim': 0, 'estTimes': True, 'dueCounts': True, # other config 'curModel': None, 'nextPos': 1, 'sortType': "noteFld", 'sortBackwards': False, 'addToCur': True, # add new to currently selected deck? 'dayLearnFirst': False, } # this is initialized by storage.Collection class _Collection: def __init__(self, db, server=False, log=False): self._debugLog = log self.db = db self.path = db._path self._openLog() self.log(self.path, anki.version) self.server = server self._lastSave = time.time() self.clearUndo() self.media = MediaManager(self, server) self.models = ModelManager(self) self.decks = DeckManager(self) self.tags = TagManager(self) self.load() if not self.crt: d = datetime.datetime.today() d -= datetime.timedelta(hours=4) d = datetime.datetime(d.year, d.month, d.day) d += datetime.timedelta(hours=4) self.crt = int(time.mktime(d.timetuple())) self._loadScheduler() if not self.conf.get("newBury", False): self.conf['newBury'] = True self.setMod() def name(self): n = os.path.splitext(os.path.basename(self.path))[0] return n # Scheduler ########################################################################## defaultSchedulerVersion = 1 supportedSchedulerVersions = (1, 2) def schedVer(self): ver = self.conf.get("schedVer", self.defaultSchedulerVersion) if ver in self.supportedSchedulerVersions: return ver else: raise Exception("Unsupported scheduler version") def _loadScheduler(self): ver = self.schedVer() if ver == 1: from anki.sched import Scheduler elif ver == 2: from anki.schedv2 import Scheduler self.sched = Scheduler(self) def changeSchedulerVer(self, ver): if ver == self.schedVer(): return if ver not in self.supportedSchedulerVersions: raise Exception("Unsupported scheduler version") self.modSchema(check=True) from anki.schedv2 import Scheduler v2Sched = Scheduler(self) if ver == 1: v2Sched.moveToV1() else: v2Sched.moveToV2() self.conf['schedVer'] = ver self.setMod() self._loadScheduler() # DB-related ########################################################################## def load(self): (self.crt, self.mod, self.scm, self.dty, # no longer used self._usn, self.ls, self.conf, models, decks, dconf, tags) = self.db.first(""" select crt, mod, scm, dty, usn, ls, conf, models, decks, dconf, tags from col""") self.conf = json.loads(self.conf) self.models.load(models) self.decks.load(decks, dconf) self.tags.load(tags) def setMod(self): """Mark DB modified. DB operations and the deck/tag/model managers do this automatically, so this is only necessary if you modify properties of this object or the conf dict.""" self.db.mod = True def flush(self, mod=None): "Flush state to DB, updating mod time." self.mod = intTime(1000) if mod is None else mod self.db.execute( """update col set crt=?, mod=?, scm=?, dty=?, usn=?, ls=?, conf=?""", self.crt, self.mod, self.scm, self.dty, self._usn, self.ls, json.dumps(self.conf)) def save(self, name=None, mod=None): "Flush, commit DB, and take out another write lock." # let the managers conditionally flush self.models.flush() self.decks.flush() self.tags.flush() # and flush deck + bump mod if db has been changed if self.db.mod: self.flush(mod=mod) self.db.commit() self.lock() self.db.mod = False self._markOp(name) self._lastSave = time.time() def autosave(self): "Save if 5 minutes has passed since last save. True if saved." if time.time() - self._lastSave > 300: self.save() return True def lock(self): # make sure we don't accidentally bump mod time mod = self.db.mod self.db.execute("update col set mod=mod") self.db.mod = mod def close(self, save=True): "Disconnect from DB." if self.db: if save: self.save() else: self.db.rollback() if not self.server: self.db.setAutocommit(True) self.db.execute("pragma journal_mode = delete") self.db.setAutocommit(False) self.db.close() self.db = None self.media.close() self._closeLog() def reopen(self): "Reconnect to DB (after changing threads, etc)." import anki.db if not self.db: self.db = anki.db.DB(self.path) self.media.connect() self._openLog() def rollback(self): self.db.rollback() self.load() self.lock() def modSchema(self, check): "Mark schema modified. Call this first so user can abort if necessary." if not self.schemaChanged(): if check and not runFilter("modSchema", True): raise AnkiError("abortSchemaMod") self.scm = intTime(1000) self.setMod() def schemaChanged(self): "True if schema changed since last sync." return self.scm > self.ls def usn(self): return self._usn if self.server else -1 def beforeUpload(self): "Called before a full upload." tbls = "notes", "cards", "revlog" for t in tbls: self.db.execute("update %s set usn=0 where usn=-1" % t) # we can save space by removing the log of deletions self.db.execute("delete from graves") self._usn += 1 self.models.beforeUpload() self.tags.beforeUpload() self.decks.beforeUpload() self.modSchema(check=False) self.ls = self.scm # ensure db is compacted before upload self.db.setAutocommit(True) self.db.execute("vacuum") self.db.execute("analyze") self.close() # Object creation helpers ########################################################################## def getCard(self, id): return anki.cards.Card(self, id) def getNote(self, id): return anki.notes.Note(self, id=id) # Utils ########################################################################## def nextID(self, type, inc=True): type = "next"+type.capitalize() id = self.conf.get(type, 1) if inc: self.conf[type] = id+1 return id def reset(self): "Rebuild the queue and reload data after DB modified." self.sched.reset() # Deletion logging ########################################################################## def _logRem(self, ids, type): self.db.executemany("insert into graves values (%d, ?, %d)" % ( self.usn(), type), ([x] for x in ids)) # Notes ########################################################################## def noteCount(self): return self.db.scalar("select count() from notes") def newNote(self, forDeck=True): "Return a new note with the current model." return anki.notes.Note(self, self.models.current(forDeck)) def addNote(self, note): "Add a note to the collection. Return number of new cards." # check we have card models available, then save cms = self.findTemplates(note) if not cms: return 0 note.flush() # deck conf governs which of these are used due = self.nextID("pos") # add cards ncards = 0 for template in cms: self._newCard(note, template, due) ncards += 1 return ncards def remNotes(self, ids): self.remCards(self.db.list("select id from cards where nid in "+ ids2str(ids))) def _remNotes(self, ids): "Bulk delete notes by ID. Don't call this directly." if not ids: return strids = ids2str(ids) # we need to log these independently of cards, as one side may have # more card templates runHook("remNotes", self, ids) self._logRem(ids, REM_NOTE) self.db.execute("delete from notes where id in %s" % strids) # Card creation ########################################################################## def findTemplates(self, note): "Return (active), non-empty templates." model = note.model() avail = self.models.availOrds(model, joinFields(note.fields)) return self._tmplsFromOrds(model, avail) def _tmplsFromOrds(self, model, avail): ok = [] if model['type'] == MODEL_STD: for t in model['tmpls']: if t['ord'] in avail: ok.append(t) else: # cloze - generate temporary templates from first for ord in avail: t = copy.copy(model['tmpls'][0]) t['ord'] = ord ok.append(t) return ok def genCards(self, nids): "Generate cards for non-empty templates, return ids to remove." # build map of (nid,ord) so we don't create dupes snids = ids2str(nids) have = {} dids = {} for id, nid, ord, did, odid in self.db.execute( "select id, nid, ord, did, odid from cards where nid in "+snids): # existing cards if nid not in have: have[nid] = {} have[nid][ord] = id # if in a filtered deck, add new cards to original deck if odid != 0: did = odid # and their dids if nid in dids: if dids[nid] and dids[nid] != did: # cards are in two or more different decks; revert to # model default dids[nid] = None else: # first card or multiple cards in same deck dids[nid] = did # build cards for each note data = [] ts = maxID(self.db) now = intTime() rem = [] usn = self.usn() for nid, mid, flds in self.db.execute( "select id, mid, flds from notes where id in "+snids): model = self.models.get(mid) avail = self.models.availOrds(model, flds) did = dids.get(nid) or model['did'] # add any missing cards for t in self._tmplsFromOrds(model, avail): doHave = nid in have and t['ord'] in have[nid] if not doHave: # check deck is not a cram deck did = t['did'] or did if self.decks.isDyn(did): did = 1 # if the deck doesn't exist, use default instead did = self.decks.get(did)['id'] # we'd like to use the same due# as sibling cards, but we # can't retrieve that quickly, so we give it a new id # instead data.append((ts, nid, did, t['ord'], now, usn, self.nextID("pos"))) ts += 1 # note any cards that need removing if nid in have: for ord, id in list(have[nid].items()): if ord not in avail: rem.append(id) # bulk update self.db.executemany(""" insert into cards values (?,?,?,?,?,?,0,0,?,0,0,0,0,0,0,0,0,"")""", data) return rem # type 0 - when previewing in add dialog, only non-empty # type 1 - when previewing edit, only existing # type 2 - when previewing in models dialog, all templates def previewCards(self, note, type=0): if type == 0: cms = self.findTemplates(note) elif type == 1: cms = [c.template() for c in note.cards()] else: cms = note.model()['tmpls'] if not cms: return [] cards = [] for template in cms: cards.append(self._newCard(note, template, 1, flush=False)) return cards def _newCard(self, note, template, due, flush=True): "Create a new card." card = anki.cards.Card(self) card.nid = note.id card.ord = template['ord'] # Use template did (deck override) if valid, otherwise model did if template['did'] and str(template['did']) in self.decks.decks: card.did = template['did'] else: card.did = note.model()['did'] # if invalid did, use default instead deck = self.decks.get(card.did) if deck['dyn']: # must not be a filtered deck card.did = 1 else: card.did = deck['id'] card.due = self._dueForDid(card.did, due) if flush: card.flush() return card def _dueForDid(self, did, due): conf = self.decks.confForDid(did) # in order due? if conf['new']['order'] == NEW_CARDS_DUE: return due else: # random mode; seed with note ts so all cards of this note get the # same random number r = random.Random() r.seed(due) return r.randrange(1, max(due, 1000)) # Cards ########################################################################## def isEmpty(self): return not self.db.scalar("select 1 from cards limit 1") def cardCount(self): return self.db.scalar("select count() from cards") def remCards(self, ids, notes=True): "Bulk delete cards by ID." if not ids: return sids = ids2str(ids) nids = self.db.list("select nid from cards where id in "+sids) # remove cards self._logRem(ids, REM_CARD) self.db.execute("delete from cards where id in "+sids) # then notes if not notes: return nids = self.db.list(""" select id from notes where id in %s and id not in (select nid from cards)""" % ids2str(nids)) self._remNotes(nids) def emptyCids(self): rem = [] for m in self.models.all(): rem += self.genCards(self.models.nids(m)) return rem def emptyCardReport(self, cids): rep = "" for ords, cnt, flds in self.db.all(""" select group_concat(ord+1), count(), flds from cards c, notes n where c.nid = n.id and c.id in %s group by nid""" % ids2str(cids)): rep += _("Empty card numbers: %(c)s\nFields: %(f)s\n\n") % dict( c=ords, f=flds.replace("\x1f", " / ")) return rep # Field checksums and sorting fields ########################################################################## def _fieldData(self, snids): return self.db.execute( "select id, mid, flds from notes where id in "+snids) def updateFieldCache(self, nids): "Update field checksums and sort cache, after find&replace, etc." snids = ids2str(nids) r = [] for (nid, mid, flds) in self._fieldData(snids): fields = splitFields(flds) model = self.models.get(mid) if not model: # note points to invalid model continue r.append((stripHTML(fields[self.models.sortIdx(model)]), fieldChecksum(fields[0]), nid)) # apply, relying on calling code to bump usn+mod self.db.executemany("update notes set sfld=?, csum=? where id=?", r) # Q/A generation ########################################################################## def renderQA(self, ids=None, type="card"): # gather metadata if type == "card": where = "and c.id in " + ids2str(ids) elif type == "note": where = "and f.id in " + ids2str(ids) elif type == "model": where = "and m.id in " + ids2str(ids) elif type == "all": where = "" else: raise Exception() return [self._renderQA(row) for row in self._qaData(where)] def _renderQA(self, data, qfmt=None, afmt=None): "Returns hash of id, question, answer." # data is [cid, nid, mid, did, ord, tags, flds] # unpack fields and create dict flist = splitFields(data[6]) fields = {} model = self.models.get(data[2]) for (name, (idx, conf)) in list(self.models.fieldMap(model).items()): fields[name] = flist[idx] fields['Tags'] = data[5].strip() fields['Type'] = model['name'] fields['Deck'] = self.decks.name(data[3]) fields['Subdeck'] = fields['Deck'].split('::')[-1] if model['type'] == MODEL_STD: template = model['tmpls'][data[4]] else: template = model['tmpls'][0] fields['Card'] = template['name'] fields['c%d' % (data[4]+1)] = "1" # render q & a d = dict(id=data[0]) qfmt = qfmt or template['qfmt'] afmt = afmt or template['afmt'] for (type, format) in (("q", qfmt), ("a", afmt)): if type == "q": format = re.sub("{{(?!type:)(.*?)cloze:", r"{{\1cq-%d:" % (data[4]+1), format) format = format.replace("<%cloze:", "<%%cq:%d:" % ( data[4]+1)) else: format = re.sub("{{(.*?)cloze:", r"{{\1ca-%d:" % (data[4]+1), format) format = format.replace("<%cloze:", "<%%ca:%d:" % ( data[4]+1)) fields['FrontSide'] = stripSounds(d['q']) fields = runFilter("mungeFields", fields, model, data, self) html = anki.template.render(format, fields) d[type] = runFilter( "mungeQA", html, type, fields, model, data, self) # empty cloze? if type == 'q' and model['type'] == MODEL_CLOZE: if not self.models._availClozeOrds(model, data[6], False): d['q'] += ("

" + _( "Please edit this note and add some cloze deletions. (%s)") % ( "%s" % (HELP_SITE, _("help")))) return d def _qaData(self, where=""): "Return [cid, nid, mid, did, ord, tags, flds] db query" return self.db.execute(""" select c.id, f.id, f.mid, c.did, c.ord, f.tags, f.flds from cards c, notes f where c.nid == f.id %s""" % where) # Finding cards ########################################################################## def findCards(self, query, order=False): return anki.find.Finder(self).findCards(query, order) def findNotes(self, query): return anki.find.Finder(self).findNotes(query) def findReplace(self, nids, src, dst, regex=None, field=None, fold=True): return anki.find.findReplace(self, nids, src, dst, regex, field, fold) def findDupes(self, fieldName, search=""): return anki.find.findDupes(self, fieldName, search) # Stats ########################################################################## def cardStats(self, card): from anki.stats import CardStats return CardStats(self, card).report() def stats(self): from anki.stats import CollectionStats return CollectionStats(self) # Timeboxing ########################################################################## def startTimebox(self): self._startTime = time.time() self._startReps = self.sched.reps def timeboxReached(self): "Return (elapsedTime, reps) if timebox reached, or False." if not self.conf['timeLim']: # timeboxing disabled return False elapsed = time.time() - self._startTime if elapsed > self.conf['timeLim']: return (self.conf['timeLim'], self.sched.reps - self._startReps) # Undo ########################################################################## def clearUndo(self): # [type, undoName, data] # type 1 = review; type 2 = checkpoint self._undo = None def undoName(self): "Undo menu item name, or None if undo unavailable." if not self._undo: return None return self._undo[1] def undo(self): if self._undo[0] == 1: return self._undoReview() else: self._undoOp() def markReview(self, card): old = [] if self._undo: if self._undo[0] == 1: old = self._undo[2] self.clearUndo() wasLeech = card.note().hasTag("leech") or False self._undo = [1, _("Review"), old + [copy.copy(card)], wasLeech] def _undoReview(self): data = self._undo[2] wasLeech = self._undo[3] c = data.pop() if not data: self.clearUndo() # remove leech tag if it didn't have it before if not wasLeech and c.note().hasTag("leech"): c.note().delTag("leech") c.note().flush() # write old data c.flush() # and delete revlog entry last = self.db.scalar( "select id from revlog where cid = ? " "order by id desc limit 1", c.id) self.db.execute("delete from revlog where id = ?", last) # restore any siblings self.db.execute( "update cards set queue=type,mod=?,usn=? where queue=-2 and nid=?", intTime(), self.usn(), c.nid) # and finally, update daily counts n = 1 if c.queue == 3 else c.queue type = ("new", "lrn", "rev")[n] self.sched._updateStats(c, type, -1) self.sched.reps -= 1 return c.id def _markOp(self, name): "Call via .save()" if name: self._undo = [2, name] else: # saving disables old checkpoint, but not review undo if self._undo and self._undo[0] == 2: self.clearUndo() def _undoOp(self): self.rollback() self.clearUndo() # DB maintenance ########################################################################## def basicCheck(self): "Basic integrity check for syncing. True if ok." # cards without notes if self.db.scalar(""" select 1 from cards where nid not in (select id from notes) limit 1"""): return # notes without cards or models if self.db.scalar(""" select 1 from notes where id not in (select distinct nid from cards) or mid not in %s limit 1""" % ids2str(self.models.ids())): return # invalid ords for m in self.models.all(): # ignore clozes if m['type'] != MODEL_STD: continue if self.db.scalar(""" select 1 from cards where ord not in %s and nid in ( select id from notes where mid = ?) limit 1""" % ids2str([t['ord'] for t in m['tmpls']]), m['id']): return return True def fixIntegrity(self): "Fix possible problems and rebuild caches." problems = [] self.save() oldSize = os.stat(self.path)[stat.ST_SIZE] if self.db.scalar("pragma integrity_check") != "ok": return (_("Collection is corrupt. Please see the manual."), False) # note types with a missing model ids = self.db.list(""" select id from notes where mid not in """ + ids2str(self.models.ids())) if ids: problems.append( ngettext("Deleted %d note with missing note type.", "Deleted %d notes with missing note type.", len(ids)) % len(ids)) self.remNotes(ids) # for each model for m in self.models.all(): for t in m['tmpls']: if t['did'] == "None": t['did'] = None problems.append(_("Fixed AnkiDroid deck override bug.")) self.models.save(m) if m['type'] == MODEL_STD: # model with missing req specification if 'req' not in m: self.models._updateRequired(m) problems.append(_("Fixed note type: %s") % m['name']) # cards with invalid ordinal ids = self.db.list(""" select id from cards where ord not in %s and nid in ( select id from notes where mid = ?)""" % ids2str([t['ord'] for t in m['tmpls']]), m['id']) if ids: problems.append( ngettext("Deleted %d card with missing template.", "Deleted %d cards with missing template.", len(ids)) % len(ids)) self.remCards(ids) # notes with invalid field count ids = [] for id, flds in self.db.execute( "select id, flds from notes where mid = ?", m['id']): if (flds.count("\x1f") + 1) != len(m['flds']): ids.append(id) if ids: problems.append( ngettext("Deleted %d note with wrong field count.", "Deleted %d notes with wrong field count.", len(ids)) % len(ids)) self.remNotes(ids) # delete any notes with missing cards ids = self.db.list(""" select id from notes where id not in (select distinct nid from cards)""") if ids: cnt = len(ids) problems.append( ngettext("Deleted %d note with no cards.", "Deleted %d notes with no cards.", cnt) % cnt) self._remNotes(ids) # cards with missing notes ids = self.db.list(""" select id from cards where nid not in (select id from notes)""") if ids: cnt = len(ids) problems.append( ngettext("Deleted %d card with missing note.", "Deleted %d cards with missing note.", cnt) % cnt) self.remCards(ids) # cards with odue set when it shouldn't be ids = self.db.list(""" select id from cards where odue > 0 and (type=1 or queue=2) and not odid""") if ids: cnt = len(ids) problems.append( ngettext("Fixed %d card with invalid properties.", "Fixed %d cards with invalid properties.", cnt) % cnt) self.db.execute("update cards set odue=0 where id in "+ ids2str(ids)) # cards with odid set when not in a dyn deck dids = [id for id in self.decks.allIds() if not self.decks.isDyn(id)] ids = self.db.list(""" select id from cards where odid > 0 and did in %s""" % ids2str(dids)) if ids: cnt = len(ids) problems.append( ngettext("Fixed %d card with invalid properties.", "Fixed %d cards with invalid properties.", cnt) % cnt) self.db.execute("update cards set odid=0, odue=0 where id in "+ ids2str(ids)) # tags self.tags.registerNotes() # field cache for m in self.models.all(): self.updateFieldCache(self.models.nids(m)) # new cards can't have a due position > 32 bits self.db.execute(""" update cards set due = 1000000, mod = ?, usn = ? where due > 1000000 and queue = 0""", intTime(), self.usn()) # new card position self.conf['nextPos'] = self.db.scalar( "select max(due)+1 from cards where type = 0") or 0 # reviews should have a reasonable due # ids = self.db.list( "select id from cards where queue = 2 and due > 100000") if ids: problems.append("Reviews had incorrect due date.") self.db.execute( "update cards set due = ?, ivl = 1, mod = ?, usn = ? where id in %s" % ids2str(ids), self.sched.today, intTime(), self.usn()) # and finally, optimize self.optimize() newSize = os.stat(self.path)[stat.ST_SIZE] txt = _("Database rebuilt and optimized.") ok = not problems problems.append(txt) # if any problems were found, force a full sync if not ok: self.modSchema(check=False) self.save() return ("\n".join(problems), ok) def optimize(self): self.db.setAutocommit(True) self.db.execute("vacuum") self.db.execute("analyze") self.db.setAutocommit(False) self.lock() # Logging ########################################################################## def log(self, *args, **kwargs): if not self._debugLog: return def customRepr(x): if isinstance(x, str): return x return pprint.pformat(x) path, num, fn, y = traceback.extract_stack( limit=2+kwargs.get("stack", 0))[0] buf = "[%s] %s:%s(): %s" % (intTime(), os.path.basename(path), fn, ", ".join([customRepr(x) for x in args])) self._logHnd.write(buf + "\n") if devMode: print(buf) def _openLog(self): if not self._debugLog: return lpath = re.sub(r"\.anki2$", ".log", self.path) if os.path.exists(lpath) and os.path.getsize(lpath) > 10*1024*1024: lpath2 = lpath + ".old" if os.path.exists(lpath2): os.unlink(lpath2) os.rename(lpath, lpath2) self._logHnd = open(lpath, "a", encoding="utf8") def _closeLog(self): if not self._debugLog: return self._logHnd.close() self._logHnd = None # Card Flags ########################################################################## def setUserFlag(self, flag, cids): assert 0 <= flag <= 7 self.db.execute("update cards set flags = (flags & ~?) | ? where id in %s" % ids2str(cids), 0b111, flag) anki-2.1.0+dfsg~b36/anki/consts.py000066400000000000000000000036071323611211500166720ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import os from anki.lang import _ # whether new cards should be mixed with reviews, or shown first or last NEW_CARDS_DISTRIBUTE = 0 NEW_CARDS_LAST = 1 NEW_CARDS_FIRST = 2 # new card insertion order NEW_CARDS_RANDOM = 0 NEW_CARDS_DUE = 1 # removal types REM_CARD = 0 REM_NOTE = 1 REM_DECK = 2 # count display COUNT_ANSWERED = 0 COUNT_REMAINING = 1 # media log MEDIA_ADD = 0 MEDIA_REM = 1 # dynamic deck order DYN_OLDEST = 0 DYN_RANDOM = 1 DYN_SMALLINT = 2 DYN_BIGINT = 3 DYN_LAPSES = 4 DYN_ADDED = 5 DYN_DUE = 6 DYN_REVADDED = 7 DYN_DUEPRIORITY = 8 DYN_MAX_SIZE = 99999 # model types MODEL_STD = 0 MODEL_CLOZE = 1 STARTING_FACTOR = 2500 # deck schema & syncing vars SCHEMA_VERSION = 11 SYNC_ZIP_SIZE = int(2.5*1024*1024) SYNC_ZIP_COUNT = 25 SYNC_BASE = "https://sync.ankiweb.net/" SYNC_MEDIA_BASE = "https://sync.ankiweb.net/msync/" SYNC_VER = 9 HELP_SITE="http://ankisrs.net/docs/manual.html" # Labels ########################################################################## def newCardOrderLabels(): return { 0: _("Show new cards in random order"), 1: _("Show new cards in order added") } def newCardSchedulingLabels(): return { 0: _("Mix new cards and reviews"), 1: _("Show new cards after reviews"), 2: _("Show new cards before reviews"), } def alignmentLabels(): return { 0: _("Center"), 1: _("Left"), 2: _("Right"), } def dynOrderLabels(): return { 0: _("Oldest seen first"), 1: _("Random"), 2: _("Increasing intervals"), 3: _("Decreasing intervals"), 4: _("Most lapses"), 5: _("Order added"), 6: _("Order due"), 7: _("Latest added first"), 8: _("Relative overdueness"), } anki-2.1.0+dfsg~b36/anki/db.py000066400000000000000000000054661323611211500157530ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import os import time from sqlite3 import dbapi2 as sqlite DBError = sqlite.Error class DB: def __init__(self, path, timeout=0): self._db = sqlite.connect(path, timeout=timeout) self._db.text_factory = self._textFactory self._path = path self.echo = os.environ.get("DBECHO") self.mod = False def execute(self, sql, *a, **ka): s = sql.strip().lower() # mark modified? for stmt in "insert", "update", "delete": if s.startswith(stmt): self.mod = True t = time.time() if ka: # execute("...where id = :id", id=5) res = self._db.execute(sql, ka) else: # execute("...where id = ?", 5) res = self._db.execute(sql, a) if self.echo: #print a, ka print(sql, "%0.3fms" % ((time.time() - t)*1000)) if self.echo == "2": print(a, ka) return res def executemany(self, sql, l): self.mod = True t = time.time() self._db.executemany(sql, l) if self.echo: print(sql, "%0.3fms" % ((time.time() - t)*1000)) if self.echo == "2": print(l) def commit(self): t = time.time() self._db.commit() if self.echo: print("commit %0.3fms" % ((time.time() - t)*1000)) def executescript(self, sql): self.mod = True if self.echo: print(sql) self._db.executescript(sql) def rollback(self): self._db.rollback() def scalar(self, *a, **kw): res = self.execute(*a, **kw).fetchone() if res: return res[0] return None def all(self, *a, **kw): return self.execute(*a, **kw).fetchall() def first(self, *a, **kw): c = self.execute(*a, **kw) res = c.fetchone() c.close() return res def list(self, *a, **kw): return [x[0] for x in self.execute(*a, **kw)] def close(self): self._db.close() def set_progress_handler(self, *args): self._db.set_progress_handler(*args) def __enter__(self): self._db.execute("begin") return self def __exit__(self, exc_type, *args): self._db.close() def totalChanges(self): return self._db.total_changes def interrupt(self): self._db.interrupt() def setAutocommit(self, autocommit): if autocommit: self._db.isolation_level = None else: self._db.isolation_level = '' # strip out invalid utf-8 when reading from db def _textFactory(self, data): return str(data, errors="ignore") anki-2.1.0+dfsg~b36/anki/decks.py000066400000000000000000000403401323611211500164450ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import copy from anki.utils import intTime, ids2str, json from anki.hooks import runHook from anki.consts import * from anki.lang import _ from anki.errors import DeckRenameError # fixmes: # - make sure users can't set grad interval < 1 defaultDeck = { 'newToday': [0, 0], # currentDay, count 'revToday': [0, 0], 'lrnToday': [0, 0], 'timeToday': [0, 0], # time in ms 'conf': 1, 'usn': 0, 'desc': "", 'dyn': 0, # anki uses int/bool interchangably here 'collapsed': False, # added in beta11 'extendNew': 10, 'extendRev': 50, } defaultDynamicDeck = { 'newToday': [0, 0], 'revToday': [0, 0], 'lrnToday': [0, 0], 'timeToday': [0, 0], 'collapsed': False, 'dyn': 1, 'desc': "", 'usn': 0, 'delays': None, 'separate': True, # list of (search, limit, order); we only use first two elements for now 'terms': [["", 100, 0]], 'resched': True, 'return': True, # currently unused # v2 scheduler "previewDelay": 10, } defaultConf = { 'name': _("Default"), 'new': { 'delays': [1, 10], 'ints': [1, 4, 7], # 7 is not currently used 'initialFactor': STARTING_FACTOR, 'separate': True, 'order': NEW_CARDS_DUE, 'perDay': 20, # may not be set on old decks 'bury': True, }, 'lapse': { 'delays': [10], 'mult': 0, 'minInt': 1, 'leechFails': 8, # type 0=suspend, 1=tagonly 'leechAction': 0, }, 'rev': { 'perDay': 100, 'ease4': 1.3, 'fuzz': 0.05, 'minSpace': 1, # not currently used 'ivlFct': 1, 'maxIvl': 36500, # may not be set on old decks 'bury': True, }, 'maxTaken': 60, 'timer': 0, 'autoplay': True, 'replayq': True, 'mod': 0, 'usn': 0, } class DeckManager: # Registry save/load ############################################################# def __init__(self, col): self.col = col def load(self, decks, dconf): self.decks = json.loads(decks) self.dconf = json.loads(dconf) # set limits to within bounds found = False for c in list(self.dconf.values()): for t in ('rev', 'new'): pd = 'perDay' if c[t][pd] > 999999: c[t][pd] = 999999 self.save(c) found = True if not found: self.changed = False def save(self, g=None): "Can be called with either a deck or a deck configuration." if g: g['mod'] = intTime() g['usn'] = self.col.usn() self.changed = True def flush(self): if self.changed: self.col.db.execute("update col set decks=?, dconf=?", json.dumps(self.decks), json.dumps(self.dconf)) self.changed = False # Deck save/load ############################################################# def id(self, name, create=True, type=defaultDeck): "Add a deck with NAME. Reuse deck if already exists. Return id as int." name = name.replace('"', '') for id, g in list(self.decks.items()): if g['name'].lower() == name.lower(): return int(id) if not create: return None g = copy.deepcopy(type) if "::" in name: # not top level; ensure all parents exist name = self._ensureParents(name) g['name'] = name while 1: id = intTime(1000) if str(id) not in self.decks: break g['id'] = id self.decks[str(id)] = g self.save(g) self.maybeAddToActive() runHook("newDeck") return int(id) def rem(self, did, cardsToo=False, childrenToo=True): "Remove the deck. If cardsToo, delete any cards inside." if str(did) == '1': # we won't allow the default deck to be deleted, but if it's a # child of an existing deck then it needs to be renamed deck = self.get(did) if '::' in deck['name']: base = deck['name'].split("::")[-1] suffix = "" while True: # find an unused name name = base + suffix if not self.byName(name): deck['name'] = name self.save(deck) break suffix += "1" return # log the removal regardless of whether we have the deck or not self.col._logRem([did], REM_DECK) # do nothing else if doesn't exist if not str(did) in self.decks: return deck = self.get(did) if deck['dyn']: # deleting a cramming deck returns cards to their previous deck # rather than deleting the cards self.col.sched.emptyDyn(did) if childrenToo: for name, id in self.children(did): self.rem(id, cardsToo) else: # delete children first if childrenToo: # we don't want to delete children when syncing for name, id in self.children(did): self.rem(id, cardsToo) # delete cards too? if cardsToo: # don't use cids(), as we want cards in cram decks too cids = self.col.db.list( "select id from cards where did=? or odid=?", did, did) self.col.remCards(cids) # delete the deck and add a grave del self.decks[str(did)] # ensure we have an active deck if did in self.active(): self.select(int(list(self.decks.keys())[0])) self.save() def allNames(self, dyn=True): "An unsorted list of all deck names." if dyn: return [x['name'] for x in list(self.decks.values())] else: return [x['name'] for x in list(self.decks.values()) if not x['dyn']] def all(self): "A list of all decks." return list(self.decks.values()) def allIds(self): return list(self.decks.keys()) def collapse(self, did): deck = self.get(did) deck['collapsed'] = not deck['collapsed'] self.save(deck) def collapseBrowser(self, did): deck = self.get(did) collapsed = deck.get('browserCollapsed', False) deck['browserCollapsed'] = not collapsed self.save(deck) def count(self): return len(self.decks) def get(self, did, default=True): id = str(did) if id in self.decks: return self.decks[id] elif default: return self.decks['1'] def byName(self, name): "Get deck with NAME." for m in list(self.decks.values()): if m['name'] == name: return m def update(self, g): "Add or update an existing deck. Used for syncing and merging." self.decks[str(g['id'])] = g self.maybeAddToActive() # mark registry changed, but don't bump mod time self.save() def rename(self, g, newName): "Rename deck prefix to NAME if not exists. Updates children." # make sure target node doesn't already exist if newName in self.allNames(): raise DeckRenameError(_("That deck already exists.")) # make sure we're not nesting under a filtered deck for p in self.parentsByName(newName): if p['dyn']: raise DeckRenameError(_("A filtered deck cannot have subdecks.")) # ensure we have parents newName = self._ensureParents(newName) # rename children for grp in self.all(): if grp['name'].startswith(g['name'] + "::"): grp['name'] = grp['name'].replace(g['name']+ "::", newName + "::", 1) self.save(grp) # adjust name g['name'] = newName # ensure we have parents again, as we may have renamed parent->child newName = self._ensureParents(newName) self.save(g) # renaming may have altered active did order self.maybeAddToActive() def renameForDragAndDrop(self, draggedDeckDid, ontoDeckDid): draggedDeck = self.get(draggedDeckDid) draggedDeckName = draggedDeck['name'] ontoDeckName = self.get(ontoDeckDid)['name'] if ontoDeckDid is None or ontoDeckDid == '': if len(self._path(draggedDeckName)) > 1: self.rename(draggedDeck, self._basename(draggedDeckName)) elif self._canDragAndDrop(draggedDeckName, ontoDeckName): draggedDeck = self.get(draggedDeckDid) draggedDeckName = draggedDeck['name'] ontoDeckName = self.get(ontoDeckDid)['name'] assert ontoDeckName.strip() self.rename(draggedDeck, ontoDeckName + "::" + self._basename(draggedDeckName)) def _canDragAndDrop(self, draggedDeckName, ontoDeckName): if draggedDeckName == ontoDeckName \ or self._isParent(ontoDeckName, draggedDeckName) \ or self._isAncestor(draggedDeckName, ontoDeckName): return False else: return True def _isParent(self, parentDeckName, childDeckName): return self._path(childDeckName) == self._path(parentDeckName) + [ self._basename(childDeckName) ] def _isAncestor(self, ancestorDeckName, descendantDeckName): ancestorPath = self._path(ancestorDeckName) return ancestorPath == self._path(descendantDeckName)[0:len(ancestorPath)] def _path(self, name): return name.split("::") def _basename(self, name): return self._path(name)[-1] def _ensureParents(self, name): "Ensure parents exist, and return name with case matching parents." s = "" path = self._path(name) if len(path) < 2: return name for p in path[:-1]: if not s: s += p else: s += "::" + p # fetch or create did = self.id(s) # get original case s = self.name(did) name = s + "::" + path[-1] return name # Deck configurations ############################################################# def allConf(self): "A list of all deck config." return list(self.dconf.values()) def confForDid(self, did): deck = self.get(did, default=False) assert deck if 'conf' in deck: conf = self.getConf(deck['conf']) conf['dyn'] = False return conf # dynamic decks have embedded conf return deck def getConf(self, confId): return self.dconf[str(confId)] def updateConf(self, g): self.dconf[str(g['id'])] = g self.save() def confId(self, name, cloneFrom=defaultConf): "Create a new configuration and return id." c = copy.deepcopy(cloneFrom) while 1: id = intTime(1000) if str(id) not in self.dconf: break c['id'] = id c['name'] = name self.dconf[str(id)] = c self.save(c) return id def remConf(self, id): "Remove a configuration and update all decks using it." assert int(id) != 1 self.col.modSchema(check=True) del self.dconf[str(id)] for g in self.all(): # ignore cram decks if 'conf' not in g: continue if str(g['conf']) == str(id): g['conf'] = 1 self.save(g) def setConf(self, grp, id): grp['conf'] = id self.save(grp) def didsForConf(self, conf): dids = [] for deck in list(self.decks.values()): if 'conf' in deck and deck['conf'] == conf['id']: dids.append(deck['id']) return dids def restoreToDefault(self, conf): oldOrder = conf['new']['order'] new = copy.deepcopy(defaultConf) new['id'] = conf['id'] new['name'] = conf['name'] self.dconf[str(conf['id'])] = new self.save(new) # if it was previously randomized, resort if not oldOrder: self.col.sched.resortConf(new) # Deck utils ############################################################# def name(self, did, default=False): deck = self.get(did, default=default) if deck: return deck['name'] return _("[no deck]") def nameOrNone(self, did): deck = self.get(did, default=False) if deck: return deck['name'] return None def setDeck(self, cids, did): self.col.db.execute( "update cards set did=?,usn=?,mod=? where id in "+ ids2str(cids), did, self.col.usn(), intTime()) def maybeAddToActive(self): # reselect current deck, or default if current has disappeared c = self.current() self.select(c['id']) def cids(self, did, children=False): if not children: return self.col.db.list("select id from cards where did=?", did) dids = [did] for name, id in self.children(did): dids.append(id) return self.col.db.list("select id from cards where did in "+ ids2str(dids)) def recoverOrphans(self): dids = list(self.decks.keys()) mod = self.col.db.mod self.col.db.execute("update cards set did = 1 where did not in "+ ids2str(dids)) self.col.db.mod = mod # Deck selection ############################################################# def active(self): "The currrently active dids. Make sure to copy before modifying." return self.col.conf['activeDecks'] def selected(self): "The currently selected did." return self.col.conf['curDeck'] def current(self): return self.get(self.selected()) def select(self, did): "Select a new branch." # make sure arg is an int did = int(did) # current deck self.col.conf['curDeck'] = did # and active decks (current + all children) actv = self.children(did) actv.sort() self.col.conf['activeDecks'] = [did] + [a[1] for a in actv] self.changed = True def children(self, did): "All children of did, as (name, id)." name = self.get(did)['name'] actv = [] for g in self.all(): if g['name'].startswith(name + "::"): actv.append((g['name'], g['id'])) return actv def parents(self, did): "All parents of did." # get parent and grandparent names parents = [] for part in self.get(did)['name'].split("::")[:-1]: if not parents: parents.append(part) else: parents.append(parents[-1] + "::" + part) # convert to objects for c, p in enumerate(parents): parents[c] = self.get(self.id(p)) return parents def parentsByName(self, name): "All existing parents of name" if "::" not in name: return [] names = name.split("::")[:-1] head = [] parents = [] while names: head.append(names.pop(0)) deck = self.byName("::".join(head)) if deck: parents.append(deck) return parents # Sync handling ########################################################################## def beforeUpload(self): for d in self.all(): d['usn'] = 0 for c in self.allConf(): c['usn'] = 0 self.save() # Dynamic decks ########################################################################## def newDyn(self, name): "Return a new dynamic deck and set it as the current deck." did = self.id(name, type=defaultDynamicDeck) self.select(did) return did def isDyn(self, did): return self.get(did)['dyn'] anki-2.1.0+dfsg~b36/anki/errors.py000066400000000000000000000011061323611211500166650ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html class AnkiError(Exception): def __init__(self, type, **data): self.type = type self.data = data def __str__(self): m = self.type if self.data: m += ": %s" % repr(self.data) return m class DeckRenameError(Exception): def __init__(self, description): self.description = description def __str__(self): return "Couldn't rename deck: " + self.description anki-2.1.0+dfsg~b36/anki/exporting.py000066400000000000000000000277661323611211500174140ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import re, os, zipfile, shutil from anki.lang import _ from anki.utils import ids2str, splitFields, json, namedtmp from anki.hooks import runHook from anki import Collection class Exporter: def __init__(self, col, did=None): self.col = col self.did = did def exportInto(self, path): self._escapeCount = 0 file = open(path, "wb") self.doExport(file) file.close() def escapeText(self, text): "Escape newlines, tabs, CSS and quotechar." # fixme: we should probably quote fields with newlines # instead of converting them to spaces text = text.replace("\n", " ") text = text.replace("\t", " " * 8) text = re.sub("(?i)", "", text) if "\"" in text: text = "\"" + text.replace("\"", "\"\"") + "\"" return text def cardIds(self): if not self.did: cids = self.col.db.list("select id from cards") else: cids = self.col.decks.cids(self.did, children=True) self.count = len(cids) return cids # Cards as TSV ###################################################################### class TextCardExporter(Exporter): key = _("Cards in Plain Text") ext = ".txt" def __init__(self, col): Exporter.__init__(self, col) def doExport(self, file): ids = sorted(self.cardIds()) strids = ids2str(ids) def esc(s): # strip off the repeated question in answer if exists s = re.sub("(?si)^.*


\n*", "", s) return self.escapeText(s) out = "" for cid in ids: c = self.col.getCard(cid) out += esc(c.q()) out += "\t" + esc(c.a()) + "\n" file.write(out.encode("utf-8")) # Notes as TSV ###################################################################### class TextNoteExporter(Exporter): key = _("Notes in Plain Text") ext = ".txt" includeTags = True def __init__(self, col): Exporter.__init__(self, col) self.includeID = False def doExport(self, file): cardIds = self.cardIds() data = [] for id, flds, tags in self.col.db.execute(""" select guid, flds, tags from notes where id in (select nid from cards where cards.id in %s)""" % ids2str(cardIds)): row = [] # note id if self.includeID: row.append(str(id)) # fields row.extend([self.escapeText(f) for f in splitFields(flds)]) # tags if self.includeTags: row.append(tags.strip()) data.append("\t".join(row)) self.count = len(data) out = "\n".join(data) file.write(out.encode("utf-8")) # Anki decks ###################################################################### # media files are stored in self.mediaFiles, but not exported. class AnkiExporter(Exporter): key = _("Anki 2.0 Deck") ext = ".anki2" includeSched = False includeMedia = True def __init__(self, col): Exporter.__init__(self, col) def exportInto(self, path): # sched info+v2 scheduler not compatible w/ older clients self._v2sched = self.col.schedVer() != 1 and self.includeSched # create a new collection at the target try: os.unlink(path) except (IOError, OSError): pass self.dst = Collection(path) self.src = self.col # find cards if not self.did: cids = self.src.db.list("select id from cards") else: cids = self.src.decks.cids(self.did, children=True) # copy cards, noting used nids nids = {} data = [] for row in self.src.db.execute( "select * from cards where id in "+ids2str(cids)): nids[row[1]] = True data.append(row) # clear flags row = list(row) row[-2] = 0 self.dst.db.executemany( "insert into cards values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", data) # notes strnids = ids2str(list(nids.keys())) notedata = [] for row in self.src.db.all( "select * from notes where id in "+strnids): # remove system tags if not exporting scheduling info if not self.includeSched: row = list(row) row[5] = self.removeSystemTags(row[5]) notedata.append(row) self.dst.db.executemany( "insert into notes values (?,?,?,?,?,?,?,?,?,?,?)", notedata) # models used by the notes mids = self.dst.db.list("select distinct mid from notes where id in "+ strnids) # card history and revlog if self.includeSched: data = self.src.db.all( "select * from revlog where cid in "+ids2str(cids)) self.dst.db.executemany( "insert into revlog values (?,?,?,?,?,?,?,?,?)", data) else: # need to reset card state self.dst.sched.resetCards(cids) # models - start with zero self.dst.models.models = {} for m in self.src.models.all(): if int(m['id']) in mids: self.dst.models.update(m) # decks if not self.did: dids = [] else: dids = [self.did] + [ x[1] for x in self.src.decks.children(self.did)] dconfs = {} for d in self.src.decks.all(): if str(d['id']) == "1": continue if dids and d['id'] not in dids: continue if not d['dyn'] and d['conf'] != 1: if self.includeSched: dconfs[d['conf']] = True if not self.includeSched: # scheduling not included, so reset deck settings to default d = dict(d) d['conf'] = 1 self.dst.decks.update(d) # copy used deck confs for dc in self.src.decks.allConf(): if dc['id'] in dconfs: self.dst.decks.updateConf(dc) # find used media media = {} self.mediaDir = self.src.media.dir() if self.includeMedia: for row in notedata: flds = row[6] mid = row[2] for file in self.src.media.filesInStr(mid, flds): # skip files in subdirs if file != os.path.basename(file): continue media[file] = True if self.mediaDir: for fname in os.listdir(self.mediaDir): path = os.path.join(self.mediaDir, fname) if os.path.isdir(path): continue if fname.startswith("_"): # Scan all models in mids for reference to fname for m in self.src.models.all(): if int(m['id']) in mids: if self._modelHasMedia(m, fname): media[fname] = True break self.mediaFiles = list(media.keys()) self.dst.crt = self.src.crt # todo: tags? self.count = self.dst.cardCount() self.dst.setMod() self.postExport() self.dst.close() def postExport(self): # overwrite to apply customizations to the deck before it's closed, # such as update the deck description pass def removeSystemTags(self, tags): return self.src.tags.remFromStr("marked leech", tags) def _modelHasMedia(self, model, fname): # First check the styling if fname in model["css"]: return True # If no reference to fname then check the templates as well for t in model["tmpls"]: if fname in t["qfmt"] or fname in t["afmt"]: return True return False # Packaged Anki decks ###################################################################### class AnkiPackageExporter(AnkiExporter): key = _("Anki Deck Package") ext = ".apkg" def __init__(self, col): AnkiExporter.__init__(self, col) def exportInto(self, path): # open a zip file z = zipfile.ZipFile(path, "w", zipfile.ZIP_DEFLATED, allowZip64=True) media = self.doExport(z, path) # media map z.writestr("media", json.dumps(media)) z.close() def doExport(self, z, path): # export into the anki2 file colfile = path.replace(".apkg", ".anki2") AnkiExporter.exportInto(self, colfile) if not self._v2sched: z.write(colfile, "collection.anki2") else: # fixme: remove in the future raise Exception("Please switch to the normal scheduler before exporting a single deck with scheduling information.") # prevent older clients from accessing self._addDummyCollection(z) z.write(colfile, "collection.anki21") # and media self.prepareMedia() media = self._exportMedia(z, self.mediaFiles, self.mediaDir) # tidy up intermediate files os.unlink(colfile) p = path.replace(".apkg", ".media.db2") if os.path.exists(p): os.unlink(p) os.chdir(self.mediaDir) shutil.rmtree(path.replace(".apkg", ".media")) return media def _exportMedia(self, z, files, fdir): media = {} for c, file in enumerate(files): cStr = str(c) mpath = os.path.join(fdir, file) if os.path.isdir(mpath): continue if os.path.exists(mpath): if re.search('\.svg$', file, re.IGNORECASE): z.write(mpath, cStr, zipfile.ZIP_DEFLATED) else: z.write(mpath, cStr, zipfile.ZIP_STORED) media[cStr] = file runHook("exportedMediaFiles", c) return media def prepareMedia(self): # chance to move each file in self.mediaFiles into place before media # is zipped up pass # create a dummy collection to ensure older clients don't try to read # data they don't understand def _addDummyCollection(self, zip): path = namedtmp("dummy.anki2") c = Collection(path) n = c.newNote() n['Front'] = "This file requires a newer version of Anki." c.addNote(n) c.save() c.close() zip.write(path, "collection.anki2") os.unlink(path) # Collection package ###################################################################### class AnkiCollectionPackageExporter(AnkiPackageExporter): key = _("Anki Collection Package") ext = ".colpkg" verbatim = True includeSched = None def __init__(self, col): AnkiPackageExporter.__init__(self, col) def doExport(self, z, path): # close our deck & write it into the zip file, and reopen self.count = self.col.cardCount() v2 = self.col.schedVer() != 1 self.col.close() if not v2: z.write(self.col.path, "collection.anki2") else: self._addDummyCollection(z) z.write(self.col.path, "collection.anki21") self.col.reopen() # copy all media if not self.includeMedia: return {} mdir = self.col.media.dir() return self._exportMedia(z, os.listdir(mdir), mdir) # Export modules ########################################################################## def exporters(): def id(obj): return ("%s (*%s)" % (obj.key, obj.ext), obj) exps = [ id(AnkiCollectionPackageExporter), id(AnkiPackageExporter), id(TextNoteExporter), id(TextCardExporter), ] runHook("exportersList", exps) return exps anki-2.1.0+dfsg~b36/anki/find.py000066400000000000000000000433321323611211500163000ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import re import sre_constants from anki.utils import ids2str, splitFields, joinFields, intTime, fieldChecksum, stripHTMLMedia from anki.consts import * from anki.hooks import * # Find ########################################################################## class Finder: def __init__(self, col): self.col = col self.search = dict( added=self._findAdded, card=self._findTemplate, deck=self._findDeck, mid=self._findMid, nid=self._findNids, cid=self._findCids, note=self._findModel, prop=self._findProp, rated=self._findRated, tag=self._findTag, dupe=self._findDupes, flag=self._findFlag, ) self.search['is'] = self._findCardState runHook("search", self.search) def findCards(self, query, order=False): "Return a list of card ids for QUERY." tokens = self._tokenize(query) preds, args = self._where(tokens) if preds is None: raise Exception("invalidSearch") order, rev = self._order(order) sql = self._query(preds, order) try: res = self.col.db.list(sql, *args) except: # invalid grouping return [] if rev: res.reverse() return res def findNotes(self, query): tokens = self._tokenize(query) preds, args = self._where(tokens) if preds is None: return [] if preds: preds = "(" + preds + ")" else: preds = "1" sql = """ select distinct(n.id) from cards c, notes n where c.nid=n.id and """+preds try: res = self.col.db.list(sql, *args) except: # invalid grouping return [] return res # Tokenizing ###################################################################### def _tokenize(self, query): inQuote = False tokens = [] token = "" for c in query: # quoted text if c in ("'", '"'): if inQuote: if c == inQuote: inQuote = False else: token += c elif token: # quotes are allowed to start directly after a : if token[-1] == ":": inQuote = c else: token += c else: inQuote = c # separator (space and ideographic space) elif c in (" ", '\u3000'): if inQuote: token += c elif token: # space marks token finished tokens.append(token) token = "" # nesting elif c in ("(", ")"): if inQuote: token += c else: if c == ")" and token: tokens.append(token) token = "" tokens.append(c) # negation elif c == "-": if token: token += c elif not tokens or tokens[-1] != "-": tokens.append("-") # normal character else: token += c # if we finished in a token, add it if token: tokens.append(token) return tokens # Query building ###################################################################### def _where(self, tokens): # state and query s = dict(isnot=False, isor=False, join=False, q="", bad=False) args = [] def add(txt, wrap=True): # failed command? if not txt: # if it was to be negated then we can just ignore it if s['isnot']: s['isnot'] = False return else: s['bad'] = True return elif txt == "skip": return # do we need a conjunction? if s['join']: if s['isor']: s['q'] += " or " s['isor'] = False else: s['q'] += " and " if s['isnot']: s['q'] += " not " s['isnot'] = False if wrap: txt = "(" + txt + ")" s['q'] += txt s['join'] = True for token in tokens: if s['bad']: return None, None # special tokens if token == "-": s['isnot'] = True elif token.lower() == "or": s['isor'] = True elif token == "(": add(token, wrap=False) s['join'] = False elif token == ")": s['q'] += ")" # commands elif ":" in token: cmd, val = token.split(":", 1) cmd = cmd.lower() if cmd in self.search: add(self.search[cmd]((val, args))) else: add(self._findField(cmd, val)) # normal text search else: add(self._findText(token, args)) if s['bad']: return None, None return s['q'], args def _query(self, preds, order): # can we skip the note table? if "n." not in preds and "n." not in order: sql = "select c.id from cards c where " else: sql = "select c.id from cards c, notes n where c.nid=n.id and " # combine with preds if preds: sql += "(" + preds + ")" else: sql += "1" # order if order: sql += " " + order return sql # Ordering ###################################################################### def _order(self, order): if not order: return "", False elif order is not True: # custom order string provided return " order by " + order, False # use deck default type = self.col.conf['sortType'] sort = None if type.startswith("note"): if type == "noteCrt": sort = "n.id, c.ord" elif type == "noteMod": sort = "n.mod, c.ord" elif type == "noteFld": sort = "n.sfld collate nocase, c.ord" elif type.startswith("card"): if type == "cardMod": sort = "c.mod" elif type == "cardReps": sort = "c.reps" elif type == "cardDue": sort = "c.type, c.due" elif type == "cardEase": sort = "c.factor" elif type == "cardLapses": sort = "c.lapses" elif type == "cardIvl": sort = "c.ivl" if not sort: # deck has invalid sort order; revert to noteCrt sort = "n.id, c.ord" return " order by " + sort, self.col.conf['sortBackwards'] # Commands ###################################################################### def _findTag(self, args): (val, args) = args if val == "none": return 'n.tags = ""' val = val.replace("*", "%") if not val.startswith("%"): val = "% " + val if not val.endswith("%") or val.endswith('\\%'): val += " %" args.append(val) return "n.tags like ? escape '\\'" def _findCardState(self, args): (val, args) = args if val in ("review", "new", "learn"): if val == "review": n = 2 elif val == "new": n = 0 else: return "queue in (1, 3)" return "type = %d" % n elif val == "suspended": return "c.queue = -1" elif val == "buried": return "c.queue in (-2, -3)" elif val == "due": return """ (c.queue in (2,3) and c.due <= %d) or (c.queue = 1 and c.due <= %d)""" % ( self.col.sched.today, self.col.sched.dayCutoff) def _findFlag(self, args): (val, args) = args if not val or val not in "01234": return val = int(val) mask = 2**3 - 1 return "(c.flags & %d) == %d" % (mask, val) def _findRated(self, args): # days(:optional_ease) (val, args) = args r = val.split(":") try: days = int(r[0]) except ValueError: return days = min(days, 31) # ease ease = "" if len(r) > 1: if r[1] not in ("1", "2", "3", "4"): return ease = "and ease=%s" % r[1] cutoff = (self.col.sched.dayCutoff - 86400*days)*1000 return ("c.id in (select cid from revlog where id>%d %s)" % (cutoff, ease)) def _findAdded(self, args): (val, args) = args try: days = int(val) except ValueError: return cutoff = (self.col.sched.dayCutoff - 86400*days)*1000 return "c.id > %d" % cutoff def _findProp(self, args): # extract (val, args) = args m = re.match("(^.+?)(<=|>=|!=|=|<|>)(.+?$)", val) if not m: return prop, cmp, val = m.groups() prop = prop.lower() # is val valid? try: if prop == "ease": val = float(val) else: val = int(val) except ValueError: return # is prop valid? if prop not in ("due", "ivl", "reps", "lapses", "ease"): return # query q = [] if prop == "due": val += self.col.sched.today # only valid for review/daily learning q.append("(c.queue in (2,3))") elif prop == "ease": prop = "factor" val = int(val*1000) q.append("(%s %s %s)" % (prop, cmp, val)) return " and ".join(q) def _findText(self, val, args): val = val.replace("*", "%") args.append("%"+val+"%") args.append("%"+val+"%") return "(n.sfld like ? escape '\\' or n.flds like ? escape '\\')" def _findNids(self, args): (val, args) = args if re.search("[^0-9,]", val): return return "n.id in (%s)" % val def _findCids(self, args): (val, args) = args if re.search("[^0-9,]", val): return return "c.id in (%s)" % val def _findMid(self, args): (val, args) = args if re.search("[^0-9]", val): return return "n.mid = %s" % val def _findModel(self, args): (val, args) = args ids = [] val = val.lower() for m in self.col.models.all(): if m['name'].lower() == val: ids.append(m['id']) return "n.mid in %s" % ids2str(ids) def _findDeck(self, args): # if searching for all decks, skip (val, args) = args if val == "*": return "skip" # deck types elif val == "filtered": return "c.odid" def dids(did): if not did: return None return [did] + [a[1] for a in self.col.decks.children(did)] # current deck? ids = None if val.lower() == "current": ids = dids(self.col.decks.current()['id']) elif "*" not in val: # single deck ids = dids(self.col.decks.id(val, create=False)) else: # wildcard ids = set() val = re.escape(val).replace(r"\*", ".*") for d in self.col.decks.all(): if re.match("(?i)"+val, d['name']): ids.update(dids(d['id'])) if not ids: return sids = ids2str(ids) return "c.did in %s or c.odid in %s" % (sids, sids) def _findTemplate(self, args): # were we given an ordinal number? (val, args) = args try: num = int(val) - 1 except: num = None if num is not None: return "c.ord = %d" % num # search for template names lims = [] for m in self.col.models.all(): for t in m['tmpls']: if t['name'].lower() == val.lower(): if m['type'] == MODEL_CLOZE: # if the user has asked for a cloze card, we want # to give all ordinals, so we just limit to the # model instead lims.append("(n.mid = %s)" % m['id']) else: lims.append("(n.mid = %s and c.ord = %s)" % ( m['id'], t['ord'])) return " or ".join(lims) def _findField(self, field, val): field = field.lower() val = val.replace("*", "%") # find models that have that field mods = {} for m in self.col.models.all(): for f in m['flds']: if f['name'].lower() == field: mods[str(m['id'])] = (m, f['ord']) if not mods: # nothing has that field return # gather nids regex = re.escape(val).replace("_", ".").replace("\\%", ".*") nids = [] for (id,mid,flds) in self.col.db.execute(""" select id, mid, flds from notes where mid in %s and flds like ? escape '\\'""" % ( ids2str(list(mods.keys()))), "%"+val+"%"): flds = splitFields(flds) ord = mods[str(mid)][1] strg = flds[ord] try: if re.search("(?si)^"+regex+"$", strg): nids.append(id) except sre_constants.error: return if not nids: return "0" return "n.id in %s" % ids2str(nids) def _findDupes(self, args): # caller must call stripHTMLMedia on passed val (val, args) = args try: mid, val = val.split(",", 1) except OSError: return csum = fieldChecksum(val) nids = [] for nid, flds in self.col.db.execute( "select id, flds from notes where mid=? and csum=?", mid, csum): if stripHTMLMedia(splitFields(flds)[0]) == val: nids.append(nid) return "n.id in %s" % ids2str(nids) # Find and replace ########################################################################## def findReplace(col, nids, src, dst, regex=False, field=None, fold=True): "Find and replace fields in a note." mmap = {} if field: for m in col.models.all(): for f in m['flds']: if f['name'] == field: mmap[str(m['id'])] = f['ord'] if not mmap: return 0 # find and gather replacements if not regex: src = re.escape(src) if fold: src = "(?i)"+src regex = re.compile(src) def repl(str): return re.sub(regex, dst, str) d = [] snids = ids2str(nids) nids = [] for nid, mid, flds in col.db.execute( "select id, mid, flds from notes where id in "+snids): origFlds = flds # does it match? sflds = splitFields(flds) if field: try: ord = mmap[str(mid)] sflds[ord] = repl(sflds[ord]) except KeyError: # note doesn't have that field continue else: for c in range(len(sflds)): sflds[c] = repl(sflds[c]) flds = joinFields(sflds) if flds != origFlds: nids.append(nid) d.append(dict(nid=nid,flds=flds,u=col.usn(),m=intTime())) if not d: return 0 # replace col.db.executemany( "update notes set flds=:flds,mod=:m,usn=:u where id=:nid", d) col.updateFieldCache(nids) col.genCards(nids) return len(d) def fieldNames(col, downcase=True): fields = set() names = [] for m in col.models.all(): for f in m['flds']: if f['name'].lower() not in fields: names.append(f['name']) fields.add(f['name'].lower()) if downcase: return list(fields) return names # Find duplicates ########################################################################## # returns array of ("dupestr", [nids]) def findDupes(col, fieldName, search=""): # limit search to notes with applicable field name if search: search = "("+search+") " search += "'%s:*'" % fieldName # go through notes vals = {} dupes = [] fields = {} def ordForMid(mid): if mid not in fields: model = col.models.get(mid) for c, f in enumerate(model['flds']): if f['name'].lower() == fieldName.lower(): fields[mid] = c break return fields[mid] for nid, mid, flds in col.db.all( "select id, mid, flds from notes where id in "+ids2str( col.findNotes(search))): flds = splitFields(flds) ord = ordForMid(mid) if ord is None: continue val = flds[ord] val = stripHTMLMedia(val) # empty does not count as duplicate if not val: continue if val not in vals: vals[val] = [] vals[val].append(nid) if len(vals[val]) == 2: dupes.append((val, vals[val])) return dupes anki-2.1.0+dfsg~b36/anki/hooks.py000066400000000000000000000036521323611211500165040ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html """\ Hooks - hook management and tools for extending Anki ============================================================================== To find available hooks, grep for runHook and runFilter in the source code. Instrumenting allows you to modify functions that don't have hooks available. If you call wrap() with pos='around', the original function will not be called automatically but can be called with _old(). """ import decorator # Hooks ############################################################################## _hooks = {} def runHook(hook, *args): "Run all functions on hook." hook = _hooks.get(hook, None) if hook: for func in hook: func(*args) def runFilter(hook, arg, *args): hook = _hooks.get(hook, None) if hook: for func in hook: arg = func(arg, *args) return arg def addHook(hook, func): "Add a function to hook. Ignore if already on hook." if not _hooks.get(hook, None): _hooks[hook] = [] if func not in _hooks[hook]: _hooks[hook].append(func) def remHook(hook, func): "Remove a function if is on hook." hook = _hooks.get(hook, []) if func in hook: hook.remove(func) # Instrumenting ############################################################################## def wrap(old, new, pos="after"): "Override an existing function." def repl(*args, **kwargs): if pos == "after": old(*args, **kwargs) return new(*args, **kwargs) elif pos == "before": new(*args, **kwargs) return old(*args, **kwargs) else: return new(_old=old, *args, **kwargs) def decorator_wrapper(f, *args, **kwargs): return repl(*args, **kwargs) return decorator.decorator(decorator_wrapper)(old) anki-2.1.0+dfsg~b36/anki/importing/000077500000000000000000000000001323611211500170115ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/anki/importing/__init__.py000066400000000000000000000015001323611211500211160ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from anki.importing.csvfile import TextImporter from anki.importing.apkg import AnkiPackageImporter from anki.importing.anki2 import Anki2Importer from anki.importing.supermemo_xml import SupermemoXmlImporter from anki.importing.mnemo import MnemosyneImporter from anki.importing.pauker import PaukerImporter from anki.lang import _ Importers = ( (_("Text separated by tabs or semicolons (*)"), TextImporter), (_("Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)"), AnkiPackageImporter), (_("Mnemosyne 2.0 Deck (*.db)"), MnemosyneImporter), (_("Supermemo XML export (*.xml)"), SupermemoXmlImporter), (_("Pauker 1.8 Lesson (*.pau.gz)"), PaukerImporter), ) anki-2.1.0+dfsg~b36/anki/importing/anki2.py000066400000000000000000000364121323611211500203750ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import os import unicodedata from anki import Collection from anki.utils import intTime, splitFields, joinFields, incGuid from anki.importing.base import Importer from anki.lang import _ from anki.lang import ngettext GUID = 1 MID = 2 MOD = 3 class Anki2Importer(Importer): needMapper = False deckPrefix = None allowUpdate = True def run(self, media=None): self._prepareFiles() if media is not None: # Anki1 importer has provided us with a custom media folder self.src.media._dir = media try: self._import() finally: self.src.close(save=False) def _prepareFiles(self): importingV2 = self.file.endswith(".anki21") if importingV2 and self.col.schedVer() == 1: raise Exception("V2 scheduler must be enabled to import this file.") self.dst = self.col self.src = Collection(self.file) if not importingV2 and self.col.schedVer() != 1: # if v2 scheduler enabled, can't import v1 decks that include scheduling if self.src.db.scalar("select 1 from cards where queue != 0 limit 1"): self.src.close(save=False) raise Exception("V2 scheduler can not import V1 decks with scheduling included.") def _import(self): self._decks = {} if self.deckPrefix: id = self.dst.decks.id(self.deckPrefix) self.dst.decks.select(id) self._prepareTS() self._prepareModels() self._importNotes() self._importCards() self._importStaticMedia() self._postImport() self.dst.db.setAutocommit(True) self.dst.db.execute("vacuum") self.dst.db.execute("analyze") self.dst.db.setAutocommit(False) # Notes ###################################################################### def _importNotes(self): # build guid -> (id,mod,mid) hash & map of existing note ids self._notes = {} existing = {} for id, guid, mod, mid in self.dst.db.execute( "select id, guid, mod, mid from notes"): self._notes[guid] = (id, mod, mid) existing[id] = True # we may need to rewrite the guid if the model schemas don't match, # so we need to keep track of the changes for the card import stage self._changedGuids = {} # we ignore updates to changed schemas. we need to note the ignored # guids, so we avoid importing invalid cards self._ignoredGuids = {} # iterate over source collection add = [] update = [] dirty = [] usn = self.dst.usn() dupes = 0 dupesIgnored = [] for note in self.src.db.execute( "select * from notes"): # turn the db result into a mutable list note = list(note) shouldAdd = self._uniquifyNote(note) if shouldAdd: # ensure id is unique while note[0] in existing: note[0] += 999 existing[note[0]] = True # bump usn note[4] = usn # update media references in case of dupes note[6] = self._mungeMedia(note[MID], note[6]) add.append(note) dirty.append(note[0]) # note we have the added the guid self._notes[note[GUID]] = (note[0], note[3], note[MID]) else: # a duplicate or changed schema - safe to update? dupes += 1 if self.allowUpdate: oldNid, oldMod, oldMid = self._notes[note[GUID]] # will update if incoming note more recent if oldMod < note[MOD]: # safe if note types identical if oldMid == note[MID]: # incoming note should use existing id note[0] = oldNid note[4] = usn note[6] = self._mungeMedia(note[MID], note[6]) update.append(note) dirty.append(note[0]) else: dupesIgnored.append("%s: %s" % ( self.col.models.get(oldMid)['name'], note[6].replace("\x1f", ",") )) self._ignoredGuids[note[GUID]] = True if dupes: up = len(update) self.log.append(_("Updated %(a)d of %(b)d existing notes.") % dict( a=len(update), b=dupes)) if dupesIgnored: self.log.append(_("Some updates were ignored because note type has changed:")) self.log.extend(dupesIgnored) # export info for calling code self.dupes = dupes self.added = len(add) self.updated = len(update) # add to col self.dst.db.executemany( "insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)", add) self.dst.db.executemany( "insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)", update) self.dst.updateFieldCache(dirty) self.dst.tags.registerNotes(dirty) # determine if note is a duplicate, and adjust mid and/or guid as required # returns true if note should be added def _uniquifyNote(self, note): origGuid = note[GUID] srcMid = note[MID] dstMid = self._mid(srcMid) # duplicate schemas? if srcMid == dstMid: return origGuid not in self._notes # differing schemas and note doesn't exist? note[MID] = dstMid if origGuid not in self._notes: return True # schema changed; don't import self._ignoredGuids[origGuid] = True return False # Models ###################################################################### # Models in the two decks may share an ID but not a schema, so we need to # compare the field & template signature rather than just rely on ID. If # the schemas don't match, we increment the mid and try again, creating a # new model if necessary. def _prepareModels(self): "Prepare index of schema hashes." self._modelMap = {} def _mid(self, srcMid): "Return local id for remote MID." # already processed this mid? if srcMid in self._modelMap: return self._modelMap[srcMid] mid = srcMid srcModel = self.src.models.get(srcMid) srcScm = self.src.models.scmhash(srcModel) while True: # missing from target col? if not self.dst.models.have(mid): # copy it over model = srcModel.copy() model['id'] = mid model['usn'] = self.col.usn() self.dst.models.update(model) break # there's an existing model; do the schemas match? dstModel = self.dst.models.get(mid) dstScm = self.dst.models.scmhash(dstModel) if srcScm == dstScm: # copy styling changes over if newer if srcModel['mod'] > dstModel['mod']: model = srcModel.copy() model['id'] = mid model['usn'] = self.col.usn() self.dst.models.update(model) break # as they don't match, try next id mid += 1 # save map and return new mid self._modelMap[srcMid] = mid return mid # Decks ###################################################################### def _did(self, did): "Given did in src col, return local id." # already converted? if did in self._decks: return self._decks[did] # get the name in src g = self.src.decks.get(did) name = g['name'] # if there's a prefix, replace the top level deck if self.deckPrefix: tmpname = "::".join(name.split("::")[1:]) name = self.deckPrefix if tmpname: name += "::" + tmpname # manually create any parents so we can pull in descriptions head = "" for parent in name.split("::")[:-1]: if head: head += "::" head += parent idInSrc = self.src.decks.id(head) self._did(idInSrc) # create in local newid = self.dst.decks.id(name) # pull conf over if 'conf' in g and g['conf'] != 1: conf = self.src.decks.getConf(g['conf']) self.dst.decks.save(conf) self.dst.decks.updateConf(conf) g2 = self.dst.decks.get(newid) g2['conf'] = g['conf'] self.dst.decks.save(g2) # save desc deck = self.dst.decks.get(newid) deck['desc'] = g['desc'] self.dst.decks.save(deck) # add to deck map and return self._decks[did] = newid return newid # Cards ###################################################################### def _importCards(self): # build map of (guid, ord) -> cid and used id cache self._cards = {} existing = {} for guid, ord, cid in self.dst.db.execute( "select f.guid, c.ord, c.id from cards c, notes f " "where c.nid = f.id"): existing[cid] = True self._cards[(guid, ord)] = cid # loop through src cards = [] revlog = [] cnt = 0 usn = self.dst.usn() aheadBy = self.src.sched.today - self.dst.sched.today for card in self.src.db.execute( "select f.guid, f.mid, c.* from cards c, notes f " "where c.nid = f.id"): guid = card[0] if guid in self._changedGuids: guid = self._changedGuids[guid] if guid in self._ignoredGuids: continue # does the card's note exist in dst col? if guid not in self._notes: continue dnid = self._notes[guid] # does the card already exist in the dst col? ord = card[5] if (guid, ord) in self._cards: # fixme: in future, could update if newer mod time continue # doesn't exist. strip off note info, and save src id for later card = list(card[2:]) scid = card[0] # ensure the card id is unique while card[0] in existing: card[0] += 999 existing[card[0]] = True # update cid, nid, etc card[1] = self._notes[guid][0] card[2] = self._did(card[2]) card[4] = intTime() card[5] = usn # review cards have a due date relative to collection if card[7] in (2, 3) or card[6] == 2: card[8] -= aheadBy # if odid true, convert card from filtered to normal if card[15]: # odid card[15] = 0 # odue card[8] = card[14] card[14] = 0 # queue if card[6] == 1: # type card[7] = 0 else: card[7] = card[6] # type if card[6] == 1: card[6] = 0 cards.append(card) # we need to import revlog, rewriting card ids and bumping usn for rev in self.src.db.execute( "select * from revlog where cid = ?", scid): rev = list(rev) rev[1] = card[0] rev[2] = self.dst.usn() revlog.append(rev) cnt += 1 # apply self.dst.db.executemany(""" insert or ignore into cards values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)""", cards) self.dst.db.executemany(""" insert or ignore into revlog values (?,?,?,?,?,?,?,?,?)""", revlog) self.log.append(ngettext("%d card imported.", "%d cards imported.", cnt) % cnt) # Media ###################################################################### # note: this func only applies to imports of .anki2. for .apkg files, the # apkg importer does the copying def _importStaticMedia(self): # Import any '_foo' prefixed media files regardless of whether # they're used on notes or not dir = self.src.media.dir() if not os.path.exists(dir): return for fname in os.listdir(dir): if fname.startswith("_") and not self.dst.media.have(fname): self._writeDstMedia(fname, self._srcMediaData(fname)) def _mediaData(self, fname, dir=None): if not dir: dir = self.src.media.dir() path = os.path.join(dir, fname) try: with open(path, "rb") as f: return f.read() except (IOError, OSError): return def _srcMediaData(self, fname): "Data for FNAME in src collection." return self._mediaData(fname, self.src.media.dir()) def _dstMediaData(self, fname): "Data for FNAME in dst collection." return self._mediaData(fname, self.dst.media.dir()) def _writeDstMedia(self, fname, data): path = os.path.join(self.dst.media.dir(), unicodedata.normalize("NFC", fname)) try: with open(path, "wb") as f: f.write(data) except (OSError, IOError): # the user likely used subdirectories pass def _mungeMedia(self, mid, fields): fields = splitFields(fields) def repl(match): fname = match.group("fname") srcData = self._srcMediaData(fname) dstData = self._dstMediaData(fname) if not srcData: # file was not in source, ignore return match.group(0) # if model-local file exists from a previous import, use that name, ext = os.path.splitext(fname) lname = "%s_%s%s" % (name, mid, ext) if self.dst.media.have(lname): return match.group(0).replace(fname, lname) # if missing or the same, pass unmodified elif not dstData or srcData == dstData: # need to copy? if not dstData: self._writeDstMedia(fname, srcData) return match.group(0) # exists but does not match, so we need to dedupe self._writeDstMedia(lname, srcData) return match.group(0).replace(fname, lname) for i in range(len(fields)): fields[i] = self.dst.media.transformNames(fields[i], repl) return joinFields(fields) # Post-import cleanup ###################################################################### def _postImport(self): for did in list(self._decks.values()): self.col.sched.maybeRandomizeDeck(did) # make sure new position is correct self.dst.conf['nextPos'] = self.dst.db.scalar( "select max(due)+1 from cards where type = 0") or 0 self.dst.save() anki-2.1.0+dfsg~b36/anki/importing/apkg.py000066400000000000000000000034511323611211500203100ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import zipfile, os import unicodedata from anki.utils import tmpfile, json from anki.importing.anki2 import Anki2Importer class AnkiPackageImporter(Anki2Importer): def run(self): # extract the deck from the zip file self.zip = z = zipfile.ZipFile(self.file) # v2 scheduler? try: z.getinfo("collection.anki21") suffix = ".anki21" except KeyError: suffix = ".anki2" col = z.read("collection"+suffix) colpath = tmpfile(suffix=suffix) with open(colpath, "wb") as f: f.write(col) self.file = colpath # we need the media dict in advance, and we'll need a map of fname -> # number to use during the import self.nameToNum = {} dir = self.col.media.dir() for k, v in list(json.loads(z.read("media").decode("utf8")).items()): path = os.path.abspath(os.path.join(dir, v)) if os.path.commonprefix([path, dir]) != dir: raise Exception("Invalid file") self.nameToNum[unicodedata.normalize("NFC",v)] = k # run anki2 importer Anki2Importer.run(self) # import static media for file, c in list(self.nameToNum.items()): if not file.startswith("_") and not file.startswith("latex-"): continue path = os.path.join(self.col.media.dir(), file) if not os.path.exists(path): with open(path, "wb") as f: f.write(z.read(c)) def _srcMediaData(self, fname): if fname in self.nameToNum: return self.zip.read(self.nameToNum[fname]) return None anki-2.1.0+dfsg~b36/anki/importing/base.py000066400000000000000000000016301323611211500202750ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from anki.utils import maxID # Base importer ########################################################################## class Importer: needMapper = False needDelimiter = False def __init__(self, col, file): self.file = file self.log = [] self.col = col self.total = 0 def run(self): pass # Timestamps ###################################################################### # It's too inefficient to check for existing ids on every object, # and a previous import may have created timestamps in the future, so we # need to make sure our starting point is safe. def _prepareTS(self): self._ts = maxID(self.dst.db) def ts(self): self._ts += 1 return self._ts anki-2.1.0+dfsg~b36/anki/importing/csvfile.py000066400000000000000000000103031323611211500210130ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import codecs import csv import re from anki.importing.noteimp import NoteImporter, ForeignNote from anki.lang import _ class TextImporter(NoteImporter): needDelimiter = True patterns = ("\t", "|", ",", ";", ":") def __init__(self, *args): NoteImporter.__init__(self, *args) self.lines = None self.fileobj = None self.delimiter = None self.tagsToAdd = [] def foreignNotes(self): self.open() # process all lines log = [] notes = [] lineNum = 0 ignored = 0 if self.delimiter: reader = csv.reader(self.data, delimiter=self.delimiter, doublequote=True) else: reader = csv.reader(self.data, self.dialect, doublequote=True) try: for row in reader: if len(row) != self.numFields: if row: log.append(_( "'%(row)s' had %(num1)d fields, " "expected %(num2)d") % { "row": " ".join(row), "num1": len(row), "num2": self.numFields, }) ignored += 1 continue note = self.noteFromFields(row) notes.append(note) except (csv.Error) as e: log.append(_("Aborted: %s") % str(e)) self.log = log self.ignored = ignored self.fileobj.close() return notes def open(self): "Parse the top line and determine the pattern and number of fields." # load & look for the right pattern self.cacheFile() def cacheFile(self): "Read file into self.lines if not already there." if not self.fileobj: self.openFile() def openFile(self): self.dialect = None self.fileobj = open(self.file, "r", encoding='utf-8-sig') self.data = self.fileobj.read() def sub(s): return re.sub("^\#.*$", "__comment", s) self.data = [sub(x)+"\n" for x in self.data.split("\n") if sub(x) != "__comment"] if self.data: if self.data[0].startswith("tags:"): tags = str(self.data[0][5:]).strip() self.tagsToAdd = tags.split(" ") del self.data[0] self.updateDelimiter() if not self.dialect and not self.delimiter: raise Exception("unknownFormat") def updateDelimiter(self): def err(): raise Exception("unknownFormat") self.dialect = None sniffer = csv.Sniffer() if not self.delimiter: try: self.dialect = sniffer.sniff("\n".join(self.data[:10]), self.patterns) except: try: self.dialect = sniffer.sniff(self.data[0], self.patterns) except: pass if self.dialect: try: reader = csv.reader(self.data, self.dialect, doublequote=True) except: err() else: if not self.delimiter: if "\t" in self.data[0]: self.delimiter = "\t" elif ";" in self.data[0]: self.delimiter = ";" elif "," in self.data[0]: self.delimiter = "," else: self.delimiter = " " reader = csv.reader(self.data, delimiter=self.delimiter, doublequote=True) try: while True: row = next(reader) if row: self.numFields = len(row) break except: err() self.initMapping() def fields(self): "Number of fields." self.open() return self.numFields def noteFromFields(self, fields): note = ForeignNote() note.fields.extend([x for x in fields]) note.tags.extend(self.tagsToAdd) return note anki-2.1.0+dfsg~b36/anki/importing/mnemo.py000066400000000000000000000155271323611211500205100ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import time, re from anki.db import DB from anki.importing.noteimp import NoteImporter, ForeignNote, ForeignCard from anki.stdmodels import addBasicModel, addClozeModel from anki.lang import ngettext class MnemosyneImporter(NoteImporter): needMapper = False update = False allowHTML = True def run(self): db = DB(self.file) ver = db.scalar( "select value from global_variables where key='version'") if not ver.startswith('Mnemosyne SQL 1') and ver not in ("2","3"): self.log.append(_("File version unknown, trying import anyway.")) # gather facts into temp objects curid = None notes = {} note = None for _id, id, k, v in db.execute(""" select _id, id, key, value from facts f, data_for_fact d where f._id=d._fact_id"""): if id != curid: if note: notes[note['_id']] = note note = {'_id': _id} curid = id note[k] = v if note: notes[note['_id']] = note # gather cards front = [] frontback = [] vocabulary = [] cloze = {} for row in db.execute(""" select _fact_id, fact_view_id, tags, next_rep, last_rep, easiness, acq_reps+ret_reps, lapses, card_type_id from cards"""): # categorize note note = notes[row[0]] if row[1].endswith(".1"): if row[1].startswith("1.") or row[1].startswith("1::"): front.append(note) elif row[1].startswith("2.") or row[1].startswith("2::"): frontback.append(note) elif row[1].startswith("3.") or row[1].startswith("3::"): vocabulary.append(note) elif row[1].startswith("5.1"): cloze[row[0]] = note # check for None to fix issue where import can error out rawTags = row[2] if rawTags is None: rawTags = "" # merge tags into note tags = rawTags.replace(", ", "\x1f").replace(" ", "_") tags = tags.replace("\x1f", " ") if "tags" not in note: note['tags'] = [] note['tags'] += self.col.tags.split(tags) note['tags'] = self.col.tags.canonify(note['tags']) # if it's a new card we can go with the defaults if row[3] == -1: continue # add the card c = ForeignCard() c.factor = int(row[5]*1000) c.reps = row[6] c.lapses = row[7] # ivl is inferred in mnemosyne next, prev = row[3:5] c.ivl = max(1, (next - prev)/86400) # work out how long we've got left rem = int((next - time.time())/86400) c.due = self.col.sched.today+rem # get ord m = re.search(".(\d+)$", row[1]) ord = int(m.group(1))-1 if 'cards' not in note: note['cards'] = {} note['cards'][ord] = c self._addFronts(front) total = self.total self._addFrontBacks(frontback) total += self.total self._addVocabulary(vocabulary) self.total += total self._addCloze(cloze) self.total += total self.log.append(ngettext("%d note imported.", "%d notes imported.", self.total) % self.total) def fields(self): return self._fields def _mungeField(self, fld): # \n -> br fld = re.sub("\r?\n", "
", fld) # latex differences fld = re.sub("(?i)<(/?(\$|\$\$|latex))>", "[\\1]", fld) # audio differences fld = re.sub(")?", "[sound:\\1]", fld) return fld def _addFronts(self, notes, model=None, fields=("f", "b")): data = [] for orig in notes: # create a foreign note object n = ForeignNote() n.fields = [] for f in fields: fld = self._mungeField(orig.get(f, '')) n.fields.append(fld) n.tags = orig['tags'] n.cards = orig.get('cards', {}) data.append(n) # add a basic model if not model: model = addBasicModel(self.col) model['name'] = "Mnemosyne-FrontOnly" mm = self.col.models mm.save(model) mm.setCurrent(model) self.model = model self._fields = len(model['flds']) self.initMapping() # import self.importNotes(data) def _addFrontBacks(self, notes): m = addBasicModel(self.col) m['name'] = "Mnemosyne-FrontBack" mm = self.col.models t = mm.newTemplate("Back") t['qfmt'] = "{{Back}}" t['afmt'] = t['qfmt'] + "\n\n
\n\n{{Front}}" mm.addTemplate(m, t) self._addFronts(notes, m) def _addVocabulary(self, notes): mm = self.col.models m = mm.new("Mnemosyne-Vocabulary") for f in "Expression", "Pronunciation", "Meaning", "Notes": fm = mm.newField(f) mm.addField(m, fm) t = mm.newTemplate("Recognition") t['qfmt'] = "{{Expression}}" t['afmt'] = t['qfmt'] + """\n\n
\n\n\ {{Pronunciation}}
\n{{Meaning}}
\n{{Notes}}""" mm.addTemplate(m, t) t = mm.newTemplate("Production") t['qfmt'] = "{{Meaning}}" t['afmt'] = t['qfmt'] + """\n\n
\n\n\ {{Expression}}
\n{{Pronunciation}}
\n{{Notes}}""" mm.addTemplate(m, t) mm.add(m) self._addFronts(notes, m, fields=("f", "p_1", "m_1", "n")) def _addCloze(self, notes): data = [] notes = list(notes.values()) for orig in notes: # create a foreign note object n = ForeignNote() n.fields = [] fld = orig.get("text", "") fld = re.sub("\r?\n", "
", fld) state = dict(n=1) def repl(match): # replace [...] with cloze refs res = ("{{c%d::%s}}" % (state['n'], match.group(1))) state['n'] += 1 return res fld = re.sub("\[(.+?)\]", repl, fld) fld = self._mungeField(fld) n.fields.append(fld) n.fields.append("") # extra n.tags = orig['tags'] n.cards = orig.get('cards', {}) data.append(n) # add cloze model model = addClozeModel(self.col) model['name'] = "Mnemosyne-Cloze" mm = self.col.models mm.save(model) mm.setCurrent(model) self.model = model self._fields = len(model['flds']) self.initMapping() self.importNotes(data) anki-2.1.0+dfsg~b36/anki/importing/noteimp.py000066400000000000000000000247471323611211500210540ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import html import unicodedata from anki.consts import NEW_CARDS_RANDOM, STARTING_FACTOR from anki.lang import _ from anki.utils import fieldChecksum, guid64, timestampID, \ joinFields, intTime, splitFields from anki.importing.base import Importer from anki.lang import ngettext # Stores a list of fields, tags and deck ###################################################################### class ForeignNote: "An temporary object storing fields and attributes." def __init__(self): self.fields = [] self.tags = [] self.deck = None self.cards = {} # map of ord -> card class ForeignCard: def __init__(self): self.due = 0 self.ivl = 1 self.factor = STARTING_FACTOR self.reps = 0 self.lapses = 0 # Base class for CSV and similar text-based imports ###################################################################### # The mapping is list of input fields, like: # ['Expression', 'Reading', '_tags', None] # - None means that the input should be discarded # - _tags maps to note tags # If the first field of the model is not in the map, the map is invalid. # The import mode is one of: # 0: update if first field matches existing note # 1: ignore if first field matches existing note # 2: import even if first field matches existing note class NoteImporter(Importer): needMapper = True needDelimiter = False allowHTML = False importMode = 0 def __init__(self, col, file): Importer.__init__(self, col, file) self.model = col.models.current() self.mapping = None self._deckMap = {} def run(self): "Import." assert self.mapping c = self.foreignNotes() self.importNotes(c) def fields(self): "The number of fields." return 0 def initMapping(self): flds = [f['name'] for f in self.model['flds']] # truncate to provided count flds = flds[0:self.fields()] # if there's room left, add tags if self.fields() > len(flds): flds.append("_tags") # and if there's still room left, pad flds = flds + [None] * (self.fields() - len(flds)) self.mapping = flds def mappingOk(self): return self.model['flds'][0]['name'] in self.mapping def foreignNotes(self): "Return a list of foreign notes for importing." assert 0 def open(self): "Open file and ensure it's in the right format." return def importNotes(self, notes): "Convert each card into a note, apply attributes and add to col." assert self.mappingOk() # note whether tags are mapped self._tagsMapped = False for f in self.mapping: if f == "_tags": self._tagsMapped = True # gather checks for duplicate comparison csums = {} for csum, id in self.col.db.execute( "select csum, id from notes where mid = ?", self.model['id']): if csum in csums: csums[csum].append(id) else: csums[csum] = [id] firsts = {} fld0idx = self.mapping.index(self.model['flds'][0]['name']) self._fmap = self.col.models.fieldMap(self.model) self._nextID = timestampID(self.col.db, "notes") # loop through the notes updates = [] updateLog = [] updateLogTxt = _("First field matched: %s") dupeLogTxt = _("Added duplicate with first field: %s") new = [] self._ids = [] self._cards = [] self._emptyNotes = False dupeCount = 0 dupes = [] for n in notes: for c in range(len(n.fields)): if not self.allowHTML: n.fields[c] = html.escape(n.fields[c]) n.fields[c] = n.fields[c].strip() if not self.allowHTML: n.fields[c] = n.fields[c].replace("\n", "
") n.fields[c] = unicodedata.normalize("NFC", n.fields[c]) n.tags = [unicodedata.normalize("NFC", t) for t in n.tags] fld0 = n.fields[fld0idx] csum = fieldChecksum(fld0) # first field must exist if not fld0: self.log.append(_("Empty first field: %s") % " ".join(n.fields)) continue # earlier in import? if fld0 in firsts and self.importMode != 2: # duplicates in source file; log and ignore self.log.append(_("Appeared twice in file: %s") % fld0) continue firsts[fld0] = True # already exists? found = False if csum in csums: # csum is not a guarantee; have to check for id in csums[csum]: flds = self.col.db.scalar( "select flds from notes where id = ?", id) sflds = splitFields(flds) if fld0 == sflds[0]: # duplicate found = True if self.importMode == 0: data = self.updateData(n, id, sflds) if data: updates.append(data) updateLog.append(updateLogTxt % fld0) dupeCount += 1 found = True elif self.importMode == 1: dupeCount += 1 elif self.importMode == 2: # allow duplicates in this case if fld0 not in dupes: # only show message once, no matter how many # duplicates are in the collection already updateLog.append(dupeLogTxt % fld0) dupes.append(fld0) found = False # newly add if not found: data = self.newData(n) if data: new.append(data) # note that we've seen this note once already firsts[fld0] = True self.addNew(new) self.addUpdates(updates) # make sure to update sflds, etc self.col.updateFieldCache(self._ids) # generate cards if self.col.genCards(self._ids): self.log.insert(0, _( "Empty cards found. Please run Tools>Empty Cards.")) # apply scheduling updates self.updateCards() # we randomize or order here, to ensure that siblings # have the same due# did = self.col.decks.selected() conf = self.col.decks.confForDid(did) # in order due? if conf['new']['order'] == NEW_CARDS_RANDOM: self.col.sched.randomizeCards(did) else: self.col.sched.orderCards(did) part1 = ngettext("%d note added", "%d notes added", len(new)) % len(new) part2 = ngettext("%d note updated", "%d notes updated", self.updateCount) % self.updateCount if self.importMode == 0: unchanged = dupeCount - self.updateCount elif self.importMode == 1: unchanged = dupeCount else: unchanged = 0 part3 = ngettext("%d note unchanged", "%d notes unchanged", unchanged) % unchanged self.log.append("%s, %s, %s." % (part1, part2, part3)) self.log.extend(updateLog) if self._emptyNotes: self.log.append(_("""\ One or more notes were not imported, because they didn't generate any cards. \ This can happen when you have empty fields or when you have not mapped the \ content in the text file to the correct fields.""")) self.total = len(self._ids) def newData(self, n): id = self._nextID self._nextID += 1 self._ids.append(id) if not self.processFields(n): return # note id for card updates later for ord, c in list(n.cards.items()): self._cards.append((id, ord, c)) self.col.tags.register(n.tags) return [id, guid64(), self.model['id'], intTime(), self.col.usn(), self.col.tags.join(n.tags), n.fieldsStr, "", "", 0, ""] def addNew(self, rows): self.col.db.executemany( "insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)", rows) def updateData(self, n, id, sflds): self._ids.append(id) if not self.processFields(n, sflds): return if self._tagsMapped: self.col.tags.register(n.tags) tags = self.col.tags.join(n.tags) return [intTime(), self.col.usn(), n.fieldsStr, tags, id, n.fieldsStr, tags] else: return [intTime(), self.col.usn(), n.fieldsStr, id, n.fieldsStr] def addUpdates(self, rows): old = self.col.db.totalChanges() if self._tagsMapped: self.col.db.executemany(""" update notes set mod = ?, usn = ?, flds = ?, tags = ? where id = ? and (flds != ? or tags != ?)""", rows) else: self.col.db.executemany(""" update notes set mod = ?, usn = ?, flds = ? where id = ? and flds != ?""", rows) self.updateCount = self.col.db.totalChanges() - old def processFields(self, note, fields=None): if not fields: fields = [""]*len(self.model['flds']) for c, f in enumerate(self.mapping): if not f: continue elif f == "_tags": note.tags.extend(self.col.tags.split(note.fields[c])) else: sidx = self._fmap[f][0] fields[sidx] = note.fields[c] note.fieldsStr = joinFields(fields) ords = self.col.models.availOrds(self.model, note.fieldsStr) if not ords: self._emptyNotes = True return ords def updateCards(self): data = [] for nid, ord, c in self._cards: data.append((c.ivl, c.due, c.factor, c.reps, c.lapses, nid, ord)) # we assume any updated cards are reviews self.col.db.executemany(""" update cards set type = 2, queue = 2, ivl = ?, due = ?, factor = ?, reps = ?, lapses = ? where nid = ? and ord = ?""", data) anki-2.1.0+dfsg~b36/anki/importing/pauker.py000066400000000000000000000046421323611211500206600ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Andreas Klauer # License: BSD-3 import gzip, math, random, time, html import xml.etree.ElementTree as ET from anki.importing.noteimp import NoteImporter, ForeignNote, ForeignCard from anki.stdmodels import addForwardReverse ONE_DAY = 60*60*24 class PaukerImporter(NoteImporter): '''Import Pauker 1.8 Lesson (*.pau.gz)''' needMapper = False allowHTML = True def run(self): model = addForwardReverse(self.col) model['name'] = "Pauker" self.col.models.save(model) self.col.models.setCurrent(model) self.model = model self.initMapping() NoteImporter.run(self) def fields(self): '''Pauker is Front/Back''' return 2 def foreignNotes(self): '''Build and return a list of notes.''' notes = [] try: f = gzip.open(self.file) tree = ET.parse(f) lesson = tree.getroot() assert lesson.tag == "Lesson" finally: f.close() index = -4 for batch in lesson.findall('./Batch'): index += 1 for card in batch.findall('./Card'): # Create a note for this card. front = card.findtext('./FrontSide/Text') back = card.findtext('./ReverseSide/Text') note = ForeignNote() note.fields = [html.escape(x.strip()).replace('\n','
').replace(' ','  ') for x in [front,back]] notes.append(note) # Determine due date for cards. frontdue = card.find('./FrontSide[@LearnedTimestamp]') backdue = card.find('./ReverseSide[@Batch][@LearnedTimestamp]') if frontdue is not None: note.cards[0] = self._learnedCard(index, int(frontdue.attrib['LearnedTimestamp'])) if backdue is not None: note.cards[1] = self._learnedCard(int(backdue.attrib['Batch']), int(backdue.attrib['LearnedTimestamp'])) return notes def _learnedCard(self, batch, timestamp): ivl = math.exp(batch) now = time.time() due = ivl - (now - timestamp/1000.0)/ONE_DAY fc = ForeignCard() fc.due = self.col.sched.today + int(due+0.5) fc.ivl = random.randint(int(ivl*0.90), int(ivl+0.5)) fc.factor = random.randint(1500,2500) return fc anki-2.1.0+dfsg~b36/anki/importing/supermemo_xml.py000066400000000000000000000364031323611211500222650ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: petr.michalec@gmail.com # License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import sys from anki.stdmodels import addBasicModel from anki.importing.noteimp import NoteImporter, ForeignNote, ForeignCard from anki.lang import _ from anki.lang import ngettext from xml.dom import minidom from string import capwords import re, unicodedata, time class SmartDict(dict): """ See http://www.peterbe.com/plog/SmartDict Copyright 2005, Peter Bengtsson, peter@fry-it.com A smart dict can be instanciated either from a pythonic dict or an instance object (eg. SQL recordsets) but it ensures that you can do all the convenient lookups such as x.first_name, x['first_name'] or x.get('first_name'). """ def __init__(self, *a, **kw): if a: if isinstance(type(a[0]), dict): kw.update(a[0]) elif isinstance(type(a[0]), object): kw.update(a[0].__dict__) elif hasattr(a[0], '__class__') and a[0].__class__.__name__=='SmartDict': kw.update(a[0].__dict__) dict.__init__(self, **kw) self.__dict__ = self class SuperMemoElement(SmartDict): "SmartDict wrapper to store SM Element data" def __init__(self, *a, **kw): SmartDict.__init__(self, *a, **kw) #default content self.__dict__['lTitle'] = None self.__dict__['Title'] = None self.__dict__['Question'] = None self.__dict__['Answer'] = None self.__dict__['Count'] = None self.__dict__['Type'] = None self.__dict__['ID'] = None self.__dict__['Interval'] = None self.__dict__['Lapses'] = None self.__dict__['Repetitions'] = None self.__dict__['LastRepetiton'] = None self.__dict__['AFactor'] = None self.__dict__['UFactor'] = None # This is an AnkiImporter class SupermemoXmlImporter(NoteImporter): needMapper = False allowHTML = True """ Supermemo XML export's to Anki parser. Goes through a SM collection and fetch all elements. My SM collection was a big mess where topics and items were mixed. I was unable to parse my content in a regular way like for loop on minidom.getElementsByTagName() etc. My collection had also an limitation, topics were splited into branches with max 100 items on each. Learning themes were in deep structure. I wanted to have full title on each element to be stored in tags. Code should be upgrade to support importing of SM2006 exports. """ def __init__(self, *args): """Initialize internal varables. Pameters to be exposed to GUI are stored in self.META""" NoteImporter.__init__(self, *args) m = addBasicModel(self.col) m['name'] = "Supermemo" self.col.models.save(m) self.initMapping() self.lines = None self.numFields=int(2) # SmXmlParse VARIABLES self.xmldoc = None self.pieces = [] self.cntBuf = [] #to store last parsed data self.cntElm = [] #to store SM Elements data self.cntCol = [] #to store SM Colections data # store some meta info related to parse algorithm # SmartDict works like dict / class wrapper self.cntMeta = SmartDict() self.cntMeta.popTitles = False self.cntMeta.title = [] # META stores controls of import scritp, should be # exposed to import dialog. These are default values. self.META = SmartDict() self.META.resetLearningData = False # implemented self.META.onlyMemorizedItems = False # implemented self.META.loggerLevel = 2 # implemented 0no,1info,2error,3debug self.META.tagAllTopics = True self.META.pathsToBeTagged = ['English for begginers', 'Advanced English 97', 'Phrasal Verbs'] # path patterns to be tagged - in gui entered like 'Advanced English 97|My Vocablary' self.META.tagMemorizedItems = True # implemented self.META.logToStdOutput = False # implemented self.notes = [] ## TOOLS def _fudgeText(self, text): "Replace sm syntax to Anki syntax" text = text.replace("\n\r", "
") text = text.replace("\n", "
") return text def _unicode2ascii(self,str): "Remove diacritic punctuation from strings (titles)" return "".join([ c for c in unicodedata.normalize('NFKD', str) if not unicodedata.combining(c)]) def _decode_htmlescapes(self,s): """Unescape HTML code.""" #In case of bad formated html you can import MinimalSoup etc.. see btflsoup source code from bs4 import BeautifulSoup as btflsoup #my sm2004 also ecaped & char in escaped sequences. s = re.sub('&','&',s) #unescaped solitary chars < or > that were ok for minidom confuse btfl soup #s = re.sub(u'>',u'>',s) #s = re.sub(u'<',u'<',s) return str(btflsoup(s, "html.parser")) def _afactor2efactor(self, af): # Adapted from # Ranges for A-factors and E-factors af_min = 1.2 af_max = 6.9 ef_min = 1.3 ef_max = 3.3 # Sanity checks for the A-factor if af < af_min: af = af_min elif af > af_max: af = af_max # Scale af to the range 0..1 af_scaled = (af - af_min) / (af_max - af_min) # Rescale to the interval ef_min..ef_max ef = ef_min + af_scaled * (ef_max - ef_min) return ef ## DEFAULT IMPORTER METHODS def foreignNotes(self): # Load file and parse it by minidom self.loadSource(self.file) # Migrating content / time consuming part # addItemToCards is called for each sm element self.logger('Parsing started.') self.parse() self.logger('Parsing done.') # Return imported cards self.total = len(self.notes) self.log.append(ngettext("%d card imported.", "%d cards imported.", self.total) % self.total) return self.notes def fields(self): return 2 ## PARSER METHODS def addItemToCards(self,item): "This method actually do conversion" # new anki card note = ForeignNote() # clean Q and A note.fields.append(self._fudgeText(self._decode_htmlescapes(item.Question))) note.fields.append(self._fudgeText(self._decode_htmlescapes(item.Answer))) note.tags = [] # pre-process scheduling data # convert learning data if (not self.META.resetLearningData and int(item.Interval) >= 1 and getattr(item, "LastRepetition", None)): # migration of LearningData algorithm tLastrep = time.mktime(time.strptime(item.LastRepetition, '%d.%m.%Y')) tToday = time.time() card = ForeignCard() card.ivl = int(item.Interval) card.lapses = int(item.Lapses) card.reps = int(item.Repetitions) + int(item.Lapses) nextDue = tLastrep + (float(item.Interval) * 86400.0) remDays = int((nextDue - time.time())/86400) card.due = self.col.sched.today+remDays card.factor = int(self._afactor2efactor(float(item.AFactor.replace(',','.')))*1000) note.cards[0] = card # categories & tags # it's worth to have every theme (tree structure of sm collection) stored in tags, but sometimes not # you can deceide if you are going to tag all toppics or just that containing some pattern tTaggTitle = False for pattern in self.META.pathsToBeTagged: if item.lTitle is not None and pattern.lower() in " ".join(item.lTitle).lower(): tTaggTitle = True break if tTaggTitle or self.META.tagAllTopics: # normalize - remove diacritic punctuation from unicode chars to ascii item.lTitle = [ self._unicode2ascii(topic) for topic in item.lTitle] # Transfrom xyz / aaa / bbb / ccc on Title path to Tag xyzAaaBbbCcc # clean things like [999] or [111-2222] from title path, example: xyz / [1000-1200] zyx / xyz # clean whitespaces # set Capital letters for first char of the word tmp = list(set([ re.sub('(\[[0-9]+\])' , ' ' , i ).replace('_',' ') for i in item.lTitle ])) tmp = list(set([ re.sub('(\W)',' ', i ) for i in tmp ])) tmp = list(set([ re.sub( '^[0-9 ]+$','',i) for i in tmp ])) tmp = list(set([ capwords(i).replace(' ','') for i in tmp ])) tags = [ j[0].lower() + j[1:] for j in tmp if j.strip() != ''] note.tags += tags if self.META.tagMemorizedItems and int(item.Interval) >0: note.tags.append("Memorized") self.logger('Element tags\t- ' + repr(note.tags), level=3) self.notes.append(note) def logger(self,text,level=1): "Wrapper for Anki logger" dLevels={0:'',1:'Info',2:'Verbose',3:'Debug'} if level<=self.META.loggerLevel: #self.deck.updateProgress(_(text)) if self.META.logToStdOutput: print(self.__class__.__name__+ " - " + dLevels[level].ljust(9) +' -\t'+ _(text)) # OPEN AND LOAD def openAnything(self,source): "Open any source / actually only openig of files is used" if source == "-": return sys.stdin # try to open with urllib (if source is http, ftp, or file URL) import urllib.request, urllib.parse, urllib.error try: return urllib.request.urlopen(source) except (IOError, OSError): pass # try to open with native open function (if source is pathname) try: return open(source) except (IOError, OSError): pass # treat source as string import io return io.StringIO(str(source)) def loadSource(self, source): """Load source file and parse with xml.dom.minidom""" self.source = source self.logger('Load started...') sock = open(self.source) self.xmldoc = minidom.parse(sock).documentElement sock.close() self.logger('Load done.') # PARSE def parse(self, node=None): "Parse method - parses document elements" if node is None and self.xmldoc is not None: node = self.xmldoc _method = "parse_%s" % node.__class__.__name__ if hasattr(self,_method): parseMethod = getattr(self, _method) parseMethod(node) else: self.logger('No handler for method %s' % _method, level=3) def parse_Document(self, node): "Parse XML document" self.parse(node.documentElement) def parse_Element(self, node): "Parse XML element" _method = "do_%s" % node.tagName if hasattr(self,_method): handlerMethod = getattr(self, _method) handlerMethod(node) else: self.logger('No handler for method %s' % _method, level=3) #print traceback.print_exc() def parse_Text(self, node): "Parse text inside elements. Text is stored into local buffer." text = node.data self.cntBuf.append(text) #def parse_Comment(self, node): # """ # Source can contain XML comments, but we ignore them # """ # pass # DO def do_SuperMemoCollection(self, node): "Process SM Collection" for child in node.childNodes: self.parse(child) def do_SuperMemoElement(self, node): "Process SM Element (Type - Title,Topics)" self.logger('='*45, level=3) self.cntElm.append(SuperMemoElement()) self.cntElm[-1]['lTitle'] = self.cntMeta['title'] #parse all child elements for child in node.childNodes: self.parse(child) #strip all saved strings, just for sure for key in list(self.cntElm[-1].keys()): if hasattr(self.cntElm[-1][key], 'strip'): self.cntElm[-1][key]=self.cntElm[-1][key].strip() #pop current element smel = self.cntElm.pop() # Process cntElm if is valid Item (and not an Topic etc..) # if smel.Lapses != None and smel.Interval != None and smel.Question != None and smel.Answer != None: if smel.Title is None and smel.Question is not None and smel.Answer is not None: if smel.Answer.strip() !='' and smel.Question.strip() !='': # migrate only memorized otherway skip/continue if self.META.onlyMemorizedItems and not(int(smel.Interval) > 0): self.logger('Element skiped \t- not memorized ...', level=3) else: #import sm element data to Anki self.addItemToCards(smel) self.logger("Import element \t- " + smel['Question'], level=3) #print element self.logger('-'*45, level=3) for key in list(smel.keys()): self.logger('\t%s %s' % ((key+':').ljust(15),smel[key]), level=3 ) else: self.logger('Element skiped \t- no valid Q and A ...', level=3) else: # now we know that item was topic # parseing of whole node is now finished # test if it's really topic if smel.Title is not None: # remove topic from title list t = self.cntMeta['title'].pop() self.logger('End of topic \t- %s' % (t), level=2) def do_Content(self, node): "Process SM element Content" for child in node.childNodes: if hasattr(child,'tagName') and child.firstChild is not None: self.cntElm[-1][child.tagName]=child.firstChild.data def do_LearningData(self, node): "Process SM element LearningData" for child in node.childNodes: if hasattr(child,'tagName') and child.firstChild is not None: self.cntElm[-1][child.tagName]=child.firstChild.data # It's being processed in do_Content now #def do_Question(self, node): # for child in node.childNodes: self.parse(child) # self.cntElm[-1][node.tagName]=self.cntBuf.pop() # It's being processed in do_Content now #def do_Answer(self, node): # for child in node.childNodes: self.parse(child) # self.cntElm[-1][node.tagName]=self.cntBuf.pop() def do_Title(self, node): "Process SM element Title" t = self._decode_htmlescapes(node.firstChild.data) self.cntElm[-1][node.tagName] = t self.cntMeta['title'].append(t) self.cntElm[-1]['lTitle'] = self.cntMeta['title'] self.logger('Start of topic \t- ' + " / ".join(self.cntMeta['title']), level=2) def do_Type(self, node): "Process SM element Type" if len(self.cntBuf) >=1 : self.cntElm[-1][node.tagName]=self.cntBuf.pop() if __name__ == '__main__': # for testing you can start it standalone #file = u'/home/epcim/hg2g/dev/python/sm2anki/ADVENG2EXP.xxe.esc.zaloha_FINAL.xml' #file = u'/home/epcim/hg2g/dev/python/anki/libanki/tests/importing/supermemo/original_ENGLISHFORBEGGINERS_noOEM.xml' #file = u'/home/epcim/hg2g/dev/python/anki/libanki/tests/importing/supermemo/original_ENGLISHFORBEGGINERS_oem_1250.xml' file = str(sys.argv[1]) impo = SupermemoXmlImporter(Deck(),file) impo.foreignCards() sys.exit(1) # vim: ts=4 sts=2 ft=python anki-2.1.0+dfsg~b36/anki/lang.py000066400000000000000000000061411323611211500162760ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import os, sys, re import gettext import threading langs = [ ("Afrikaans", "af"), ("Bahasa Melayu", "ms"), ("Català", "ca"), ("Dansk", "da"), ("Deutsch", "de"), ("Eesti", "et"), ("English", "en"), ("Español", "es"), ("Esperanto", "eo"), ("Euskara", "eu"), ("Français", "fr"), ("Galego", "gl"), ("Hrvatski", "hr"), ("Interlingua", "ia"), ("Italiano", "it"), ("Lenga d'òc", "oc"), ("Magyar", "hu"), ("Nederlands","nl"), ("Norsk","nb"), ("Occitan","oc"), ("Plattdüütsch", "nds"), ("Polski", "pl"), ("Português Brasileiro", "pt_BR"), ("Português", "pt"), ("Româneşte", "ro"), ("Slovenčina", "sk"), ("Slovenščina", "sl"), ("Suomi", "fi"), ("Svenska", "sv"), ("Tiếng Việt", "vi"), ("Türkçe", "tr"), ("Čeština", "cs"), ("Ελληνικά", "el"), ("Ελληνικά", "el"), ("босански", "bs"), ("Български", "bg"), ("Монгол хэл","mn"), ("русский язык", "ru"), ("Српски", "sr"), ("українська мова", "uk"), ("עִבְרִית", "he"), ("العربية", "ar"), ("فارسی", "fa"), ("ภาษาไทย", "th"), ("日本語", "ja"), ("简体中文", "zh_CN"), ("繁體中文", "zh_TW"), ("한국어", "ko"), ] threadLocal = threading.local() # global defaults currentLang = None currentTranslation = None def localTranslation(): "Return the translation local to this thread, or the default." if getattr(threadLocal, 'currentTranslation', None): return threadLocal.currentTranslation else: return currentTranslation def _(str): return localTranslation().gettext(str) def ngettext(single, plural, n): return localTranslation().ngettext(single, plural, n) def langDir(): from anki.utils import isMac filedir = os.path.dirname(os.path.abspath(__file__)) if isMac: dir = os.path.abspath(filedir + "/../../Resources/locale") else: dir = os.path.join(filedir, "locale") if not os.path.isdir(dir): dir = os.path.join(os.path.dirname(sys.argv[0]), "locale") if not os.path.isdir(dir): dir = "/usr/share/anki/locale" return dir def setLang(lang, local=True): trans = gettext.translation( 'anki', langDir(), languages=[lang], fallback=True) if local: threadLocal.currentLang = lang threadLocal.currentTranslation = trans else: global currentLang, currentTranslation currentLang = lang currentTranslation = trans def getLang(): "Return the language local to this thread, or the default." if getattr(threadLocal, 'currentLang', None): return threadLocal.currentLang else: return currentLang def noHint(str): "Remove translation hint from end of string." return re.sub("(^.*?)( ?\(.+?\))?$", "\\1", str) if not currentTranslation: setLang("en_US", local=False) anki-2.1.0+dfsg~b36/anki/latex.py000066400000000000000000000115001323611211500164650ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import re, os, shutil, html from anki.utils import checksum, call, namedtmp, tmpdir, isMac, stripHTML from anki.hooks import addHook from anki.lang import _ pngCommands = [ ["latex", "-interaction=nonstopmode", "tmp.tex"], ["dvipng", "-D", "200", "-T", "tight", "tmp.dvi", "-o", "tmp.png"] ] svgCommands = [ ["latex", "-interaction=nonstopmode", "tmp.tex"], ["dvisvgm", "--no-fonts", "-Z", "2", "tmp.dvi", "-o", "tmp.svg"] ] build = True # if off, use existing media but don't create new regexps = { "standard": re.compile(r"\[latex\](.+?)\[/latex\]", re.DOTALL | re.IGNORECASE), "expression": re.compile(r"\[\$\](.+?)\[/\$\]", re.DOTALL | re.IGNORECASE), "math": re.compile(r"\[\$\$\](.+?)\[/\$\$\]", re.DOTALL | re.IGNORECASE), } # add standard tex install location to osx if isMac: os.environ['PATH'] += ":/usr/texbin:/Library/TeX/texbin" def stripLatex(text): for match in regexps['standard'].finditer(text): text = text.replace(match.group(), "") for match in regexps['expression'].finditer(text): text = text.replace(match.group(), "") for match in regexps['math'].finditer(text): text = text.replace(match.group(), "") return text def mungeQA(html, type, fields, model, data, col): "Convert TEXT with embedded latex tags to image links." for match in regexps['standard'].finditer(html): html = html.replace(match.group(), _imgLink(col, match.group(1), model)) for match in regexps['expression'].finditer(html): html = html.replace(match.group(), _imgLink( col, "$" + match.group(1) + "$", model)) for match in regexps['math'].finditer(html): html = html.replace(match.group(), _imgLink( col, "\\begin{displaymath}" + match.group(1) + "\\end{displaymath}", model)) return html def _imgLink(col, latex, model): "Return an img link for LATEX, creating if necesssary." txt = _latexFromHtml(col, latex) if model.get("latexsvg", False): ext = "svg" else: ext = "png" # is there an existing file? fname = "latex-%s.%s" % (checksum(txt.encode("utf8")), ext) link = '' % fname if os.path.exists(fname): return link # building disabled? if not build: return "[latex]%s[/latex]" % latex err = _buildImg(col, txt, fname, model) if err: return err else: return link def _latexFromHtml(col, latex): "Convert entities and fix newlines." latex = re.sub("|
", "\n", latex) latex = stripHTML(latex) return latex def _buildImg(col, latex, fname, model): # add header/footer latex = (model["latexPre"] + "\n" + latex + "\n" + model["latexPost"]) # it's only really secure if run in a jail, but these are the most common tmplatex = latex.replace("\\includegraphics", "") for bad in ("\\write18", "\\readline", "\\input", "\\include", "\\catcode", "\\openout", "\\write", "\\loop", "\\def", "\\shipout"): # don't mind if the sequence is only part of a command bad_re = "\\" + bad + "[^a-zA-Z]" if re.search(bad_re, tmplatex): return _("""\ For security reasons, '%s' is not allowed on cards. You can still use \ it by placing the command in a different package, and importing that \ package in the LaTeX header instead.""") % bad # commands to use? if model.get("latexsvg", False): latexCmds = svgCommands ext = "svg" else: latexCmds = pngCommands ext = "png" # write into a temp file log = open(namedtmp("latex_log.txt"), "w") texpath = namedtmp("tmp.tex") texfile = open(texpath, "w", encoding="utf8") texfile.write(latex) texfile.close() mdir = col.media.dir() oldcwd = os.getcwd() png = namedtmp("tmp.%s" % ext) try: # generate png os.chdir(tmpdir()) for latexCmd in latexCmds: if call(latexCmd, stdout=log, stderr=log): return _errMsg(latexCmd[0], texpath) # add to media shutil.copyfile(png, os.path.join(mdir, fname)) return finally: os.chdir(oldcwd) log.close() def _errMsg(type, texpath): msg = (_("Error executing %s.") % type) + "
" msg += (_("Generated file: %s") % texpath) + "
" try: with open(namedtmp("latex_log.txt", rm=False)) as f: log = f.read() if not log: raise Exception() msg += "
" + html.escape(log) + "
" except: msg += _("Have you installed latex and dvipng/dvisvgm?") pass return msg # setup q/a filter addHook("mungeQA", mungeQA) anki-2.1.0+dfsg~b36/anki/media.py000066400000000000000000000462761323611211500164510ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import io import re import traceback import urllib.request, urllib.parse, urllib.error import unicodedata import sys import zipfile from io import StringIO from anki.utils import checksum, isWin, isMac, json from anki.db import DB, DBError from anki.consts import * from anki.latex import mungeQA class MediaManager: soundRegexps = ["(?i)(\[sound:(?P[^]]+)\])"] imgRegexps = [ # src element quoted case "(?i)(]* src=(?P[\"'])(?P[^>]+?)(?P=str)[^>]*>)", # unquoted case "(?i)(]* src=(?!['\"])(?P[^ >]+)[^>]*?>)", ] regexps = soundRegexps + imgRegexps def __init__(self, col, server): self.col = col if server: self._dir = None return # media directory self._dir = re.sub("(?i)\.(anki2)$", ".media", self.col.path) if not os.path.exists(self._dir): os.makedirs(self._dir) try: self._oldcwd = os.getcwd() except OSError: # cwd doesn't exist self._oldcwd = None try: os.chdir(self._dir) except OSError: raise Exception("invalidTempFolder") # change database self.connect() def connect(self): if self.col.server: return path = self.dir()+".db2" create = not os.path.exists(path) os.chdir(self._dir) self.db = DB(path) if create: self._initDB() self.maybeUpgrade() def _initDB(self): self.db.executescript(""" create table media ( fname text not null primary key, csum text, -- null indicates deleted file mtime int not null, -- zero if deleted dirty int not null ); create index idx_media_dirty on media (dirty); create table meta (dirMod int, lastUsn int); insert into meta values (0, 0); """) def maybeUpgrade(self): oldpath = self.dir()+".db" if os.path.exists(oldpath): self.db.execute('attach "../collection.media.db" as old') try: self.db.execute(""" insert into media select m.fname, csum, mod, ifnull((select 1 from log l2 where l2.fname=m.fname), 0) as dirty from old.media m left outer join old.log l using (fname) union select fname, null, 0, 1 from old.log where type=1;""") self.db.execute("delete from meta") self.db.execute(""" insert into meta select dirMod, usn from old.meta """) self.db.commit() except Exception as e: # if we couldn't import the old db for some reason, just start # anew self.col.log("failed to import old media db:"+traceback.format_exc()) self.db.execute("detach old") npath = "../collection.media.db.old" if os.path.exists(npath): os.unlink(npath) os.rename("../collection.media.db", npath) def close(self): if self.col.server: return self.db.close() self.db = None # change cwd back to old location if self._oldcwd: try: os.chdir(self._oldcwd) except: # may have been deleted pass def _deleteDB(self): path = self.db._path self.close() os.unlink(path) self.connect() def dir(self): return self._dir def _isFAT32(self): if not isWin: return import win32api, win32file try: name = win32file.GetVolumeNameForVolumeMountPoint(self._dir[:3]) except: # mapped & unmapped network drive; pray that it's not vfat return if win32api.GetVolumeInformation(name)[4].lower().startswith("fat"): return True # Adding media ########################################################################## # opath must be in unicode def addFile(self, opath): with open(opath, "rb") as f: return self.writeData(opath, f.read()) def writeData(self, opath, data, typeHint=None): # if fname is a full path, use only the basename fname = os.path.basename(opath) # if it's missing an extension and a type hint was provided, use that if not os.path.splitext(fname)[1] and typeHint: # mimetypes is returning '.jpe' even after calling .init(), so we'll do # it manually instead typeMap = { "image/jpeg": ".jpg", "image/png": ".png", } if typeHint in typeMap: fname += typeMap[typeHint] # make sure we write it in NFC form (on mac will autoconvert to NFD), # and return an NFC-encoded reference fname = unicodedata.normalize("NFC", fname) # remove any dangerous characters base = self.stripIllegal(fname) (root, ext) = os.path.splitext(base) def repl(match): n = int(match.group(1)) return " (%d)" % (n+1) # find the first available name csum = checksum(data) while True: fname = root + ext path = os.path.join(self.dir(), fname) # if it doesn't exist, copy it directly if not os.path.exists(path): with open(path, "wb") as f: f.write(data) return fname # if it's identical, reuse with open(path, "rb") as f: if checksum(f.read()) == csum: return fname # otherwise, increment the index in the filename reg = " \((\d+)\)$" if not re.search(reg, root): root = root + " (1)" else: root = re.sub(reg, repl, root) # String manipulation ########################################################################## def filesInStr(self, mid, string, includeRemote=False): l = [] model = self.col.models.get(mid) strings = [] if model['type'] == MODEL_CLOZE and "{{c" in string: # if the field has clozes in it, we'll need to expand the # possibilities so we can render latex strings = self._expandClozes(string) else: strings = [string] for string in strings: # handle latex string = mungeQA(string, None, None, model, None, self.col) # extract filenames for reg in self.regexps: for match in re.finditer(reg, string): fname = match.group("fname") isLocal = not re.match("(https?|ftp)://", fname.lower()) if isLocal or includeRemote: l.append(fname) return l def _expandClozes(self, string): ords = set(re.findall("{{c(\d+)::.+?}}", string)) strings = [] from anki.template.template import clozeReg def qrepl(m): if m.group(4): return "[%s]" % m.group(4) else: return "[...]" def arepl(m): return m.group(2) for ord in ords: s = re.sub(clozeReg%ord, qrepl, string) s = re.sub(clozeReg%".+?", "\\4", s) strings.append(s) strings.append(re.sub(clozeReg%".+?", arepl, string)) return strings def transformNames(self, txt, func): for reg in self.regexps: txt = re.sub(reg, func, txt) return txt def strip(self, txt): for reg in self.regexps: txt = re.sub(reg, "", txt) return txt def escapeImages(self, string, unescape=False): if unescape: fn = urllib.parse.unquote else: fn = urllib.parse.quote def repl(match): tag = match.group(0) fname = match.group("fname") if re.match("(https?|ftp)://", fname): return tag return tag.replace(fname, fn(fname)) for reg in self.imgRegexps: string = re.sub(reg, repl, string) return string # Rebuilding DB ########################################################################## def check(self, local=None): "Return (missingFiles, unusedFiles)." mdir = self.dir() # gather all media references in NFC form allRefs = set() for nid, mid, flds in self.col.db.execute("select id, mid, flds from notes"): noteRefs = self.filesInStr(mid, flds) # check the refs are in NFC for f in noteRefs: # if they're not, we'll need to fix them first if f != unicodedata.normalize("NFC", f): self._normalizeNoteRefs(nid) noteRefs = self.filesInStr(mid, flds) break allRefs.update(noteRefs) # loop through media folder unused = [] if local is None: files = os.listdir(mdir) else: files = local renamedFiles = False dirFound = False warnings = [] for file in files: if not local: if not os.path.isfile(file): # ignore directories dirFound = True continue if file.startswith("_"): # leading _ says to ignore file continue if self.hasIllegal(file): name = file.encode(sys.getfilesystemencoding(), errors="replace") name = str(name, sys.getfilesystemencoding()) warnings.append( _("Invalid file name, please rename: %s") % name) continue nfcFile = unicodedata.normalize("NFC", file) # we enforce NFC fs encoding on non-macs; on macs we'll have gotten # NFD so we use the above variable for comparing references if not isMac and not local: if file != nfcFile: # delete if we already have the NFC form, otherwise rename if os.path.exists(nfcFile): os.unlink(file) renamedFiles = True else: os.rename(file, nfcFile) renamedFiles = True file = nfcFile # compare if nfcFile not in allRefs: unused.append(file) else: allRefs.discard(nfcFile) # if we renamed any files to nfc format, we must rerun the check # to make sure the renamed files are not marked as unused if renamedFiles: return self.check(local=local) nohave = [x for x in allRefs if not x.startswith("_")] # make sure the media DB is valid try: self.findChanges() except DBError: self._deleteDB() if dirFound: warnings.append( _("Anki does not support files in subfolders of the collection.media folder.")) return (nohave, unused, warnings) def _normalizeNoteRefs(self, nid): note = self.col.getNote(nid) for c, fld in enumerate(note.fields): nfc = unicodedata.normalize("NFC", fld) if nfc != fld: note.fields[c] = nfc note.flush() # Copying on import ########################################################################## def have(self, fname): return os.path.exists(os.path.join(self.dir(), fname)) # Illegal characters ########################################################################## _illegalCharReg = re.compile(r'[][><:"/?*^\\|\0\r\n]') def stripIllegal(self, str): return re.sub(self._illegalCharReg, "", str) def hasIllegal(self, str): if re.search(self._illegalCharReg, str): return True try: str.encode(sys.getfilesystemencoding()) except UnicodeEncodeError: return True return False # Tracking changes ########################################################################## def findChanges(self): "Scan the media folder if it's changed, and note any changes." if self._changed(): self._logChanges() def haveDirty(self): return self.db.scalar("select 1 from media where dirty=1 limit 1") def _mtime(self, path): return int(os.stat(path).st_mtime) def _checksum(self, path): with open(path, "rb") as f: return checksum(f.read()) def _changed(self): "Return dir mtime if it has changed since the last findChanges()" # doesn't track edits, but user can add or remove a file to update mod = self.db.scalar("select dirMod from meta") mtime = self._mtime(self.dir()) if not self._isFAT32() and mod and mod == mtime: return False return mtime def _logChanges(self): (added, removed) = self._changes() media = [] for f, mtime in added: media.append((f, self._checksum(f), mtime, 1)) for f in removed: media.append((f, None, 0, 1)) # update media db self.db.executemany("insert or replace into media values (?,?,?,?)", media) self.db.execute("update meta set dirMod = ?", self._mtime(self.dir())) self.db.commit() def _changes(self): self.cache = {} for (name, csum, mod) in self.db.execute( "select fname, csum, mtime from media where csum is not null"): self.cache[name] = [csum, mod, False] added = [] removed = [] # loop through on-disk files with os.scandir(self.dir()) as it: for f in it: # ignore folders and thumbs.db if f.is_dir(): continue if f.name.lower() == "thumbs.db": continue # and files with invalid chars if self.hasIllegal(f.name): continue # empty files are invalid; clean them up and continue sz = f.stat().st_size if not sz: os.unlink(f.name) continue if sz > 100*1024*1024: self.col.log("ignoring file over 100MB", f.name) continue # check encoding if not isMac: normf = unicodedata.normalize("NFC", f.name) if f.name != normf: # wrong filename encoding which will cause sync errors if os.path.exists(normf): os.unlink(f.name) else: os.rename(f.name, normf) # newly added? mtime = int(f.stat().st_mtime) if f.name not in self.cache: added.append((f.name, mtime)) else: # modified since last time? if mtime != self.cache[f.name][1]: # and has different checksum? if self._checksum(f.name) != self.cache[f.name][0]: added.append((f.name, mtime)) # mark as used self.cache[f.name][2] = True # look for any entries in the cache that no longer exist on disk for (k, v) in list(self.cache.items()): if not v[2]: removed.append(k) return added, removed # Syncing-related ########################################################################## def lastUsn(self): return self.db.scalar("select lastUsn from meta") def setLastUsn(self, usn): self.db.execute("update meta set lastUsn = ?", usn) self.db.commit() def syncInfo(self, fname): ret = self.db.first( "select csum, dirty from media where fname=?", fname) return ret or (None, 0) def markClean(self, fnames): for fname in fnames: self.db.execute( "update media set dirty=0 where fname=?", fname) def syncDelete(self, fname): if os.path.exists(fname): os.unlink(fname) self.db.execute("delete from media where fname=?", fname) def mediaCount(self): return self.db.scalar( "select count() from media where csum is not null") def dirtyCount(self): return self.db.scalar( "select count() from media where dirty=1") def forceResync(self): self.db.execute("delete from media") self.db.execute("update meta set lastUsn=0,dirMod=0") self.db.commit() self.db.setAutocommit(True) self.db.execute("vacuum") self.db.execute("analyze") self.db.setAutocommit(False) # Media syncing: zips ########################################################################## def mediaChangesZip(self): f = io.BytesIO() z = zipfile.ZipFile(f, "w", compression=zipfile.ZIP_DEFLATED) fnames = [] # meta is list of (fname, zipname), where zipname of None # is a deleted file meta = [] sz = 0 for c, (fname, csum) in enumerate(self.db.execute( "select fname, csum from media where dirty=1" " limit %d"%SYNC_ZIP_COUNT)): fnames.append(fname) normname = unicodedata.normalize("NFC", fname) if csum: self.col.log("+media zip", fname) z.write(fname, str(c)) meta.append((normname, str(c))) sz += os.path.getsize(fname) else: self.col.log("-media zip", fname) meta.append((normname, "")) if sz >= SYNC_ZIP_SIZE: break z.writestr("_meta", json.dumps(meta)) z.close() return f.getvalue(), fnames def addFilesFromZip(self, zipData): "Extract zip data; true if finished." f = io.BytesIO(zipData) z = zipfile.ZipFile(f, "r") media = [] # get meta info first meta = json.loads(z.read("_meta").decode("utf8")) # then loop through all files cnt = 0 for i in z.infolist(): if i.filename == "_meta": # ignore previously-retrieved meta continue else: data = z.read(i) csum = checksum(data) name = meta[i.filename] # normalize name for platform if isMac: name = unicodedata.normalize("NFD", name) else: name = unicodedata.normalize("NFC", name) # save file with open(name, "wb") as f: f.write(data) # update db media.append((name, csum, self._mtime(name), 0)) cnt += 1 if media: self.db.executemany( "insert or replace into media values (?,?,?,?)", media) return cnt anki-2.1.0+dfsg~b36/anki/models.py000066400000000000000000000447221323611211500166470ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import copy, re from anki.utils import intTime, joinFields, splitFields, ids2str,\ checksum, json from anki.lang import _ from anki.consts import * from anki.hooks import runHook import time # Models ########################################################################## # - careful not to add any lists/dicts/etc here, as they aren't deep copied defaultModel = { 'sortf': 0, 'did': 1, 'latexPre': """\ \\documentclass[12pt]{article} \\special{papersize=3in,5in} \\usepackage[utf8]{inputenc} \\usepackage{amssymb,amsmath} \\pagestyle{empty} \\setlength{\\parindent}{0in} \\begin{document} """, 'latexPost': "\\end{document}", 'mod': 0, 'usn': 0, 'vers': [], # FIXME: remove when other clients have caught up 'type': MODEL_STD, 'css': """\ .card { font-family: arial; font-size: 20px; text-align: center; color: black; background-color: white; } """ } defaultField = { 'name': "", 'ord': None, 'sticky': False, # the following alter editing, and are used as defaults for the # template wizard 'rtl': False, 'font': "Arial", 'size': 20, # reserved for future use 'media': [], } defaultTemplate = { 'name': "", 'ord': None, 'qfmt': "", 'afmt': "", 'did': None, 'bqfmt': "", 'bafmt': "", # we don't define these so that we pick up system font size until set #'bfont': "Arial", #'bsize': 12, } class ModelManager: # Saving/loading registry ############################################################# def __init__(self, col): self.col = col def load(self, json_): "Load registry from JSON." self.changed = False self.models = json.loads(json_) def save(self, m=None, templates=False): "Mark M modified if provided, and schedule registry flush." if m and m['id']: m['mod'] = intTime() m['usn'] = self.col.usn() self._updateRequired(m) if templates: self._syncTemplates(m) self.changed = True runHook("newModel") def flush(self): "Flush the registry if any models were changed." if self.changed: self.col.db.execute("update col set models = ?", json.dumps(self.models)) self.changed = False # Retrieving and creating models ############################################################# def current(self, forDeck=True): "Get current model." m = self.get(self.col.decks.current().get('mid')) if not forDeck or not m: m = self.get(self.col.conf['curModel']) return m or list(self.models.values())[0] def setCurrent(self, m): self.col.conf['curModel'] = m['id'] self.col.setMod() def get(self, id): "Get model with ID, or None." id = str(id) if id in self.models: return self.models[id] def all(self): "Get all models." return list(self.models.values()) def allNames(self): return [m['name'] for m in self.all()] def byName(self, name): "Get model with NAME." for m in list(self.models.values()): if m['name'] == name: return m def new(self, name): "Create a new model, save it in the registry, and return it." # caller should call save() after modifying m = defaultModel.copy() m['name'] = name m['mod'] = intTime() m['flds'] = [] m['tmpls'] = [] m['tags'] = [] m['id'] = None return m def rem(self, m): "Delete model, and all its cards/notes." self.col.modSchema(check=True) current = self.current()['id'] == m['id'] # delete notes/cards self.col.remCards(self.col.db.list(""" select id from cards where nid in (select id from notes where mid = ?)""", m['id'])) # then the model del self.models[str(m['id'])] self.save() # GUI should ensure last model is not deleted if current: self.setCurrent(list(self.models.values())[0]) def add(self, m): self._setID(m) self.update(m) self.setCurrent(m) self.save(m) def ensureNameUnique(self, m): for mcur in self.all(): if (mcur['name'] == m['name'] and mcur['id'] != m['id']): m['name'] += "-" + checksum(str(time.time()))[:5] break def update(self, m): "Add or update an existing model. Used for syncing and merging." self.ensureNameUnique(m) self.models[str(m['id'])] = m # mark registry changed, but don't bump mod time self.save() def _setID(self, m): while 1: id = str(intTime(1000)) if id not in self.models: break m['id'] = id def have(self, id): return str(id) in self.models def ids(self): return list(self.models.keys()) # Tools ################################################## def nids(self, m): "Note ids for M." return self.col.db.list( "select id from notes where mid = ?", m['id']) def useCount(self, m): "Number of note using M." return self.col.db.scalar( "select count() from notes where mid = ?", m['id']) def tmplUseCount(self, m, ord): return self.col.db.scalar(""" select count() from cards, notes where cards.nid = notes.id and notes.mid = ? and cards.ord = ?""", m['id'], ord) # Copying ################################################## def copy(self, m): "Copy, save and return." m2 = copy.deepcopy(m) m2['name'] = _("%s copy") % m2['name'] self.add(m2) return m2 # Fields ################################################## def newField(self, name): f = defaultField.copy() f['name'] = name return f def fieldMap(self, m): "Mapping of field name -> (ord, field)." return dict((f['name'], (f['ord'], f)) for f in m['flds']) def fieldNames(self, m): return [f['name'] for f in m['flds']] def sortIdx(self, m): return m['sortf'] def setSortIdx(self, m, idx): assert 0 <= idx < len(m['flds']) self.col.modSchema(check=True) m['sortf'] = idx self.col.updateFieldCache(self.nids(m)) self.save(m) def addField(self, m, field): # only mod schema if model isn't new if m['id']: self.col.modSchema(check=True) m['flds'].append(field) self._updateFieldOrds(m) self.save(m) def add(fields): fields.append("") return fields self._transformFields(m, add) def remField(self, m, field): self.col.modSchema(check=True) # save old sort field sortFldName = m['flds'][m['sortf']]['name'] idx = m['flds'].index(field) m['flds'].remove(field) # restore old sort field if possible, or revert to first field m['sortf'] = 0 for c, f in enumerate(m['flds']): if f['name'] == sortFldName: m['sortf'] = c break self._updateFieldOrds(m) def delete(fields): del fields[idx] return fields self._transformFields(m, delete) if m['flds'][m['sortf']]['name'] != sortFldName: # need to rebuild sort field self.col.updateFieldCache(self.nids(m)) # saves self.renameField(m, field, None) def moveField(self, m, field, idx): self.col.modSchema(check=True) oldidx = m['flds'].index(field) if oldidx == idx: return # remember old sort field sortf = m['flds'][m['sortf']] # move m['flds'].remove(field) m['flds'].insert(idx, field) # restore sort field m['sortf'] = m['flds'].index(sortf) self._updateFieldOrds(m) self.save(m) def move(fields, oldidx=oldidx): val = fields[oldidx] del fields[oldidx] fields.insert(idx, val) return fields self._transformFields(m, move) def renameField(self, m, field, newName): self.col.modSchema(check=True) pat = r'{{([^{}]*)([:#^/]|[^:#/^}][^:}]*?:|)%s}}' def wrap(txt): def repl(match): return '{{' + match.group(1) + match.group(2) + txt + '}}' return repl for t in m['tmpls']: for fmt in ('qfmt', 'afmt'): if newName: t[fmt] = re.sub( pat % re.escape(field['name']), wrap(newName), t[fmt]) else: t[fmt] = re.sub( pat % re.escape(field['name']), "", t[fmt]) field['name'] = newName self.save(m) def _updateFieldOrds(self, m): for c, f in enumerate(m['flds']): f['ord'] = c def _transformFields(self, m, fn): # model hasn't been added yet? if not m['id']: return r = [] for (id, flds) in self.col.db.execute( "select id, flds from notes where mid = ?", m['id']): r.append((joinFields(fn(splitFields(flds))), intTime(), self.col.usn(), id)) self.col.db.executemany( "update notes set flds=?,mod=?,usn=? where id = ?", r) # Templates ################################################## def newTemplate(self, name): t = defaultTemplate.copy() t['name'] = name return t def addTemplate(self, m, template): "Note: should col.genCards() afterwards." if m['id']: self.col.modSchema(check=True) m['tmpls'].append(template) self._updateTemplOrds(m) self.save(m) def remTemplate(self, m, template): "False if removing template would leave orphan notes." assert len(m['tmpls']) > 1 # find cards using this template ord = m['tmpls'].index(template) cids = self.col.db.list(""" select c.id from cards c, notes f where c.nid=f.id and mid = ? and ord = ?""", m['id'], ord) # all notes with this template must have at least two cards, or we # could end up creating orphaned notes if self.col.db.scalar(""" select nid, count() from cards where nid in (select nid from cards where id in %s) group by nid having count() < 2 limit 1""" % ids2str(cids)): return False # ok to proceed; remove cards self.col.modSchema(check=True) self.col.remCards(cids) # shift ordinals self.col.db.execute(""" update cards set ord = ord - 1, usn = ?, mod = ? where nid in (select id from notes where mid = ?) and ord > ?""", self.col.usn(), intTime(), m['id'], ord) m['tmpls'].remove(template) self._updateTemplOrds(m) self.save(m) return True def _updateTemplOrds(self, m): for c, t in enumerate(m['tmpls']): t['ord'] = c def moveTemplate(self, m, template, idx): oldidx = m['tmpls'].index(template) if oldidx == idx: return oldidxs = dict((id(t), t['ord']) for t in m['tmpls']) m['tmpls'].remove(template) m['tmpls'].insert(idx, template) self._updateTemplOrds(m) # generate change map map = [] for t in m['tmpls']: map.append("when ord = %d then %d" % (oldidxs[id(t)], t['ord'])) # apply self.save(m) self.col.db.execute(""" update cards set ord = (case %s end),usn=?,mod=? where nid in ( select id from notes where mid = ?)""" % " ".join(map), self.col.usn(), intTime(), m['id']) def _syncTemplates(self, m): rem = self.col.genCards(self.nids(m)) # Model changing ########################################################################## # - maps are ord->ord, and there should not be duplicate targets # - newModel should be self if model is not changing def change(self, m, nids, newModel, fmap, cmap): self.col.modSchema(check=True) assert newModel['id'] == m['id'] or (fmap and cmap) if fmap: self._changeNotes(nids, newModel, fmap) if cmap: self._changeCards(nids, m, newModel, cmap) self.col.genCards(nids) def _changeNotes(self, nids, newModel, map): d = [] nfields = len(newModel['flds']) for (nid, flds) in self.col.db.execute( "select id, flds from notes where id in "+ids2str(nids)): newflds = {} flds = splitFields(flds) for old, new in list(map.items()): newflds[new] = flds[old] flds = [] for c in range(nfields): flds.append(newflds.get(c, "")) flds = joinFields(flds) d.append(dict(nid=nid, flds=flds, mid=newModel['id'], m=intTime(),u=self.col.usn())) self.col.db.executemany( "update notes set flds=:flds,mid=:mid,mod=:m,usn=:u where id = :nid", d) self.col.updateFieldCache(nids) def _changeCards(self, nids, oldModel, newModel, map): d = [] deleted = [] for (cid, ord) in self.col.db.execute( "select id, ord from cards where nid in "+ids2str(nids)): # if the src model is a cloze, we ignore the map, as the gui # doesn't currently support mapping them if oldModel['type'] == MODEL_CLOZE: new = ord if newModel['type'] != MODEL_CLOZE: # if we're mapping to a regular note, we need to check if # the destination ord is valid if len(newModel['tmpls']) <= ord: new = None else: # mapping from a regular note, so the map should be valid new = map[ord] if new is not None: d.append(dict( cid=cid,new=new,u=self.col.usn(),m=intTime())) else: deleted.append(cid) self.col.db.executemany( "update cards set ord=:new,usn=:u,mod=:m where id=:cid", d) self.col.remCards(deleted) # Schema hash ########################################################################## def scmhash(self, m): "Return a hash of the schema, to see if models are compatible." s = "" for f in m['flds']: s += f['name'] for t in m['tmpls']: s += t['name'] return checksum(s) # Required field/text cache ########################################################################## def _updateRequired(self, m): if m['type'] == MODEL_CLOZE: # nothing to do return req = [] flds = [f['name'] for f in m['flds']] for t in m['tmpls']: ret = self._reqForTemplate(m, flds, t) req.append((t['ord'], ret[0], ret[1])) m['req'] = req def _reqForTemplate(self, m, flds, t): a = [] b = [] for f in flds: a.append("ankiflag") b.append("") data = [1, 1, m['id'], 1, t['ord'], "", joinFields(a)] full = self.col._renderQA(data)['q'] data = [1, 1, m['id'], 1, t['ord'], "", joinFields(b)] empty = self.col._renderQA(data)['q'] # if full and empty are the same, the template is invalid and there is # no way to satisfy it if full == empty: return "none", [], [] type = 'all' req = [] for i in range(len(flds)): tmp = a[:] tmp[i] = "" data[6] = joinFields(tmp) # if no field content appeared, field is required if "ankiflag" not in self.col._renderQA(data)['q']: req.append(i) if req: return type, req # if there are no required fields, switch to any mode type = 'any' req = [] for i in range(len(flds)): tmp = b[:] tmp[i] = "1" data[6] = joinFields(tmp) # if not the same as empty, this field can make the card non-blank if self.col._renderQA(data)['q'] != empty: req.append(i) return type, req def availOrds(self, m, flds): "Given a joined field string, return available template ordinals." if m['type'] == MODEL_CLOZE: return self._availClozeOrds(m, flds) fields = {} for c, f in enumerate(splitFields(flds)): fields[c] = f.strip() avail = [] for ord, type, req in m['req']: # unsatisfiable template if type == "none": continue # AND requirement? elif type == "all": ok = True for idx in req: if not fields[idx]: # missing and was required ok = False break if not ok: continue # OR requirement? elif type == "any": ok = False for idx in req: if fields[idx]: ok = True break if not ok: continue avail.append(ord) return avail def _availClozeOrds(self, m, flds, allowEmpty=True): sflds = splitFields(flds) map = self.fieldMap(m) ords = set() matches = re.findall("{{[^}]*?cloze:(?:[^}]?:)*(.+?)}}", m['tmpls'][0]['qfmt']) matches += re.findall("<%cloze:(.+?)%>", m['tmpls'][0]['qfmt']) for fname in matches: if fname not in map: continue ord = map[fname][0] ords.update([int(m)-1 for m in re.findall( "{{c(\d+)::.+?}}", sflds[ord])]) if -1 in ords: ords.remove(-1) if not ords and allowEmpty: # empty clozes use first ord return [0] return list(ords) # Sync handling ########################################################################## def beforeUpload(self): for m in self.all(): m['usn'] = 0 self.save() anki-2.1.0+dfsg~b36/anki/mpv.py000066400000000000000000000446401323611211500161650ustar00rootroot00000000000000# coding: utf-8 # ------------------------------------------------------------------------------ # # mpv.py - Control mpv from Python using JSON IPC # # Copyright (c) 2015 Lars Gustäbel # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # # ------------------------------------------------------------------------------ import sys import os import time import json import socket import select import tempfile import threading import subprocess import inspect from distutils.spawn import find_executable from queue import Queue, Empty, Full class MPVError(Exception): pass class MPVProcessError(MPVError): pass class MPVCommunicationError(MPVError): pass class MPVCommandError(MPVError): pass class MPVTimeoutError(MPVError): pass from anki.utils import isWin if isWin: import win32file, win32pipe, pywintypes, winerror class MPVBase: """Base class for communication with the mpv media player via unix socket based JSON IPC. """ executable = find_executable("mpv") popenEnv = None default_argv = [ "--idle", "--no-terminal", "--force-window=no", "--ontop", "--audio-display=no", ] def __init__(self, window_id=None, debug=False): self.window_id = window_id self.debug = debug self._prepare_socket() self._prepare_process() self._start_process() self._start_socket() self._prepare_thread() self._start_thread() def __del__(self): self._stop_thread() self._stop_process() self._stop_socket() def _thread_id(self): return threading.get_ident() # # Process # def _prepare_process(self): """Prepare the argument list for the mpv process. """ self.argv = [self.executable] self.argv += self.default_argv self.argv += ["--input-ipc-server", self._sock_filename] if self.window_id is not None: self.argv += ["--wid", str(self.window_id)] def _start_process(self): """Start the mpv process. """ self._proc = subprocess.Popen(self.argv, env=self.popenEnv) def _stop_process(self): """Stop the mpv process. """ if hasattr(self, "_proc"): try: self._proc.terminate() self._proc.wait() except ProcessLookupError: pass # # Socket communication # def _prepare_socket(self): """Create a random socket filename which we pass to mpv with the --input-unix-socket option. """ if isWin: self._sock_filename = "ankimpv" return fd, self._sock_filename = tempfile.mkstemp(prefix="mpv.") os.close(fd) os.remove(self._sock_filename) def _start_socket(self): """Wait for the mpv process to create the unix socket and finish startup. """ start = time.time() while self.is_running() and time.time() < start+10: time.sleep(0.1) if isWin: # named pipe try: self._sock = win32file.CreateFile(r'\\.\pipe\ankimpv', win32file.GENERIC_READ | win32file.GENERIC_WRITE, 0, None, win32file.OPEN_EXISTING, 0, None) win32pipe.SetNamedPipeHandleState(self._sock, 1, # PIPE_NOWAIT None, None) except pywintypes.error as err: if err.args[0] == winerror.ERROR_FILE_NOT_FOUND: pass else: break else: break else: # unix socket try: self._sock = socket.socket(socket.AF_UNIX) self._sock.connect(self._sock_filename) except (FileNotFoundError, ConnectionRefusedError): self._sock.close() continue else: break else: raise MPVProcessError("unable to start process") def _stop_socket(self): """Clean up the socket. """ if hasattr(self, "_sock"): self._sock.close() if hasattr(self, "_sock_filename"): try: os.remove(self._sock_filename) except OSError: pass def _prepare_thread(self): """Set up the queues for the communication threads. """ self._request_queue = Queue(1) self._response_queues = {} self._event_queue = Queue() self._stop_event = threading.Event() def _start_thread(self): """Start up the communication threads. """ self._thread = threading.Thread(target=self._reader) self._thread.start() def _stop_thread(self): """Stop the communication threads. """ if hasattr(self, "_stop_event"): self._stop_event.set() if hasattr(self, "_thread"): self._thread.join() def _reader(self): """Read the incoming json messages from the unix socket that is connected to the mpv process. Pass them on to the message handler. """ buf = b"" while not self._stop_event.is_set(): if isWin: try: (n, b) = win32file.ReadFile(self._sock, 4096) buf += b except pywintypes.error as err: if err.args[0] == winerror.ERROR_NO_DATA: time.sleep(0.1) continue elif err.args[0] == winerror.ERROR_BROKEN_PIPE: return else: raise else: r, w, e = select.select([self._sock], [], [], 1) if r: b = self._sock.recv(1024) if not b: break buf += b newline = buf.find(b"\n") while newline >= 0: data = buf[:newline + 1] buf = buf[newline + 1:] if self.debug: sys.stdout.write("<<< " + data.decode("utf8", "replace")) message = self._parse_message(data) self._handle_message(message) newline = buf.find(b"\n") # # Message handling # def _compose_message(self, message): """Return a json representation from a message dictionary. """ # XXX may be strict is too strict ;-) data = json.dumps(message, separators=",:") return data.encode("utf8", "strict") + b"\n" def _parse_message(self, data): """Return a message dictionary from a json representation. """ # XXX may be strict is too strict ;-) data = data.decode("utf8", "strict") return json.loads(data) def _handle_message(self, message): """Handle different types of incoming messages, i.e. responses to commands or asynchronous events. """ if "error" in message: # This message is a reply to a request. try: thread_id = self._request_queue.get(timeout=1) except Empty: raise MPVCommunicationError("got a response without a pending request") self._response_queues[thread_id].put(message) elif "event" in message: # This message is an asynchronous event. self._event_queue.put(message) else: raise MPVCommunicationError("invalid message %r" % message) def _send_message(self, message, timeout=None): """Send a message/command to the mpv process, message must be a dictionary of the form {"command": ["arg1", "arg2", ...]}. Responses from the mpv process must be collected using _get_response(). """ data = self._compose_message(message) if self.debug: sys.stdout.write(">>> " + data.decode("utf8", "replace")) # Request/response cycles are coordinated across different threads, so # that they don't get mixed up. This makes it possible to use commands # (e.g. fetch properties) from event callbacks that run in a different # thread context. thread_id = self._thread_id() if thread_id not in self._response_queues: # Prepare a response queue for the thread to wait on. self._response_queues[thread_id] = Queue() # Put the id of the current thread on the request queue. This id is # later used to associate responses from the mpv process with this # request. try: self._request_queue.put(thread_id, block=True, timeout=timeout) except Full: raise MPVTimeoutError("unable to put request") # Write the message data to the socket. if isWin: win32file.WriteFile(self._sock, data) else: while data: size = self._sock.send(data) if size == 0: raise MPVCommunicationError("broken sender socket") data = data[size:] def _get_response(self, timeout=None): """Collect the response message to a previous request. If there was an error a MPVCommandError exception is raised, otherwise the command specific data is returned. """ try: message = self._response_queues[self._thread_id()].get(block=True, timeout=timeout) except Empty: raise MPVTimeoutError("unable to get response") if message["error"] != "success": raise MPVCommandError(message["error"]) else: return message.get("data") def _get_event(self, timeout=None): """Collect a single event message that has been received out-of-band from the mpv process. If a timeout is specified and there have not been any events during that period, None is returned. """ try: return self._event_queue.get(block=timeout is not None, timeout=timeout) except Empty: return None def _send_request(self, message, timeout=None): """Send a command to the mpv process and collect the result. """ self.ensure_running() self._send_message(message, timeout) try: return self._get_response(timeout) except MPVCommandError as e: raise MPVCommandError("%r: %s" % (message["command"], e)) # # Public API # def is_running(self): """Return True if the mpv process is still active. """ return self._proc.poll() is None def ensure_running(self): if not self.is_running(): self._stop_thread() self._stop_process() self._stop_socket() self._prepare_socket() self._prepare_process() self._start_process() self._start_socket() self._prepare_thread() self._start_thread() def close(self): """Shutdown the mpv process and our communication setup. """ if self.is_running(): self._send_request({"command": ["quit"]}, timeout=1) self._stop_process() self._stop_thread() self._stop_socket() self._stop_process() class MPV(MPVBase): """Class for communication with the mpv media player via unix socket based JSON IPC. It adds a few usable methods and a callback API. To automatically register methods as event callbacks, subclass this class and define specially named methods as follows: def on_file_loaded(self): # This is called for every 'file-loaded' event. ... def on_property_time_pos(self, position): # This is called whenever the 'time-pos' property is updated. ... Please note that callbacks are executed inside a separate thread. The MPV class itself is completely thread-safe. Requests from different threads to the same MPV instance are synchronized. """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._callbacks = {} self._property_serials = {} self._new_serial = iter(range(sys.maxsize)) # Enumerate all methods and auto-register callbacks for # events and property-changes. for method_name, method in inspect.getmembers(self): if not inspect.ismethod(method): continue if method_name.startswith("on_property_"): name = method_name[12:] name = name.replace("_", "-") self.register_property_callback(name, method) elif method_name.startswith("on_"): name = method_name[3:] name = name.replace("_", "-") self.register_callback(name, method) # Simulate an init event when the process and all callbacks have been # completely set up. if hasattr(self, "on_init"): self.on_init() # # Socket communication # def _start_thread(self): """Start up the communication threads. """ super()._start_thread() self._event_thread = threading.Thread(target=self._event_reader) self._event_thread.start() def _stop_thread(self): """Stop the communication threads. """ super()._stop_thread() if hasattr(self, "_event_thread"): self._event_thread.join() # # Event/callback API # def _event_reader(self): """Collect incoming event messages and call the event handler. """ while not self._stop_event.is_set(): message = self._get_event(timeout=1) if message is None: continue self._handle_event(message) def _handle_event(self, message): """Lookup and call the callbacks for a particular event message. """ if message["event"] == "property-change": name = "property-" + message["name"] else: name = message["event"] for callback in self._callbacks.get(name, []): if "data" in message: callback(message["data"]) else: callback() def register_callback(self, name, callback): """Register a function `callback` for the event `name`. """ try: self.command("enable_event", name) except MPVCommandError: raise MPVError("no such event %r" % name) self._callbacks.setdefault(name, []).append(callback) def unregister_callback(self, name, callback): """Unregister a previously registered function `callback` for the event `name`. """ try: callbacks = self._callbacks[name] except KeyError: raise MPVError("no callbacks registered for event %r" % name) try: callbacks.remove(callback) except ValueError: raise MPVError("callback %r not registered for event %r" % (callback, name)) def register_property_callback(self, name, callback): """Register a function `callback` for the property-change event on property `name`. """ # Property changes are normally not sent over the connection unless they # are requested using the 'observe_property' command. # XXX We manually have to check for the existence of the property name. # Apparently observe_property does not check it :-( proplist = self.command("get_property", "property-list") if name not in proplist: raise MPVError("no such property %r" % name) self._callbacks.setdefault("property-" + name, []).append(callback) # 'observe_property' expects some kind of id which can be used later # for unregistering with 'unobserve_property'. serial = next(self._new_serial) self.command("observe_property", serial, name) self._property_serials[(name, callback)] = serial return serial def unregister_property_callback(self, name, callback): """Unregister a previously registered function `callback` for the property-change event on property `name`. """ try: callbacks = self._callbacks["property-" + name] except KeyError: raise MPVError("no callbacks registered for property %r" % name) try: callbacks.remove(callback) except ValueError: raise MPVError("callback %r not registered for property %r" % (callback, name)) serial = self._property_serials.pop((name, callback)) self.command("unobserve_property", serial) # # Public API # def command(self, *args, timeout=1): """Execute a single command on the mpv process and return the result. """ return self._send_request({"command": list(args)}, timeout=timeout) def get_property(self, name): """Return the value of property `name`. """ return self.command("get_property", name) def set_property(self, name, value): """Set the value of property `name`. """ return self.command("set_property", name, value) anki-2.1.0+dfsg~b36/anki/notes.py000066400000000000000000000122001323611211500164760ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from anki.utils import fieldChecksum, intTime, \ joinFields, splitFields, stripHTMLMedia, timestampID, guid64 class Note: def __init__(self, col, model=None, id=None): assert not (model and id) self.col = col if id: self.id = id self.load() else: self.id = timestampID(col.db, "notes") self.guid = guid64() self._model = model self.mid = model['id'] self.tags = [] self.fields = [""] * len(self._model['flds']) self.flags = 0 self.data = "" self._fmap = self.col.models.fieldMap(self._model) self.scm = self.col.scm def load(self): (self.guid, self.mid, self.mod, self.usn, self.tags, self.fields, self.flags, self.data) = self.col.db.first(""" select guid, mid, mod, usn, tags, flds, flags, data from notes where id = ?""", self.id) self.fields = splitFields(self.fields) self.tags = self.col.tags.split(self.tags) self._model = self.col.models.get(self.mid) self._fmap = self.col.models.fieldMap(self._model) self.scm = self.col.scm def flush(self, mod=None): "If fields or tags have changed, write changes to disk." assert self.scm == self.col.scm self._preFlush() sfld = stripHTMLMedia(self.fields[self.col.models.sortIdx(self._model)]) tags = self.stringTags() fields = self.joinedFields() if not mod and self.col.db.scalar( "select 1 from notes where id = ? and tags = ? and flds = ?", self.id, tags, fields): return csum = fieldChecksum(self.fields[0]) self.mod = mod if mod else intTime() self.usn = self.col.usn() res = self.col.db.execute(""" insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)""", self.id, self.guid, self.mid, self.mod, self.usn, tags, fields, sfld, csum, self.flags, self.data) self.col.tags.register(self.tags) self._postFlush() def joinedFields(self): return joinFields(self.fields) def cards(self): return [self.col.getCard(id) for id in self.col.db.list( "select id from cards where nid = ? order by ord", self.id)] def model(self): return self._model # Dict interface ################################################## def keys(self): return list(self._fmap.keys()) def values(self): return self.fields def items(self): return [(f['name'], self.fields[ord]) for ord, f in sorted(self._fmap.values())] def _fieldOrd(self, key): try: return self._fmap[key][0] except: raise KeyError(key) def __getitem__(self, key): return self.fields[self._fieldOrd(key)] def __setitem__(self, key, value): self.fields[self._fieldOrd(key)] = value def __contains__(self, key): return key in list(self._fmap.keys()) # Tags ################################################## def hasTag(self, tag): return self.col.tags.inList(tag, self.tags) def stringTags(self): return self.col.tags.join(self.col.tags.canonify(self.tags)) def setTagsFromStr(self, str): self.tags = self.col.tags.split(str) def delTag(self, tag): rem = [] for t in self.tags: if t.lower() == tag.lower(): rem.append(t) for r in rem: self.tags.remove(r) def addTag(self, tag): # duplicates will be stripped on save self.tags.append(tag) # Unique/duplicate check ################################################## def dupeOrEmpty(self): "1 if first is empty; 2 if first is a duplicate, False otherwise." val = self.fields[0] if not val.strip(): return 1 csum = fieldChecksum(val) # find any matching csums and compare for flds in self.col.db.list( "select flds from notes where csum = ? and id != ? and mid = ?", csum, self.id or 0, self.mid): if stripHTMLMedia( splitFields(flds)[0]) == stripHTMLMedia(self.fields[0]): return 2 return False # Flushing cloze notes ################################################## def _preFlush(self): # have we been added yet? self.newlyAdded = not self.col.db.scalar( "select 1 from cards where nid = ?", self.id) def _postFlush(self): # generate missing cards if not self.newlyAdded: rem = self.col.genCards([self.id]) # popping up a dialog while editing is confusing; instead we can # document that the user should open the templates window to # garbage collect empty cards #self.col.remEmptyCards(ids) anki-2.1.0+dfsg~b36/anki/sched.py000066400000000000000000001436331323611211500164530ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import time import random import itertools from operator import itemgetter from heapq import * #from anki.cards import Card from anki.utils import ids2str, intTime, fmtTimeSpan from anki.lang import _ from anki.consts import * from anki.hooks import runHook # queue types: 0=new/cram, 1=lrn, 2=rev, 3=day lrn, -1=suspended, -2=buried # revlog types: 0=lrn, 1=rev, 2=relrn, 3=cram # positive revlog intervals are in days (rev), negative in seconds (lrn) class Scheduler: name = "std" haveCustomStudy = True _spreadRev = True _burySiblingsOnAnswer = True def __init__(self, col): self.col = col self.queueLimit = 50 self.reportLimit = 1000 self.reps = 0 self.today = None self._haveQueues = False self._updateCutoff() def getCard(self): "Pop the next card from the queue. None if finished." self._checkDay() if not self._haveQueues: self.reset() card = self._getCard() if card: self.col.log(card) if not self._burySiblingsOnAnswer: self._burySiblings(card) self.reps += 1 card.startTimer() return card def reset(self): self._updateCutoff() self._resetLrn() self._resetRev() self._resetNew() self._haveQueues = True def answerCard(self, card, ease): self.col.log() assert 1 <= ease <= 4 self.col.markReview(card) if self._burySiblingsOnAnswer: self._burySiblings(card) card.reps += 1 # former is for logging new cards, latter also covers filt. decks card.wasNew = card.type == 0 wasNewQ = card.queue == 0 if wasNewQ: # came from the new queue, move to learning card.queue = 1 # if it was a new card, it's now a learning card if card.type == 0: card.type = 1 # init reps to graduation card.left = self._startingLeft(card) # dynamic? if card.odid and card.type == 2: if self._resched(card): # reviews get their ivl boosted on first sight card.ivl = self._dynIvlBoost(card) card.odue = self.today + card.ivl self._updateStats(card, 'new') if card.queue in (1, 3): self._answerLrnCard(card, ease) if not wasNewQ: self._updateStats(card, 'lrn') elif card.queue == 2: self._answerRevCard(card, ease) self._updateStats(card, 'rev') else: raise Exception("Invalid queue") self._updateStats(card, 'time', card.timeTaken()) card.mod = intTime() card.usn = self.col.usn() card.flushSched() def counts(self, card=None): counts = [self.newCount, self.lrnCount, self.revCount] if card: idx = self.countIdx(card) if idx == 1: counts[1] += card.left // 1000 else: counts[idx] += 1 return tuple(counts) def dueForecast(self, days=7): "Return counts over next DAYS. Includes today." daysd = dict(self.col.db.all(""" select due, count() from cards where did in %s and queue = 2 and due between ? and ? group by due order by due""" % self._deckLimit(), self.today, self.today+days-1)) for d in range(days): d = self.today+d if d not in daysd: daysd[d] = 0 # return in sorted order ret = [x[1] for x in sorted(daysd.items())] return ret def countIdx(self, card): if card.queue == 3: return 1 return card.queue def answerButtons(self, card): if card.odue: # normal review in dyn deck? if card.odid and card.queue == 2: return 4 conf = self._lrnConf(card) if card.type in (0,1) or len(conf['delays']) > 1: return 3 return 2 elif card.queue == 2: return 4 else: return 3 def unburyCards(self): "Unbury cards." self.col.conf['lastUnburied'] = self.today self.col.log( self.col.db.list("select id from cards where queue = -2")) self.col.db.execute( "update cards set queue=type where queue = -2") def unburyCardsForDeck(self): sids = ids2str(self.col.decks.active()) self.col.log( self.col.db.list("select id from cards where queue = -2 and did in %s" % sids)) self.col.db.execute( "update cards set mod=?,usn=?,queue=type where queue = -2 and did in %s" % sids, intTime(), self.col.usn()) # Rev/lrn/time daily stats ########################################################################## def _updateStats(self, card, type, cnt=1): key = type+"Today" for g in ([self.col.decks.get(card.did)] + self.col.decks.parents(card.did)): # add g[key][1] += cnt self.col.decks.save(g) def extendLimits(self, new, rev): cur = self.col.decks.current() parents = self.col.decks.parents(cur['id']) children = [self.col.decks.get(did) for (name, did) in self.col.decks.children(cur['id'])] for g in [cur] + parents + children: # add g['newToday'][1] -= new g['revToday'][1] -= rev self.col.decks.save(g) def _walkingCount(self, limFn=None, cntFn=None): tot = 0 pcounts = {} # for each of the active decks for did in self.col.decks.active(): # early alphas were setting the active ids as a str did = int(did) # get the individual deck's limit lim = limFn(self.col.decks.get(did)) if not lim: continue # check the parents parents = self.col.decks.parents(did) for p in parents: # add if missing if p['id'] not in pcounts: pcounts[p['id']] = limFn(p) # take minimum of child and parent lim = min(pcounts[p['id']], lim) # see how many cards we actually have cnt = cntFn(did, lim) # if non-zero, decrement from parent counts for p in parents: pcounts[p['id']] -= cnt # we may also be a parent pcounts[did] = lim - cnt # and add to running total tot += cnt return tot # Deck list ########################################################################## def deckDueList(self): "Returns [deckname, did, rev, lrn, new]" self._checkDay() self.col.decks.recoverOrphans() decks = self.col.decks.all() decks.sort(key=itemgetter('name')) lims = {} data = [] def parent(name): parts = name.split("::") if len(parts) < 2: return None parts = parts[:-1] return "::".join(parts) for deck in decks: # if we've already seen the exact same deck name, remove the # invalid duplicate and reload if deck['name'] in lims: self.col.decks.rem(deck['id'], cardsToo=False, childrenToo=True) return self.deckDueList() p = parent(deck['name']) # new nlim = self._deckNewLimitSingle(deck) if p: if p not in lims: # if parent was missing, this deck is invalid, and we # need to reload the deck list self.col.decks.rem(deck['id'], cardsToo=False, childrenToo=True) return self.deckDueList() nlim = min(nlim, lims[p][0]) new = self._newForDeck(deck['id'], nlim) # learning lrn = self._lrnForDeck(deck['id']) # reviews rlim = self._deckRevLimitSingle(deck) if p: rlim = min(rlim, lims[p][1]) rev = self._revForDeck(deck['id'], rlim) # save to list data.append([deck['name'], deck['id'], rev, lrn, new]) # add deck as a parent lims[deck['name']] = [nlim, rlim] return data def deckDueTree(self): return self._groupChildren(self.deckDueList()) def _groupChildren(self, grps): # first, split the group names into components for g in grps: g[0] = g[0].split("::") # and sort based on those components grps.sort(key=itemgetter(0)) # then run main function return self._groupChildrenMain(grps) def _groupChildrenMain(self, grps): tree = [] # group and recurse def key(grp): return grp[0][0] for (head, tail) in itertools.groupby(grps, key=key): tail = list(tail) did = None rev = 0 new = 0 lrn = 0 children = [] for c in tail: if len(c[0]) == 1: # current node did = c[1] rev += c[2] lrn += c[3] new += c[4] else: # set new string to tail c[0] = c[0][1:] children.append(c) children = self._groupChildrenMain(children) # tally up children counts for ch in children: rev += ch[2] lrn += ch[3] new += ch[4] # limit the counts to the deck's limits conf = self.col.decks.confForDid(did) deck = self.col.decks.get(did) if not conf['dyn']: rev = max(0, min(rev, conf['rev']['perDay']-deck['revToday'][1])) new = max(0, min(new, conf['new']['perDay']-deck['newToday'][1])) tree.append((head, did, rev, lrn, new, children)) return tuple(tree) # Getting the next card ########################################################################## def _getCard(self): "Return the next due card id, or None." # learning card due? c = self._getLrnCard() if c: return c # new first, or time for one? if self._timeForNewCard(): c = self._getNewCard() if c: return c # card due for review? c = self._getRevCard() if c: return c # day learning card due? c = self._getLrnDayCard() if c: return c # new cards left? c = self._getNewCard() if c: return c # collapse or finish return self._getLrnCard(collapse=True) # New cards ########################################################################## def _resetNewCount(self): cntFn = lambda did, lim: self.col.db.scalar(""" select count() from (select 1 from cards where did = ? and queue = 0 limit ?)""", did, lim) self.newCount = self._walkingCount(self._deckNewLimitSingle, cntFn) def _resetNew(self): self._resetNewCount() self._newDids = self.col.decks.active()[:] self._newQueue = [] self._updateNewCardRatio() def _fillNew(self): if self._newQueue: return True if not self.newCount: return False while self._newDids: did = self._newDids[0] lim = min(self.queueLimit, self._deckNewLimit(did)) if lim: # fill the queue with the current did self._newQueue = self.col.db.list(""" select id from cards where did = ? and queue = 0 order by due limit ?""", did, lim) if self._newQueue: self._newQueue.reverse() return True # nothing left in the deck; move to next self._newDids.pop(0) if self.newCount: # if we didn't get a card but the count is non-zero, # we need to check again for any cards that were # removed from the queue but not buried self._resetNew() return self._fillNew() def _getNewCard(self): if self._fillNew(): self.newCount -= 1 return self.col.getCard(self._newQueue.pop()) def _updateNewCardRatio(self): if self.col.conf['newSpread'] == NEW_CARDS_DISTRIBUTE: if self.newCount: self.newCardModulus = ( (self.newCount + self.revCount) // self.newCount) # if there are cards to review, ensure modulo >= 2 if self.revCount: self.newCardModulus = max(2, self.newCardModulus) return self.newCardModulus = 0 def _timeForNewCard(self): "True if it's time to display a new card when distributing." if not self.newCount: return False if self.col.conf['newSpread'] == NEW_CARDS_LAST: return False elif self.col.conf['newSpread'] == NEW_CARDS_FIRST: return True elif self.newCardModulus: return self.reps and self.reps % self.newCardModulus == 0 def _deckNewLimit(self, did, fn=None): if not fn: fn = self._deckNewLimitSingle sel = self.col.decks.get(did) lim = -1 # for the deck and each of its parents for g in [sel] + self.col.decks.parents(did): rem = fn(g) if lim == -1: lim = rem else: lim = min(rem, lim) return lim def _newForDeck(self, did, lim): "New count for a single deck." if not lim: return 0 lim = min(lim, self.reportLimit) return self.col.db.scalar(""" select count() from (select 1 from cards where did = ? and queue = 0 limit ?)""", did, lim) def _deckNewLimitSingle(self, g): "Limit for deck without parent limits." if g['dyn']: return self.reportLimit c = self.col.decks.confForDid(g['id']) return max(0, c['new']['perDay'] - g['newToday'][1]) def totalNewForCurrentDeck(self): return self.col.db.scalar( """ select count() from cards where id in ( select id from cards where did in %s and queue = 0 limit ?)""" % ids2str(self.col.decks.active()), self.reportLimit) # Learning queues ########################################################################## def _resetLrnCount(self): # sub-day self.lrnCount = self.col.db.scalar(""" select sum(left/1000) from (select left from cards where did in %s and queue = 1 and due < ? limit %d)""" % ( self._deckLimit(), self.reportLimit), self.dayCutoff) or 0 # day self.lrnCount += self.col.db.scalar(""" select count() from cards where did in %s and queue = 3 and due <= ? limit %d""" % (self._deckLimit(), self.reportLimit), self.today) def _resetLrn(self): self._resetLrnCount() self._lrnQueue = [] self._lrnDayQueue = [] self._lrnDids = self.col.decks.active()[:] # sub-day learning def _fillLrn(self): if not self.lrnCount: return False if self._lrnQueue: return True self._lrnQueue = self.col.db.all(""" select due, id from cards where did in %s and queue = 1 and due < :lim limit %d""" % (self._deckLimit(), self.reportLimit), lim=self.dayCutoff) # as it arrives sorted by did first, we need to sort it self._lrnQueue.sort() return self._lrnQueue def _getLrnCard(self, collapse=False): if self._fillLrn(): cutoff = time.time() if collapse: cutoff += self.col.conf['collapseTime'] if self._lrnQueue[0][0] < cutoff: id = heappop(self._lrnQueue)[1] card = self.col.getCard(id) self.lrnCount -= card.left // 1000 return card # daily learning def _fillLrnDay(self): if not self.lrnCount: return False if self._lrnDayQueue: return True while self._lrnDids: did = self._lrnDids[0] # fill the queue with the current did self._lrnDayQueue = self.col.db.list(""" select id from cards where did = ? and queue = 3 and due <= ? limit ?""", did, self.today, self.queueLimit) if self._lrnDayQueue: # order r = random.Random() r.seed(self.today) r.shuffle(self._lrnDayQueue) # is the current did empty? if len(self._lrnDayQueue) < self.queueLimit: self._lrnDids.pop(0) return True # nothing left in the deck; move to next self._lrnDids.pop(0) def _getLrnDayCard(self): if self._fillLrnDay(): self.lrnCount -= 1 return self.col.getCard(self._lrnDayQueue.pop()) def _answerLrnCard(self, card, ease): # ease 1=no, 2=yes, 3=remove conf = self._lrnConf(card) if card.odid and not card.wasNew: type = 3 elif card.type == 2: type = 2 else: type = 0 leaving = False # lrnCount was decremented once when card was fetched lastLeft = card.left # immediate graduate? if ease == 3: self._rescheduleAsRev(card, conf, True) leaving = True # graduation time? elif ease == 2 and (card.left%1000)-1 <= 0: self._rescheduleAsRev(card, conf, False) leaving = True else: # one step towards graduation if ease == 2: # decrement real left count and recalculate left today left = (card.left % 1000) - 1 card.left = self._leftToday(conf['delays'], left)*1000 + left # failed else: card.left = self._startingLeft(card) resched = self._resched(card) if 'mult' in conf and resched: # review that's lapsed card.ivl = max(1, conf['minInt'], card.ivl*conf['mult']) else: # new card; no ivl adjustment pass if resched and card.odid: card.odue = self.today + 1 delay = self._delayForGrade(conf, card.left) if card.due < time.time(): # not collapsed; add some randomness delay *= random.uniform(1, 1.25) card.due = int(time.time() + delay) # due today? if card.due < self.dayCutoff: self.lrnCount += card.left // 1000 # if the queue is not empty and there's nothing else to do, make # sure we don't put it at the head of the queue and end up showing # it twice in a row card.queue = 1 if self._lrnQueue and not self.revCount and not self.newCount: smallestDue = self._lrnQueue[0][0] card.due = max(card.due, smallestDue+1) heappush(self._lrnQueue, (card.due, card.id)) else: # the card is due in one or more days, so we need to use the # day learn queue ahead = ((card.due - self.dayCutoff) // 86400) + 1 card.due = self.today + ahead card.queue = 3 self._logLrn(card, ease, conf, leaving, type, lastLeft) def _delayForGrade(self, conf, left): left = left % 1000 try: delay = conf['delays'][-left] except IndexError: if conf['delays']: delay = conf['delays'][0] else: # user deleted final step; use dummy value delay = 1 return delay*60 def _lrnConf(self, card): if card.type == 2: return self._lapseConf(card) else: return self._newConf(card) def _rescheduleAsRev(self, card, conf, early): lapse = card.type == 2 if lapse: if self._resched(card): card.due = max(self.today+1, card.odue) else: card.due = card.odue card.odue = 0 else: self._rescheduleNew(card, conf, early) card.queue = 2 card.type = 2 # if we were dynamic, graduating means moving back to the old deck resched = self._resched(card) if card.odid: card.did = card.odid card.odue = 0 card.odid = 0 # if rescheduling is off, it needs to be set back to a new card if not resched and not lapse: card.queue = card.type = 0 card.due = self.col.nextID("pos") def _startingLeft(self, card): if card.type == 2: conf = self._lapseConf(card) else: conf = self._lrnConf(card) tot = len(conf['delays']) tod = self._leftToday(conf['delays'], tot) return tot + tod*1000 def _leftToday(self, delays, left, now=None): "The number of steps that can be completed by the day cutoff." if not now: now = intTime() delays = delays[-left:] ok = 0 for i in range(len(delays)): now += delays[i]*60 if now > self.dayCutoff: break ok = i return ok+1 def _graduatingIvl(self, card, conf, early, adj=True): if card.type == 2: # lapsed card being relearnt if card.odid: if conf['resched']: return self._dynIvlBoost(card) return card.ivl if not early: # graduate ideal = conf['ints'][0] else: # early remove ideal = conf['ints'][1] if adj: return self._adjRevIvl(card, ideal) else: return ideal def _rescheduleNew(self, card, conf, early): "Reschedule a new card that's graduated for the first time." card.ivl = self._graduatingIvl(card, conf, early) card.due = self.today+card.ivl card.factor = conf['initialFactor'] def _logLrn(self, card, ease, conf, leaving, type, lastLeft): lastIvl = -(self._delayForGrade(conf, lastLeft)) ivl = card.ivl if leaving else -(self._delayForGrade(conf, card.left)) def log(): self.col.db.execute( "insert into revlog values (?,?,?,?,?,?,?,?,?)", int(time.time()*1000), card.id, self.col.usn(), ease, ivl, lastIvl, card.factor, card.timeTaken(), type) try: log() except: # duplicate pk; retry in 10ms time.sleep(0.01) log() def removeLrn(self, ids=None): "Remove cards from the learning queues." if ids: extra = " and id in "+ids2str(ids) else: # benchmarks indicate it's about 10x faster to search all decks # with the index than scan the table extra = " and did in "+ids2str(self.col.decks.allIds()) # review cards in relearning self.col.db.execute(""" update cards set due = odue, queue = 2, mod = %d, usn = %d, odue = 0 where queue in (1,3) and type = 2 %s """ % (intTime(), self.col.usn(), extra)) # new cards in learning self.forgetCards(self.col.db.list( "select id from cards where queue in (1,3) %s" % extra)) def _lrnForDeck(self, did): cnt = self.col.db.scalar( """ select sum(left/1000) from (select left from cards where did = ? and queue = 1 and due < ? limit ?)""", did, intTime() + self.col.conf['collapseTime'], self.reportLimit) or 0 return cnt + self.col.db.scalar( """ select count() from (select 1 from cards where did = ? and queue = 3 and due <= ? limit ?)""", did, self.today, self.reportLimit) # Reviews ########################################################################## def _deckRevLimit(self, did): return self._deckNewLimit(did, self._deckRevLimitSingle) def _deckRevLimitSingle(self, d): if d['dyn']: return self.reportLimit c = self.col.decks.confForDid(d['id']) return max(0, c['rev']['perDay'] - d['revToday'][1]) def _revForDeck(self, did, lim): lim = min(lim, self.reportLimit) return self.col.db.scalar( """ select count() from (select 1 from cards where did = ? and queue = 2 and due <= ? limit ?)""", did, self.today, lim) def _resetRevCount(self): def cntFn(did, lim): return self.col.db.scalar(""" select count() from (select id from cards where did = ? and queue = 2 and due <= ? limit %d)""" % lim, did, self.today) self.revCount = self._walkingCount( self._deckRevLimitSingle, cntFn) def _resetRev(self): self._resetRevCount() self._revQueue = [] self._revDids = self.col.decks.active()[:] def _fillRev(self): if self._revQueue: return True if not self.revCount: return False while self._revDids: did = self._revDids[0] lim = min(self.queueLimit, self._deckRevLimit(did)) if lim: # fill the queue with the current did self._revQueue = self.col.db.list(""" select id from cards where did = ? and queue = 2 and due <= ? limit ?""", did, self.today, lim) if self._revQueue: # ordering if self.col.decks.get(did)['dyn']: # dynamic decks need due order preserved self._revQueue.reverse() else: # random order for regular reviews r = random.Random() r.seed(self.today) r.shuffle(self._revQueue) # is the current did empty? if len(self._revQueue) < lim: self._revDids.pop(0) return True # nothing left in the deck; move to next self._revDids.pop(0) if self.revCount: # if we didn't get a card but the count is non-zero, # we need to check again for any cards that were # removed from the queue but not buried self._resetRev() return self._fillRev() def _getRevCard(self): if self._fillRev(): self.revCount -= 1 return self.col.getCard(self._revQueue.pop()) def totalRevForCurrentDeck(self): return self.col.db.scalar( """ select count() from cards where id in ( select id from cards where did in %s and queue = 2 and due <= ? limit ?)""" % ids2str(self.col.decks.active()), self.today, self.reportLimit) # Answering a review card ########################################################################## def _answerRevCard(self, card, ease): delay = 0 if ease == 1: delay = self._rescheduleLapse(card) else: self._rescheduleRev(card, ease) self._logRev(card, ease, delay) def _rescheduleLapse(self, card): conf = self._lapseConf(card) card.lastIvl = card.ivl if self._resched(card): card.lapses += 1 card.ivl = self._nextLapseIvl(card, conf) card.factor = max(1300, card.factor-200) card.due = self.today + card.ivl # if it's a filtered deck, update odue as well if card.odid: card.odue = card.due # if suspended as a leech, nothing to do delay = 0 if self._checkLeech(card, conf) and card.queue == -1: return delay # if no relearning steps, nothing to do if not conf['delays']: return delay # record rev due date for later if not card.odue: card.odue = card.due delay = self._delayForGrade(conf, 0) card.due = int(delay + time.time()) card.left = self._startingLeft(card) # queue 1 if card.due < self.dayCutoff: self.lrnCount += card.left // 1000 card.queue = 1 heappush(self._lrnQueue, (card.due, card.id)) else: # day learn queue ahead = ((card.due - self.dayCutoff) // 86400) + 1 card.due = self.today + ahead card.queue = 3 return delay def _nextLapseIvl(self, card, conf): return max(conf['minInt'], int(card.ivl*conf['mult'])) def _rescheduleRev(self, card, ease): # update interval card.lastIvl = card.ivl if self._resched(card): self._updateRevIvl(card, ease) # then the rest card.factor = max(1300, card.factor+[-150, 0, 150][ease-2]) card.due = self.today + card.ivl else: card.due = card.odue if card.odid: card.did = card.odid card.odid = 0 card.odue = 0 def _logRev(self, card, ease, delay): def log(): self.col.db.execute( "insert into revlog values (?,?,?,?,?,?,?,?,?)", int(time.time()*1000), card.id, self.col.usn(), ease, -delay or card.ivl, card.lastIvl, card.factor, card.timeTaken(), 1) try: log() except: # duplicate pk; retry in 10ms time.sleep(0.01) log() # Interval management ########################################################################## def _nextRevIvl(self, card, ease): "Ideal next interval for CARD, given EASE." delay = self._daysLate(card) conf = self._revConf(card) fct = card.factor / 1000 ivl2 = self._constrainedIvl((card.ivl + delay // 4) * 1.2, conf, card.ivl) ivl3 = self._constrainedIvl((card.ivl + delay // 2) * fct, conf, ivl2) ivl4 = self._constrainedIvl( (card.ivl + delay) * fct * conf['ease4'], conf, ivl3) if ease == 2: interval = ivl2 elif ease == 3: interval = ivl3 elif ease == 4: interval = ivl4 # interval capped? return min(interval, conf['maxIvl']) def _fuzzedIvl(self, ivl): min, max = self._fuzzIvlRange(ivl) return random.randint(min, max) def _fuzzIvlRange(self, ivl): if ivl < 2: return [1, 1] elif ivl == 2: return [2, 3] elif ivl < 7: fuzz = int(ivl*0.25) elif ivl < 30: fuzz = max(2, int(ivl*0.15)) else: fuzz = max(4, int(ivl*0.05)) # fuzz at least a day fuzz = max(fuzz, 1) return [ivl-fuzz, ivl+fuzz] def _constrainedIvl(self, ivl, conf, prev): "Integer interval after interval factor and prev+1 constraints applied." new = ivl * conf.get('ivlFct', 1) return int(max(new, prev+1)) def _daysLate(self, card): "Number of days later than scheduled." due = card.odue if card.odid else card.due return max(0, self.today - due) def _updateRevIvl(self, card, ease): idealIvl = self._nextRevIvl(card, ease) card.ivl = min(max(self._adjRevIvl(card, idealIvl), card.ivl+1), self._revConf(card)['maxIvl']) def _adjRevIvl(self, card, idealIvl): if self._spreadRev: idealIvl = self._fuzzedIvl(idealIvl) return idealIvl # Dynamic deck handling ########################################################################## def rebuildDyn(self, did=None): "Rebuild a dynamic deck." did = did or self.col.decks.selected() deck = self.col.decks.get(did) assert deck['dyn'] # move any existing cards back first, then fill self.emptyDyn(did) ids = self._fillDyn(deck) if not ids: return # and change to our new deck self.col.decks.select(did) return ids def _fillDyn(self, deck): search, limit, order = deck['terms'][0] orderlimit = self._dynOrder(order, limit) if search.strip(): search = "(%s)" % search search = "%s -is:suspended -is:buried -deck:filtered" % search try: ids = self.col.findCards(search, order=orderlimit) except: ids = [] return ids # move the cards over self.col.log(deck['id'], ids) self._moveToDyn(deck['id'], ids) return ids def emptyDyn(self, did, lim=None): if not lim: lim = "did = %s" % did self.col.log(self.col.db.list("select id from cards where %s" % lim)) # move out of cram queue self.col.db.execute(""" update cards set did = odid, queue = (case when type = 1 then 0 else type end), type = (case when type = 1 then 0 else type end), due = odue, odue = 0, odid = 0, usn = ? where %s""" % lim, self.col.usn()) def remFromDyn(self, cids): self.emptyDyn(None, "id in %s and odid" % ids2str(cids)) def _dynOrder(self, o, l): if o == DYN_OLDEST: t = "(select max(id) from revlog where cid=c.id)" elif o == DYN_RANDOM: t = "random()" elif o == DYN_SMALLINT: t = "ivl" elif o == DYN_BIGINT: t = "ivl desc" elif o == DYN_LAPSES: t = "lapses desc" elif o == DYN_ADDED: t = "n.id" elif o == DYN_REVADDED: t = "n.id desc" elif o == DYN_DUE: t = "c.due" elif o == DYN_DUEPRIORITY: t = "(case when queue=2 and due <= %d then (ivl / cast(%d-due+0.001 as real)) else 100000+due end)" % ( self.today, self.today) else: # if we don't understand the term, default to due order t = "c.due" return t + " limit %d" % l def _moveToDyn(self, did, ids): deck = self.col.decks.get(did) data = [] t = intTime(); u = self.col.usn() for c, id in enumerate(ids): # start at -100000 so that reviews are all due data.append((did, -100000+c, u, id)) # due reviews stay in the review queue. careful: can't use # "odid or did", as sqlite converts to boolean queue = """ (case when type=2 and (case when odue then odue <= %d else due <= %d end) then 2 else 0 end)""" queue %= (self.today, self.today) self.col.db.executemany(""" update cards set odid = (case when odid then odid else did end), odue = (case when odue then odue else due end), did = ?, queue = %s, due = ?, usn = ? where id = ?""" % queue, data) def _dynIvlBoost(self, card): assert card.odid and card.type == 2 assert card.factor elapsed = card.ivl - (card.odue - self.today) factor = ((card.factor/1000)+1.2)/2 ivl = int(max(card.ivl, elapsed * factor, 1)) conf = self._revConf(card) return min(conf['maxIvl'], ivl) # Leeches ########################################################################## def _checkLeech(self, card, conf): "Leech handler. True if card was a leech." lf = conf['leechFails'] if not lf: return # if over threshold or every half threshold reps after that if (card.lapses >= lf and (card.lapses-lf) % (max(lf // 2, 1)) == 0): # add a leech tag f = card.note() f.addTag("leech") f.flush() # handle a = conf['leechAction'] if a == 0: # if it has an old due, remove it from cram/relearning if card.odue: card.due = card.odue if card.odid: card.did = card.odid card.odue = card.odid = 0 card.queue = -1 # notify UI runHook("leech", card) return True # Tools ########################################################################## def _cardConf(self, card): return self.col.decks.confForDid(card.did) def _newConf(self, card): conf = self._cardConf(card) # normal deck if not card.odid: return conf['new'] # dynamic deck; override some attributes, use original deck for others oconf = self.col.decks.confForDid(card.odid) delays = conf['delays'] or oconf['new']['delays'] return dict( # original deck ints=oconf['new']['ints'], initialFactor=oconf['new']['initialFactor'], bury=oconf['new'].get("bury", True), # overrides delays=delays, separate=conf['separate'], order=NEW_CARDS_DUE, perDay=self.reportLimit ) def _lapseConf(self, card): conf = self._cardConf(card) # normal deck if not card.odid: return conf['lapse'] # dynamic deck; override some attributes, use original deck for others oconf = self.col.decks.confForDid(card.odid) delays = conf['delays'] or oconf['lapse']['delays'] return dict( # original deck minInt=oconf['lapse']['minInt'], leechFails=oconf['lapse']['leechFails'], leechAction=oconf['lapse']['leechAction'], mult=oconf['lapse']['mult'], # overrides delays=delays, resched=conf['resched'], ) def _revConf(self, card): conf = self._cardConf(card) # normal deck if not card.odid: return conf['rev'] # dynamic deck return self.col.decks.confForDid(card.odid)['rev'] def _deckLimit(self): return ids2str(self.col.decks.active()) def _resched(self, card): conf = self._cardConf(card) if not conf['dyn']: return True return conf['resched'] # Daily cutoff ########################################################################## def _updateCutoff(self): oldToday = self.today # days since col created self.today = int((time.time() - self.col.crt) // 86400) # end of day cutoff self.dayCutoff = self.col.crt + (self.today+1)*86400 if oldToday != self.today: self.col.log(self.today, self.dayCutoff) # update all daily counts, but don't save decks to prevent needless # conflicts. we'll save on card answer instead def update(g): for t in "new", "rev", "lrn", "time": key = t+"Today" if g[key][0] != self.today: g[key] = [self.today, 0] for deck in self.col.decks.all(): update(deck) # unbury if the day has rolled over unburied = self.col.conf.get("lastUnburied", 0) if unburied < self.today: self.unburyCards() def _checkDay(self): # check if the day has rolled over if time.time() > self.dayCutoff: self.reset() # Deck finished state ########################################################################## def finishedMsg(self): return (""+_( "Congratulations! You have finished this deck for now.")+ "

" + self._nextDueMsg()) def _nextDueMsg(self): line = [] # the new line replacements are so we don't break translations # in a point release if self.revDue(): line.append(_("""\ Today's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.""").replace("\n", " ")) if self.newDue(): line.append(_("""\ There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.""").replace("\n", " ")) if self.haveBuried(): if self.haveCustomStudy: now = " " + _("To see them now, click the Unbury button below.") else: now = "" line.append(_("""\ Some related or buried cards were delayed until a later session.""")+now) if self.haveCustomStudy and not self.col.decks.current()['dyn']: line.append(_("""\ To study outside of the normal schedule, click the Custom Study button below.""")) return "

".join(line) def revDue(self): "True if there are any rev cards due." return self.col.db.scalar( ("select 1 from cards where did in %s and queue = 2 " "and due <= ? limit 1") % self._deckLimit(), self.today) def newDue(self): "True if there are any new cards due." return self.col.db.scalar( ("select 1 from cards where did in %s and queue = 0 " "limit 1") % self._deckLimit()) def haveBuried(self): sdids = ids2str(self.col.decks.active()) cnt = self.col.db.scalar( "select 1 from cards where queue = -2 and did in %s limit 1" % sdids) return not not cnt # Next time reports ########################################################################## def nextIvlStr(self, card, ease, short=False): "Return the next interval for CARD as a string." ivl = self.nextIvl(card, ease) if not ivl: return _("(end)") s = fmtTimeSpan(ivl, short=short) if ivl < self.col.conf['collapseTime']: s = "<"+s return s def nextIvl(self, card, ease): "Return the next interval for CARD, in seconds." if card.queue in (0,1,3): return self._nextLrnIvl(card, ease) elif ease == 1: # lapsed conf = self._lapseConf(card) if conf['delays']: return conf['delays'][0]*60 return self._nextLapseIvl(card, conf)*86400 else: # review return self._nextRevIvl(card, ease)*86400 # this isn't easily extracted from the learn code def _nextLrnIvl(self, card, ease): if card.queue == 0: card.left = self._startingLeft(card) conf = self._lrnConf(card) if ease == 1: # fail return self._delayForGrade(conf, len(conf['delays'])) elif ease == 3: # early removal if not self._resched(card): return 0 return self._graduatingIvl(card, conf, True, adj=False) * 86400 else: left = card.left%1000 - 1 if left <= 0: # graduate if not self._resched(card): return 0 return self._graduatingIvl(card, conf, False, adj=False) * 86400 else: return self._delayForGrade(conf, left) # Suspending ########################################################################## def suspendCards(self, ids): "Suspend cards." self.col.log(ids) self.remFromDyn(ids) self.removeLrn(ids) self.col.db.execute( "update cards set queue=-1,mod=?,usn=? where id in "+ ids2str(ids), intTime(), self.col.usn()) def unsuspendCards(self, ids): "Unsuspend cards." self.col.log(ids) self.col.db.execute( "update cards set queue=type,mod=?,usn=? " "where queue = -1 and id in "+ ids2str(ids), intTime(), self.col.usn()) def buryCards(self, cids): self.col.log(cids) self.remFromDyn(cids) self.removeLrn(cids) self.col.db.execute(""" update cards set queue=-2,mod=?,usn=? where id in """+ids2str(cids), intTime(), self.col.usn()) def buryNote(self, nid): "Bury all cards for note until next session." cids = self.col.db.list( "select id from cards where nid = ? and queue >= 0", nid) self.buryCards(cids) # Sibling spacing ########################################################################## def _burySiblings(self, card): toBury = [] nconf = self._newConf(card) buryNew = nconf.get("bury", True) rconf = self._revConf(card) buryRev = rconf.get("bury", True) # loop through and remove from queues for cid,queue in self.col.db.execute(""" select id, queue from cards where nid=? and id!=? and (queue=0 or (queue=2 and due<=?))""", card.nid, card.id, self.today): if queue == 2: if buryRev: toBury.append(cid) # if bury disabled, we still discard to give same-day spacing try: self._revQueue.remove(cid) except ValueError: pass else: # if bury disabled, we still discard to give same-day spacing if buryNew: toBury.append(cid) try: self._newQueue.remove(cid) except ValueError: pass # then bury if toBury: self.col.db.execute( "update cards set queue=-2,mod=?,usn=? where id in "+ids2str(toBury), intTime(), self.col.usn()) self.col.log(toBury) # Resetting ########################################################################## def forgetCards(self, ids): "Put cards at the end of the new queue." self.remFromDyn(ids) self.col.db.execute( "update cards set type=0,queue=0,ivl=0,due=0,odue=0,factor=?" " where id in "+ids2str(ids), STARTING_FACTOR) pmax = self.col.db.scalar( "select max(due) from cards where type=0") or 0 # takes care of mod + usn self.sortCards(ids, start=pmax+1) self.col.log(ids) def reschedCards(self, ids, imin, imax): "Put cards in review queue with a new interval in days (min, max)." d = [] t = self.today mod = intTime() for id in ids: r = random.randint(imin, imax) d.append(dict(id=id, due=r+t, ivl=max(1, r), mod=mod, usn=self.col.usn(), fact=STARTING_FACTOR)) self.remFromDyn(ids) self.col.db.executemany(""" update cards set type=2,queue=2,ivl=:ivl,due=:due,odue=0, usn=:usn,mod=:mod,factor=:fact where id=:id""", d) self.col.log(ids) def resetCards(self, ids): "Completely reset cards for export." sids = ids2str(ids) # we want to avoid resetting due number of existing new cards on export nonNew = self.col.db.list( "select id from cards where id in %s and (queue != 0 or type != 0)" % sids) # reset all cards self.col.db.execute( "update cards set reps=0,lapses=0,odid=0,odue=0,queue=0" " where id in %s" % sids ) # and forget any non-new cards, changing their due numbers self.forgetCards(nonNew) self.col.log(ids) # Repositioning new cards ########################################################################## def sortCards(self, cids, start=1, step=1, shuffle=False, shift=False): scids = ids2str(cids) now = intTime() nids = [] nidsSet = set() for id in cids: nid = self.col.db.scalar("select nid from cards where id = ?", id) if nid not in nidsSet: nids.append(nid) nidsSet.add(nid) if not nids: # no new cards return # determine nid ordering due = {} if shuffle: random.shuffle(nids) for c, nid in enumerate(nids): due[nid] = start+c*step high = start+c*step # shift? if shift: low = self.col.db.scalar( "select min(due) from cards where due >= ? and type = 0 " "and id not in %s" % scids, start) if low is not None: shiftby = high - low + 1 self.col.db.execute(""" update cards set mod=?, usn=?, due=due+? where id not in %s and due >= ? and queue = 0""" % scids, now, self.col.usn(), shiftby, low) # reorder cards d = [] for id, nid in self.col.db.execute( "select id, nid from cards where type = 0 and id in "+scids): d.append(dict(now=now, due=due[nid], usn=self.col.usn(), cid=id)) self.col.db.executemany( "update cards set due=:due,mod=:now,usn=:usn where id = :cid", d) def randomizeCards(self, did): cids = self.col.db.list("select id from cards where did = ?", did) self.sortCards(cids, shuffle=True) def orderCards(self, did): cids = self.col.db.list("select id from cards where did = ? order by id", did) self.sortCards(cids) def resortConf(self, conf): for did in self.col.decks.didsForConf(conf): if conf['new']['order'] == 0: self.randomizeCards(did) else: self.orderCards(did) # for post-import def maybeRandomizeDeck(self, did=None): if not did: did = self.col.decks.selected() conf = self.col.decks.confForDid(did) # in order due? if conf['new']['order'] == NEW_CARDS_RANDOM: self.randomizeCards(did) anki-2.1.0+dfsg~b36/anki/schedv2.py000066400000000000000000001520511323611211500167150ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import time import random import itertools from operator import itemgetter from heapq import * import datetime from anki.utils import ids2str, intTime, fmtTimeSpan from anki.lang import _ from anki.consts import * from anki.hooks import runHook # card types: 0=new, 1=lrn, 2=rev, 3=relrn # queue types: 0=new, 1=(re)lrn, 2=rev, 3=day (re)lrn, # 4=preview, -1=suspended, -2=sibling buried, -3=manually buried # revlog types: 0=lrn, 1=rev, 2=relrn, 3=early review # positive revlog intervals are in days (rev), negative in seconds (lrn) # odue/odid store original due/did when cards moved to filtered deck class Scheduler: name = "std2" haveCustomStudy = True _burySiblingsOnAnswer = True def __init__(self, col): self.col = col self.queueLimit = 50 self.reportLimit = 1000 self.reps = 0 self.today = None self._haveQueues = False self._updateCutoff() def getCard(self): "Pop the next card from the queue. None if finished." self._checkDay() if not self._haveQueues: self.reset() card = self._getCard() if card: self.col.log(card) if not self._burySiblingsOnAnswer: self._burySiblings(card) self.reps += 1 card.startTimer() return card def reset(self): self._updateCutoff() self._resetLrn() self._resetRev() self._resetNew() self._haveQueues = True def answerCard(self, card, ease): self.col.log() assert 1 <= ease <= 4 assert 0 <= card.queue <= 4 self.col.markReview(card) if self._burySiblingsOnAnswer: self._burySiblings(card) self._answerCard(card, ease) self._updateStats(card, 'time', card.timeTaken()) card.mod = intTime() card.usn = self.col.usn() card.flushSched() def _answerCard(self, card, ease): if self._previewingCard(card): self._answerCardPreview(card, ease) return card.reps += 1 if card.queue == 0: # came from the new queue, move to learning card.queue = 1 card.type = 1 # init reps to graduation card.left = self._startingLeft(card) # update daily limit self._updateStats(card, 'new') if card.queue in (1, 3): self._answerLrnCard(card, ease) elif card.queue == 2: self._answerRevCard(card, ease) # update daily limit self._updateStats(card, 'rev') else: assert 0 def _answerCardPreview(self, card, ease): assert 1 <= ease <= 2 if ease == 1: # repeat after delay card.queue = 4 card.due = intTime() + self._previewDelay(card) self.lrnCount += 1 else: # restore original card state and remove from filtered deck self._restorePreviewCard(card) self._removeFromFiltered(card) def counts(self, card=None): counts = [self.newCount, self.lrnCount, self.revCount] if card: idx = self.countIdx(card) counts[idx] += 1 return tuple(counts) def dueForecast(self, days=7): "Return counts over next DAYS. Includes today." daysd = dict(self.col.db.all(""" select due, count() from cards where did in %s and queue = 2 and due between ? and ? group by due order by due""" % self._deckLimit(), self.today, self.today+days-1)) for d in range(days): d = self.today+d if d not in daysd: daysd[d] = 0 # return in sorted order ret = [x[1] for x in sorted(daysd.items())] return ret def countIdx(self, card): if card.queue in (3,4): return 1 return card.queue def answerButtons(self, card): conf = self._cardConf(card) if card.odid and not conf['resched']: return 2 return 4 # Rev/lrn/time daily stats ########################################################################## def _updateStats(self, card, type, cnt=1): key = type+"Today" for g in ([self.col.decks.get(card.did)] + self.col.decks.parents(card.did)): # add g[key][1] += cnt self.col.decks.save(g) def extendLimits(self, new, rev): cur = self.col.decks.current() parents = self.col.decks.parents(cur['id']) children = [self.col.decks.get(did) for (name, did) in self.col.decks.children(cur['id'])] for g in [cur] + parents + children: # add g['newToday'][1] -= new g['revToday'][1] -= rev self.col.decks.save(g) def _walkingCount(self, limFn=None, cntFn=None): tot = 0 pcounts = {} # for each of the active decks for did in self.col.decks.active(): # early alphas were setting the active ids as a str did = int(did) # get the individual deck's limit lim = limFn(self.col.decks.get(did)) if not lim: continue # check the parents parents = self.col.decks.parents(did) for p in parents: # add if missing if p['id'] not in pcounts: pcounts[p['id']] = limFn(p) # take minimum of child and parent lim = min(pcounts[p['id']], lim) # see how many cards we actually have cnt = cntFn(did, lim) # if non-zero, decrement from parent counts for p in parents: pcounts[p['id']] -= cnt # we may also be a parent pcounts[did] = lim - cnt # and add to running total tot += cnt return tot # Deck list ########################################################################## def deckDueList(self): "Returns [deckname, did, rev, lrn, new]" self._checkDay() self.col.decks.recoverOrphans() decks = self.col.decks.all() decks.sort(key=itemgetter('name')) lims = {} data = [] def parent(name): parts = name.split("::") if len(parts) < 2: return None parts = parts[:-1] return "::".join(parts) for deck in decks: # if we've already seen the exact same deck name, remove the # invalid duplicate and reload if deck['name'] in lims: self.col.decks.rem(deck['id'], cardsToo=False, childrenToo=True) return self.deckDueList() p = parent(deck['name']) # new nlim = self._deckNewLimitSingle(deck) if p: if p not in lims: # if parent was missing, this deck is invalid, and we # need to reload the deck list self.col.decks.rem(deck['id'], cardsToo=False, childrenToo=True) return self.deckDueList() nlim = min(nlim, lims[p][0]) new = self._newForDeck(deck['id'], nlim) # learning lrn = self._lrnForDeck(deck['id']) # reviews if p: plim = lims[p][1] else: plim = None rlim = self._deckRevLimitSingle(deck, parentLimit=plim) rev = self._revForDeck(deck['id'], rlim) # save to list data.append([deck['name'], deck['id'], rev, lrn, new]) # add deck as a parent lims[deck['name']] = [nlim, rlim] return data def deckDueTree(self): return self._groupChildren(self.deckDueList()) def _groupChildren(self, grps): # first, split the group names into components for g in grps: g[0] = g[0].split("::") # and sort based on those components grps.sort(key=itemgetter(0)) # then run main function return self._groupChildrenMain(grps) def _groupChildrenMain(self, grps): tree = [] # group and recurse def key(grp): return grp[0][0] for (head, tail) in itertools.groupby(grps, key=key): tail = list(tail) did = None rev = 0 new = 0 lrn = 0 children = [] for c in tail: if len(c[0]) == 1: # current node did = c[1] rev += c[2] lrn += c[3] new += c[4] else: # set new string to tail c[0] = c[0][1:] children.append(c) children = self._groupChildrenMain(children) # tally up children counts for ch in children: lrn += ch[3] new += ch[4] # limit the counts to the deck's limits conf = self.col.decks.confForDid(did) deck = self.col.decks.get(did) if not conf['dyn']: new = max(0, min(new, conf['new']['perDay']-deck['newToday'][1])) tree.append((head, did, rev, lrn, new, children)) return tuple(tree) # Getting the next card ########################################################################## def _getCard(self): "Return the next due card id, or None." # learning card due? c = self._getLrnCard() if c: return c # new first, or time for one? if self._timeForNewCard(): c = self._getNewCard() if c: return c # day learning first and card due? dayLearnFirst = self.col.conf.get("dayLearnFirst", False) c = dayLearnFirst and self._getLrnDayCard() if c: return c # card due for review? c = self._getRevCard() if c: return c # day learning card due? c = not dayLearnFirst and self._getLrnDayCard() if c: return c # new cards left? c = self._getNewCard() if c: return c # collapse or finish return self._getLrnCard(collapse=True) # New cards ########################################################################## def _resetNewCount(self): cntFn = lambda did, lim: self.col.db.scalar(""" select count() from (select 1 from cards where did = ? and queue = 0 limit ?)""", did, lim) self.newCount = self._walkingCount(self._deckNewLimitSingle, cntFn) def _resetNew(self): self._resetNewCount() self._newDids = self.col.decks.active()[:] self._newQueue = [] self._updateNewCardRatio() def _fillNew(self): if self._newQueue: return True if not self.newCount: return False while self._newDids: did = self._newDids[0] lim = min(self.queueLimit, self._deckNewLimit(did)) if lim: # fill the queue with the current did self._newQueue = self.col.db.list(""" select id from cards where did = ? and queue = 0 order by due limit ?""", did, lim) if self._newQueue: self._newQueue.reverse() return True # nothing left in the deck; move to next self._newDids.pop(0) if self.newCount: # if we didn't get a card but the count is non-zero, # we need to check again for any cards that were # removed from the queue but not buried self._resetNew() return self._fillNew() def _getNewCard(self): if self._fillNew(): self.newCount -= 1 return self.col.getCard(self._newQueue.pop()) def _updateNewCardRatio(self): if self.col.conf['newSpread'] == NEW_CARDS_DISTRIBUTE: if self.newCount: self.newCardModulus = ( (self.newCount + self.revCount) // self.newCount) # if there are cards to review, ensure modulo >= 2 if self.revCount: self.newCardModulus = max(2, self.newCardModulus) return self.newCardModulus = 0 def _timeForNewCard(self): "True if it's time to display a new card when distributing." if not self.newCount: return False if self.col.conf['newSpread'] == NEW_CARDS_LAST: return False elif self.col.conf['newSpread'] == NEW_CARDS_FIRST: return True elif self.newCardModulus: return self.reps and self.reps % self.newCardModulus == 0 def _deckNewLimit(self, did, fn=None): if not fn: fn = self._deckNewLimitSingle sel = self.col.decks.get(did) lim = -1 # for the deck and each of its parents for g in [sel] + self.col.decks.parents(did): rem = fn(g) if lim == -1: lim = rem else: lim = min(rem, lim) return lim def _newForDeck(self, did, lim): "New count for a single deck." if not lim: return 0 lim = min(lim, self.reportLimit) return self.col.db.scalar(""" select count() from (select 1 from cards where did = ? and queue = 0 limit ?)""", did, lim) def _deckNewLimitSingle(self, g): "Limit for deck without parent limits." if g['dyn']: return self.reportLimit c = self.col.decks.confForDid(g['id']) return max(0, c['new']['perDay'] - g['newToday'][1]) def totalNewForCurrentDeck(self): return self.col.db.scalar( """ select count() from cards where id in ( select id from cards where did in %s and queue = 0 limit ?)""" % ids2str(self.col.decks.active()), self.reportLimit) # Learning queues ########################################################################## def _resetLrnCount(self): cutoff = intTime() + self.col.conf['collapseTime'] # sub-day self.lrnCount = self.col.db.scalar(""" select count() from (select null from cards where did in %s and queue = 1 and due < ? limit %d)""" % ( self._deckLimit(), self.reportLimit), cutoff) or 0 # day self.lrnCount += self.col.db.scalar(""" select count() from (select null from cards where did in %s and queue = 3 and due <= ? limit %d)""" % (self._deckLimit(), self.reportLimit), self.today) # previews self.lrnCount += self.col.db.scalar(""" select count() from (select null from cards where did in %s and queue = 4 limit %d)""" % (self._deckLimit(), self.reportLimit)) def _resetLrn(self): self._resetLrnCount() self._lrnQueue = [] self._lrnDayQueue = [] self._lrnDids = self.col.decks.active()[:] # sub-day learning def _fillLrn(self): if not self.lrnCount: return False if self._lrnQueue: return True cutoff = intTime() + self.col.conf['collapseTime'] self._lrnQueue = self.col.db.all(""" select due, id from cards where did in %s and queue in (1,4) and due < :lim limit %d""" % (self._deckLimit(), self.reportLimit), lim=cutoff) # as it arrives sorted by did first, we need to sort it self._lrnQueue.sort() return self._lrnQueue def _getLrnCard(self, collapse=False): if self._fillLrn(): cutoff = time.time() if collapse: cutoff += self.col.conf['collapseTime'] if self._lrnQueue[0][0] < cutoff: id = heappop(self._lrnQueue)[1] card = self.col.getCard(id) self.lrnCount -= 1 return card # daily learning def _fillLrnDay(self): if not self.lrnCount: return False if self._lrnDayQueue: return True while self._lrnDids: did = self._lrnDids[0] # fill the queue with the current did self._lrnDayQueue = self.col.db.list(""" select id from cards where did = ? and queue = 3 and due <= ? limit ?""", did, self.today, self.queueLimit) if self._lrnDayQueue: # order r = random.Random() r.seed(self.today) r.shuffle(self._lrnDayQueue) # is the current did empty? if len(self._lrnDayQueue) < self.queueLimit: self._lrnDids.pop(0) return True # nothing left in the deck; move to next self._lrnDids.pop(0) def _getLrnDayCard(self): if self._fillLrnDay(): self.lrnCount -= 1 return self.col.getCard(self._lrnDayQueue.pop()) def _answerLrnCard(self, card, ease): conf = self._lrnConf(card) if card.type in (2,3): type = 2 else: type = 0 # lrnCount was decremented once when card was fetched lastLeft = card.left leaving = False # immediate graduate? if ease == 4: self._rescheduleAsRev(card, conf, True) leaving = True # next step? elif ease == 3: # graduation time? if (card.left%1000)-1 <= 0: self._rescheduleAsRev(card, conf, False) leaving = True else: self._moveToNextStep(card, conf) elif ease == 2: self._repeatStep(card, conf) else: # back to first step self._moveToFirstStep(card, conf) self._logLrn(card, ease, conf, leaving, type, lastLeft) def _updateRevIvlOnFail(self, card, conf): card.lastIvl = card.ivl card.ivl = self._lapseIvl(card, conf) def _moveToFirstStep(self, card, conf): card.left = self._startingLeft(card) # relearning card? if card.type == 3: self._updateRevIvlOnFail(card, conf) return self._rescheduleLrnCard(card, conf) def _moveToNextStep(self, card, conf): # decrement real left count and recalculate left today left = (card.left % 1000) - 1 card.left = self._leftToday(conf['delays'], left)*1000 + left self._rescheduleLrnCard(card, conf) def _repeatStep(self, card, conf): delay = self._delayForRepeatingGrade(conf, card.left) self._rescheduleLrnCard(card, conf, delay=delay) def _rescheduleLrnCard(self, card, conf, delay=None): # normal delay for the current step? if delay is None: delay = self._delayForGrade(conf, card.left) if card.due < time.time(): # not collapsed; add some randomness delay *= random.uniform(1, 1.25) card.due = int(time.time() + delay) # due today? if card.due < self.dayCutoff: card.queue = 1 if card.due < (intTime() + self.col.conf['collapseTime']): self.lrnCount += 1 # if the queue is not empty and there's nothing else to do, make # sure we don't put it at the head of the queue and end up showing # it twice in a row if self._lrnQueue and not self.revCount and not self.newCount: smallestDue = self._lrnQueue[0][0] card.due = max(card.due, smallestDue+1) heappush(self._lrnQueue, (card.due, card.id)) else: # the card is due in one or more days, so we need to use the # day learn queue ahead = ((card.due - self.dayCutoff) // 86400) + 1 card.due = self.today + ahead card.queue = 3 return delay def _delayForGrade(self, conf, left): left = left % 1000 try: delay = conf['delays'][-left] except IndexError: if conf['delays']: delay = conf['delays'][0] else: # user deleted final step; use dummy value delay = 1 return delay*60 def _delayForRepeatingGrade(self, conf, left): # halfway between last and next delay1 = self._delayForGrade(conf, left) delay2 = self._delayForGrade(conf, left-1) avg = (delay1+max(delay1, delay2))//2 return avg def _lrnConf(self, card): if card.type in (2, 3): return self._lapseConf(card) else: return self._newConf(card) def _rescheduleAsRev(self, card, conf, early): lapse = card.type in (2,3) if lapse: self._rescheduleGraduatingLapse(card) else: self._rescheduleNew(card, conf, early) # if we were dynamic, graduating means moving back to the old deck if card.odid: self._removeFromFiltered(card) def _rescheduleGraduatingLapse(self, card): card.due = self.today+card.ivl card.queue = 2 card.type = 2 def _startingLeft(self, card): if card.type == 2: conf = self._lapseConf(card) else: conf = self._lrnConf(card) tot = len(conf['delays']) tod = self._leftToday(conf['delays'], tot) return tot + tod*1000 def _leftToday(self, delays, left, now=None): "The number of steps that can be completed by the day cutoff." if not now: now = intTime() delays = delays[-left:] ok = 0 for i in range(len(delays)): now += delays[i]*60 if now > self.dayCutoff: break ok = i return ok+1 def _graduatingIvl(self, card, conf, early, fuzz=True): if card.type in (2,3): return card.ivl if not early: # graduate ideal = conf['ints'][0] else: # early remove ideal = conf['ints'][1] if fuzz: ideal = self._fuzzedIvl(ideal) return ideal def _rescheduleNew(self, card, conf, early): "Reschedule a new card that's graduated for the first time." card.ivl = self._graduatingIvl(card, conf, early) card.due = self.today+card.ivl card.factor = conf['initialFactor'] card.type = card.queue = 2 def _logLrn(self, card, ease, conf, leaving, type, lastLeft): lastIvl = -(self._delayForGrade(conf, lastLeft)) ivl = card.ivl if leaving else -(self._delayForGrade(conf, card.left)) def log(): self.col.db.execute( "insert into revlog values (?,?,?,?,?,?,?,?,?)", int(time.time()*1000), card.id, self.col.usn(), ease, ivl, lastIvl, card.factor, card.timeTaken(), type) try: log() except: # duplicate pk; retry in 10ms time.sleep(0.01) log() def _lrnForDeck(self, did): cnt = self.col.db.scalar( """ select count() from (select null from cards where did = ? and queue = 1 and due < ? limit ?)""", did, intTime() + self.col.conf['collapseTime'], self.reportLimit) or 0 return cnt + self.col.db.scalar( """ select count() from (select null from cards where did = ? and queue = 3 and due <= ? limit ?)""", did, self.today, self.reportLimit) # Reviews ########################################################################## def _currentRevLimit(self): d = self.col.decks.get(self.col.decks.selected(), default=False) return self._deckRevLimitSingle(d) def _deckRevLimitSingle(self, d, parentLimit=None): # invalid deck selected? if not d: return 0 if d['dyn']: return self.reportLimit c = self.col.decks.confForDid(d['id']) lim = max(0, c['rev']['perDay'] - d['revToday'][1]) if parentLimit is not None: return min(parentLimit, lim) elif '::' not in d['name']: return lim else: for parent in self.col.decks.parents(d['id']): # pass in dummy parentLimit so we don't do parent lookup again lim = min(lim, self._deckRevLimitSingle(parent, parentLimit=lim)) return lim def _revForDeck(self, did, lim): dids = [did] + [x[1] for x in self.col.decks.children(did)] lim = min(lim, self.reportLimit) return self.col.db.scalar( """ select count() from (select 1 from cards where did in %s and queue = 2 and due <= ? limit ?)""" % ids2str(dids), self.today, lim) def _resetRevCount(self): lim = self._currentRevLimit() self.revCount = self.col.db.scalar(""" select count() from (select id from cards where did in %s and queue = 2 and due <= ? limit %d)""" % ( ids2str(self.col.decks.active()), lim), self.today) def _resetRev(self): self._resetRevCount() self._revQueue = [] def _fillRev(self): if self._revQueue: return True if not self.revCount: return False lim = min(self.queueLimit, self._currentRevLimit()) if lim: self._revQueue = self.col.db.list(""" select id from cards where did in %s and queue = 2 and due <= ? order by due limit ?""" % (ids2str(self.col.decks.active())), self.today, lim) if self._revQueue: if self.col.decks.get(self.col.decks.selected(), default=False)['dyn']: # dynamic decks need due order preserved self._revQueue.reverse() else: # fixme: as soon as a card is answered, this is no longer consistent r = random.Random() r.seed(self.today) r.shuffle(self._revQueue) return True if self.revCount: # if we didn't get a card but the count is non-zero, # we need to check again for any cards that were # removed from the queue but not buried self._resetRev() return self._fillRev() def _getRevCard(self): if self._fillRev(): self.revCount -= 1 return self.col.getCard(self._revQueue.pop()) def totalRevForCurrentDeck(self): return self.col.db.scalar( """ select count() from cards where id in ( select id from cards where did in %s and queue = 2 and due <= ? limit ?)""" % ids2str(self.col.decks.active()), self.today, self.reportLimit) # Answering a review card ########################################################################## def _answerRevCard(self, card, ease): delay = 0 early = card.odid and (card.odue > self.today) type = early and 3 or 2 if ease == 1: delay = self._rescheduleLapse(card) else: self._rescheduleRev(card, ease, early) self._logRev(card, ease, delay, type) def _rescheduleLapse(self, card): conf = self._lapseConf(card) card.lapses += 1 card.factor = max(1300, card.factor-200) if conf['delays']: card.type = 3 delay = self._moveToFirstStep(card, conf) else: # no relearning steps self._updateRevIvlOnFail(card, conf) self._rescheduleAsRev(card, conf, early=False) delay = 0 # if suspended as a leech, nothing to do if self._checkLeech(card, conf) and card.queue == -1: return 0 return delay def _lapseIvl(self, card, conf): due = card.odue or card.due elapsed = card.ivl - (due - self.today) ivl = min(elapsed, card.ivl) ivl = max(1, conf['minInt'], ivl*conf['mult']) return ivl def _rescheduleRev(self, card, ease, early): # update interval card.lastIvl = card.ivl if early: self._updateEarlyRevIvl(card, ease) else: self._updateRevIvl(card, ease) # then the rest card.factor = max(1300, card.factor+[-150, 0, 150][ease-2]) card.due = self.today + card.ivl # card leaves filtered deck self._removeFromFiltered(card) def _logRev(self, card, ease, delay, type): def log(): self.col.db.execute( "insert into revlog values (?,?,?,?,?,?,?,?,?)", int(time.time()*1000), card.id, self.col.usn(), ease, -delay or card.ivl, card.lastIvl, card.factor, card.timeTaken(), type) try: log() except: # duplicate pk; retry in 10ms time.sleep(0.01) log() # Interval management ########################################################################## def _nextRevIvl(self, card, ease, fuzz): "Next review interval for CARD, given EASE." delay = self._daysLate(card) conf = self._revConf(card) fct = card.factor / 1000 ivl2 = self._constrainedIvl((card.ivl + delay // 4) * 1.2, conf, card.ivl, fuzz) if ease == 2: return ivl2 ivl3 = self._constrainedIvl((card.ivl + delay // 2) * fct, conf, ivl2, fuzz) if ease == 3: return ivl3 ivl4 = self._constrainedIvl( (card.ivl + delay) * fct * conf['ease4'], conf, ivl3, fuzz) return ivl4 def _fuzzedIvl(self, ivl): min, max = self._fuzzIvlRange(ivl) return random.randint(min, max) def _fuzzIvlRange(self, ivl): if ivl < 2: return [1, 1] elif ivl == 2: return [2, 3] elif ivl < 7: fuzz = int(ivl*0.25) elif ivl < 30: fuzz = max(2, int(ivl*0.15)) else: fuzz = max(4, int(ivl*0.05)) # fuzz at least a day fuzz = max(fuzz, 1) return [ivl-fuzz, ivl+fuzz] def _constrainedIvl(self, ivl, conf, prev, fuzz): ivl = int(ivl * conf.get('ivlFct', 1)) if fuzz: ivl = self._fuzzedIvl(ivl) ivl = min(ivl, conf['maxIvl']) ivl = max(ivl, prev+1, 1) return int(ivl) def _daysLate(self, card): "Number of days later than scheduled." due = card.odue if card.odid else card.due return max(0, self.today - due) def _updateRevIvl(self, card, ease): card.ivl = self._nextRevIvl(card, ease, fuzz=True) def _updateEarlyRevIvl(self, card, ease): card.ivl = self._earlyReviewIvl(card, ease) # next interval for card when answered early+correctly def _earlyReviewIvl(self, card, ease): assert card.odid and card.type == 2 assert card.factor assert ease > 1 elapsed = card.ivl - (card.odue - self.today) conf = self._revConf(card) easyBonus = 0 # early 3/4 reviews shouldn't decrease previous interval minNewIvl = 1 if ease == 2: factor = 1.2 # hard cards shouldn't have their interval decreased by more than 50% minNewIvl = 0.5 elif ease == 3: factor = card.factor / 1000 else: # ease == 4: factor = card.factor / 1000 * conf['ease4'] # add an extra day, so early reviews have an easy interval nominally # different from the good answer easyBonus = 1 ivl = max(elapsed * factor, 1) # cap interval decreases ivl = max(card.ivl*minNewIvl+easyBonus, ivl) ivl = self._constrainedIvl(ivl, conf, prev=0, fuzz=False) return ivl # Dynamic deck handling ########################################################################## def rebuildDyn(self, did=None): "Rebuild a dynamic deck." did = did or self.col.decks.selected() deck = self.col.decks.get(did) assert deck['dyn'] # move any existing cards back first, then fill self.emptyDyn(did) cnt = self._fillDyn(deck) if not cnt: return # and change to our new deck self.col.decks.select(did) return cnt def _fillDyn(self, deck): start = -100000 total = 0 for search, limit, order in deck['terms']: orderlimit = self._dynOrder(order, limit) if search.strip(): search = "(%s)" % search search = "%s -is:suspended -is:buried -deck:filtered" % search try: ids = self.col.findCards(search, order=orderlimit) except: return total # move the cards over self.col.log(deck['id'], ids) self._moveToDyn(deck['id'], ids, start=start+total) total += len(ids) return total def emptyDyn(self, did, lim=None): if not lim: lim = "did = %s" % did self.col.log(self.col.db.list("select id from cards where %s" % lim)) # update queue in preview case self.col.db.execute(""" update cards set did = odid, %s, due = odue, odue = 0, odid = 0, usn = ? where %s""" % ( self._restoreQueueSnippet, lim), self.col.usn()) def remFromDyn(self, cids): self.emptyDyn(None, "id in %s and odid" % ids2str(cids)) def _dynOrder(self, o, l): if o == DYN_OLDEST: t = "(select max(id) from revlog where cid=c.id)" elif o == DYN_RANDOM: t = "random()" elif o == DYN_SMALLINT: t = "ivl" elif o == DYN_BIGINT: t = "ivl desc" elif o == DYN_LAPSES: t = "lapses desc" elif o == DYN_ADDED: t = "n.id" elif o == DYN_REVADDED: t = "n.id desc" elif o == DYN_DUE: t = "c.due" elif o == DYN_DUEPRIORITY: t = "(case when queue=2 and due <= %d then (ivl / cast(%d-due+0.001 as real)) else 100000+due end)" % ( self.today, self.today) else: # if we don't understand the term, default to due order t = "c.due" return t + " limit %d" % l def _moveToDyn(self, did, ids, start=-100000): deck = self.col.decks.get(did) data = [] u = self.col.usn() due = start for id in ids: data.append((did, due, u, id)) due += 1 queue = "" if not deck['resched']: queue = ",queue=2" query = """ update cards set odid = did, odue = due, did = ?, due = ?, usn = ? %s where id = ? """ % queue self.col.db.executemany(query, data) def _removeFromFiltered(self, card): if card.odid: card.did = card.odid card.odue = 0 card.odid = 0 def _restorePreviewCard(self, card): assert card.odid card.due = card.odue # learning and relearning cards may be seconds-based or day-based; # other types map directly to queues if card.type in (1, 3): if card.odue > 1000000000: card.queue = 1 else: card.queue = 3 else: card.queue = card.type # Leeches ########################################################################## def _checkLeech(self, card, conf): "Leech handler. True if card was a leech." lf = conf['leechFails'] if not lf: return # if over threshold or every half threshold reps after that if (card.lapses >= lf and (card.lapses-lf) % (max(lf // 2, 1)) == 0): # add a leech tag f = card.note() f.addTag("leech") f.flush() # handle a = conf['leechAction'] if a == 0: card.queue = -1 # notify UI runHook("leech", card) return True # Tools ########################################################################## def _cardConf(self, card): return self.col.decks.confForDid(card.did) def _newConf(self, card): conf = self._cardConf(card) # normal deck if not card.odid: return conf['new'] # dynamic deck; override some attributes, use original deck for others oconf = self.col.decks.confForDid(card.odid) return dict( # original deck ints=oconf['new']['ints'], initialFactor=oconf['new']['initialFactor'], bury=oconf['new'].get("bury", True), delays=oconf['new']['delays'], # overrides separate=conf['separate'], order=NEW_CARDS_DUE, perDay=self.reportLimit ) def _lapseConf(self, card): conf = self._cardConf(card) # normal deck if not card.odid: return conf['lapse'] # dynamic deck; override some attributes, use original deck for others oconf = self.col.decks.confForDid(card.odid) return dict( # original deck minInt=oconf['lapse']['minInt'], leechFails=oconf['lapse']['leechFails'], leechAction=oconf['lapse']['leechAction'], mult=oconf['lapse']['mult'], delays=oconf['lapse']['delays'], # overrides resched=conf['resched'], ) def _revConf(self, card): conf = self._cardConf(card) # normal deck if not card.odid: return conf['rev'] # dynamic deck return self.col.decks.confForDid(card.odid)['rev'] def _deckLimit(self): return ids2str(self.col.decks.active()) def _previewingCard(self, card): conf = self._cardConf(card) return conf['dyn'] and not conf['resched'] def _previewDelay(self, card): return self._cardConf(card).get("previewDelay", 10)*60 # Daily cutoff ########################################################################## def _updateCutoff(self): oldToday = self.today # days since col created self.today = int((time.time() - self.col.crt) // 86400) # end of day cutoff self.dayCutoff = self._dayCutoff() if oldToday != self.today: self.col.log(self.today, self.dayCutoff) # update all daily counts, but don't save decks to prevent needless # conflicts. we'll save on card answer instead def update(g): for t in "new", "rev", "lrn", "time": key = t+"Today" if g[key][0] != self.today: g[key] = [self.today, 0] for deck in self.col.decks.all(): update(deck) # unbury if the day has rolled over unburied = self.col.conf.get("lastUnburied", 0) if unburied < self.today: self.unburyCards() self.col.conf['lastUnburied'] = self.today def _checkDay(self): # check if the day has rolled over if time.time() > self.dayCutoff: self.reset() def _dayCutoff(self): rolloverTime = self.col.conf.get("rollover", 4) if rolloverTime < 0: rolloverTime = 24+rolloverTime date = datetime.datetime.today() date = date.replace(hour=rolloverTime, minute=0, second=0, microsecond=0) if date < datetime.datetime.today(): date = date + datetime.timedelta(days=1) stamp = time.mktime(date.timetuple()) return stamp # Deck finished state ########################################################################## def finishedMsg(self): return (""+_( "Congratulations! You have finished this deck for now.")+ "

" + self._nextDueMsg()) def _nextDueMsg(self): line = [] # the new line replacements are so we don't break translations # in a point release if self.revDue(): line.append(_("""\ Today's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.""").replace("\n", " ")) if self.newDue(): line.append(_("""\ There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.""").replace("\n", " ")) if self.haveBuried(): if self.haveCustomStudy: now = " " + _("To see them now, click the Unbury button below.") else: now = "" line.append(_("""\ Some related or buried cards were delayed until a later session.""")+now) if self.haveCustomStudy and not self.col.decks.current()['dyn']: line.append(_("""\ To study outside of the normal schedule, click the Custom Study button below.""")) return "

".join(line) def revDue(self): "True if there are any rev cards due." return self.col.db.scalar( ("select 1 from cards where did in %s and queue = 2 " "and due <= ? limit 1") % self._deckLimit(), self.today) def newDue(self): "True if there are any new cards due." return self.col.db.scalar( ("select 1 from cards where did in %s and queue = 0 " "limit 1") % self._deckLimit()) def haveBuriedSiblings(self): sdids = ids2str(self.col.decks.active()) cnt = self.col.db.scalar( "select 1 from cards where queue = -2 and did in %s limit 1" % sdids) return not not cnt def haveManuallyBuried(self): sdids = ids2str(self.col.decks.active()) cnt = self.col.db.scalar( "select 1 from cards where queue = -3 and did in %s limit 1" % sdids) return not not cnt def haveBuried(self): return self.haveManuallyBuried() or self.haveBuriedSiblings() # Next time reports ########################################################################## def nextIvlStr(self, card, ease, short=False): "Return the next interval for CARD as a string." ivl = self.nextIvl(card, ease) if not ivl: return _("(end)") s = fmtTimeSpan(ivl, short=short) if ivl < self.col.conf['collapseTime']: s = "<"+s return s def nextIvl(self, card, ease): "Return the next interval for CARD, in seconds." # preview mode? if self._previewingCard(card): if ease == 1: return self._previewDelay(card) return 0 # (re)learning? if card.queue in (0,1,3): return self._nextLrnIvl(card, ease) elif ease == 1: # lapse conf = self._lapseConf(card) if conf['delays']: return conf['delays'][0]*60 return self._lapseIvl(card, conf)*86400 else: # review early = card.odid and (card.odue > self.today) if early: return self._earlyReviewIvl(card, ease)*86400 else: return self._nextRevIvl(card, ease, fuzz=False)*86400 # this isn't easily extracted from the learn code def _nextLrnIvl(self, card, ease): if card.queue == 0: card.left = self._startingLeft(card) conf = self._lrnConf(card) if ease == 1: # fail return self._delayForGrade(conf, len(conf['delays'])) elif ease == 2: return self._delayForRepeatingGrade(conf, card.left) elif ease == 4: return self._graduatingIvl(card, conf, True, fuzz=False) * 86400 else: # ease == 3 left = card.left%1000 - 1 if left <= 0: # graduate return self._graduatingIvl(card, conf, False, fuzz=False) * 86400 else: return self._delayForGrade(conf, left) # Suspending & burying ########################################################################## # learning and relearning cards may be seconds-based or day-based; # other types map directly to queues _restoreQueueSnippet = """ queue = (case when type in (1,3) then (case when (case when odue then odue else due end) > 1000000000 then 1 else 3 end) else type end) """ def suspendCards(self, ids): "Suspend cards." self.col.log(ids) self.col.db.execute( "update cards set queue=-1,mod=?,usn=? where id in "+ ids2str(ids), intTime(), self.col.usn()) def unsuspendCards(self, ids): "Unsuspend cards." self.col.log(ids) self.col.db.execute( ("update cards set %s,mod=?,usn=? " "where queue = -1 and id in %s") % (self._restoreQueueSnippet, ids2str(ids)), intTime(), self.col.usn()) def buryCards(self, cids, manual=True): queue = manual and -3 or -2 self.col.log(cids) self.col.db.execute(""" update cards set queue=?,mod=?,usn=? where id in """+ids2str(cids), queue, intTime(), self.col.usn()) def buryNote(self, nid): "Bury all cards for note until next session." cids = self.col.db.list( "select id from cards where nid = ? and queue >= 0", nid) self.buryCards(cids) def unburyCards(self): "Unbury all buried cards in all decks." self.col.log( self.col.db.list("select id from cards where queue in (-2, -3)")) self.col.db.execute( "update cards set %s where queue in (-2, -3)" % self._restoreQueueSnippet) def unburyCardsForDeck(self, type="all"): if type == "all": queue = "queue in (-2, -3)" elif type == "manual": queue = "queue = -3" elif type == "siblings": queue = "queue = -2" else: raise Exception("unknown type") sids = ids2str(self.col.decks.active()) self.col.log( self.col.db.list("select id from cards where %s and did in %s" % (queue, sids))) self.col.db.execute( "update cards set mod=?,usn=?,%s where %s and did in %s" % (self._restoreQueueSnippet, queue, sids), intTime(), self.col.usn()) # Sibling spacing ########################################################################## def _burySiblings(self, card): toBury = [] nconf = self._newConf(card) buryNew = nconf.get("bury", True) rconf = self._revConf(card) buryRev = rconf.get("bury", True) # loop through and remove from queues for cid,queue in self.col.db.execute(""" select id, queue from cards where nid=? and id!=? and (queue=0 or (queue=2 and due<=?))""", card.nid, card.id, self.today): if queue == 2: if buryRev: toBury.append(cid) # if bury disabled, we still discard to give same-day spacing try: self._revQueue.remove(cid) except ValueError: pass else: # if bury disabled, we still discard to give same-day spacing if buryNew: toBury.append(cid) try: self._newQueue.remove(cid) except ValueError: pass # then bury if toBury: self.buryCards(toBury, manual=False) # Resetting ########################################################################## def forgetCards(self, ids): "Put cards at the end of the new queue." self.remFromDyn(ids) self.col.db.execute( "update cards set type=0,queue=0,ivl=0,due=0,odue=0,factor=?" " where id in "+ids2str(ids), STARTING_FACTOR) pmax = self.col.db.scalar( "select max(due) from cards where type=0") or 0 # takes care of mod + usn self.sortCards(ids, start=pmax+1) self.col.log(ids) def reschedCards(self, ids, imin, imax): "Put cards in review queue with a new interval in days (min, max)." d = [] t = self.today mod = intTime() for id in ids: r = random.randint(imin, imax) d.append(dict(id=id, due=r+t, ivl=max(1, r), mod=mod, usn=self.col.usn(), fact=STARTING_FACTOR)) self.remFromDyn(ids) self.col.db.executemany(""" update cards set type=2,queue=2,ivl=:ivl,due=:due,odue=0, usn=:usn,mod=:mod,factor=:fact where id=:id""", d) self.col.log(ids) def resetCards(self, ids): "Completely reset cards for export." sids = ids2str(ids) # we want to avoid resetting due number of existing new cards on export nonNew = self.col.db.list( "select id from cards where id in %s and (queue != 0 or type != 0)" % sids) # reset all cards self.col.db.execute( "update cards set reps=0,lapses=0,odid=0,odue=0,queue=0" " where id in %s" % sids ) # and forget any non-new cards, changing their due numbers self.forgetCards(nonNew) self.col.log(ids) # Repositioning new cards ########################################################################## def sortCards(self, cids, start=1, step=1, shuffle=False, shift=False): scids = ids2str(cids) now = intTime() nids = [] nidsSet = set() for id in cids: nid = self.col.db.scalar("select nid from cards where id = ?", id) if nid not in nidsSet: nids.append(nid) nidsSet.add(nid) if not nids: # no new cards return # determine nid ordering due = {} if shuffle: random.shuffle(nids) for c, nid in enumerate(nids): due[nid] = start+c*step high = start+c*step # shift? if shift: low = self.col.db.scalar( "select min(due) from cards where due >= ? and type = 0 " "and id not in %s" % scids, start) if low is not None: shiftby = high - low + 1 self.col.db.execute(""" update cards set mod=?, usn=?, due=due+? where id not in %s and due >= ? and queue = 0""" % scids, now, self.col.usn(), shiftby, low) # reorder cards d = [] for id, nid in self.col.db.execute( "select id, nid from cards where type = 0 and id in "+scids): d.append(dict(now=now, due=due[nid], usn=self.col.usn(), cid=id)) self.col.db.executemany( "update cards set due=:due,mod=:now,usn=:usn where id = :cid", d) def randomizeCards(self, did): cids = self.col.db.list("select id from cards where did = ?", did) self.sortCards(cids, shuffle=True) def orderCards(self, did): cids = self.col.db.list("select id from cards where did = ? order by id", did) self.sortCards(cids) def resortConf(self, conf): for did in self.col.decks.didsForConf(conf): if conf['new']['order'] == 0: self.randomizeCards(did) else: self.orderCards(did) # for post-import def maybeRandomizeDeck(self, did=None): if not did: did = self.col.decks.selected() conf = self.col.decks.confForDid(did) # in order due? if conf['new']['order'] == NEW_CARDS_RANDOM: self.randomizeCards(did) # Changing scheduler versions ########################################################################## def _emptyAllFiltered(self): self.col.db.execute(""" update cards set did = odid, queue = (case when type = 1 then 0 when type = 3 then 2 else type end), type = (case when type = 1 then 0 when type = 3 then 2 else type end), due = odue, odue = 0, odid = 0, usn = ? where odid != 0""", self.col.usn()) def _removeAllFromLearning(self): # remove review cards from relearning self.col.db.execute(""" update cards set due = odue, queue = 2, mod = %d, usn = %d, odue = 0 where queue in (1,3) and type in (2, 3) """ % (intTime(), self.col.usn())) # remove new cards from learning self.forgetCards(self.col.db.list( "select id from cards where queue in (1,3)")) # v1 doesn't support buried/suspended (re)learning cards def _resetSuspendedLearning(self): self.col.db.execute(""" update cards set type = (case when type = 1 then 0 when type in (2, 3) then 2 else type end), due = (case when odue then odue else due end), odue = 0, mod = %d, usn = %d where queue < 0""" % (intTime(), self.col.usn())) # no 'manually buried' queue in v1 def _moveManuallyBuried(self): self.col.db.execute("update cards set queue=-2,mod=%d where queue=-3" % intTime()) def moveToV1(self): self._emptyAllFiltered() self._removeAllFromLearning() self._moveManuallyBuried() self._resetSuspendedLearning() def moveToV2(self): self._emptyAllFiltered() self._removeAllFromLearning() anki-2.1.0+dfsg~b36/anki/sound.py000066400000000000000000000253261323611211500165130ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import html import re, sys, threading, time, subprocess, os, atexit import random from anki.hooks import addHook from anki.utils import tmpdir, isWin, isMac, isLin # Shared utils ########################################################################## _soundReg = "\[sound:(.*?)\]" def playFromText(text): for match in allSounds(text): # filename is html encoded match = html.unescape(match) play(match) def allSounds(text): return re.findall(_soundReg, text) def stripSounds(text): return re.sub(_soundReg, "", text) def hasSound(text): return re.search(_soundReg, text) is not None # Packaged commands ########################################################################## # return modified command array that points to bundled command, and return # required environment def _packagedCmd(cmd): cmd = cmd[:] env = os.environ.copy() if "LD_LIBRARY_PATH" in env: del env['LD_LIBRARY_PATH'] if isMac: dir = os.path.dirname(os.path.abspath(__file__)) exeDir = os.path.abspath(dir + "/../../Resources/audio") else: exeDir = os.path.dirname(os.path.abspath(sys.argv[0])) if isWin and not cmd[0].endswith(".exe"): cmd[0] += ".exe" path = os.path.join(exeDir, cmd[0]) if not os.path.exists(path): return cmd, env cmd[0] = path return cmd, env ########################################################################## processingSrc = "rec.wav" processingDst = "rec.mp3" processingChain = [] recFiles = [] processingChain = [ ["lame", processingSrc, processingDst, "--noreplaygain", "--quiet"], ] # don't show box on windows if isWin: si = subprocess.STARTUPINFO() try: si.dwFlags |= subprocess.STARTF_USESHOWWINDOW except: # python2.7+ si.dwFlags |= subprocess._subprocess.STARTF_USESHOWWINDOW else: si = None def retryWait(proc): # osx throws interrupted system call errors frequently while 1: try: return proc.wait() except OSError: continue # MPV ########################################################################## from anki.mpv import MPV, MPVBase mpvPath, mpvEnv = _packagedCmd(["mpv"]) class MpvManager(MPV): executable = mpvPath[0] popenEnv = mpvEnv if not isLin: default_argv = MPVBase.default_argv + [ "--input-media-keys=no", ] def __init__(self): super().__init__(window_id=None, debug=False) def queueFile(self, file): path = os.path.join(os.getcwd(), file) self.command("loadfile", path, "append-play") def clearQueue(self): self.command("stop") def togglePause(self): self.set_property("pause", not self.get_property("pause")) def seekRelative(self, secs): self.command("seek", secs, "relative") mpvManager = None def setupMPV(): global mpvManager, _player, _queueEraser mpvManager = MpvManager() _player = mpvManager.queueFile _queueEraser = mpvManager.clearQueue def cleanupMPV(): global mpvManager, _player, _queueEraser if mpvManager: mpvManager.close() mpvManager = None _player = None _queueEraser = None # Mplayer in slave mode ########################################################################## mplayerCmd = ["mplayer", "-really-quiet", "-noautosub"] if isWin: mplayerCmd += ["-ao", "win32"] mplayerQueue = [] mplayerManager = None mplayerReader = None mplayerEvt = threading.Event() mplayerClear = False class MplayerMonitor(threading.Thread): def run(self): global mplayerClear self.mplayer = None self.deadPlayers = [] while 1: mplayerEvt.wait() mplayerEvt.clear() # clearing queue? if mplayerClear and self.mplayer: try: self.mplayer.stdin.write(b"stop\n") self.mplayer.stdin.flush() except: # mplayer quit by user (likely video) self.deadPlayers.append(self.mplayer) self.mplayer = None # loop through files to play while mplayerQueue: # ensure started if not self.mplayer: self.startProcess() # pop a file try: item = mplayerQueue.pop(0) except IndexError: # queue was cleared by main thread continue if mplayerClear: mplayerClear = False extra = b"" else: extra = b" 1" cmd = b'loadfile "%s"%s\n' % (item.encode("utf8"), extra) try: self.mplayer.stdin.write(cmd) self.mplayer.stdin.flush() except: # mplayer has quit and needs restarting self.deadPlayers.append(self.mplayer) self.mplayer = None self.startProcess() self.mplayer.stdin.write(cmd) self.mplayer.stdin.flush() # if we feed mplayer too fast it loses files time.sleep(1) # wait() on finished processes. we don't want to block on the # wait, so we keep trying each time we're reactivated def clean(pl): if pl.poll() is not None: pl.wait() return False else: return True self.deadPlayers = [pl for pl in self.deadPlayers if clean(pl)] def kill(self): if not self.mplayer: return try: self.mplayer.stdin.write(b"quit\n") self.mplayer.stdin.flush() self.deadPlayers.append(self.mplayer) except: pass self.mplayer = None def startProcess(self): try: cmd = mplayerCmd + ["-slave", "-idle"] cmd, env = _packagedCmd(cmd) self.mplayer = subprocess.Popen( cmd, startupinfo=si, stdin=subprocess.PIPE, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, env=env) except OSError: mplayerEvt.clear() raise Exception("Did you install mplayer?") def queueMplayer(path): ensureMplayerThreads() if isWin and os.path.exists(path): # mplayer on windows doesn't like the encoding, so we create a # temporary file instead. oddly, foreign characters in the dirname # don't seem to matter. dir = tmpdir() name = os.path.join(dir, "audio%s%s" % ( random.randrange(0, 1000000), os.path.splitext(path)[1])) f = open(name, "wb") f.write(open(path, "rb").read()) f.close() # it wants unix paths, too! path = name.replace("\\", "/") mplayerQueue.append(path) mplayerEvt.set() def clearMplayerQueue(): global mplayerClear, mplayerQueue mplayerQueue = [] mplayerClear = True mplayerEvt.set() def ensureMplayerThreads(): global mplayerManager if not mplayerManager: mplayerManager = MplayerMonitor() mplayerManager.daemon = True mplayerManager.start() # ensure the tmpdir() exit handler is registered first so it runs # after the mplayer exit tmpdir() # clean up mplayer on exit atexit.register(stopMplayer) def stopMplayer(*args): if not mplayerManager: return mplayerManager.kill() addHook("unloadProfile", stopMplayer) # PyAudio recording ########################################################################## import pyaudio import wave PYAU_FORMAT = pyaudio.paInt16 PYAU_CHANNELS = 1 PYAU_INPUT_INDEX = None class _Recorder: def postprocess(self, encode=True): self.encode = encode for c in processingChain: #print c if not self.encode and c[0] == 'lame': continue try: cmd, env = _packagedCmd(c) ret = retryWait(subprocess.Popen(cmd, startupinfo=si, env=env)) except: ret = True finally: if os.path.exists(processingSrc): os.unlink(processingSrc) if ret: raise Exception(_( "Error running %s") % " ".join(cmd)) class PyAudioThreadedRecorder(threading.Thread): def __init__(self, startupDelay): threading.Thread.__init__(self) self.startupDelay = startupDelay self.finish = False def run(self): chunk = 1024 p = pyaudio.PyAudio() rate = int(p.get_default_input_device_info()['defaultSampleRate']) wait = int(rate * self.startupDelay) stream = p.open(format=PYAU_FORMAT, channels=PYAU_CHANNELS, rate=rate, input=True, input_device_index=PYAU_INPUT_INDEX, frames_per_buffer=chunk) stream.read(wait) data = b"" while not self.finish: try: data += stream.read(chunk) except IOError as e: if e[1] == pyaudio.paInputOverflowed: pass else: raise stream.close() p.terminate() wf = wave.open(processingSrc, 'wb') wf.setnchannels(PYAU_CHANNELS) wf.setsampwidth(p.get_sample_size(PYAU_FORMAT)) wf.setframerate(rate) wf.writeframes(data) wf.close() class PyAudioRecorder(_Recorder): # discard first 250ms which may have pops/cracks startupDelay = 0.25 def __init__(self): for t in recFiles + [processingSrc, processingDst]: try: os.unlink(t) except OSError: pass self.encode = False def start(self): self.thread = PyAudioThreadedRecorder(startupDelay=self.startupDelay) self.thread.start() def stop(self): self.thread.finish = True self.thread.join() def file(self): if self.encode: tgt = "rec%d.mp3" % time.time() os.rename(processingDst, tgt) return tgt else: return processingSrc # Audio interface ########################################################################## _player = queueMplayer _queueEraser = clearMplayerQueue def play(path): _player(path) def clearAudioQueue(): _queueEraser() Recorder = PyAudioRecorder anki-2.1.0+dfsg~b36/anki/stats.py000066400000000000000000001012121323611211500165060ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import time import datetime import json from anki.utils import fmtTimeSpan, ids2str from anki.lang import _, ngettext # Card stats ########################################################################## class CardStats: def __init__(self, col, card): self.col = col self.card = card def report(self): c = self.card fmt = lambda x, **kwargs: fmtTimeSpan(x, short=True, **kwargs) self.txt = "" self.addLine(_("Added"), self.date(c.id/1000)) first = self.col.db.scalar( "select min(id) from revlog where cid = ?", c.id) last = self.col.db.scalar( "select max(id) from revlog where cid = ?", c.id) if first: self.addLine(_("First Review"), self.date(first/1000)) self.addLine(_("Latest Review"), self.date(last/1000)) if c.type in (1,2): if c.odid or c.queue < 0: next = None else: if c.queue in (2,3): next = time.time()+((c.due - self.col.sched.today)*86400) else: next = c.due next = self.date(next) if next: self.addLine(_("Due"), next) if c.queue == 2: self.addLine(_("Interval"), fmt(c.ivl * 86400)) self.addLine(_("Ease"), "%d%%" % (c.factor/10.0)) self.addLine(_("Reviews"), "%d" % c.reps) self.addLine(_("Lapses"), "%d" % c.lapses) (cnt, total) = self.col.db.first( "select count(), sum(time)/1000 from revlog where cid = :id", id=c.id) if cnt: self.addLine(_("Average Time"), self.time(total / float(cnt))) self.addLine(_("Total Time"), self.time(total)) elif c.queue == 0: self.addLine(_("Position"), c.due) self.addLine(_("Card Type"), c.template()['name']) self.addLine(_("Note Type"), c.model()['name']) self.addLine(_("Deck"), self.col.decks.name(c.did)) self.addLine(_("Note ID"), c.nid) self.addLine(_("Card ID"), c.id) self.txt += "
" return self.txt def addLine(self, k, v): self.txt += self.makeLine(k, v) def makeLine(self, k, v): txt = "" txt += "%s%s" % (k, v) return txt def date(self, tm): return time.strftime("%Y-%m-%d", time.localtime(tm)) def time(self, tm): str = "" if tm >= 60: str = fmtTimeSpan((tm/60)*60, short=True, point=-1, unit=1) if tm%60 != 0 or not str: str += fmtTimeSpan(tm%60, point=2 if not str else -1, short=True) return str # Collection stats ########################################################################## colYoung = "#7c7" colMature = "#070" colCum = "rgba(0,0,0,0.9)" colLearn = "#00F" colRelearn = "#c00" colCram = "#ff0" colIvl = "#077" colHour = "#ccc" colTime = "#770" colUnseen = "#000" colSusp = "#ff0" class CollectionStats: def __init__(self, col): self.col = col self._stats = None self.type = 0 self.width = 600 self.height = 200 self.wholeCollection = False # assumes jquery & plot are available in document def report(self, type=0): # 0=days, 1=weeks, 2=months self.type = type from .statsbg import bg txt = self.css % bg txt += self._section(self.todayStats()) txt += self._section(self.dueGraph()) txt += self.repsGraphs() txt += self._section(self.introductionGraph()) txt += self._section(self.ivlGraph()) txt += self._section(self.hourGraph()) txt += self._section(self.easeGraph()) txt += self._section(self.cardGraph()) txt += self._section(self.footer()) return "

%s
" % txt def _section(self, txt): return "
%s
" % txt css = """ """ # Today stats ###################################################################### def todayStats(self): b = self._title(_("Today")) # studied today lim = self._revlogLimit() if lim: lim = " and " + lim cards, thetime, failed, lrn, rev, relrn, filt = self.col.db.first(""" select count(), sum(time)/1000, sum(case when ease = 1 then 1 else 0 end), /* failed */ sum(case when type = 0 then 1 else 0 end), /* learning */ sum(case when type = 1 then 1 else 0 end), /* review */ sum(case when type = 2 then 1 else 0 end), /* relearn */ sum(case when type = 3 then 1 else 0 end) /* filter */ from revlog where id > ? """+lim, (self.col.sched.dayCutoff-86400)*1000) cards = cards or 0 thetime = thetime or 0 failed = failed or 0 lrn = lrn or 0 rev = rev or 0 relrn = relrn or 0 filt = filt or 0 # studied def bold(s): return ""+str(s)+"" msgp1 = ngettext("%d card", "%d cards", cards) % cards if cards: b += _("Studied %(a)s %(b)s today (%(secs).1fs/card)") % dict( a=bold(msgp1), b=bold(fmtTimeSpan(thetime, unit=1, inTime=True)), secs=thetime/cards ) # again/pass count b += "
" + _("Again count: %s") % bold(failed) if cards: b += " " + _("(%s correct)") % bold( "%0.1f%%" %((1-failed/float(cards))*100)) # type breakdown b += "
" b += (_("Learn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)s") % dict(a=bold(lrn), b=bold(rev), c=bold(relrn), d=bold(filt))) # mature today mcnt, msum = self.col.db.first(""" select count(), sum(case when ease = 1 then 0 else 1 end) from revlog where lastIvl >= 21 and id > ?"""+lim, (self.col.sched.dayCutoff-86400)*1000) b += "
" if mcnt: b += _("Correct answers on mature cards: %(a)d/%(b)d (%(c).1f%%)") % dict( a=msum, b=mcnt, c=(msum / float(mcnt) * 100)) else: b += _("No mature cards were studied today.") else: b += _("No cards have been studied today.") return b # Due and cumulative due ###################################################################### def dueGraph(self): if self.type == 0: start, end, chunk = 0, 31, 1 elif self.type == 1: start, end, chunk = 0, 52, 7 elif self.type == 2: start, end, chunk = 0, None, 30 d = self._due(start, end, chunk) yng = [] mtr = [] tot = 0 totd = [] for day in d: yng.append((day[0], day[1])) mtr.append((day[0], day[2])) tot += day[1]+day[2] totd.append((day[0], tot)) data = [ dict(data=mtr, color=colMature, label=_("Mature")), dict(data=yng, color=colYoung, label=_("Young")), ] if len(totd) > 1: data.append( dict(data=totd, color=colCum, label=_("Cumulative"), yaxis=2, bars={'show': False}, lines=dict(show=True), stack=False)) txt = self._title( _("Forecast"), _("The number of reviews due in the future.")) xaxis = dict(tickDecimals=0, min=-0.5) if end is not None: xaxis['max'] = end-0.5 txt += self._graph(id="due", data=data, ylabel2=_("Cumulative Cards"), conf=dict( xaxis=xaxis, yaxes=[dict(min=0), dict( min=0, tickDecimals=0, position="right")])) txt += self._dueInfo(tot, len(totd)*chunk) return txt def _dueInfo(self, tot, num): i = [] self._line(i, _("Total"), ngettext("%d review", "%d reviews", tot) % tot) self._line(i, _("Average"), self._avgDay( tot, num, _("reviews"))) tomorrow = self.col.db.scalar(""" select count() from cards where did in %s and queue in (2,3) and due = ?""" % self._limit(), self.col.sched.today+1) tomorrow = ngettext("%d card", "%d cards", tomorrow) % tomorrow self._line(i, _("Due tomorrow"), tomorrow) return self._lineTbl(i) def _due(self, start=None, end=None, chunk=1): lim = "" if start is not None: lim += " and due-:today >= %d" % start if end is not None: lim += " and day < %d" % end return self.col.db.all(""" select (due-:today)/:chunk as day, sum(case when ivl < 21 then 1 else 0 end), -- yng sum(case when ivl >= 21 then 1 else 0 end) -- mtr from cards where did in %s and queue in (2,3) %s group by day order by day""" % (self._limit(), lim), today=self.col.sched.today, chunk=chunk) # Added, reps and time spent ###################################################################### def introductionGraph(self): if self.type == 0: days = 30; chunk = 1 elif self.type == 1: days = 52; chunk = 7 else: days = None; chunk = 30 return self._introductionGraph(self._added(days, chunk), days, _("Added")) def _introductionGraph(self, data, days, title): if not data: return "" d = data conf = dict( xaxis=dict(tickDecimals=0, max=0.5), yaxes=[dict(min=0), dict(position="right",min=0)]) if days is not None: conf['xaxis']['min'] = -days+0.5 def plot(id, data, ylabel, ylabel2): return self._graph( id, data=data, conf=conf, ylabel=ylabel, ylabel2=ylabel2) # graph (repdata, repsum) = self._splitRepData(d, ((1, colLearn, ""),)) txt = self._title( title, _("The number of new cards you have added.")) txt += plot("intro", repdata, ylabel=_("Cards"), ylabel2=_("Cumulative Cards")) # total and per day average tot = sum([i[1] for i in d]) period = self._periodDays() if not period: # base off date of earliest added card period = self._deckAge('add') i = [] self._line(i, _("Total"), ngettext("%d card", "%d cards", tot) % tot) self._line(i, _("Average"), self._avgDay(tot, period, _("cards"))) txt += self._lineTbl(i) return txt def repsGraphs(self): if self.type == 0: days = 30; chunk = 1 elif self.type == 1: days = 52; chunk = 7 else: days = None; chunk = 30 return self._repsGraphs(self._done(days, chunk), days, _("Review Count"), _("Review Time")) def _repsGraphs(self, data, days, reptitle, timetitle): if not data: return "" d = data conf = dict( xaxis=dict(tickDecimals=0, max=0.5), yaxes=[dict(min=0), dict(position="right",min=0)]) if days is not None: conf['xaxis']['min'] = -days+0.5 def plot(id, data, ylabel, ylabel2): return self._graph( id, data=data, conf=conf, ylabel=ylabel, ylabel2=ylabel2) # reps (repdata, repsum) = self._splitRepData(d, ( (3, colMature, _("Mature")), (2, colYoung, _("Young")), (4, colRelearn, _("Relearn")), (1, colLearn, _("Learn")), (5, colCram, _("Cram")))) txt1 = self._title( reptitle, _("The number of questions you have answered.")) txt1 += plot("reps", repdata, ylabel=_("Answers"), ylabel2=_( "Cumulative Answers")) (daysStud, fstDay) = self._daysStudied() rep, tot = self._ansInfo(repsum, daysStud, fstDay, _("reviews")) txt1 += rep # time (timdata, timsum) = self._splitRepData(d, ( (8, colMature, _("Mature")), (7, colYoung, _("Young")), (9, colRelearn, _("Relearn")), (6, colLearn, _("Learn")), (10, colCram, _("Cram")))) if self.type == 0: t = _("Minutes") convHours = False else: t = _("Hours") convHours = True txt2 = self._title(timetitle, _("The time taken to answer the questions.")) txt2 += plot("time", timdata, ylabel=t, ylabel2=_("Cumulative %s") % t) rep, tot2 = self._ansInfo( timsum, daysStud, fstDay, _("minutes"), convHours, total=tot) txt2 += rep return self._section(txt1) + self._section(txt2) def _ansInfo(self, totd, studied, first, unit, convHours=False, total=None): if not totd: return tot = totd[-1][1] period = self._periodDays() if not period: # base off earliest repetition date period = self._deckAge('review') i = [] self._line(i, _("Days studied"), _("%(pct)d%% (%(x)s of %(y)s)") % dict( x=studied, y=period, pct=studied/float(period)*100), bold=False) if convHours: tunit = _("hours") else: tunit = unit self._line(i, _("Total"), _("%(tot)s %(unit)s") % dict( unit=tunit, tot=int(tot))) if convHours: # convert to minutes tot *= 60 self._line(i, _("Average for days studied"), self._avgDay( tot, studied, unit)) if studied != period: # don't display if you did study every day self._line(i, _("If you studied every day"), self._avgDay( tot, period, unit)) if total and tot: perMin = total / float(tot) perMin = round(perMin, 1) # don't round down to zero if perMin < 0.1: text = _("less than 0.1 cards/minute") else: text = _("%.01f cards/minute") % perMin self._line( i, _("Average answer time"), _("%(a)0.1fs (%(b)s)") % dict(a=(tot*60)/total, b=text)) return self._lineTbl(i), int(tot) def _splitRepData(self, data, spec): sep = {} totcnt = {} totd = {} alltot = [] allcnt = 0 for (n, col, lab) in spec: totcnt[n] = 0 totd[n] = [] sum = [] for row in data: for (n, col, lab) in spec: if n not in sep: sep[n] = [] sep[n].append((row[0], row[n])) totcnt[n] += row[n] allcnt += row[n] totd[n].append((row[0], totcnt[n])) alltot.append((row[0], allcnt)) ret = [] for (n, col, lab) in spec: if len(totd[n]) and totcnt[n]: # bars ret.append(dict(data=sep[n], color=col, label=lab)) # lines ret.append(dict( data=totd[n], color=col, label=None, yaxis=2, bars={'show': False}, lines=dict(show=True), stack=-n)) return (ret, alltot) def _added(self, num=7, chunk=1): lims = [] if num is not None: lims.append("id > %d" % ( (self.col.sched.dayCutoff-(num*chunk*86400))*1000)) lims.append("did in %s" % self._limit()) if lims: lim = "where " + " and ".join(lims) else: lim = "" if self.type == 0: tf = 60.0 # minutes else: tf = 3600.0 # hours return self.col.db.all(""" select (cast((id/1000.0 - :cut) / 86400.0 as int))/:chunk as day, count(id) from cards %s group by day order by day""" % lim, cut=self.col.sched.dayCutoff,tf=tf, chunk=chunk) def _done(self, num=7, chunk=1): lims = [] if num is not None: lims.append("id > %d" % ( (self.col.sched.dayCutoff-(num*chunk*86400))*1000)) lim = self._revlogLimit() if lim: lims.append(lim) if lims: lim = "where " + " and ".join(lims) else: lim = "" if self.type == 0: tf = 60.0 # minutes else: tf = 3600.0 # hours return self.col.db.all(""" select (cast((id/1000.0 - :cut) / 86400.0 as int))/:chunk as day, sum(case when type = 0 then 1 else 0 end), -- lrn count sum(case when type = 1 and lastIvl < 21 then 1 else 0 end), -- yng count sum(case when type = 1 and lastIvl >= 21 then 1 else 0 end), -- mtr count sum(case when type = 2 then 1 else 0 end), -- lapse count sum(case when type = 3 then 1 else 0 end), -- cram count sum(case when type = 0 then time/1000.0 else 0 end)/:tf, -- lrn time -- yng + mtr time sum(case when type = 1 and lastIvl < 21 then time/1000.0 else 0 end)/:tf, sum(case when type = 1 and lastIvl >= 21 then time/1000.0 else 0 end)/:tf, sum(case when type = 2 then time/1000.0 else 0 end)/:tf, -- lapse time sum(case when type = 3 then time/1000.0 else 0 end)/:tf -- cram time from revlog %s group by day order by day""" % lim, cut=self.col.sched.dayCutoff, tf=tf, chunk=chunk) def _daysStudied(self): lims = [] num = self._periodDays() if num: lims.append( "id > %d" % ((self.col.sched.dayCutoff-(num*86400))*1000)) rlim = self._revlogLimit() if rlim: lims.append(rlim) if lims: lim = "where " + " and ".join(lims) else: lim = "" return self.col.db.first(""" select count(), abs(min(day)) from (select (cast((id/1000 - :cut) / 86400.0 as int)+1) as day from revlog %s group by day order by day)""" % lim, cut=self.col.sched.dayCutoff) # Intervals ###################################################################### def ivlGraph(self): (ivls, all, avg, max_) = self._ivls() tot = 0 totd = [] if not ivls or not all: return "" for (grp, cnt) in ivls: tot += cnt totd.append((grp, tot/float(all)*100)) if self.type == 0: ivlmax = 31 elif self.type == 1: ivlmax = 52 else: ivlmax = max(5, ivls[-1][0]) txt = self._title(_("Intervals"), _("Delays until reviews are shown again.")) txt += self._graph(id="ivl", ylabel2=_("Percentage"), data=[ dict(data=ivls, color=colIvl), dict(data=totd, color=colCum, yaxis=2, bars={'show': False}, lines=dict(show=True), stack=False) ], conf=dict( xaxis=dict(min=-0.5, max=ivlmax+0.5), yaxes=[dict(), dict(position="right", max=105)])) i = [] self._line(i, _("Average interval"), fmtTimeSpan(avg*86400)) self._line(i, _("Longest interval"), fmtTimeSpan(max_*86400)) return txt + self._lineTbl(i) def _ivls(self): if self.type == 0: chunk = 1; lim = " and grp <= 30" elif self.type == 1: chunk = 7; lim = " and grp <= 52" else: chunk = 30; lim = "" data = [self.col.db.all(""" select ivl / :chunk as grp, count() from cards where did in %s and queue = 2 %s group by grp order by grp""" % (self._limit(), lim), chunk=chunk)] return data + list(self.col.db.first(""" select count(), avg(ivl), max(ivl) from cards where did in %s and queue = 2""" % self._limit())) # Eases ###################################################################### def easeGraph(self): # 3 + 4 + 4 + spaces on sides and middle = 15 # yng starts at 1+3+1 = 5 # mtr starts at 5+4+1 = 10 d = {'lrn':[], 'yng':[], 'mtr':[]} types = ("lrn", "yng", "mtr") eases = self._eases() for (type, ease, cnt) in eases: if type == 1: ease += 5 elif type == 2: ease += 10 n = types[type] d[n].append((ease, cnt)) ticks = [[1,1],[2,2],[3,3], [6,1],[7,2],[8,3],[9,4], [11, 1],[12,2],[13,3],[14,4]] txt = self._title(_("Answer Buttons"), _("The number of times you have pressed each button.")) txt += self._graph(id="ease", data=[ dict(data=d['lrn'], color=colLearn, label=_("Learning")), dict(data=d['yng'], color=colYoung, label=_("Young")), dict(data=d['mtr'], color=colMature, label=_("Mature")), ], type="barsLine", conf=dict( xaxis=dict(ticks=ticks, min=0, max=15)), ylabel=_("Answers")) txt += self._easeInfo(eases) return txt def _easeInfo(self, eases): types = {0: [0, 0], 1: [0, 0], 2: [0,0]} for (type, ease, cnt) in eases: if ease == 1: types[type][0] += cnt else: types[type][1] += cnt i = [] for type in range(3): (bad, good) = types[type] tot = bad + good try: pct = good / float(tot) * 100 except: pct = 0 i.append(_( "Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)") % dict( pct=pct, good=good, tot=tot)) return ("""
""" % self.width + "".join(i) + "
") def _eases(self): lims = [] lim = self._revlogLimit() if lim: lims.append(lim) if self.type == 0: days = 30 elif self.type == 1: days = 365 else: days = None if days is not None: lims.append("id > %d" % ( (self.col.sched.dayCutoff-(days*86400))*1000)) if lims: lim = "where " + " and ".join(lims) else: lim = "" return self.col.db.all(""" select (case when type in (0,2) then 0 when lastIvl < 21 then 1 else 2 end) as thetype, (case when type in (0,2) and ease = 4 then 3 else ease end), count() from revlog %s group by thetype, ease order by thetype, ease""" % lim) # Hourly retention ###################################################################### def hourGraph(self): data = self._hourRet() if not data: return "" shifted = [] counts = [] mcount = 0 trend = [] peak = 0 for d in data: hour = (d[0] - 4) % 24 pct = d[1] if pct > peak: peak = pct shifted.append((hour, pct)) counts.append((hour, d[2])) if d[2] > mcount: mcount = d[2] shifted.sort() counts.sort() if len(counts) < 4: return "" for d in shifted: hour = d[0] pct = d[1] if not trend: trend.append((hour, pct)) else: prev = trend[-1][1] diff = pct-prev diff /= 3.0 diff = round(diff, 1) trend.append((hour, prev+diff)) txt = self._title(_("Hourly Breakdown"), _("Review success rate for each hour of the day.")) txt += self._graph(id="hour", data=[ dict(data=shifted, color=colCum, label=_("% Correct")), dict(data=counts, color=colHour, label=_("Answers"), yaxis=2, bars=dict(barWidth=0.2), stack=False) ], conf=dict( xaxis=dict(ticks=[[0, _("4AM")], [6, _("10AM")], [12, _("4PM")], [18, _("10PM")], [23, _("3AM")]]), yaxes=[dict(max=peak), dict(position="right", max=mcount)]), ylabel=_("% Correct"), ylabel2=_("Reviews")) txt += _("Hours with less than 30 reviews are not shown.") return txt def _hourRet(self): lim = self._revlogLimit() if lim: lim = " and " + lim sd = datetime.datetime.fromtimestamp(self.col.crt) pd = self._periodDays() if pd: lim += " and id > %d" % ((self.col.sched.dayCutoff-(86400*pd))*1000) return self.col.db.all(""" select 23 - ((cast((:cut - id/1000) / 3600.0 as int)) %% 24) as hour, sum(case when ease = 1 then 0 else 1 end) / cast(count() as float) * 100, count() from revlog where type in (0,1,2) %s group by hour having count() > 30 order by hour""" % lim, cut=self.col.sched.dayCutoff-(sd.hour*3600)) # Cards ###################################################################### def cardGraph(self): # graph data div = self._cards() d = [] for c, (t, col) in enumerate(( (_("Mature"), colMature), (_("Young+Learn"), colYoung), (_("Unseen"), colUnseen), (_("Suspended+Buried"), colSusp))): d.append(dict(data=div[c], label="%s: %s" % (t, div[c]), color=col)) # text data i = [] (c, f) = self.col.db.first(""" select count(id), count(distinct nid) from cards where did in %s """ % self._limit()) self._line(i, _("Total cards"), c) self._line(i, _("Total notes"), f) (low, avg, high) = self._factors() if low: self._line(i, _("Lowest ease"), "%d%%" % low) self._line(i, _("Average ease"), "%d%%" % avg) self._line(i, _("Highest ease"), "%d%%" % high) info = "" + "".join(i) + "

" info += _('''\ A card's ease is the size of the next interval \ when you answer "good" on a review.''') txt = self._title(_("Card Types"), _("The division of cards in your deck(s).")) txt += "
%s%s
" % ( self.width, self._graph(id="cards", data=d, type="pie"), info) return txt def _line(self, i, a, b, bold=True): colon = _(":") if bold: i.append(("%s%s%s") % (a,colon,b)) else: i.append(("%s%s%s") % (a,colon,b)) def _lineTbl(self, i): return "" + "".join(i) + "
" def _factors(self): return self.col.db.first(""" select min(factor) / 10.0, avg(factor) / 10.0, max(factor) / 10.0 from cards where did in %s and queue = 2""" % self._limit()) def _cards(self): return self.col.db.first(""" select sum(case when queue=2 and ivl >= 21 then 1 else 0 end), -- mtr sum(case when queue in (1,3) or (queue=2 and ivl < 21) then 1 else 0 end), -- yng/lrn sum(case when queue=0 then 1 else 0 end), -- new sum(case when queue<0 then 1 else 0 end) -- susp from cards where did in %s""" % self._limit()) # Footer ###################################################################### def footer(self): b = "

" b += _("Generated on %s") % time.asctime(time.localtime(time.time())) b += "
" if self.wholeCollection: deck = _("whole collection") else: deck = self.col.decks.current()['name'] b += _("Scope: %s") % deck b += "
" b += _("Period: %s") % [ _("1 month"), _("1 year"), _("deck life") ][self.type] return b # Tools ###################################################################### def _graph(self, id, data, conf={}, type="bars", ylabel=_("Cards"), timeTicks=True, ylabel2=""): # display settings if type == "pie": conf['legend'] = {'container': "#%sLegend" % id, 'noColumns':2} else: conf['legend'] = {'container': "#%sLegend" % id, 'noColumns':10} conf['series'] = dict(stack=True) if not 'yaxis' in conf: conf['yaxis'] = {} conf['yaxis']['labelWidth'] = 40 if 'xaxis' not in conf: conf['xaxis'] = {} if timeTicks: conf['timeTicks'] = (_("d"), _("w"), _("mo"))[self.type] # types width = self.width height = self.height if type == "bars": conf['series']['bars'] = dict( show=True, barWidth=0.8, align="center", fill=0.7, lineWidth=0) elif type == "barsLine": conf['series']['bars'] = dict( show=True, barWidth=0.8, align="center", fill=0.7, lineWidth=3) elif type == "fill": conf['series']['lines'] = dict(show=True, fill=True) elif type == "pie": width /= 2.3 height *= 1.5 ylabel = "" conf['series']['pie'] = dict( show=True, radius=1, stroke=dict(color="#fff", width=5), label=dict( show=True, radius=0.8, threshold=0.01, background=dict( opacity=0.5, color="#000" ))) #conf['legend'] = dict(show=False) return ( """
%(ylab)s
%(ylab2)s
""" % dict( id=id, w=width, h=height, ylab=ylabel, ylab2=ylabel2, data=json.dumps(data), conf=json.dumps(conf))) def _limit(self): if self.wholeCollection: return ids2str([d['id'] for d in self.col.decks.all()]) return self.col.sched._deckLimit() def _revlogLimit(self): if self.wholeCollection: return "" return ("cid in (select id from cards where did in %s)" % ids2str(self.col.decks.active())) def _title(self, title, subtitle=""): return '

%s

%s' % (title, subtitle) def _deckAge(self, by): lim = self._revlogLimit() if lim: lim = " where " + lim if by == 'review': t = self.col.db.scalar("select id from revlog %s order by id limit 1" % lim) elif by == 'add': lim = "where did in %s" % ids2str(self.col.decks.active()) t = self.col.db.scalar("select id from cards %s order by id limit 1" % lim) if not t: period = 1 else: period = max( 1, int(1+((self.col.sched.dayCutoff - (t/1000)) / 86400))) return period def _periodDays(self): if self.type == 0: return 30 elif self.type == 1: return 365 else: return None def _avgDay(self, tot, num, unit): vals = [] try: vals.append(_("%(a)0.1f %(b)s/day") % dict(a=tot/float(num), b=unit)) return ", ".join(vals) except ZeroDivisionError: return "" anki-2.1.0+dfsg~b36/anki/statsbg.py000066400000000000000000000006151323611211500170240ustar00rootroot00000000000000# from subtlepatterns.com bg = """\ iVBORw0KGgoAAAANSUhEUgAAABIAAAANCAMAAACTkM4rAAAAM1BMVEXy8vLz8/P5+fn19fXt7e329vb4+Pj09PTv7+/u7u739/fw8PD7+/vx8fHr6+v6+vrs7Oz2LjW2AAAAkUlEQVR42g3KyXHAQAwDQYAQj12ItvOP1qqZZwMMPVnd06XToQvz4L2HDQ2iRgkvA7yPPB+JD+OUPnfzZ0JNZh6kkQus5NUmR7g4Jpxv5XN6nYWNmtlq9o3zuK6w3XRsE1pQIEGPIsdtTP3m2cYwlPv6MbL8/QASsKppZefyDmJPbxvxa/NrX1TJ1yp20fhj9D+SiAWWLU8myQAAAABJRU5ErkJggg== """ anki-2.1.0+dfsg~b36/anki/stdmodels.py000066400000000000000000000060401323611211500173510ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from anki.lang import _ from anki.consts import MODEL_CLOZE models = [] # Basic ########################################################################## def addBasicModel(col): mm = col.models m = mm.new(_("Basic")) fm = mm.newField(_("Front")) mm.addField(m, fm) fm = mm.newField(_("Back")) mm.addField(m, fm) t = mm.newTemplate(_("Card 1")) t['qfmt'] = "{{"+_("Front")+"}}" t['afmt'] = "{{FrontSide}}\n\n
\n\n"+"{{"+_("Back")+"}}" mm.addTemplate(m, t) mm.add(m) return m models.append((lambda: _("Basic"), addBasicModel)) # Basic w/ typing ########################################################################## def addBasicTypingModel(col): mm = col.models m = mm.new(_("Basic (type in the answer)")) fm = mm.newField(_("Front")) mm.addField(m, fm) fm = mm.newField(_("Back")) mm.addField(m, fm) t = mm.newTemplate(_("Card 1")) t['qfmt'] = "{{"+_("Front")+"}}\n{{type:"+_("Back")+"}}" t['afmt'] = "{{FrontSide}}\n\n
\n\n"+"{{"+_("Back")+"}}" mm.addTemplate(m, t) mm.add(m) return m models.append((lambda: _("Basic (type in the answer)"), addBasicTypingModel)) # Forward & Reverse ########################################################################## def addForwardReverse(col): mm = col.models m = addBasicModel(col) m['name'] = _("Basic (and reversed card)") t = mm.newTemplate(_("Card 2")) t['qfmt'] = "{{"+_("Back")+"}}" t['afmt'] = "{{FrontSide}}\n\n
\n\n"+"{{"+_("Front")+"}}" mm.addTemplate(m, t) return m models.append((lambda: _("Basic (and reversed card)"), addForwardReverse)) # Forward & Optional Reverse ########################################################################## def addForwardOptionalReverse(col): mm = col.models m = addBasicModel(col) m['name'] = _("Basic (optional reversed card)") av = _("Add Reverse") fm = mm.newField(av) mm.addField(m, fm) t = mm.newTemplate(_("Card 2")) t['qfmt'] = "{{#%s}}{{%s}}{{/%s}}" % (av, _("Back"), av) t['afmt'] = "{{FrontSide}}\n\n
\n\n"+"{{"+_("Front")+"}}" mm.addTemplate(m, t) return m models.append((lambda: _("Basic (optional reversed card)"), addForwardOptionalReverse)) # Cloze ########################################################################## def addClozeModel(col): mm = col.models m = mm.new(_("Cloze")) m['type'] = MODEL_CLOZE txt = _("Text") fm = mm.newField(txt) mm.addField(m, fm) fm = mm.newField(_("Extra")) mm.addField(m, fm) t = mm.newTemplate(_("Cloze")) fmt = "{{cloze:%s}}" % txt m['css'] += """ .cloze { font-weight: bold; color: blue; } .nightMode .cloze { color: lightblue; }""" t['qfmt'] = fmt t['afmt'] = fmt + "
\n{{%s}}" % _("Extra") mm.addTemplate(m, t) mm.add(m) return m models.append((lambda: _("Cloze"), addClozeModel)) anki-2.1.0+dfsg~b36/anki/storage.py000066400000000000000000000261741323611211500170310ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import copy import re from anki.lang import _ from anki.utils import intTime, json from anki.db import DB from anki.collection import _Collection from anki.consts import * from anki.stdmodels import addBasicModel, addClozeModel, addForwardReverse, \ addForwardOptionalReverse, addBasicTypingModel def Collection(path, lock=True, server=False, sync=True, log=False): "Open a new or existing collection. Path must be unicode." assert path.endswith(".anki2") path = os.path.abspath(path) create = not os.path.exists(path) if create: base = os.path.basename(path) for c in ("/", ":", "\\"): assert c not in base # connect db = DB(path) db.setAutocommit(True) if create: ver = _createDB(db) else: ver = _upgradeSchema(db) db.execute("pragma temp_store = memory") if sync: db.execute("pragma cache_size = 10000") db.execute("pragma journal_mode = wal") else: db.execute("pragma synchronous = off") db.setAutocommit(False) # add db to col and do any remaining upgrades col = _Collection(db, server, log) if ver < SCHEMA_VERSION: _upgrade(col, ver) elif ver > SCHEMA_VERSION: raise Exception("This file requires a newer version of Anki.") elif create: # add in reverse order so basic is default addClozeModel(col) addBasicTypingModel(col) addForwardOptionalReverse(col) addForwardReverse(col) addBasicModel(col) col.save() if lock: col.lock() return col def _upgradeSchema(db): ver = db.scalar("select ver from col") if ver == SCHEMA_VERSION: return ver # add odid to cards, edue->odue ###################################################################### if db.scalar("select ver from col") == 1: db.execute("alter table cards rename to cards2") _addSchema(db, setColConf=False) db.execute(""" insert into cards select id, nid, did, ord, mod, usn, type, queue, due, ivl, factor, reps, lapses, left, edue, 0, flags, data from cards2""") db.execute("drop table cards2") db.execute("update col set ver = 2") _updateIndices(db) # remove did from notes ###################################################################### if db.scalar("select ver from col") == 2: db.execute("alter table notes rename to notes2") _addSchema(db, setColConf=False) db.execute(""" insert into notes select id, guid, mid, mod, usn, tags, flds, sfld, csum, flags, data from notes2""") db.execute("drop table notes2") db.execute("update col set ver = 3") _updateIndices(db) return ver def _upgrade(col, ver): if ver < 3: # new deck properties for d in col.decks.all(): d['dyn'] = 0 d['collapsed'] = False col.decks.save(d) if ver < 4: col.modSchema(check=False) clozes = [] for m in col.models.all(): if not "{{cloze:" in m['tmpls'][0]['qfmt']: m['type'] = MODEL_STD col.models.save(m) else: clozes.append(m) for m in clozes: _upgradeClozeModel(col, m) col.db.execute("update col set ver = 4") if ver < 5: col.db.execute("update cards set odue = 0 where queue = 2") col.db.execute("update col set ver = 5") if ver < 6: col.modSchema(check=False) import anki.models for m in col.models.all(): m['css'] = anki.models.defaultModel['css'] for t in m['tmpls']: if 'css' not in t: # ankidroid didn't bump version continue m['css'] += "\n" + t['css'].replace( ".card ", ".card%d "%(t['ord']+1)) del t['css'] col.models.save(m) col.db.execute("update col set ver = 6") if ver < 7: col.modSchema(check=False) col.db.execute( "update cards set odue = 0 where (type = 1 or queue = 2) " "and not odid") col.db.execute("update col set ver = 7") if ver < 8: col.modSchema(check=False) col.db.execute( "update cards set due = due / 1000 where due > 4294967296") col.db.execute("update col set ver = 8") if ver < 9: # adding an empty file to a zip makes python's zip code think it's a # folder, so remove any empty files changed = False dir = col.media.dir() if dir: for f in os.listdir(col.media.dir()): if os.path.isfile(f) and not os.path.getsize(f): os.unlink(f) col.media.db.execute( "delete from log where fname = ?", f) col.media.db.execute( "delete from media where fname = ?", f) changed = True if changed: col.media.db.commit() col.db.execute("update col set ver = 9") if ver < 10: col.db.execute(""" update cards set left = left + left*1000 where queue = 1""") col.db.execute("update col set ver = 10") if ver < 11: col.modSchema(check=False) for d in col.decks.all(): if d['dyn']: order = d['order'] # failed order was removed if order >= 5: order -= 1 d['terms'] = [[d['search'], d['limit'], order]] del d['search'] del d['limit'] del d['order'] d['resched'] = True d['return'] = True else: if 'extendNew' not in d: d['extendNew'] = 10 d['extendRev'] = 50 col.decks.save(d) for c in col.decks.allConf(): r = c['rev'] r['ivlFct'] = r.get("ivlfct", 1) if 'ivlfct' in r: del r['ivlfct'] r['maxIvl'] = 36500 col.decks.save(c) for m in col.models.all(): for t in m['tmpls']: t['bqfmt'] = '' t['bafmt'] = '' col.models.save(m) col.db.execute("update col set ver = 11") def _upgradeClozeModel(col, m): m['type'] = MODEL_CLOZE # convert first template t = m['tmpls'][0] for type in 'qfmt', 'afmt': t[type] = re.sub("{{cloze:1:(.+?)}}", r"{{cloze:\1}}", t[type]) t['name'] = _("Cloze") # delete non-cloze cards for the model rem = [] for t in m['tmpls'][1:]: if "{{cloze:" not in t['qfmt']: rem.append(t) for r in rem: col.models.remTemplate(m, r) del m['tmpls'][1:] col.models._updateTemplOrds(m) col.models.save(m) # Creating a new collection ###################################################################### def _createDB(db): db.execute("pragma page_size = 4096") db.execute("pragma legacy_file_format = 0") db.execute("vacuum") _addSchema(db) _updateIndices(db) db.execute("analyze") return SCHEMA_VERSION def _addSchema(db, setColConf=True): db.executescript(""" create table if not exists col ( id integer primary key, crt integer not null, mod integer not null, scm integer not null, ver integer not null, dty integer not null, usn integer not null, ls integer not null, conf text not null, models text not null, decks text not null, dconf text not null, tags text not null ); create table if not exists notes ( id integer primary key, /* 0 */ guid text not null, /* 1 */ mid integer not null, /* 2 */ mod integer not null, /* 3 */ usn integer not null, /* 4 */ tags text not null, /* 5 */ flds text not null, /* 6 */ sfld integer not null, /* 7 */ csum integer not null, /* 8 */ flags integer not null, /* 9 */ data text not null /* 10 */ ); create table if not exists cards ( id integer primary key, /* 0 */ nid integer not null, /* 1 */ did integer not null, /* 2 */ ord integer not null, /* 3 */ mod integer not null, /* 4 */ usn integer not null, /* 5 */ type integer not null, /* 6 */ queue integer not null, /* 7 */ due integer not null, /* 8 */ ivl integer not null, /* 9 */ factor integer not null, /* 10 */ reps integer not null, /* 11 */ lapses integer not null, /* 12 */ left integer not null, /* 13 */ odue integer not null, /* 14 */ odid integer not null, /* 15 */ flags integer not null, /* 16 */ data text not null /* 17 */ ); create table if not exists revlog ( id integer primary key, cid integer not null, usn integer not null, ease integer not null, ivl integer not null, lastIvl integer not null, factor integer not null, time integer not null, type integer not null ); create table if not exists graves ( usn integer not null, oid integer not null, type integer not null ); insert or ignore into col values(1,0,0,%(s)s,%(v)s,0,0,0,'','{}','','','{}'); """ % ({'v':SCHEMA_VERSION, 's':intTime(1000)})) if setColConf: _addColVars(db, *_getColVars(db)) def _getColVars(db): import anki.collection import anki.decks g = copy.deepcopy(anki.decks.defaultDeck) g['id'] = 1 g['name'] = _("Default") g['conf'] = 1 g['mod'] = intTime() gc = copy.deepcopy(anki.decks.defaultConf) gc['id'] = 1 return g, gc, anki.collection.defaultConf.copy() def _addColVars(db, g, gc, c): db.execute(""" update col set conf = ?, decks = ?, dconf = ?""", json.dumps(c), json.dumps({'1': g}), json.dumps({'1': gc})) def _updateIndices(db): "Add indices to the DB." db.executescript(""" -- syncing create index if not exists ix_notes_usn on notes (usn); create index if not exists ix_cards_usn on cards (usn); create index if not exists ix_revlog_usn on revlog (usn); -- card spacing, etc create index if not exists ix_cards_nid on cards (nid); -- scheduling and deck limiting create index if not exists ix_cards_sched on cards (did, queue, due); -- revlog by card create index if not exists ix_revlog_cid on revlog (cid); -- field uniqueness create index if not exists ix_notes_csum on notes (csum); """) anki-2.1.0+dfsg~b36/anki/sync.py000066400000000000000000000716041323611211500163370ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import io import gzip import random import requests from anki.db import DB, DBError from anki.utils import ids2str, intTime, json, platDesc, checksum, devMode from anki.consts import * from .hooks import runHook import anki from .lang import ngettext # syncing vars HTTP_TIMEOUT = 90 HTTP_PROXY = None HTTP_BUF_SIZE = 64*1024 # Incremental syncing ########################################################################## class Syncer: def __init__(self, col, server=None): self.col = col self.server = server def sync(self): "Returns 'noChanges', 'fullSync', 'success', etc" self.syncMsg = "" self.uname = "" # if the deck has any pending changes, flush them first and bump mod # time self.col.save() # step 1: login & metadata runHook("sync", "login") meta = self.server.meta() self.col.log("rmeta", meta) if not meta: return "badAuth" # server requested abort? self.syncMsg = meta['msg'] if not meta['cont']: return "serverAbort" else: # don't abort, but if 'msg' is not blank, gui should show 'msg' # after sync finishes and wait for confirmation before hiding pass rscm = meta['scm'] rts = meta['ts'] self.rmod = meta['mod'] self.maxUsn = meta['usn'] # this is a temporary measure to address the problem of users # forgetting which email address they've used - it will be removed # when enough time has passed self.uname = meta.get("uname", "") meta = self.meta() self.col.log("lmeta", meta) self.lmod = meta['mod'] self.minUsn = meta['usn'] lscm = meta['scm'] lts = meta['ts'] if abs(rts - lts) > 300: self.col.log("clock off") return "clockOff" if self.lmod == self.rmod: self.col.log("no changes") return "noChanges" elif lscm != rscm: self.col.log("schema diff") return "fullSync" self.lnewer = self.lmod > self.rmod # step 1.5: check collection is valid if not self.col.basicCheck(): self.col.log("basic check") return "basicCheckFailed" # step 2: deletions runHook("sync", "meta") lrem = self.removed() rrem = self.server.start( minUsn=self.minUsn, lnewer=self.lnewer, graves=lrem) self.remove(rrem) # ...and small objects lchg = self.changes() rchg = self.server.applyChanges(changes=lchg) self.mergeChanges(lchg, rchg) # step 3: stream large tables from server runHook("sync", "server") while 1: runHook("sync", "stream") chunk = self.server.chunk() self.col.log("server chunk", chunk) self.applyChunk(chunk=chunk) if chunk['done']: break # step 4: stream to server runHook("sync", "client") while 1: runHook("sync", "stream") chunk = self.chunk() self.col.log("client chunk", chunk) self.server.applyChunk(chunk=chunk) if chunk['done']: break # step 5: sanity check runHook("sync", "sanity") c = self.sanityCheck() ret = self.server.sanityCheck2(client=c) if ret['status'] != "ok": # roll back and force full sync self.col.rollback() self.col.modSchema(False) self.col.save() return "sanityCheckFailed" # finalize runHook("sync", "finalize") mod = self.server.finish() self.finish(mod) return "success" def meta(self): return dict( mod=self.col.mod, scm=self.col.scm, usn=self.col._usn, ts=intTime(), musn=0, msg="", cont=True ) def changes(self): "Bundle up small objects." d = dict(models=self.getModels(), decks=self.getDecks(), tags=self.getTags()) if self.lnewer: d['conf'] = self.getConf() d['crt'] = self.col.crt return d def applyChanges(self, changes): self.rchg = changes lchg = self.changes() # merge our side before returning self.mergeChanges(lchg, self.rchg) return lchg def mergeChanges(self, lchg, rchg): # then the other objects self.mergeModels(rchg['models']) self.mergeDecks(rchg['decks']) self.mergeTags(rchg['tags']) if 'conf' in rchg: self.mergeConf(rchg['conf']) # this was left out of earlier betas if 'crt' in rchg: self.col.crt = rchg['crt'] self.prepareToChunk() def sanityCheck(self): if not self.col.basicCheck(): return "failed basic check" for t in "cards", "notes", "revlog", "graves": if self.col.db.scalar( "select count() from %s where usn = -1" % t): return "%s had usn = -1" % t for g in self.col.decks.all(): if g['usn'] == -1: return "deck had usn = -1" for t, usn in self.col.tags.allItems(): if usn == -1: return "tag had usn = -1" found = False for m in self.col.models.all(): if self.col.server: # the web upgrade was mistakenly setting usn if m['usn'] < 0: m['usn'] = 0 found = True else: if m['usn'] == -1: return "model had usn = -1" if found: self.col.models.save() self.col.sched.reset() # check for missing parent decks self.col.sched.deckDueList() # return summary of deck return [ list(self.col.sched.counts()), self.col.db.scalar("select count() from cards"), self.col.db.scalar("select count() from notes"), self.col.db.scalar("select count() from revlog"), self.col.db.scalar("select count() from graves"), len(self.col.models.all()), len(self.col.decks.all()), len(self.col.decks.allConf()), ] def sanityCheck2(self, client): server = self.sanityCheck() if client != server: return dict(status="bad", c=client, s=server) return dict(status="ok") def usnLim(self): if self.col.server: return "usn >= %d" % self.minUsn else: return "usn = -1" def finish(self, mod=None): if not mod: # server side; we decide new mod time mod = intTime(1000) self.col.ls = mod self.col._usn = self.maxUsn + 1 # ensure we save the mod time even if no changes made self.col.db.mod = True self.col.save(mod=mod) return mod # Chunked syncing ########################################################################## def prepareToChunk(self): self.tablesLeft = ["revlog", "cards", "notes"] self.cursor = None def cursorForTable(self, table): lim = self.usnLim() x = self.col.db.execute d = (self.maxUsn, lim) if table == "revlog": return x(""" select id, cid, %d, ease, ivl, lastIvl, factor, time, type from revlog where %s""" % d) elif table == "cards": return x(""" select id, nid, did, ord, mod, %d, type, queue, due, ivl, factor, reps, lapses, left, odue, odid, flags, data from cards where %s""" % d) else: return x(""" select id, guid, mid, mod, %d, tags, flds, '', '', flags, data from notes where %s""" % d) def chunk(self): buf = dict(done=False) lim = 250 while self.tablesLeft and lim: curTable = self.tablesLeft[0] if not self.cursor: self.cursor = self.cursorForTable(curTable) rows = self.cursor.fetchmany(lim) fetched = len(rows) if fetched != lim: # table is empty self.tablesLeft.pop(0) self.cursor = None # if we're the client, mark the objects as having been sent if not self.col.server: self.col.db.execute( "update %s set usn=? where usn=-1"%curTable, self.maxUsn) buf[curTable] = rows lim -= fetched if not self.tablesLeft: buf['done'] = True return buf def applyChunk(self, chunk): if "revlog" in chunk: self.mergeRevlog(chunk['revlog']) if "cards" in chunk: self.mergeCards(chunk['cards']) if "notes" in chunk: self.mergeNotes(chunk['notes']) # Deletions ########################################################################## def removed(self): cards = [] notes = [] decks = [] if self.col.server: curs = self.col.db.execute( "select oid, type from graves where usn >= ?", self.minUsn) else: curs = self.col.db.execute( "select oid, type from graves where usn = -1") for oid, type in curs: if type == REM_CARD: cards.append(oid) elif type == REM_NOTE: notes.append(oid) else: decks.append(oid) if not self.col.server: self.col.db.execute("update graves set usn=? where usn=-1", self.maxUsn) return dict(cards=cards, notes=notes, decks=decks) def start(self, minUsn, lnewer, graves): self.maxUsn = self.col._usn self.minUsn = minUsn self.lnewer = not lnewer lgraves = self.removed() self.remove(graves) return lgraves def remove(self, graves): # pretend to be the server so we don't set usn = -1 wasServer = self.col.server self.col.server = True # notes first, so we don't end up with duplicate graves self.col._remNotes(graves['notes']) # then cards self.col.remCards(graves['cards'], notes=False) # and decks for oid in graves['decks']: self.col.decks.rem(oid, childrenToo=False) self.col.server = wasServer # Models ########################################################################## def getModels(self): if self.col.server: return [m for m in self.col.models.all() if m['usn'] >= self.minUsn] else: mods = [m for m in self.col.models.all() if m['usn'] == -1] for m in mods: m['usn'] = self.maxUsn self.col.models.save() return mods def mergeModels(self, rchg): for r in rchg: l = self.col.models.get(r['id']) # if missing locally or server is newer, update if not l or r['mod'] > l['mod']: self.col.models.update(r) # Decks ########################################################################## def getDecks(self): if self.col.server: return [ [g for g in self.col.decks.all() if g['usn'] >= self.minUsn], [g for g in self.col.decks.allConf() if g['usn'] >= self.minUsn] ] else: decks = [g for g in self.col.decks.all() if g['usn'] == -1] for g in decks: g['usn'] = self.maxUsn dconf = [g for g in self.col.decks.allConf() if g['usn'] == -1] for g in dconf: g['usn'] = self.maxUsn self.col.decks.save() return [decks, dconf] def mergeDecks(self, rchg): for r in rchg[0]: l = self.col.decks.get(r['id'], False) # work around mod time being stored as string if l and not isinstance(l['mod'], int): l['mod'] = int(l['mod']) # if missing locally or server is newer, update if not l or r['mod'] > l['mod']: self.col.decks.update(r) for r in rchg[1]: try: l = self.col.decks.getConf(r['id']) except KeyError: l = None # if missing locally or server is newer, update if not l or r['mod'] > l['mod']: self.col.decks.updateConf(r) # Tags ########################################################################## def getTags(self): if self.col.server: return [t for t, usn in self.col.tags.allItems() if usn >= self.minUsn] else: tags = [] for t, usn in self.col.tags.allItems(): if usn == -1: self.col.tags.tags[t] = self.maxUsn tags.append(t) self.col.tags.save() return tags def mergeTags(self, tags): self.col.tags.register(tags, usn=self.maxUsn) # Cards/notes/revlog ########################################################################## def mergeRevlog(self, logs): self.col.db.executemany( "insert or ignore into revlog values (?,?,?,?,?,?,?,?,?)", logs) def newerRows(self, data, table, modIdx): ids = (r[0] for r in data) lmods = {} for id, mod in self.col.db.execute( "select id, mod from %s where id in %s and %s" % ( table, ids2str(ids), self.usnLim())): lmods[id] = mod update = [] for r in data: if r[0] not in lmods or lmods[r[0]] < r[modIdx]: update.append(r) self.col.log(table, data) return update def mergeCards(self, cards): self.col.db.executemany( "insert or replace into cards values " "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", self.newerRows(cards, "cards", 4)) def mergeNotes(self, notes): rows = self.newerRows(notes, "notes", 3) self.col.db.executemany( "insert or replace into notes values (?,?,?,?,?,?,?,?,?,?,?)", rows) self.col.updateFieldCache([f[0] for f in rows]) # Col config ########################################################################## def getConf(self): return self.col.conf def mergeConf(self, conf): self.col.conf = conf # Local syncing for unit tests ########################################################################## class LocalServer(Syncer): # serialize/deserialize payload, so we don't end up sharing objects # between cols def applyChanges(self, changes): l = json.loads; d = json.dumps return l(d(Syncer.applyChanges(self, l(d(changes))))) # Wrapper for requests that tracks upload/download progress ########################################################################## class AnkiRequestsClient: verify = True def __init__(self): self.session = requests.Session() def post(self, url, data, headers): data = _MonitoringFile(data) headers['User-Agent'] = self._agentName() return self.session.post( url, data=data, headers=headers, stream=True, timeout=60, verify=self.verify) def get(self, url, headers=None): if headers is None: headers = {} headers['User-Agent'] = self._agentName() return self.session.get(url, stream=True, timeout=60, verify=self.verify) def streamContent(self, resp): resp.raise_for_status() buf = io.BytesIO() for chunk in resp.iter_content(chunk_size=HTTP_BUF_SIZE): runHook("httpRecv", len(chunk)) buf.write(chunk) return buf.getvalue() def _agentName(self): from anki import version return "Anki {}".format(version) class _MonitoringFile(io.BufferedReader): def read(self, size=-1): data = io.BufferedReader.read(self, HTTP_BUF_SIZE) runHook("httpSend", len(data)) return data # HTTP syncing tools ########################################################################## class HttpSyncer: def __init__(self, hkey=None, client=None): self.hkey = hkey self.skey = checksum(str(random.random()))[:8] self.client = client or AnkiRequestsClient() self.postVars = {} def assertOk(self, resp): # not using raise_for_status() as aqt expects this error msg if resp.status_code != 200: raise Exception("Unknown response code: %s" % resp.status_code) # Posting data as a file ###################################################################### # We don't want to post the payload as a form var, as the percent-encoding is # costly. We could send it as a raw post, but more HTTP clients seem to # support file uploading, so this is the more compatible choice. def _buildPostData(self, fobj, comp): BOUNDARY=b"Anki-sync-boundary" bdry = b"--"+BOUNDARY buf = io.BytesIO() # post vars self.postVars['c'] = 1 if comp else 0 for (key, value) in list(self.postVars.items()): buf.write(bdry + b"\r\n") buf.write( ('Content-Disposition: form-data; name="%s"\r\n\r\n%s\r\n' % (key, value)).encode("utf8")) # payload as raw data or json if fobj: # header buf.write(bdry + b"\r\n") buf.write(b"""\ Content-Disposition: form-data; name="data"; filename="data"\r\n\ Content-Type: application/octet-stream\r\n\r\n""") # write file into buffer, optionally compressing if comp: tgt = gzip.GzipFile(mode="wb", fileobj=buf, compresslevel=comp) else: tgt = buf while 1: data = fobj.read(65536) if not data: if comp: tgt.close() break tgt.write(data) buf.write(b"\r\n") buf.write(bdry + b'--\r\n') size = buf.tell() # connection headers headers = { 'Content-Type': 'multipart/form-data; boundary=%s' % BOUNDARY.decode("utf8"), 'Content-Length': str(size), } buf.seek(0) return headers, buf def req(self, method, fobj=None, comp=6, badAuthRaises=True): headers, body = self._buildPostData(fobj, comp) r = self.client.post(self.syncURL()+method, data=body, headers=headers) if not badAuthRaises and r.status_code == 403: return False self.assertOk(r) buf = self.client.streamContent(r) return buf # Incremental sync over HTTP ###################################################################### class RemoteServer(HttpSyncer): def __init__(self, hkey): HttpSyncer.__init__(self, hkey) def syncURL(self): if devMode: return "https://l1sync.ankiweb.net/sync/" return SYNC_BASE + "sync/" def hostKey(self, user, pw): "Returns hkey or none if user/pw incorrect." self.postVars = dict() ret = self.req( "hostKey", io.BytesIO(json.dumps(dict(u=user, p=pw)).encode("utf8")), badAuthRaises=False) if not ret: # invalid auth return self.hkey = json.loads(ret.decode("utf8"))['key'] return self.hkey def meta(self): self.postVars = dict( k=self.hkey, s=self.skey, ) ret = self.req( "meta", io.BytesIO(json.dumps(dict( v=SYNC_VER, cv="ankidesktop,%s,%s"%(anki.version, platDesc()))).encode("utf8")), badAuthRaises=False) if not ret: # invalid auth return return json.loads(ret.decode("utf8")) def applyChanges(self, **kw): return self._run("applyChanges", kw) def start(self, **kw): return self._run("start", kw) def chunk(self, **kw): return self._run("chunk", kw) def applyChunk(self, **kw): return self._run("applyChunk", kw) def sanityCheck2(self, **kw): return self._run("sanityCheck2", kw) def finish(self, **kw): return self._run("finish", kw) def abort(self, **kw): return self._run("abort", kw) def _run(self, cmd, data): return json.loads( self.req(cmd, io.BytesIO(json.dumps(data).encode("utf8"))).decode("utf8")) # Full syncing ########################################################################## class FullSyncer(HttpSyncer): def __init__(self, col, hkey, client): HttpSyncer.__init__(self, hkey, client) self.postVars = dict( k=self.hkey, v="ankidesktop,%s,%s"%(anki.version, platDesc()), ) self.col = col def syncURL(self): if devMode: return "https://l1.ankiweb.net/sync/" return SYNC_BASE + "sync/" def download(self): runHook("sync", "download") self.col.close() cont = self.req("download") tpath = self.col.path + ".tmp" if cont == "upgradeRequired": runHook("sync", "upgradeRequired") return open(tpath, "wb").write(cont) # check the received file is ok d = DB(tpath) assert d.scalar("pragma integrity_check") == "ok" d.close() # overwrite existing collection os.unlink(self.col.path) os.rename(tpath, self.col.path) self.col = None def upload(self): "True if upload successful." runHook("sync", "upload") # make sure it's ok before we try to upload if self.col.db.scalar("pragma integrity_check") != "ok": return False if not self.col.basicCheck(): return False # apply some adjustments, then upload self.col.beforeUpload() if self.req("upload", open(self.col.path, "rb")) != b"OK": return False return True # Media syncing ########################################################################## # # About conflicts: # - to minimize data loss, if both sides are marked for sending and one # side has been deleted, favour the add # - if added/changed on both sides, favour the server version on the # assumption other syncers are in sync with the server # class MediaSyncer: def __init__(self, col, server=None): self.col = col self.server = server def sync(self): # check if there have been any changes runHook("sync", "findMedia") self.col.log("findChanges") try: self.col.media.findChanges() except DBError: return "corruptMediaDB" # begin session and check if in sync lastUsn = self.col.media.lastUsn() ret = self.server.begin() srvUsn = ret['usn'] if lastUsn == srvUsn and not self.col.media.haveDirty(): return "noChanges" # loop through and process changes from server self.col.log("last local usn is %s"%lastUsn) self.downloadCount = 0 while True: data = self.server.mediaChanges(lastUsn=lastUsn) self.col.log("mediaChanges resp count %d"%len(data)) if not data: break need = [] lastUsn = data[-1][1] for fname, rusn, rsum in data: lsum, ldirty = self.col.media.syncInfo(fname) self.col.log( "check: lsum=%s rsum=%s ldirty=%d rusn=%d fname=%s"%( (lsum and lsum[0:4]), (rsum and rsum[0:4]), ldirty, rusn, fname)) if rsum: # added/changed remotely if not lsum or lsum != rsum: self.col.log("will fetch") need.append(fname) else: self.col.log("have same already") ldirty and self.col.media.markClean([fname]) elif lsum: # deleted remotely if not ldirty: self.col.log("delete local") self.col.media.syncDelete(fname) else: # conflict; local add overrides remote delete self.col.log("conflict; will send") else: # deleted both sides self.col.log("both sides deleted") ldirty and self.col.media.markClean([fname]) self._downloadFiles(need) self.col.log("update last usn to %d"%lastUsn) self.col.media.setLastUsn(lastUsn) # commits # at this point we're all up to date with the server's changes, # and we need to send our own updateConflict = False toSend = self.col.media.dirtyCount() while True: zip, fnames = self.col.media.mediaChangesZip() if not fnames: break runHook("syncMsg", ngettext( "%d media change to upload", "%d media changes to upload", toSend) % toSend) processedCnt, serverLastUsn = self.server.uploadChanges(zip) self.col.media.markClean(fnames[0:processedCnt]) self.col.log("processed %d, serverUsn %d, clientUsn %d" % ( processedCnt, serverLastUsn, lastUsn )) if serverLastUsn - processedCnt == lastUsn: self.col.log("lastUsn in sync, updating local") lastUsn = serverLastUsn self.col.media.setLastUsn(serverLastUsn) # commits else: self.col.log("concurrent update, skipping usn update") # commit for markClean self.col.media.db.commit() updateConflict = True toSend -= processedCnt if updateConflict: self.col.log("restart sync due to concurrent update") return self.sync() lcnt = self.col.media.mediaCount() ret = self.server.mediaSanity(local=lcnt) if ret == "OK": return "OK" else: self.col.media.forceResync() return ret def _downloadFiles(self, fnames): self.col.log("%d files to fetch"%len(fnames)) while fnames: top = fnames[0:SYNC_ZIP_COUNT] self.col.log("fetch %s"%top) zipData = self.server.downloadFiles(files=top) cnt = self.col.media.addFilesFromZip(zipData) self.downloadCount += cnt self.col.log("received %d files"%cnt) fnames = fnames[cnt:] n = self.downloadCount runHook("syncMsg", ngettext( "%d media file downloaded", "%d media files downloaded", n) % n) # Remote media syncing ########################################################################## class RemoteMediaServer(HttpSyncer): def __init__(self, col, hkey, client): self.col = col HttpSyncer.__init__(self, hkey, client) def syncURL(self): if devMode: return "https://l1.ankiweb.net/msync/" return SYNC_MEDIA_BASE def begin(self): self.postVars = dict( k=self.hkey, v="ankidesktop,%s,%s"%(anki.version, platDesc()) ) ret = self._dataOnly(self.req( "begin", io.BytesIO(json.dumps(dict()).encode("utf8")))) self.skey = ret['sk'] return ret # args: lastUsn def mediaChanges(self, **kw): self.postVars = dict( sk=self.skey, ) return self._dataOnly( self.req("mediaChanges", io.BytesIO(json.dumps(kw).encode("utf8")))) # args: files def downloadFiles(self, **kw): return self.req("downloadFiles", io.BytesIO(json.dumps(kw).encode("utf8"))) def uploadChanges(self, zip): # no compression, as we compress the zip file instead return self._dataOnly( self.req("uploadChanges", io.BytesIO(zip), comp=0)) # args: local def mediaSanity(self, **kw): return self._dataOnly( self.req("mediaSanity", io.BytesIO(json.dumps(kw).encode("utf8")))) def _dataOnly(self, resp): resp = json.loads(resp.decode("utf8")) if resp['err']: self.col.log("error returned:%s"%resp['err']) raise Exception("SyncError:%s"%resp['err']) return resp['data'] # only for unit tests def mediatest(self, cmd): self.postVars = dict( k=self.hkey, ) return self._dataOnly( self.req("newMediaTest", io.BytesIO( json.dumps(dict(cmd=cmd)).encode("utf8")))) anki-2.1.0+dfsg~b36/anki/tags.py000066400000000000000000000140661323611211500163200ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from anki.utils import intTime, ids2str, json from anki.hooks import runHook import re """ Anki maintains a cache of used tags so it can quickly present a list of tags for autocomplete and in the browser. For efficiency, deletions are not tracked, so unused tags can only be removed from the list with a DB check. This module manages the tag cache and tags for notes. """ class TagManager: # Registry save/load ############################################################# def __init__(self, col): self.col = col def load(self, json_): self.tags = json.loads(json_) self.changed = False def flush(self): if self.changed: self.col.db.execute("update col set tags=?", json.dumps(self.tags)) self.changed = False # Registering and fetching tags ############################################################# def register(self, tags, usn=None): "Given a list of tags, add any missing ones to tag registry." found = False for t in tags: if t not in self.tags: found = True self.tags[t] = self.col.usn() if usn is None else usn self.changed = True if found: runHook("newTag") def all(self): return list(self.tags.keys()) def registerNotes(self, nids=None): "Add any missing tags from notes to the tags list." # when called without an argument, the old list is cleared first. if nids: lim = " where id in " + ids2str(nids) else: lim = "" self.tags = {} self.changed = True self.register(set(self.split( " ".join(self.col.db.list("select distinct tags from notes"+lim))))) def allItems(self): return list(self.tags.items()) def save(self): self.changed = True def byDeck(self, did, children=False): basequery = "select n.tags from cards c, notes n WHERE c.nid = n.id" if not children: query = basequery + " AND c.did=?" res = self.col.db.list(query, did) return list(set(self.split(" ".join(res)))) dids = [did] for name, id in self.col.decks.children(did): dids.append(id) query = basequery + " AND c.did IN " + ids2str(dids) res = self.col.db.list(query) return list(set(self.split(" ".join(res)))) # Bulk addition/removal from notes ############################################################# def bulkAdd(self, ids, tags, add=True): "Add tags in bulk. TAGS is space-separated." newTags = self.split(tags) if not newTags: return # cache tag names if add: self.register(newTags) # find notes missing the tags if add: l = "tags not " fn = self.addToStr else: l = "tags " fn = self.remFromStr lim = " or ".join( [l+"like :_%d" % c for c, t in enumerate(newTags)]) res = self.col.db.all( "select id, tags from notes where id in %s and (%s)" % ( ids2str(ids), lim), **dict([("_%d" % x, '%% %s %%' % y.replace('*', '%')) for x, y in enumerate(newTags)])) # update tags nids = [] def fix(row): nids.append(row[0]) return {'id': row[0], 't': fn(tags, row[1]), 'n':intTime(), 'u':self.col.usn()} self.col.db.executemany( "update notes set tags=:t,mod=:n,usn=:u where id = :id", [fix(row) for row in res]) def bulkRem(self, ids, tags): self.bulkAdd(ids, tags, False) # String-based utilities ########################################################################## def split(self, tags): "Parse a string and return a list of tags." return [t for t in tags.replace('\u3000', ' ').split(" ") if t] def join(self, tags): "Join tags into a single string, with leading and trailing spaces." if not tags: return "" return " %s " % " ".join(tags) def addToStr(self, addtags, tags): "Add tags if they don't exist, and canonify." currentTags = self.split(tags) for tag in self.split(addtags): if not self.inList(tag, currentTags): currentTags.append(tag) return self.join(self.canonify(currentTags)) def remFromStr(self, deltags, tags): "Delete tags if they exist." def wildcard(pat, str): pat = re.escape(pat).replace('\\*', '.*') return re.search(pat, str, re.IGNORECASE) currentTags = self.split(tags) for tag in self.split(deltags): # find tags, ignoring case remove = [] for tx in currentTags: if (tag.lower() == tx.lower()) or wildcard(tag, tx): remove.append(tx) # remove them for r in remove: currentTags.remove(r) return self.join(currentTags) # List-based utilities ########################################################################## def canonify(self, tagList): "Strip duplicates, adjust case to match existing tags, and sort." strippedTags = [] for t in tagList: s = re.sub("[\"']", "", t) for existingTag in self.tags: if s.lower() == existingTag.lower(): s = existingTag strippedTags.append(s) return sorted(set(strippedTags)) def inList(self, tag, tags): "True if TAG is in TAGS. Ignore case." return tag.lower() in [t.lower() for t in tags] # Sync handling ########################################################################## def beforeUpload(self): for k in list(self.tags.keys()): self.tags[k] = 0 self.save() anki-2.1.0+dfsg~b36/anki/template/000077500000000000000000000000001323611211500166145ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/anki/template/LICENSE000066400000000000000000000020431323611211500176200ustar00rootroot00000000000000Copyright (c) 2009 Chris Wanstrath Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. anki-2.1.0+dfsg~b36/anki/template/README.anki000066400000000000000000000005501323611211500204150ustar00rootroot00000000000000Anki uses a modified version of Pystache to provide Mustache-like syntax. Behaviour is a little different from standard Mustache: - {{text}} returns text verbatim with no HTML escaping - {{{text}}} does the same and exists for backwards compatibility - partial rendering is disabled for security reasons - certain keywords like 'cloze' are treated specially anki-2.1.0+dfsg~b36/anki/template/__init__.py000066400000000000000000000003711323611211500207260ustar00rootroot00000000000000from anki.template.template import Template from anki.template.view import View def render(template, context=None, **kwargs): context = context and context.copy() or {} context.update(kwargs) return Template(template, context).render() anki-2.1.0+dfsg~b36/anki/template/furigana.py000066400000000000000000000016731323611211500207710ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # Based off Kieran Clancy's initial implementation. import re from anki.hooks import addHook r = r' ?([^ >]+?)\[(.+?)\]' ruby = r'\1\2' def noSound(repl): def func(match): if match.group(2).startswith("sound:"): # return without modification return match.group(0) else: return re.sub(r, repl, match.group(0)) return func def _munge(s): return s.replace(" ", " ") def kanji(txt, *args): return re.sub(r, noSound(r'\1'), _munge(txt)) def kana(txt, *args): return re.sub(r, noSound(r'\2'), _munge(txt)) def furigana(txt, *args): return re.sub(r, noSound(ruby), _munge(txt)) def install(): addHook('fmod_kanji', kanji) addHook('fmod_kana', kana) addHook('fmod_furigana', furigana) anki-2.1.0+dfsg~b36/anki/template/hint.py000066400000000000000000000011711323611211500201300ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from anki.hooks import addHook from anki.lang import _ def hint(txt, extra, context, tag, fullname): if not txt.strip(): return "" # random id domid = "hint%d" % id(txt) return """ %s """ % (domid, _("Show %s") % tag, domid, txt) def install(): addHook('fmod_hint', hint) anki-2.1.0+dfsg~b36/anki/template/template.py000066400000000000000000000176631323611211500210160ustar00rootroot00000000000000import re from anki.utils import stripHTML, stripHTMLMedia from anki.hooks import runFilter from anki.template import furigana; furigana.install() from anki.template import hint; hint.install() clozeReg = r"(?si)\{\{(c)%s::(.*?)(::(.*?))?\}\}" modifiers = {} def modifier(symbol): """Decorator for associating a function with a Mustache tag modifier. @modifier('P') def render_tongue(self, tag_name=None, context=None): return ":P %s" % tag_name {{P yo }} => :P yo """ def set_modifier(func): modifiers[symbol] = func return func return set_modifier def get_or_attr(obj, name, default=None): try: return obj[name] except KeyError: return default except: try: return getattr(obj, name) except AttributeError: return default class Template: # The regular expression used to find a #section section_re = None # The regular expression used to find a tag. tag_re = None # Opening tag delimiter otag = '{{' # Closing tag delimiter ctag = '}}' def __init__(self, template, context=None): self.template = template self.context = context or {} self.compile_regexps() def render(self, template=None, context=None, encoding=None): """Turns a Mustache template into something wonderful.""" template = template or self.template context = context or self.context template = self.render_sections(template, context) result = self.render_tags(template, context) if encoding is not None: result = result.encode(encoding) return result def compile_regexps(self): """Compiles our section and tag regular expressions.""" tags = { 'otag': re.escape(self.otag), 'ctag': re.escape(self.ctag) } section = r"%(otag)s[\#|^]([^\}]*)%(ctag)s(.+?)%(otag)s/\1%(ctag)s" self.section_re = re.compile(section % tags, re.M|re.S) tag = r"%(otag)s(#|=|&|!|>|\{)?(.+?)\1?%(ctag)s+" self.tag_re = re.compile(tag % tags) def render_sections(self, template, context): """Expands sections.""" while 1: match = self.section_re.search(template) if match is None: break section, section_name, inner = match.group(0, 1, 2) section_name = section_name.strip() # check for cloze val = None m = re.match("c[qa]:(\d+):(.+)", section_name) if m: # get full field text txt = get_or_attr(context, m.group(2), None) m = re.search(clozeReg%m.group(1), txt) if m: val = m.group(1) else: val = get_or_attr(context, section_name, None) replacer = '' inverted = section[2] == "^" if (val and not inverted) or (not val and inverted): replacer = inner template = template.replace(section, replacer) return template def render_tags(self, template, context): """Renders all the tags in a template for a context.""" while 1: match = self.tag_re.search(template) if match is None: break tag, tag_type, tag_name = match.group(0, 1, 2) tag_name = tag_name.strip() try: func = modifiers[tag_type] replacement = func(self, tag_name, context) template = template.replace(tag, replacement) except (SyntaxError, KeyError): return "{{invalid template}}" return template # {{{ functions just like {{ in anki @modifier('{') def render_tag(self, tag_name, context): return self.render_unescaped(tag_name, context) @modifier('!') def render_comment(self, tag_name=None, context=None): """Rendering a comment always returns nothing.""" return '' @modifier(None) def render_unescaped(self, tag_name=None, context=None): """Render a tag without escaping it.""" txt = get_or_attr(context, tag_name) if txt is not None: # some field names could have colons in them # avoid interpreting these as field modifiers # better would probably be to put some restrictions on field names return txt # field modifiers parts = tag_name.split(':') extra = None if len(parts) == 1 or parts[0] == '': return '{unknown field %s}' % tag_name else: mods, tag = parts[:-1], parts[-1] #py3k has *mods, tag = parts txt = get_or_attr(context, tag) #Since 'text:' and other mods can affect html on which Anki relies to #process clozes, we need to make sure clozes are always #treated after all the other mods, regardless of how they're specified #in the template, so that {{cloze:text: == {{text:cloze: #For type:, we return directly since no other mod than cloze (or other #pre-defined mods) can be present and those are treated separately mods.reverse() mods.sort(key=lambda s: not s=="type") for mod in mods: # built-in modifiers if mod == 'text': # strip html txt = stripHTML(txt) if txt else "" elif mod == 'type': # type answer field; convert it to [[type:...]] for the gui code # to process return "[[%s]]" % tag_name elif mod.startswith('cq-') or mod.startswith('ca-'): # cloze deletion mod, extra = mod.split("-") txt = self.clozeText(txt, extra, mod[1]) if txt and extra else "" else: # hook-based field modifier mod, extra = re.search("^(.*?)(?:\((.*)\))?$", mod).groups() txt = runFilter('fmod_' + mod, txt or '', extra or '', context, tag, tag_name) if txt is None: return '{unknown field %s}' % tag_name return txt def clozeText(self, txt, ord, type): reg = clozeReg if not re.search(reg%ord, txt): return "" txt = self._removeFormattingFromMathjax(txt, ord) def repl(m): # replace chosen cloze with type if type == "q": if m.group(4): buf = "[%s]" % m.group(4) else: buf = "[...]" else: buf = m.group(2) # uppercase = no formatting if m.group(1) == "c": buf = "%s" % buf return buf txt = re.sub(reg%ord, repl, txt) # and display other clozes normally return re.sub(reg%"\d+", "\\2", txt) # look for clozes wrapped in mathjax, and change {{cx to {{Cx def _removeFormattingFromMathjax(self, txt, ord): opening = ["\\(", "\\["] closing = ["\\)", "\\]"] # flags in middle of expression deprecated creg = clozeReg.replace("(?si)", "") regex = r"(?si)(\\[([])(.*?)"+(creg%ord)+r"(.*?)(\\[\])])" def repl(m): enclosed = True for s in closing: if s in m.group(1): enclosed = False for s in opening: if s in m.group(7): enclosed = False if not enclosed: return m.group(0) # remove formatting return m.group(0).replace("{{c", "{{C") txt = re.sub(regex, repl, txt) return txt @modifier('=') def render_delimiter(self, tag_name=None, context=None): """Changes the Mustache delimiter.""" try: self.otag, self.ctag = tag_name.split(' ') except ValueError: # invalid return self.compile_regexps() return '' anki-2.1.0+dfsg~b36/anki/template/view.py000066400000000000000000000064741323611211500201530ustar00rootroot00000000000000from anki.template import Template import os.path import re class View: # Path where this view's template(s) live template_path = '.' # Extension for templates template_extension = 'mustache' # The name of this template. If none is given the View will try # to infer it based on the class name. template_name = None # Absolute path to the template itself. Pystache will try to guess # if it's not provided. template_file = None # Contents of the template. template = None # Character encoding of the template file. If None, Pystache will not # do any decoding of the template. template_encoding = None def __init__(self, template=None, context=None, **kwargs): self.template = template self.context = context or {} # If the context we're handed is a View, we want to inherit # its settings. if isinstance(context, View): self.inherit_settings(context) if kwargs: self.context.update(kwargs) def inherit_settings(self, view): """Given another View, copies its settings.""" if view.template_path: self.template_path = view.template_path if view.template_name: self.template_name = view.template_name def load_template(self): if self.template: return self.template if self.template_file: return self._load_template() name = self.get_template_name() + '.' + self.template_extension if isinstance(self.template_path, str): self.template_file = os.path.join(self.template_path, name) return self._load_template() for path in self.template_path: self.template_file = os.path.join(path, name) if os.path.exists(self.template_file): return self._load_template() raise IOError('"%s" not found in "%s"' % (name, ':'.join(self.template_path),)) def _load_template(self): f = open(self.template_file, 'r') try: template = f.read() if self.template_encoding: template = str(template, self.template_encoding) finally: f.close() return template def get_template_name(self, name=None): """TemplatePartial => template_partial Takes a string but defaults to using the current class' name or the `template_name` attribute """ if self.template_name: return self.template_name if not name: name = self.__class__.__name__ def repl(match): return '_' + match.group(0).lower() return re.sub('[A-Z]', repl, name)[1:] def __contains__(self, needle): return needle in self.context or hasattr(self, needle) def __getitem__(self, attr): val = self.get(attr, None) if not val: raise KeyError("No such key.") return val def get(self, attr, default): attr = self.context.get(attr, getattr(self, attr, default)) if hasattr(attr, '__call__'): return attr() else: return attr def render(self, encoding=None): template = self.load_template() return Template(template, self).render(encoding=encoding) def __str__(self): return self.render() anki-2.1.0+dfsg~b36/anki/utils.py000066400000000000000000000264231323611211500165220ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import re import os import random import time import math from html.entities import name2codepoint import subprocess import tempfile import shutil import string import sys import locale from hashlib import sha1 import platform import traceback import json from anki.lang import _, ngettext # Time handling ############################################################################## def intTime(scale=1): "The time in integer seconds. Pass scale=1000 to get milliseconds." return int(time.time()*scale) timeTable = { "years": lambda n: ngettext("%s year", "%s years", n), "months": lambda n: ngettext("%s month", "%s months", n), "days": lambda n: ngettext("%s day", "%s days", n), "hours": lambda n: ngettext("%s hour", "%s hours", n), "minutes": lambda n: ngettext("%s minute", "%s minutes", n), "seconds": lambda n: ngettext("%s second", "%s seconds", n), } inTimeTable = { "years": lambda n: ngettext("in %s year", "in %s years", n), "months": lambda n: ngettext("in %s month", "in %s months", n), "days": lambda n: ngettext("in %s day", "in %s days", n), "hours": lambda n: ngettext("in %s hour", "in %s hours", n), "minutes": lambda n: ngettext("in %s minute", "in %s minutes", n), "seconds": lambda n: ngettext("in %s second", "in %s seconds", n), } def shortTimeFmt(type): return { "years": _("%sy"), "months": _("%smo"), "days": _("%sd"), "hours": _("%sh"), "minutes": _("%sm"), "seconds": _("%ss"), }[type] def fmtTimeSpan(time, pad=0, point=0, short=False, inTime=False, unit=99): "Return a string representing a time span (eg '2 days')." (type, point) = optimalPeriod(time, point, unit) time = convertSecondsTo(time, type) if not point: time = int(round(time)) if short: fmt = shortTimeFmt(type) else: if inTime: fmt = inTimeTable[type](_pluralCount(time, point)) else: fmt = timeTable[type](_pluralCount(time, point)) timestr = "%%%(a)d.%(b)df" % {'a': pad, 'b': point} return locale.format_string(fmt % timestr, time) def optimalPeriod(time, point, unit): if abs(time) < 60 or unit < 1: type = "seconds" point -= 1 elif abs(time) < 3600 or unit < 2: type = "minutes" elif abs(time) < 60 * 60 * 24 or unit < 3: type = "hours" elif abs(time) < 60 * 60 * 24 * 30 or unit < 4: type = "days" elif abs(time) < 60 * 60 * 24 * 365 or unit < 5: type = "months" point += 1 else: type = "years" point += 1 return (type, max(point, 0)) def convertSecondsTo(seconds, type): if type == "seconds": return seconds elif type == "minutes": return seconds / 60 elif type == "hours": return seconds / 3600 elif type == "days": return seconds / 86400 elif type == "months": return seconds / 2592000 elif type == "years": return seconds / 31536000 assert False def _pluralCount(time, point): if point: return 2 return math.floor(time) # Locale ############################################################################## def fmtPercentage(float_value, point=1): "Return float with percentage sign" fmt = '%' + "0.%(b)df" % {'b': point} return locale.format_string(fmt, float_value) + "%" def fmtFloat(float_value, point=1): "Return a string with decimal separator according to current locale" fmt = '%' + "0.%(b)df" % {'b': point} return locale.format_string(fmt, float_value) # HTML ############################################################################## reStyle = re.compile("(?si).*?") reScript = re.compile("(?si).*?") reTag = re.compile("(?s)<.*?>") reEnts = re.compile("&#?\w+;") reMedia = re.compile("(?i)]+src=[\"']?([^\"'>]+)[\"']?[^>]*>") def stripHTML(s): s = reStyle.sub("", s) s = reScript.sub("", s) s = reTag.sub("", s) s = entsToTxt(s) return s def stripHTMLMedia(s): "Strip HTML but keep media filenames" s = reMedia.sub(" \\1 ", s) return stripHTML(s) def minimizeHTML(s): "Correct Qt's verbose bold/underline/etc." s = re.sub('(.*?)', '\\1', s) s = re.sub('(.*?)', '\\1', s) s = re.sub('(.*?)', '\\1', s) return s def htmlToTextLine(s): s = s.replace("
", " ") s = s.replace("
", " ") s = s.replace("
", " ") s = s.replace("\n", " ") s = re.sub("\[sound:[^]]+\]", "", s) s = re.sub("\[\[type:[^]]+\]\]", "", s) s = stripHTMLMedia(s) s = s.strip() return s def entsToTxt(html): # entitydefs defines nbsp as \xa0 instead of a standard space, so we # replace it first html = html.replace(" ", " ") def fixup(m): text = m.group(0) if text[:2] == "&#": # character reference try: if text[:3] == "&#x": return chr(int(text[3:-1], 16)) else: return chr(int(text[2:-1])) except ValueError: pass else: # named entity try: text = chr(name2codepoint[text[1:-1]]) except KeyError: pass return text # leave as is return reEnts.sub(fixup, html) def bodyClass(col, card): bodyclass = "card card%d" % (card.ord+1) if col.conf.get("nightMode"): bodyclass += " nightMode" return bodyclass # IDs ############################################################################## def hexifyID(id): return "%x" % int(id) def dehexifyID(id): return int(id, 16) def ids2str(ids): """Given a list of integers, return a string '(int1,int2,...)'.""" return "(%s)" % ",".join(str(i) for i in ids) def timestampID(db, table): "Return a non-conflicting timestamp for table." # be careful not to create multiple objects without flushing them, or they # may share an ID. t = intTime(1000) while db.scalar("select id from %s where id = ?" % table, t): t += 1 return t def maxID(db): "Return the first safe ID to use." now = intTime(1000) for tbl in "cards", "notes": now = max(now, db.scalar("select max(id) from %s" % tbl) or 0) return now + 1 # used in ankiweb def base62(num, extra=""): s = string; table = s.ascii_letters + s.digits + extra buf = "" while num: num, i = divmod(num, len(table)) buf = table[i] + buf return buf _base91_extra_chars = "!#$%&()*+,-./:;<=>?@[]^_`{|}~" def base91(num): # all printable characters minus quotes, backslash and separators return base62(num, _base91_extra_chars) def guid64(): "Return a base91-encoded 64bit random number." return base91(random.randint(0, 2**64-1)) # increment a guid by one, for note type conflicts def incGuid(guid): return _incGuid(guid[::-1])[::-1] def _incGuid(guid): s = string; table = s.ascii_letters + s.digits + _base91_extra_chars idx = table.index(guid[0]) if idx + 1 == len(table): # overflow guid = table[0] + _incGuid(guid[1:]) else: guid = table[idx+1] + guid[1:] return guid # Fields ############################################################################## def joinFields(list): return "\x1f".join(list) def splitFields(string): return string.split("\x1f") # Checksums ############################################################################## def checksum(data): if isinstance(data, str): data = data.encode("utf-8") return sha1(data).hexdigest() def fieldChecksum(data): # 32 bit unsigned number from first 8 digits of sha1 hash return int(checksum(stripHTMLMedia(data).encode("utf-8"))[:8], 16) # Temp files ############################################################################## _tmpdir = None def tmpdir(): "A reusable temp folder which we clean out on each program invocation." global _tmpdir if not _tmpdir: def cleanup(): shutil.rmtree(_tmpdir) import atexit atexit.register(cleanup) _tmpdir = os.path.join(tempfile.gettempdir(), "anki_temp") if not os.path.exists(_tmpdir): os.mkdir(_tmpdir) return _tmpdir def tmpfile(prefix="", suffix=""): (fd, name) = tempfile.mkstemp(dir=tmpdir(), prefix=prefix, suffix=suffix) os.close(fd) return name def namedtmp(name, rm=True): "Return tmpdir+name. Deletes any existing file." path = os.path.join(tmpdir(), name) if rm: try: os.unlink(path) except (OSError, IOError): pass return path # Cmd invocation ############################################################################## def call(argv, wait=True, **kwargs): "Execute a command. If WAIT, return exit code." # ensure we don't open a separate window for forking process on windows if isWin: si = subprocess.STARTUPINFO() try: si.dwFlags |= subprocess.STARTF_USESHOWWINDOW except: si.dwFlags |= subprocess._subprocess.STARTF_USESHOWWINDOW else: si = None # run try: o = subprocess.Popen(argv, startupinfo=si, **kwargs) except OSError: # command not found return -1 # wait for command to finish if wait: while 1: try: ret = o.wait() except OSError: # interrupted system call continue break else: ret = 0 return ret # OS helpers ############################################################################## isMac = sys.platform.startswith("darwin") isWin = sys.platform.startswith("win32") isLin = not isMac and not isWin devMode = os.getenv("ANKIDEV", 0) invalidFilenameChars = ":*?\"<>|" def invalidFilename(str, dirsep=True): for c in invalidFilenameChars: if c in str: return c if (dirsep or isWin) and "/" in str: return "/" elif (dirsep or not isWin) and "\\" in str: return "\\" elif str.strip().startswith("."): return "." def platDesc(): # we may get an interrupted system call, so try this in a loop n = 0 theos = "unknown" while n < 100: n += 1 try: system = platform.system() if isMac: theos = "mac:%s" % (platform.mac_ver()[0]) elif isWin: theos = "win:%s" % (platform.win32_ver()[0]) elif system == "Linux": dist = platform.dist() theos = "lin:%s:%s" % (dist[0], dist[1]) else: theos = system break except: continue return theos # Debugging ############################################################################## class TimedLog: def __init__(self): self._last = time.time() def log(self, s): path, num, fn, y = traceback.extract_stack(limit=2)[0] sys.stderr.write("%5dms: %s(): %s\n" % ((time.time() - self._last)*1000, fn, s)) self._last = time.time() anki-2.1.0+dfsg~b36/aqt/000077500000000000000000000000001323611211500146445ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/aqt/__init__.py000066400000000000000000000220761323611211500167640ustar00rootroot00000000000000# Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from anki import version as _version import getpass import sys import optparse import tempfile import builtins import locale import gettext from aqt.qt import * import anki.lang from anki.consts import HELP_SITE from anki.lang import langDir from anki.utils import isMac, isLin appVersion=_version appWebsite="http://ankisrs.net/" appChanges="http://ankisrs.net/docs/changes.html" appDonate="http://ankisrs.net/support/" appShared="https://ankiweb.net/shared/" appUpdate="https://ankiweb.net/update/desktop" appHelpSite=HELP_SITE mw = None # set on init moduleDir = os.path.split(os.path.dirname(os.path.abspath(__file__)))[0] try: import aqt.forms except ImportError as e: if "forms" in str(e): print("If you're running from git, did you run build_ui.sh?") print() raise from anki.utils import checksum # Dialog manager ########################################################################## # ensures only one copy of the window is open at once, and provides # a way for dialogs to clean up asynchronously when collection closes # to integrate a new window: # - add it to _dialogs # - define close behaviour, by either: # -- setting silentlyClose=True to have it close immediately # -- define a closeWithCallback() method # - have the window opened via aqt.dialogs.open(, self) #- make preferences modal? cmd+q does wrong thing from aqt import addcards, browser, editcurrent, stats, about, \ preferences class DialogManager: _dialogs = { "AddCards": [addcards.AddCards, None], "Browser": [browser.Browser, None], "EditCurrent": [editcurrent.EditCurrent, None], "DeckStats": [stats.DeckStats, None], "About": [about.show, None], "Preferences": [preferences.Preferences, None], } def open(self, name, *args): (creator, instance) = self._dialogs[name] if instance: instance.setWindowState(Qt.WindowNoState) instance.activateWindow() instance.raise_() return instance else: instance = creator(*args) self._dialogs[name][1] = instance return instance def markClosed(self, name): self._dialogs[name] = [self._dialogs[name][0], None] def allClosed(self): return not any(x[1] for x in self._dialogs.values()) def closeAll(self, onsuccess): # can we close immediately? if self.allClosed(): onsuccess() return # ask all windows to close and await a reply for (name, (creator, instance)) in self._dialogs.items(): if not instance: continue def callback(): if self.allClosed(): onsuccess() else: # still waiting for others to close pass if getattr(instance, "silentlyClose", False): instance.close() callback() else: instance.closeWithCallback(callback) return True dialogs = DialogManager() # Language handling ########################################################################## # Qt requires its translator to be installed before any GUI widgets are # loaded, and we need the Qt language to match the gettext language or # translated shortcuts will not work. _gtrans = None _qtrans = None def setupLang(pm, app, force=None): global _gtrans, _qtrans try: locale.setlocale(locale.LC_ALL, '') except: pass lang = force or pm.meta["defaultLang"] dir = langDir() # gettext _gtrans = gettext.translation( 'anki', dir, languages=[lang], fallback=True) builtins.__dict__['_'] = _gtrans.gettext builtins.__dict__['ngettext'] = _gtrans.ngettext anki.lang.setLang(lang, local=False) if lang in ("he","ar","fa"): app.setLayoutDirection(Qt.RightToLeft) else: app.setLayoutDirection(Qt.LeftToRight) # qt _qtrans = QTranslator() if _qtrans.load("qt_" + lang, dir): app.installTranslator(_qtrans) # App initialisation ########################################################################## class AnkiApp(QApplication): # Single instance support on Win32/Linux ################################################## appMsg = pyqtSignal(str) KEY = "anki"+checksum(getpass.getuser()) TMOUT = 5000 def __init__(self, argv): QApplication.__init__(self, argv) self._argv = argv def secondInstance(self): # we accept only one command line argument. if it's missing, send # a blank screen to just raise the existing window opts, args = parseArgs(self._argv) buf = "raise" if args and args[0]: buf = os.path.abspath(args[0]) if self.sendMsg(buf): print("Already running; reusing existing instance.") return True else: # send failed, so we're the first instance or the # previous instance died QLocalServer.removeServer(self.KEY) self._srv = QLocalServer(self) self._srv.newConnection.connect(self.onRecv) self._srv.listen(self.KEY) return False def sendMsg(self, txt): sock = QLocalSocket(self) sock.connectToServer(self.KEY, QIODevice.WriteOnly) if not sock.waitForConnected(self.TMOUT): # first instance or previous instance dead return False sock.write(txt.encode("utf8")) if not sock.waitForBytesWritten(self.TMOUT): # existing instance running but hung return False sock.disconnectFromServer() return True def onRecv(self): sock = self._srv.nextPendingConnection() if not sock.waitForReadyRead(self.TMOUT): sys.stderr.write(sock.errorString()) return path = bytes(sock.readAll()).decode("utf8") self.appMsg.emit(path) sock.disconnectFromServer() # OS X file/url handler ################################################## def event(self, evt): if evt.type() == QEvent.FileOpen: self.appMsg.emit(evt.file() or "raise") return True return QApplication.event(self, evt) def parseArgs(argv): "Returns (opts, args)." # py2app fails to strip this in some instances, then anki dies # as there's no such profile if isMac and len(argv) > 1 and argv[1].startswith("-psn"): argv = [argv[0]] parser = optparse.OptionParser(version="%prog " + appVersion) parser.usage = "%prog [OPTIONS] [file to import]" parser.add_option("-b", "--base", help="path to base folder") parser.add_option("-p", "--profile", help="profile name to load") parser.add_option("-l", "--lang", help="interface language (en, de, etc)") return parser.parse_args(argv[1:]) def run(): try: _run() except Exception as e: QMessageBox.critical(None, "Startup Error", "Please notify support of this error:\n\n"+ traceback.format_exc()) def _run(argv=None, exec=True): """Start AnkiQt application or reuse an existing instance if one exists. If the function is invoked with exec=False, the AnkiQt will not enter the main event loop - instead the application object will be returned. The 'exec' and 'argv' arguments will be useful for testing purposes. If no 'argv' is supplied then 'sys.argv' will be used. """ global mw if argv is None: argv = sys.argv # parse args opts, args = parseArgs(argv) opts.base = opts.base or "" opts.profile = opts.profile or "" # work around pyqt loading wrong GL library if isLin: import ctypes ctypes.CDLL('libGL.so.1', ctypes.RTLD_GLOBAL) # opt in to full hidpi support? if not os.environ.get("ANKI_NOHIGHDPI"): QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) # create the app app = AnkiApp(argv) QCoreApplication.setApplicationName("Anki") if app.secondInstance(): # we've signaled the primary instance, so we should close return # disable icons on mac; this must be done before window created if isMac: app.setAttribute(Qt.AA_DontShowIconsInMenus) # we must have a usable temp dir try: tempfile.gettempdir() except: QMessageBox.critical( None, "Error", """\ No usable temporary folder found. Make sure C:\\temp exists or TEMP in your \ environment points to a valid, writable folder.""") return # profile manager from aqt.profiles import ProfileManager pm = ProfileManager(opts.base, opts.profile) # i18n setupLang(pm, app, opts.lang) # remaining pm init pm.ensureProfile() print("This is an BETA build - please do not package it up for Linux distributions") # load the main window import aqt.main mw = aqt.main.AnkiQt(app, pm, opts, args) if exec: app.exec() else: return app anki-2.1.0+dfsg~b36/aqt/about.py000066400000000000000000000074241323611211500163370ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * import aqt.forms from aqt import appVersion class ClosableQDialog(QDialog): def reject(self): aqt.dialogs.markClosed("About") QDialog.reject(self) def accept(self): aqt.dialogs.markClosed("About") QDialog.accept(self) def closeWithCallback(self, callback): self.reject() callback() def show(mw): dialog = ClosableQDialog(mw) mw.setupDialogGC(dialog) abt = aqt.forms.about.Ui_About() abt.setupUi(dialog) abouttext = "
" abouttext += '

' + _("Anki is a friendly, intelligent spaced learning \ system. It's free and open source.") abouttext += "

"+_("Anki is licensed under the AGPL3 license. Please see " "the license file in the source distribution for more information.") abouttext += '

' + _("Version %s") % appVersion + '
' abouttext += ("Qt %s PyQt %s
") % (QT_VERSION_STR, PYQT_VERSION_STR) abouttext += (_("Visit website") % aqt.appWebsite) + \ "" # automatically sorted; add new lines at the end allusers = sorted(( "Aaron Harsh", "Alex Fraser", "Andreas Klauer", "Andrew Wright", "Aristotelis P.", "Bernhard Ibertsberger", "C. van Rooyen", "Charlene Barina", "Christian Krause", "Christian Rusche", "Dave Druelinger", "David Smith", "Dmitry Mikheev", "Dotan Cohen", "Emilio Wuerges", "Emmanuel Jarri", "Frank Harper", "Gregor Skumavc", "Guillem Palau Salvà", "H. Mijail", "Henrik Enggaard Hansen", "Houssam Salem", "Ian Lewis", "Immanuel Asmus", "Iroiro", "Jarvik7", "Jin Eun-Deok", "Jo Nakashima", "Johanna Lindh", "Joseph Lorimer", "Julien Baley", "Jussi Määttä", "Kieran Clancy", "LaC", "Laurent Steffan", "Luca Ban", "Luciano Esposito", "Marco Giancotti", "Marcus Rubeus", "Mari Egami", "Mark Wilbur", "Matthew Duggan", "Matthew Holtz", "Meelis Vasser", "Michael Jürges", "Michael Keppler", "Michael Montague", "Michael Penkov", "Michal Čadil", "Morteza Salehi", "Nathanael Law", "Nguyễn Hào Khôi", "Nick Cook", "Niklas Laxström", "Norbert Nagold", "Ole Guldberg", "Pcsl88", "Petr Michalec", "Piotr Kubowicz", "Richard Colley", "Roland Sieker", "Samson Melamed", "Silja Ijas", "Snezana Lukic", "Soren Bjornstad", "Stefaan De Pooter", "Susanna Björverud", "Sylvain Durand", "Tacutu", "Timm Preetz", "Timo Paulssen", "Ursus", "Victor Suba", "Volker Jansen", "Volodymyr Goncharenko", "Xtru", "Ádám Szegi", "赵金鹏", "黃文龍", "David Bailey", )) abouttext += '

' + _("Written by Damien Elmes, with patches, translation,\ testing and design from:

%(cont)s") % {'cont': ", ".join(allusers)} abouttext += '

' + _("If you have contributed and are not on this list, \ please get in touch.") abouttext += '

' + _("A big thanks to all the people who have provided \ suggestions, bug reports and donations.") abt.label.stdHtml(abouttext, js=" ") def resizeAndShow(arg): dialog.adjustSize() dialog.show() abt.label.evalWithCallback("1", resizeAndShow) return dialog anki-2.1.0+dfsg~b36/aqt/addcards.py000066400000000000000000000200221323611211500167570ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from anki.lang import _ from aqt.qt import * import aqt.forms from aqt.utils import saveGeom, restoreGeom, showWarning, askUser, shortcut, \ tooltip, openHelp, addCloseShortcut, downArrow from anki.sound import clearAudioQueue from anki.hooks import addHook, remHook, runHook from anki.utils import stripHTMLMedia, htmlToTextLine, isMac import aqt.editor, aqt.modelchooser, aqt.deckchooser class AddCards(QDialog): def __init__(self, mw): QDialog.__init__(self, None, Qt.Window) mw.setupDialogGC(self) self.mw = mw self.form = aqt.forms.addcards.Ui_Dialog() self.form.setupUi(self) self.setWindowTitle(_("Add")) self.setMinimumHeight(300) self.setMinimumWidth(400) self.setupChoosers() self.setupEditor() self.setupButtons() self.onReset() self.history = [] restoreGeom(self, "add") addHook('reset', self.onReset) addHook('currentModelChanged', self.onModelChange) addCloseShortcut(self) self.show() n = self.mw.col.newNote() self.setAndFocusNote(n) def setupEditor(self): self.editor = aqt.editor.Editor( self.mw, self.form.fieldsArea, self, True) def setupChoosers(self): self.modelChooser = aqt.modelchooser.ModelChooser( self.mw, self.form.modelArea) self.deckChooser = aqt.deckchooser.DeckChooser( self.mw, self.form.deckArea) def helpRequested(self): openHelp("addingnotes") def setupButtons(self): bb = self.form.buttonBox ar = QDialogButtonBox.ActionRole # add self.addButton = bb.addButton(_("Add"), ar) self.addButton.clicked.connect(self.addCards) self.addButton.setShortcut(QKeySequence("Ctrl+Return")) self.addButton.setToolTip(shortcut(_("Add (shortcut: ctrl+enter)"))) # close self.closeButton = QPushButton(_("Close")) self.closeButton.setAutoDefault(False) bb.addButton(self.closeButton, QDialogButtonBox.RejectRole) # help self.helpButton = QPushButton(_("Help"), clicked=self.helpRequested) self.helpButton.setAutoDefault(False) bb.addButton(self.helpButton, QDialogButtonBox.HelpRole) # history b = bb.addButton( _("History")+ " "+downArrow(), ar) if isMac: sc = "Ctrl+Shift+H" else: sc = "Ctrl+H" b.setShortcut(QKeySequence(sc)) b.setToolTip(_("Shortcut: %s") % shortcut(sc)) b.clicked.connect(self.onHistory) b.setEnabled(False) self.historyButton = b def setAndFocusNote(self, note): self.editor.setNote(note, focusTo=0) def onModelChange(self): oldNote = self.editor.note note = self.mw.col.newNote() if oldNote: oldFields = list(oldNote.keys()) newFields = list(note.keys()) for n, f in enumerate(note.model()['flds']): fieldName = f['name'] try: oldFieldName = oldNote.model()['flds'][n]['name'] except IndexError: oldFieldName = None # copy identical fields if fieldName in oldFields: note[fieldName] = oldNote[fieldName] # set non-identical fields by field index elif oldFieldName and oldFieldName not in newFields: try: note.fields[n] = oldNote.fields[n] except IndexError: pass self.removeTempNote(oldNote) self.editor.setNote(note) def onReset(self, model=None, keep=False): oldNote = self.editor.note note = self.mw.col.newNote() flds = note.model()['flds'] # copy fields from old note if oldNote: if not keep: self.removeTempNote(oldNote) for n in range(len(note.fields)): try: if not keep or flds[n]['sticky']: note.fields[n] = oldNote.fields[n] else: note.fields[n] = "" except IndexError: break self.setAndFocusNote(note) def removeTempNote(self, note): if not note or not note.id: return # we don't have to worry about cards; just the note self.mw.col._remNotes([note.id]) def addHistory(self, note): self.history.insert(0, note.id) self.history = self.history[:15] self.historyButton.setEnabled(True) def onHistory(self): m = QMenu(self) for nid in self.history: if self.mw.col.findNotes("nid:%s" % nid): fields = self.mw.col.getNote(nid).fields txt = htmlToTextLine(", ".join(fields)) if len(txt) > 30: txt = txt[:30] + "..." a = m.addAction(_("Edit \"%s\"") % txt) a.triggered.connect(lambda b, nid=nid: self.editHistory(nid)) else: a = m.addAction(_("(Note deleted)")) a.setEnabled(False) runHook("AddCards.onHistory", self, m) m.exec_(self.historyButton.mapToGlobal(QPoint(0,0))) def editHistory(self, nid): browser = aqt.dialogs.open("Browser", self.mw) browser.form.searchEdit.lineEdit().setText("nid:%d" % nid) browser.onSearchActivated() def addNote(self, note): note.model()['did'] = self.deckChooser.selectedId() ret = note.dupeOrEmpty() if ret == 1: showWarning(_( "The first field is empty."), help="AddItems#AddError") return if '{{cloze:' in note.model()['tmpls'][0]['qfmt']: if not self.mw.col.models._availClozeOrds( note.model(), note.joinedFields(), False): if not askUser(_("You have a cloze deletion note type " "but have not made any cloze deletions. Proceed?")): return cards = self.mw.col.addNote(note) if not cards: showWarning(_("""\ The input you have provided would make an empty \ question on all cards."""), help="AddItems") return self.addHistory(note) self.mw.requireReset() return note def addCards(self): self.editor.saveNow(self._addCards) def _addCards(self): self.editor.saveAddModeVars() note = self.editor.note note = self.addNote(note) if not note: return tooltip(_("Added"), period=500) # stop anything playing clearAudioQueue() self.onReset(keep=True) self.mw.col.autosave() def keyPressEvent(self, evt): "Show answer on RET or register answer." if (evt.key() in (Qt.Key_Enter, Qt.Key_Return) and self.editor.tags.hasFocus()): evt.accept() return return QDialog.keyPressEvent(self, evt) def reject(self): self.ifCanClose(self._reject) def _reject(self): remHook('reset', self.onReset) remHook('currentModelChanged', self.onModelChange) clearAudioQueue() self.removeTempNote(self.editor.note) self.editor.cleanup() self.modelChooser.cleanup() self.deckChooser.cleanup() self.mw.maybeReset() saveGeom(self, "add") aqt.dialogs.markClosed("AddCards") QDialog.reject(self) def ifCanClose(self, onOk): def afterSave(): ok = (self.editor.fieldsAreBlank() or askUser(_("Close and lose current input?"))) if ok: onOk() self.editor.saveNow(afterSave) def closeWithCallback(self, cb): def doClose(): self._reject() cb() self.ifCanClose(doClose) anki-2.1.0+dfsg~b36/aqt/addons.py000066400000000000000000000347271323611211500165030ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import io import json import re import zipfile import markdown from send2trash import send2trash from aqt.qt import * from aqt.utils import showInfo, openFolder, isWin, openLink, \ askUser, restoreGeom, saveGeom, showWarning, tooltip from zipfile import ZipFile import aqt.forms import aqt from aqt.downloader import download from anki.lang import _ from anki.utils import intTime from anki.sync import AnkiRequestsClient class AddonManager: def __init__(self, mw): self.mw = mw self.dirty = False f = self.mw.form f.actionAdd_ons.triggered.connect(self.onAddonsDialog) sys.path.insert(0, self.addonsFolder()) def allAddons(self): l = [] for d in os.listdir(self.addonsFolder()): path = self.addonsFolder(d) if not os.path.exists(os.path.join(path, "__init__.py")): continue l.append(d) return l def managedAddons(self): return [d for d in self.allAddons() if re.match(r"^\d+$", d)] def addonsFolder(self, dir=None): root = self.mw.pm.addonFolder() if not dir: return root return os.path.join(root, dir) def loadAddons(self): for dir in self.allAddons(): meta = self.addonMeta(dir) if meta.get("disabled"): continue self.dirty = True try: __import__(dir) except: showWarning(_("""\ An add-on you installed failed to load. If problems persist, please \ go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s """) % dict(name=meta.get("name", dir), traceback=traceback.format_exc())) def onAddonsDialog(self): AddonsDialog(self) # Metadata ###################################################################### def _addonMetaPath(self, dir): return os.path.join(self.addonsFolder(dir), "meta.json") def addonMeta(self, dir): path = self._addonMetaPath(dir) try: with open(path, encoding="utf8") as f: return json.load(f) except: return dict() def writeAddonMeta(self, dir, meta): path = self._addonMetaPath(dir) with open(path, "w", encoding="utf8") as f: json.dump(meta, f) def toggleEnabled(self, dir): meta = self.addonMeta(dir) meta['disabled'] = not meta.get("disabled") self.writeAddonMeta(dir, meta) def addonName(self, dir): return self.addonMeta(dir).get("name", dir) # Installing and deleting add-ons ###################################################################### def install(self, sid, data, fname): try: z = ZipFile(io.BytesIO(data)) except zipfile.BadZipfile: showWarning(_("The download was corrupt. Please try again.")) return name = os.path.splitext(fname)[0] # previously installed? meta = self.addonMeta(sid) base = self.addonsFolder(sid) if os.path.exists(base): self.backupUserFiles(sid) self.deleteAddon(sid) os.mkdir(base) self.restoreUserFiles(sid) # extract for n in z.namelist(): if n.endswith("/"): # folder; ignore continue path = os.path.join(base, n) # skip existing user files if os.path.exists(path) and n.startswith("user_files/"): continue z.extract(n, base) # update metadata meta['name'] = name meta['mod'] = intTime() self.writeAddonMeta(sid, meta) def deleteAddon(self, dir): send2trash(self.addonsFolder(dir)) # Downloading ###################################################################### def downloadIds(self, ids): log = [] errs = [] self.mw.progress.start(immediate=True) for n in ids: ret = download(self.mw, n) if ret[0] == "error": errs.append(_("Error downloading %(id)s: %(error)s") % dict(id=n, error=ret[1])) continue data, fname = ret fname = fname.replace("_", " ") self.install(str(n), data, fname) name = os.path.splitext(fname)[0] log.append(_("Downloaded %(fname)s" % dict(fname=name))) self.mw.progress.finish() return log, errs # Updating ###################################################################### def checkForUpdates(self): client = AnkiRequestsClient() # get mod times self.mw.progress.start(immediate=True) try: # ..of enabled items downloaded from ankiweb addons = [] for dir in self.managedAddons(): meta = self.addonMeta(dir) if not meta.get("disabled"): addons.append(dir) mods = [] while addons: chunk = addons[:25] del addons[:25] mods.extend(self._getModTimes(client, chunk)) return self._updatedIds(mods) finally: self.mw.progress.finish() def _getModTimes(self, client, chunk): resp = client.get( aqt.appShared + "updates/" + ",".join(chunk)) if resp.status_code == 200: return resp.json() else: raise Exception("Unexpected response code from AnkiWeb: {}".format(resp.status_code)) def _updatedIds(self, mods): updated = [] for dir, ts in mods: sid = str(dir) if self.addonMeta(sid).get("mod") < ts: updated.append(sid) return updated # Add-on Config ###################################################################### _configButtonActions = {} def addonConfigDefaults(self, dir): path = os.path.join(self.addonsFolder(dir), "config.json") try: with open(path, encoding="utf8") as f: return json.load(f) except: return None def addonConfigHelp(self, dir): path = os.path.join(self.addonsFolder(dir), "config.md") if os.path.exists(path): with open(path) as f: return markdown.markdown(f.read()) else: return "" def addonFromModule(self, module): return module.split(".")[0] def configAction(self, addon): return self._configButtonActions.get(addon) # Add-on Config API ###################################################################### def getConfig(self, module): addon = self.addonFromModule(module) # get default config config = self.addonConfigDefaults(addon) if config is None: return None # merge in user's keys meta = self.addonMeta(addon) userConf = meta.get("config", {}) config.update(userConf) return config def setConfigAction(self, module, fn): addon = self.addonFromModule(module) self._configButtonActions[addon] = fn def writeConfig(self, module, conf): addon = self.addonFromModule(module) meta = self.addonMeta(addon) meta['config'] = conf self.writeAddonMeta(addon, meta) # user_files ###################################################################### def _userFilesPath(self, sid): return os.path.join(self.addonsFolder(sid), "user_files") def _userFilesBackupPath(self): return os.path.join(self.addonsFolder(), "files_backup") def backupUserFiles(self, sid): p = self._userFilesPath(sid) if os.path.exists(p): os.rename(p, self._userFilesBackupPath()) def restoreUserFiles(self, sid): p = self._userFilesPath(sid) bp = self._userFilesBackupPath() # did we back up userFiles? if not os.path.exists(bp): return os.rename(bp, p) # Add-ons Dialog ###################################################################### class AddonsDialog(QDialog): def __init__(self, addonsManager): self.mgr = addonsManager self.mw = addonsManager.mw super().__init__(self.mw) f = self.form = aqt.forms.addons.Ui_Dialog() f.setupUi(self) f.getAddons.clicked.connect(self.onGetAddons) f.checkForUpdates.clicked.connect(self.onCheckForUpdates) f.toggleEnabled.clicked.connect(self.onToggleEnabled) f.viewPage.clicked.connect(self.onViewPage) f.viewFiles.clicked.connect(self.onViewFiles) f.delete_2.clicked.connect(self.onDelete) f.config.clicked.connect(self.onConfig) self.redrawAddons() self.show() def redrawAddons(self): self.addons = [(self.annotatedName(d), d) for d in self.mgr.allAddons()] self.addons.sort() self.form.addonList.clear() self.form.addonList.addItems([r[0] for r in self.addons]) if self.addons: self.form.addonList.setCurrentRow(0) def annotatedName(self, dir): meta = self.mgr.addonMeta(dir) buf = self.mgr.addonName(dir) if meta.get('disabled'): buf += _(" (disabled)") return buf def selectedAddons(self): idxs = [x.row() for x in self.form.addonList.selectedIndexes()] return [self.addons[idx][1] for idx in idxs] def onlyOneSelected(self): dirs = self.selectedAddons() if len(dirs) != 1: showInfo("Please select a single add-on first.") return return dirs[0] def onToggleEnabled(self): for dir in self.selectedAddons(): self.mgr.toggleEnabled(dir) self.redrawAddons() def onViewPage(self): addon = self.onlyOneSelected() if not addon: return if re.match(r"^\d+$", addon): openLink(aqt.appShared + "info/{}".format(addon)) else: showWarning(_("Add-on was not downloaded from AnkiWeb.")) def onViewFiles(self): # if nothing selected, open top level folder selected = self.selectedAddons() if not selected: openFolder(self.mgr.addonsFolder()) return # otherwise require a single selection addon = self.onlyOneSelected() if not addon: return path = self.mgr.addonsFolder(addon) openFolder(path) def onDelete(self): selected = self.selectedAddons() if not selected: return if not askUser(ngettext("Delete the %(num)d selected add-on?", "Delete the %(num)d selected add-ons?", len(selected)) % dict(num=len(selected))): return for dir in selected: self.mgr.deleteAddon(dir) self.redrawAddons() def onGetAddons(self): GetAddons(self) def onCheckForUpdates(self): updated = self.mgr.checkForUpdates() if not updated: tooltip(_("No updates available.")) else: names = [self.mgr.addonName(d) for d in updated] if askUser(_("Update the following add-ons?") + "\n" + "\n".join(names)): log, errs = self.mgr.downloadIds(updated) if log: tooltip("\n".join(log), parent=self) if errs: showWarning("\n".join(errs), parent=self) self.redrawAddons() def onConfig(self): addon = self.onlyOneSelected() if not addon: return # does add-on manage its own config? act = self.mgr.configAction(addon) if act: act() return conf = self.mgr.getConfig(addon) if conf is None: showInfo(_("Add-on has no configuration.")) return ConfigEditor(self, addon, conf) # Fetching Add-ons ###################################################################### class GetAddons(QDialog): def __init__(self, dlg): QDialog.__init__(self, dlg) self.addonsDlg = dlg self.mgr = dlg.mgr self.mw = self.mgr.mw self.form = aqt.forms.getaddons.Ui_Dialog() self.form.setupUi(self) b = self.form.buttonBox.addButton( _("Browse"), QDialogButtonBox.ActionRole) b.clicked.connect(self.onBrowse) restoreGeom(self, "getaddons", adjustSize=True) self.exec_() saveGeom(self, "getaddons") def onBrowse(self): openLink(aqt.appShared + "addons/2.1") def accept(self): # get codes try: ids = [int(n) for n in self.form.code.text().split()] except ValueError: showWarning(_("Invalid code.")) return log, errs = self.mgr.downloadIds(ids) if log: tooltip("\n".join(log), parent=self.addonsDlg) if errs: showWarning("\n".join(errs)) self.addonsDlg.redrawAddons() QDialog.accept(self) # Editing config ###################################################################### class ConfigEditor(QDialog): def __init__(self, dlg, addon, conf): super().__init__(dlg) self.addon = addon self.conf = conf self.mgr = dlg.mgr self.form = aqt.forms.addonconf.Ui_Dialog() self.form.setupUi(self) restore = self.form.buttonBox.button(QDialogButtonBox.RestoreDefaults) restore.clicked.connect(self.onRestoreDefaults) self.updateHelp() self.updateText() self.show() def onRestoreDefaults(self): self.conf = self.mgr.addonConfigDefaults(self.addon) self.updateText() def updateHelp(self): txt = self.mgr.addonConfigHelp(self.addon) if txt: self.form.label.setText(txt) else: self.form.scrollArea.setVisible(False) def updateText(self): self.form.editor.setPlainText( json.dumps(self.conf,sort_keys=True,indent=4, separators=(',', ': '))) def accept(self): txt = self.form.editor.toPlainText() try: self.conf = json.loads(txt) except Exception as e: showInfo(_("Invalid configuration: ") + repr(e)) return self.mgr.writeConfig(self.addon, self.conf) super().accept() anki-2.1.0+dfsg~b36/aqt/browser.py000066400000000000000000002141441323611211500167070ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import sre_constants import html import time import re from operator import itemgetter from anki.lang import ngettext import json from aqt.qt import * import anki import aqt.forms from anki.utils import fmtTimeSpan, ids2str, stripHTMLMedia, htmlToTextLine, \ isWin, intTime, \ isMac, isLin, bodyClass from aqt.utils import saveGeom, restoreGeom, saveSplitter, restoreSplitter, \ saveHeader, restoreHeader, saveState, restoreState, applyStyles, getTag, \ showInfo, askUser, tooltip, openHelp, showWarning, shortcut, mungeQA, \ getOnlyText, MenuList, SubMenu from anki.hooks import runHook, addHook, remHook, runFilter from aqt.webview import AnkiWebView from anki.consts import * from anki.sound import playFromText, clearAudioQueue, allSounds, play # Data model ########################################################################## class DataModel(QAbstractTableModel): def __init__(self, browser): QAbstractTableModel.__init__(self) self.browser = browser self.col = browser.col self.sortKey = None self.activeCols = self.col.conf.get( "activeCols", ["noteFld", "template", "cardDue", "deck"]) self.cards = [] self.cardObjs = {} def getCard(self, index): id = self.cards[index.row()] if not id in self.cardObjs: self.cardObjs[id] = self.col.getCard(id) return self.cardObjs[id] def refreshNote(self, note): refresh = False for c in note.cards(): if c.id in self.cardObjs: del self.cardObjs[c.id] refresh = True if refresh: self.layoutChanged.emit() # Model interface ###################################################################### def rowCount(self, parent): if parent and parent.isValid(): return 0 return len(self.cards) def columnCount(self, parent): if parent and parent.isValid(): return 0 return len(self.activeCols) def data(self, index, role): if not index.isValid(): return if role == Qt.FontRole: if self.activeCols[index.column()] not in ( "question", "answer", "noteFld"): return row = index.row() c = self.getCard(index) t = c.template() if not t.get("bfont"): return f = QFont() f.setFamily(t.get("bfont", "arial")) f.setPixelSize(t.get("bsize", 12)) return f elif role == Qt.TextAlignmentRole: align = Qt.AlignVCenter if self.activeCols[index.column()] not in ("question", "answer", "template", "deck", "noteFld", "note"): align |= Qt.AlignHCenter return align elif role == Qt.DisplayRole or role == Qt.EditRole: return self.columnData(index) else: return def headerData(self, section, orientation, role): if orientation == Qt.Vertical: return elif role == Qt.DisplayRole and section < len(self.activeCols): type = self.columnType(section) txt = None for stype, name in self.browser.columns: if type == stype: txt = name break # handle case where extension has set an invalid column type if not txt: txt = self.browser.columns[0][1] return txt else: return def flags(self, index): return Qt.ItemFlag(Qt.ItemIsEnabled | Qt.ItemIsSelectable) # Filtering ###################################################################### def search(self, txt): self.beginReset() t = time.time() # the db progress handler may cause a refresh, so we need to zero out # old data first self.cards = [] invalid = False try: self.cards = self.col.findCards(txt, order=True) except Exception as e: if str(e) == "invalidSearch": self.cards = [] invalid = True else: raise #print "fetch cards in %dms" % ((time.time() - t)*1000) self.endReset() if invalid: showWarning(_("Invalid search - please check for typing mistakes.")) def reset(self): self.beginReset() self.endReset() # caller must have called editor.saveNow() before calling this or .reset() def beginReset(self): self.browser.editor.setNote(None, hide=False) self.browser.mw.progress.start() self.saveSelection() self.beginResetModel() self.cardObjs = {} def endReset(self): t = time.time() self.endResetModel() self.restoreSelection() self.browser.mw.progress.finish() def reverse(self): self.browser.editor.saveNow(self._reverse) def _reverse(self): self.beginReset() self.cards.reverse() self.endReset() def saveSelection(self): cards = self.browser.selectedCards() self.selectedCards = dict([(id, True) for id in cards]) if getattr(self.browser, 'card', None): self.focusedCard = self.browser.card.id else: self.focusedCard = None def restoreSelection(self): if not self.cards: return sm = self.browser.form.tableView.selectionModel() sm.clear() # restore selection items = QItemSelection() count = 0 firstIdx = None focusedIdx = None for row, id in enumerate(self.cards): # if the id matches the focused card, note the index if self.focusedCard == id: focusedIdx = self.index(row, 0) items.select(focusedIdx, focusedIdx) self.focusedCard = None # if the card was previously selected, select again if id in self.selectedCards: count += 1 idx = self.index(row, 0) items.select(idx, idx) # note down the first card of the selection, in case we don't # have a focused card if not firstIdx: firstIdx = idx # focus previously focused or first in selection idx = focusedIdx or firstIdx tv = self.browser.form.tableView if idx: tv.selectRow(idx.row()) # we save and then restore the horizontal scroll position because # scrollTo() also scrolls horizontally which is confusing h = tv.horizontalScrollBar().value() tv.scrollTo(idx, tv.PositionAtCenter) tv.horizontalScrollBar().setValue(h) if count < 500: # discard large selections; they're too slow sm.select(items, QItemSelectionModel.SelectCurrent | QItemSelectionModel.Rows) else: tv.selectRow(0) # Column data ###################################################################### def columnType(self, column): return self.activeCols[column] def columnData(self, index): row = index.row() col = index.column() type = self.columnType(col) c = self.getCard(index) if type == "question": return self.question(c) elif type == "answer": return self.answer(c) elif type == "noteFld": f = c.note() return htmlToTextLine(f.fields[self.col.models.sortIdx(f.model())]) elif type == "template": t = c.template()['name'] if c.model()['type'] == MODEL_CLOZE: t += " %d" % (c.ord+1) return t elif type == "cardDue": # catch invalid dates try: t = self.nextDue(c, index) except: t = "" if c.queue < 0: t = "(" + t + ")" return t elif type == "noteCrt": return time.strftime("%Y-%m-%d", time.localtime(c.note().id/1000)) elif type == "noteMod": return time.strftime("%Y-%m-%d", time.localtime(c.note().mod)) elif type == "cardMod": return time.strftime("%Y-%m-%d", time.localtime(c.mod)) elif type == "cardReps": return str(c.reps) elif type == "cardLapses": return str(c.lapses) elif type == "noteTags": return " ".join(c.note().tags) elif type == "note": return c.model()['name'] elif type == "cardIvl": if c.type == 0: return _("(new)") elif c.type == 1: return _("(learning)") return fmtTimeSpan(c.ivl*86400) elif type == "cardEase": if c.type == 0: return _("(new)") return "%d%%" % (c.factor/10) elif type == "deck": if c.odid: # in a cram deck return "%s (%s)" % ( self.browser.mw.col.decks.name(c.did), self.browser.mw.col.decks.name(c.odid)) # normal deck return self.browser.mw.col.decks.name(c.did) def question(self, c): return htmlToTextLine(c.q(browser=True)) def answer(self, c): if c.template().get('bafmt'): # they have provided a template, use it verbatim c.q(browser=True) return htmlToTextLine(c.a()) # need to strip question from answer q = self.question(c) a = htmlToTextLine(c.a()) if a.startswith(q): return a[len(q):].strip() return a def nextDue(self, c, index): if c.odid: return _("(filtered)") elif c.queue == 1: date = c.due elif c.queue == 0 or c.type == 0: return str(c.due) elif c.queue in (2,3) or (c.type == 2 and c.queue < 0): date = time.time() + ((c.due - self.col.sched.today)*86400) else: return "" return time.strftime("%Y-%m-%d", time.localtime(date)) # Line painter ###################################################################### COLOUR_SUSPENDED = "#FFFFB2" COLOUR_MARKED = "#ccc" flagColours = { 1: "#F5B7B1", 2: "#BB8FCE", 3: "#82E0AA", 4: "#85C1E9", } class StatusDelegate(QItemDelegate): def __init__(self, browser, model): QItemDelegate.__init__(self, browser) self.browser = browser self.model = model def paint(self, painter, option, index): self.browser.mw.progress.blockUpdates = True try: c = self.model.getCard(index) except: # in the the middle of a reset; return nothing so this row is not # rendered until we have a chance to reset the model return finally: self.browser.mw.progress.blockUpdates = True col = None if c.queue == -1: col = COLOUR_SUSPENDED elif c.userFlag() > 0: col = flagColours[c.userFlag()] elif c.note().hasTag("Marked"): col = COLOUR_MARKED if col: brush = QBrush(QColor(col)) painter.save() painter.fillRect(option.rect, brush) painter.restore() return QItemDelegate.paint(self, painter, option, index) # Browser window ###################################################################### # fixme: respond to reset+edit hooks class Browser(QMainWindow): def __init__(self, mw): QMainWindow.__init__(self, None, Qt.Window) applyStyles(self) self.mw = mw self.col = self.mw.col self.lastFilter = "" self.focusTo = None self._previewWindow = None self._closeEventHasCleanedUp = False self.form = aqt.forms.browser.Ui_Dialog() self.form.setupUi(self) self.setupSidebar() restoreGeom(self, "editor", 0) restoreState(self, "editor") restoreSplitter(self.form.splitter, "editor3") self.form.splitter.setChildrenCollapsible(False) self.card = None self.setupColumns() self.setupTable() self.setupMenus() self.setupHeaders() self.setupHooks() self.setupEditor() self.updateFont() self.onUndoState(self.mw.form.actionUndo.isEnabled()) self.setupSearch() self.show() def setupMenus(self): # actions f = self.form f.previewButton.clicked.connect(self.onTogglePreview) f.previewButton.setToolTip(_("Preview Selected Card (%s)") % shortcut(_("Ctrl+Shift+P"))) f.filter.clicked.connect(self.onFilterButton) # edit f.actionUndo.triggered.connect(self.mw.onUndo) f.actionInvertSelection.triggered.connect(self.invertSelection) f.actionSelectNotes.triggered.connect(self.selectNotes) if not isMac: f.actionClose.setVisible(False) # notes f.actionAdd.triggered.connect(self.mw.onAddCard) f.actionAdd_Tags.triggered.connect(lambda: self.addTags()) f.actionRemove_Tags.triggered.connect(lambda: self.deleteTags()) f.actionClear_Unused_Tags.triggered.connect(self.clearUnusedTags) f.actionToggle_Mark.triggered.connect(lambda: self.onMark()) f.actionChangeModel.triggered.connect(self.onChangeModel) f.actionFindDuplicates.triggered.connect(self.onFindDupes) f.actionFindReplace.triggered.connect(self.onFindReplace) f.actionManage_Note_Types.triggered.connect(self.mw.onNoteTypes) f.actionDelete.triggered.connect(self.deleteNotes) # cards f.actionChange_Deck.triggered.connect(self.setDeck) f.action_Info.triggered.connect(self.showCardInfo) f.actionReposition.triggered.connect(self.reposition) f.actionReschedule.triggered.connect(self.reschedule) f.actionToggle_Suspend.triggered.connect(self.onSuspend) f.actionRed_Flag.triggered.connect(lambda: self.onSetFlag(1)) f.actionPurple_Flag.triggered.connect(lambda: self.onSetFlag(2)) f.actionGreen_Flag.triggered.connect(lambda: self.onSetFlag(3)) f.actionBlue_Flag.triggered.connect(lambda: self.onSetFlag(4)) f.actionClear_Flag.triggered.connect(lambda: self.onSetFlag(0)) # jumps f.actionPreviousCard.triggered.connect(self.onPreviousCard) f.actionNextCard.triggered.connect(self.onNextCard) f.actionFirstCard.triggered.connect(self.onFirstCard) f.actionLastCard.triggered.connect(self.onLastCard) f.actionFind.triggered.connect(self.onFind) f.actionNote.triggered.connect(self.onNote) f.actionTags.triggered.connect(self.onFilterButton) f.actionSidebar.triggered.connect(self.focusSidebar) f.actionCardList.triggered.connect(self.onCardList) # help f.actionGuide.triggered.connect(self.onHelp) # keyboard shortcut for shift+home/end self.pgUpCut = QShortcut(QKeySequence("Shift+Home"), self) self.pgUpCut.activated.connect(self.onFirstCard) self.pgDownCut = QShortcut(QKeySequence("Shift+End"), self) self.pgDownCut.activated.connect(self.onLastCard) # add-on hook runHook('browser.setupMenus', self) self.mw.maybeHideAccelerators(self) # context menu self.form.tableView.setContextMenuPolicy(Qt.CustomContextMenu) self.form.tableView.customContextMenuRequested.connect(self.onContextMenu) def onContextMenu(self, _point): m = QMenu() for act in self.form.menu_Cards.actions(): m.addAction(act) m.addSeparator() for act in self.form.menu_Notes.actions(): m.addAction(act) m.exec_(QCursor.pos()) def updateFont(self): # we can't choose different line heights efficiently, so we need # to pick a line height big enough for any card template curmax = 16 for m in self.col.models.all(): for t in m['tmpls']: bsize = t.get("bsize", 0) if bsize > curmax: curmax = bsize self.form.tableView.verticalHeader().setDefaultSectionSize( curmax + 6) def closeEvent(self, evt): if self._closeEventHasCleanedUp: evt.accept() return self.editor.saveNow(self._closeWindow) evt.ignore() def _closeWindow(self): self._cancelPreviewTimer() self.editor.cleanup() saveSplitter(self.form.splitter, "editor3") saveGeom(self, "editor") saveState(self, "editor") saveHeader(self.form.tableView.horizontalHeader(), "editor") self.col.conf['activeCols'] = self.model.activeCols self.col.setMod() self.teardownHooks() self.mw.maybeReset() aqt.dialogs.markClosed("Browser") self._closeEventHasCleanedUp = True self.mw.gcWindow(self) self.close() def closeWithCallback(self, onsuccess): def callback(): self._closeWindow() onsuccess() self.editor.saveNow(callback) def keyPressEvent(self, evt): if evt.key() == Qt.Key_Escape: self.close() else: super().keyPressEvent(evt) def setupColumns(self): self.columns = [ ('question', _("Question")), ('answer', _("Answer")), ('template', _("Card")), ('deck', _("Deck")), ('noteFld', _("Sort Field")), ('noteCrt', _("Created")), ('noteMod', _("Edited")), ('cardMod', _("Changed")), ('cardDue', _("Due")), ('cardIvl', _("Interval")), ('cardEase', _("Ease")), ('cardReps', _("Reviews")), ('cardLapses', _("Lapses")), ('noteTags', _("Tags")), ('note', _("Note")), ] self.columns.sort(key=itemgetter(1)) # Searching ###################################################################### def setupSearch(self): self.form.searchButton.clicked.connect(self.onSearchActivated) self.form.searchEdit.lineEdit().returnPressed.connect(self.onSearchActivated) self.form.searchEdit.setCompleter(None) self._searchPrompt = _("") self.form.searchEdit.addItems([self._searchPrompt] + self.mw.pm.profile['searchHistory']) self._lastSearchTxt = "is:current" self.search() # then replace text for easily showing the deck self.form.searchEdit.lineEdit().setText(self._searchPrompt) self.form.searchEdit.lineEdit().selectAll() self.form.searchEdit.setFocus() # search triggered by user def onSearchActivated(self): self.editor.saveNow(self._onSearchActivated) def _onSearchActivated(self): # convert guide text before we save history if self.form.searchEdit.lineEdit().text() == self._searchPrompt: self.form.searchEdit.lineEdit().setText("deck:current ") # update history txt = str(self.form.searchEdit.lineEdit().text()).strip() sh = self.mw.pm.profile['searchHistory'] if txt in sh: sh.remove(txt) sh.insert(0, txt) sh = sh[:30] self.form.searchEdit.clear() self.form.searchEdit.addItems(sh) self.mw.pm.profile['searchHistory'] = sh # keep track of search string so that we reuse identical search when # refreshing, rather than whatever is currently in the search field self._lastSearchTxt = txt self.search() # search triggered programmatically. caller must have saved note first. def search(self): if "is:current" in self._lastSearchTxt: # show current card if there is one c = self.mw.reviewer.card nid = c and c.nid or 0 self.model.search("nid:%d"%nid) else: self.model.search(self._lastSearchTxt) if not self.model.cards: # no row change will fire self._onRowChanged(None, None) def updateTitle(self): selected = len(self.form.tableView.selectionModel().selectedRows()) cur = len(self.model.cards) self.setWindowTitle(ngettext("Browse (%(cur)d card shown; %(sel)s)", "Browse (%(cur)d cards shown; %(sel)s)", cur) % { "cur": cur, "sel": ngettext("%d selected", "%d selected", selected) % selected }) return selected def onReset(self): self.editor.setNote(None) self.search() # Table view & editor ###################################################################### def setupTable(self): self.model = DataModel(self) self.form.tableView.setSortingEnabled(True) self.form.tableView.setModel(self.model) self.form.tableView.selectionModel() self.form.tableView.setItemDelegate(StatusDelegate(self, self.model)) self.form.tableView.selectionModel().selectionChanged.connect(self.onRowChanged) def setupEditor(self): self.editor = aqt.editor.Editor( self.mw, self.form.fieldsArea, self) def onRowChanged(self, current, previous): "Update current note and hide/show editor." self.editor.saveNow(lambda: self._onRowChanged(current, previous)) def _onRowChanged(self, current, previous): update = self.updateTitle() show = self.model.cards and update == 1 self.form.splitter.widget(1).setVisible(not not show) idx = self.form.tableView.selectionModel().currentIndex() if idx.isValid(): self.card = self.model.getCard(idx) if not show: self.editor.setNote(None) self.singleCard = False else: self.editor.setNote(self.card.note(reload=True), focusTo=self.focusTo) self.focusTo = None self.editor.card = self.card self.singleCard = True self._renderPreview(True) def refreshCurrentCard(self, note): self.model.refreshNote(note) self._renderPreview(False) def refreshCurrentCardFilter(self, flag, note, fidx): self.refreshCurrentCard(note) return flag def currentRow(self): idx = self.form.tableView.selectionModel().currentIndex() return idx.row() # Headers & sorting ###################################################################### def setupHeaders(self): vh = self.form.tableView.verticalHeader() hh = self.form.tableView.horizontalHeader() if not isWin: vh.hide() hh.show() restoreHeader(hh, "editor") hh.setHighlightSections(False) hh.setMinimumSectionSize(50) hh.setSectionsMovable(True) self.setColumnSizes() hh.setContextMenuPolicy(Qt.CustomContextMenu) hh.customContextMenuRequested.connect(self.onHeaderContext) self.setSortIndicator() hh.sortIndicatorChanged.connect(self.onSortChanged) hh.sectionMoved.connect(self.onColumnMoved) def onSortChanged(self, idx, ord): self.editor.saveNow(lambda: self._onSortChanged(idx, ord)) def _onSortChanged(self, idx, ord): type = self.model.activeCols[idx] noSort = ("question", "answer", "template", "deck", "note", "noteTags") if type in noSort: if type == "template": showInfo(_("""\ This column can't be sorted on, but you can search for individual card types, \ such as 'card:1'.""")) elif type == "deck": showInfo(_("""\ This column can't be sorted on, but you can search for specific decks \ by clicking on one on the left.""")) else: showInfo(_("Sorting on this column is not supported. Please " "choose another.")) type = self.col.conf['sortType'] if self.col.conf['sortType'] != type: self.col.conf['sortType'] = type # default to descending for non-text fields if type == "noteFld": ord = not ord self.col.conf['sortBackwards'] = ord self.search() else: if self.col.conf['sortBackwards'] != ord: self.col.conf['sortBackwards'] = ord self.model.reverse() self.setSortIndicator() def setSortIndicator(self): hh = self.form.tableView.horizontalHeader() type = self.col.conf['sortType'] if type not in self.model.activeCols: hh.setSortIndicatorShown(False) return idx = self.model.activeCols.index(type) if self.col.conf['sortBackwards']: ord = Qt.DescendingOrder else: ord = Qt.AscendingOrder hh.blockSignals(True) hh.setSortIndicator(idx, ord) hh.blockSignals(False) hh.setSortIndicatorShown(True) def onHeaderContext(self, pos): gpos = self.form.tableView.mapToGlobal(pos) m = QMenu() for type, name in self.columns: a = m.addAction(name) a.setCheckable(True) a.setChecked(type in self.model.activeCols) a.toggled.connect(lambda b, t=type: self.toggleField(t)) m.exec_(gpos) def toggleField(self, type): self.editor.saveNow(lambda: self._toggleField(type)) def _toggleField(self, type): self.model.beginReset() if type in self.model.activeCols: if len(self.model.activeCols) < 2: return showInfo(_("You must have at least one column.")) self.model.activeCols.remove(type) adding=False else: self.model.activeCols.append(type) adding=True # sorted field may have been hidden self.setSortIndicator() self.setColumnSizes() self.model.endReset() # if we added a column, scroll to it if adding: row = self.currentRow() idx = self.model.index(row, len(self.model.activeCols) - 1) self.form.tableView.scrollTo(idx) def setColumnSizes(self): hh = self.form.tableView.horizontalHeader() hh.setSectionResizeMode(QHeaderView.Interactive) hh.setSectionResizeMode(hh.logicalIndex(len(self.model.activeCols)-1), QHeaderView.Stretch) # this must be set post-resize or it doesn't work hh.setCascadingSectionResizes(False) def onColumnMoved(self, a, b, c): self.setColumnSizes() # Sidebar ###################################################################### class CallbackItem(QTreeWidgetItem): def __init__(self, root, name, onclick, oncollapse=None, expanded=False): QTreeWidgetItem.__init__(self, root, [name]) self.setExpanded(expanded) self.onclick = onclick self.oncollapse = oncollapse class SidebarTreeWidget(QTreeWidget): def __init__(self): QTreeWidget.__init__(self) self.itemClicked.connect(self.onTreeClick) self.itemExpanded.connect(lambda item: self.onTreeCollapse(item)) self.itemCollapsed.connect(lambda item: self.onTreeCollapse(item)) def keyPressEvent(self, evt): if evt.key() in (Qt.Key_Return, Qt.Key_Enter): item = self.currentItem() self.onTreeClick(item, 0) else: super().keyPressEvent(evt) def onTreeClick(self, item, col): if getattr(item, 'onclick', None): item.onclick() def onTreeCollapse(self, item): if getattr(item, 'oncollapse', None): item.oncollapse() def setupSidebar(self): dw = self.sidebarDockWidget = QDockWidget(_("Sidebar"), self) dw.setFeatures(QDockWidget.DockWidgetClosable) dw.setObjectName("Sidebar") dw.setAllowedAreas(Qt.LeftDockWidgetArea) self.sidebarTree = self.SidebarTreeWidget() self.sidebarTree.mw = self.mw self.sidebarTree.header().setVisible(False) dw.setWidget(self.sidebarTree) p = QPalette() p.setColor(QPalette.Base, p.window().color()) self.sidebarTree.setPalette(p) self.sidebarDockWidget.setVisible(False) self.sidebarDockWidget.setFloating(False) self.sidebarDockWidget.visibilityChanged.connect(self.onSidebarVisChanged) self.sidebarDockWidget.setTitleBarWidget(QWidget()) self.addDockWidget(Qt.LeftDockWidgetArea, dw) def onSidebarVisChanged(self, visible): if visible: self.buildTree() else: pass def focusSidebar(self): self.sidebarDockWidget.setVisible(True) self.sidebarTree.setFocus() def maybeRefreshSidebar(self): if self.sidebarDockWidget.isVisible(): self.buildTree() def buildTree(self): self.sidebarTree.clear() root = self.sidebarTree self._stdTree(root) self._favTree(root) self._decksTree(root) self._modelTree(root) self._userTagTree(root) self.sidebarTree.setIndentation(15) def _stdTree(self, root): for name, filt, icon in [[_("Whole Collection"), "", "collection"], [_("Current Deck"), "deck:current", "deck"]]: item = self.CallbackItem( root, name, self._filterFunc(filt)) item.setIcon(0, QIcon(":/icons/{}.svg".format(icon))) def _favTree(self, root): saved = self.col.conf.get('savedFilters', {}) for name, filt in sorted(saved.items()): item = self.CallbackItem(root, name, lambda s=filt: self.setFilter(s)) item.setIcon(0, QIcon(":/icons/heart.svg")) def _userTagTree(self, root): for t in sorted(self.col.tags.all(), key=lambda t: t.lower()): item = self.CallbackItem( root, t, lambda t=t: self.setFilter("tag", t)) item.setIcon(0, QIcon(":/icons/tag.svg")) def _decksTree(self, root): grps = self.col.sched.deckDueTree() def fillGroups(root, grps, head=""): for g in grps: item = self.CallbackItem( root, g[0], lambda g=g: self.setFilter("deck", head+g[0]), lambda g=g: self.mw.col.decks.collapseBrowser(g[1]), not self.mw.col.decks.get(g[1]).get('browserCollapsed', False)) item.setIcon(0, QIcon(":/icons/deck.svg")) newhead = head + g[0]+"::" fillGroups(item, g[5], newhead) fillGroups(root, grps) def _modelTree(self, root): for m in sorted(self.col.models.all(), key=itemgetter("name")): mitem = self.CallbackItem( root, m['name'], lambda m=m: self.setFilter("note", m['name'])) mitem.setIcon(0, QIcon(":/icons/notetype.svg")) # Filter tree ###################################################################### def onFilterButton(self): ml = MenuList() ml.addChild(self._commonFilters()) ml.addSeparator() ml.addChild(self._todayFilters()) ml.addChild(self._cardStateFilters()) ml.addChild(self._deckFilters()) ml.addChild(self._noteTypeFilters()) ml.addChild(self._tagFilters()) ml.addSeparator() ml.addChild(self.sidebarDockWidget.toggleViewAction()) ml.addSeparator() ml.addChild(self._savedSearches()) ml.popupOver(self.form.filter) def setFilter(self, *args): if len(args) == 1: txt = args[0] else: txt = "" items = [] for c, a in enumerate(args): if c % 2 == 0: txt += a + ":" else: txt += a for chr in "  ()": if chr in txt: txt = '"%s"' % txt break items.append(txt) txt = "" txt = " ".join(items) if self.mw.app.keyboardModifiers() & Qt.AltModifier: txt = "-"+txt if self.mw.app.keyboardModifiers() & Qt.ControlModifier: cur = str(self.form.searchEdit.lineEdit().text()) if cur and cur != self._searchPrompt: txt = cur + " " + txt elif self.mw.app.keyboardModifiers() & Qt.ShiftModifier: cur = str(self.form.searchEdit.lineEdit().text()) if cur: txt = cur + " or " + txt self.form.searchEdit.lineEdit().setText(txt) self.onSearchActivated() def _simpleFilters(self, items): ml = MenuList() for row in items: if row is None: ml.addSeparator() else: label, filter = row ml.addItem(label, self._filterFunc(filter)) return ml def _filterFunc(self, *args): return lambda *, f=args: self.setFilter(*f) def _commonFilters(self): return self._simpleFilters(( (_("Whole Collection"), ""), (_("Current Deck"), "deck:current"))) def _todayFilters(self): subm = SubMenu(_("Today")) subm.addChild(self._simpleFilters(( (_("Added Today"), "added:1"), (_("Studied Today"), "rated:1"), (_("Again Today"), "rated:1:1")))) return subm def _cardStateFilters(self): subm = SubMenu(_("Card State")) subm.addChild(self._simpleFilters(( (_("New"), "is:new"), (_("Learning"), "is:learn"), (_("Review"), "is:review"), (_("Due"), "is:due"), None, (_("Suspended"), "is:suspended"), (_("Buried"), "is:buried"), None, (_("Red Flag"), "flag:1"), (_("Purple Flag"), "flag:2"), (_("Green Flag"), "flag:3"), (_("Blue Flag"), "flag:4"), (_("No Flag"), "flag:0"), (_("Any Flag"), "-flag:0"), ))) return subm def _tagFilters(self): m = SubMenu(_("Tags")) m.addItem(_("Clear Unused"), self.clearUnusedTags) m.addSeparator() tagList = MenuList() for t in sorted(self.col.tags.all(), key=lambda s: s.lower()): tagList.addItem(t, self._filterFunc("tag", t)) m.addChild(tagList.chunked()) return m def _deckFilters(self): def addDecks(parent, decks): for head, did, rev, lrn, new, children in decks: name = self.mw.col.decks.get(did)['name'] shortname = name.split("::")[-1] if children: subm = parent.addMenu(shortname) subm.addItem(_("Filter"), self._filterFunc("deck", name)) subm.addSeparator() addDecks(subm, children) else: parent.addItem(shortname, self._filterFunc("deck", name)) # fixme: could rewrite to avoid calculating due # in the future alldecks = self.col.sched.deckDueTree() ml = MenuList() addDecks(ml, alldecks) root = SubMenu(_("Decks")) root.addChild(ml.chunked()) return root def _noteTypeFilters(self): m = SubMenu(_("Note Types")) m.addItem(_("Manage..."), self.mw.onNoteTypes) m.addSeparator() noteTypes = MenuList() for nt in sorted(self.col.models.all(), key=lambda nt: nt['name'].lower()): # no sub menu if it's a single template if len(nt['tmpls']) == 1: noteTypes.addItem(nt['name'], self._filterFunc("note", nt['name'])) else: subm = noteTypes.addMenu(nt['name']) subm.addItem(_("All Card Types"), self._filterFunc("note", nt['name'])) subm.addSeparator() # add templates for c, tmpl in enumerate(nt['tmpls']): name = _("%(n)d: %(name)s") % dict(n=c+1, name=tmpl['name']) subm.addItem(name, self._filterFunc( "note", nt['name'], "card", str(c+1))) m.addChild(noteTypes.chunked()) return m # Favourites ###################################################################### def _savedSearches(self): ml = MenuList() # make sure exists if "savedFilters" not in self.col.conf: self.col.conf['savedFilters'] = {} ml.addSeparator() if self._currentFilterIsSaved(): ml.addItem(_("Remove Current Filter..."), self._onRemoveFilter) else: ml.addItem(_("Save Current Filter..."), self._onSaveFilter) saved = self.col.conf['savedFilters'] if not saved: return ml ml.addSeparator() for name, filt in sorted(saved.items()): ml.addItem(name, self._filterFunc(filt)) return ml def _onSaveFilter(self): name = getOnlyText(_("Please give your filter a name:")) if not name: return filt = self.form.searchEdit.lineEdit().text() self.col.conf['savedFilters'][name] = filt self.col.setMod() self.maybeRefreshSidebar() def _onRemoveFilter(self): name = self._currentFilterIsSaved() if not askUser(_("Remove %s from your saved searches?") % name): return del self.col.conf['savedFilters'][name] self.col.setMod() self.maybeRefreshSidebar() # returns name if found def _currentFilterIsSaved(self): filt = self.form.searchEdit.lineEdit().text() for k,v in self.col.conf['savedFilters'].items(): if filt == v: return k return None # Info ###################################################################### def showCardInfo(self): if not self.card: return info, cs = self._cardInfoData() reps = self._revlogData(cs) d = QDialog(self) l = QVBoxLayout() l.setContentsMargins(0,0,0,0) w = AnkiWebView() l.addWidget(w) w.stdHtml(info + "

" + reps) bb = QDialogButtonBox(QDialogButtonBox.Close) l.addWidget(bb) bb.rejected.connect(d.reject) d.setLayout(l) d.setWindowModality(Qt.WindowModal) d.resize(500, 400) restoreGeom(d, "revlog") d.show() saveGeom(d, "revlog") def _cardInfoData(self): from anki.stats import CardStats cs = CardStats(self.col, self.card) rep = cs.report() m = self.card.model() rep = """

%s
""" % rep return rep, cs def _revlogData(self, cs): entries = self.mw.col.db.all( "select id/1000.0, ease, ivl, factor, time/1000.0, type " "from revlog where cid = ?", self.card.id) if not entries: return "" s = "" % _("Date") s += ("" * 5) % ( _("Type"), _("Rating"), _("Interval"), _("Ease"), _("Time")) cnt = 0 for (date, ease, ivl, factor, taken, type) in reversed(entries): cnt += 1 s += "" % time.strftime(_("%Y-%m-%d @ %H:%M"), time.localtime(date)) tstr = [_("Learn"), _("Review"), _("Relearn"), _("Filtered"), _("Resched")][type] import anki.stats as st fmt = "%s" if type == 0: tstr = fmt % (st.colLearn, tstr) elif type == 1: tstr = fmt % (st.colMature, tstr) elif type == 2: tstr = fmt % (st.colRelearn, tstr) elif type == 3: tstr = fmt % (st.colCram, tstr) else: tstr = fmt % ("#000", tstr) if ease == 1: ease = fmt % (st.colRelearn, ease) if ivl == 0: ivl = _("0d") elif ivl > 0: ivl = fmtTimeSpan(ivl*86400, short=True) else: ivl = cs.time(-ivl) s += ("" * 5) % ( tstr, ease, ivl, "%d%%" % (factor/10) if factor else "", cs.time(taken)) + "" s += "
%s%s
%s%s
" if cnt < self.card.reps: s += _("""\ Note: Some of the history is missing. For more information, \ please see the browser documentation.""") return s # Menu helpers ###################################################################### def selectedCards(self): return [self.model.cards[idx.row()] for idx in self.form.tableView.selectionModel().selectedRows()] def selectedNotes(self): return self.col.db.list(""" select distinct nid from cards where id in %s""" % ids2str( [self.model.cards[idx.row()] for idx in self.form.tableView.selectionModel().selectedRows()])) def selectedNotesAsCards(self): return self.col.db.list( "select id from cards where nid in (%s)" % ",".join([str(s) for s in self.selectedNotes()])) def oneModelNotes(self): sf = self.selectedNotes() if not sf: return mods = self.col.db.scalar(""" select count(distinct mid) from notes where id in %s""" % ids2str(sf)) if mods > 1: showInfo(_("Please select cards from only one note type.")) return return sf def onHelp(self): openHelp("browser") # Misc menu options ###################################################################### def onChangeModel(self): self.editor.saveNow(self._onChangeModel) def _onChangeModel(self): nids = self.oneModelNotes() if nids: ChangeModel(self, nids) # Preview ###################################################################### _previewTimer = None _lastPreviewRender = 0 def onTogglePreview(self): if self._previewWindow: self._closePreview() else: self._openPreview() def _openPreview(self): self._previewState = "question" self._previewWindow = QDialog(None, Qt.Window) self._previewWindow.setWindowTitle(_("Preview")) self._previewWindow.finished.connect(self._onPreviewFinished) self._previewWindow.silentlyClose = True vbox = QVBoxLayout() vbox.setContentsMargins(0,0,0,0) self._previewWeb = AnkiWebView() vbox.addWidget(self._previewWeb) bbox = QDialogButtonBox() self._previewReplay = bbox.addButton(_("Replay Audio"), QDialogButtonBox.ActionRole) self._previewReplay.setAutoDefault(False) self._previewReplay.setShortcut(QKeySequence("R")) self._previewReplay.setToolTip(_("Shortcut key: %s" % "R")) self._previewPrev = bbox.addButton("<", QDialogButtonBox.ActionRole) self._previewPrev.setAutoDefault(False) self._previewPrev.setShortcut(QKeySequence("Left")) self._previewPrev.setToolTip(_("Shortcut key: Left arrow")) self._previewNext = bbox.addButton(">", QDialogButtonBox.ActionRole) self._previewNext.setAutoDefault(True) self._previewNext.setShortcut(QKeySequence("Right")) self._previewNext.setToolTip(_("Shortcut key: Right arrow or Enter")) self._previewPrev.clicked.connect(self._onPreviewPrev) self._previewNext.clicked.connect(self._onPreviewNext) self._previewReplay.clicked.connect(self._onReplayAudio) self.previewShowBothSides = QCheckBox(_("Show Both Sides")) self.previewShowBothSides.setShortcut(QKeySequence("B")) self.previewShowBothSides.setToolTip(_("Shortcut key: %s" % "B")) bbox.addButton(self.previewShowBothSides, QDialogButtonBox.ActionRole) self.previewShowBothSides.toggled.connect(self._onPreviewShowBothSides) self._previewBothSides = self.col.conf.get("previewBothSides", False) self.previewShowBothSides.setChecked(self._previewBothSides) self._setupPreviewWebview() vbox.addWidget(bbox) self._previewWindow.setLayout(vbox) restoreGeom(self._previewWindow, "preview") self._previewWindow.show() self._renderPreview(True) def _onPreviewFinished(self, ok): saveGeom(self._previewWindow, "preview") self.mw.progress.timer(100, self._onClosePreview, False) self.form.previewButton.setChecked(False) def _onPreviewPrev(self): if self._previewState == "answer" and not self._previewBothSides: self._previewState = "question" self._renderPreview() else: self.editor.saveNow(lambda: self._moveCur(QAbstractItemView.MoveUp)) def _onPreviewNext(self): if self._previewState == "question": self._previewState = "answer" self._renderPreview() else: self.editor.saveNow(lambda: self._moveCur(QAbstractItemView.MoveDown)) def _onReplayAudio(self): self.mw.reviewer.replayAudio(self) def _updatePreviewButtons(self): if not self._previewWindow: return current = self.currentRow() canBack = (current > 0 or (current == 0 and self._previewState == "answer" and not self._previewBothSides)) self._previewPrev.setEnabled(not not (self.singleCard and canBack)) canForward = self.currentRow() < self.model.rowCount(None) - 1 or \ self._previewState == "question" self._previewNext.setEnabled(not not (self.singleCard and canForward)) def _closePreview(self): if self._previewWindow: self._previewWindow.close() self._onClosePreview() def _onClosePreview(self): self._previewWindow = self._previewPrev = self._previewNext = None def _setupPreviewWebview(self): jsinc = ["jquery.js","browsersel.js", "mathjax/conf.js", "mathjax/MathJax.js", "reviewer.js"] self._previewWeb.stdHtml(self.mw.reviewer.revHtml(), css=["reviewer.css"], js=jsinc) def _renderPreview(self, cardChanged=False): self._cancelPreviewTimer() # avoid rendering in quick succession elapMS = int((time.time() - self._lastPreviewRender)*1000) if elapMS < 500: self._previewTimer = self.mw.progress.timer( 500-elapMS, lambda: self._renderScheduledPreview(cardChanged), False) else: self._renderScheduledPreview(cardChanged) def _cancelPreviewTimer(self): if self._previewTimer: self._previewTimer.stop() self._previewTimer = None def _renderScheduledPreview(self, cardChanged=False): self._cancelPreviewTimer() self._lastPreviewRender = time.time() if not self._previewWindow: return c = self.card func = "_showQuestion" if not c or not self.singleCard: txt = _("(please select 1 card)") bodyclass = "" else: # need to force reload even if answer txt = c.q(reload=True) questionAudio = [] if self._previewBothSides: self._previewState = "answer" questionAudio = allSounds(txt) elif cardChanged: self._previewState = "question" if self._previewState == "answer": func = "_showAnswer" txt = c.a() txt = re.sub(r"\[\[type:[^]]+\]\]", "", txt) bodyclass = bodyClass(self.mw.col, c) clearAudioQueue() if self.mw.reviewer.autoplay(c): # if we're showing both sides at once, play question audio first for audio in questionAudio: play(audio) # then play any audio that hasn't already been played for audio in allSounds(txt): if audio not in questionAudio: play(audio) txt = mungeQA(self.col, txt) txt = runFilter("prepareQA", txt, c, "preview"+self._previewState.capitalize()) self._updatePreviewButtons() self._previewWeb.eval( "{}({},'{}');".format(func, json.dumps(txt), bodyclass)) def _onPreviewShowBothSides(self, toggle): self._previewBothSides = toggle self.col.conf["previewBothSides"] = toggle self.col.setMod() if self._previewState == "answer" and not toggle: self._previewState = "question" self._renderPreview() # Card deletion ###################################################################### def deleteNotes(self): self.editor.saveNow(self._deleteNotes) def _deleteNotes(self): nids = self.selectedNotes() if not nids: return self.mw.checkpoint(_("Delete Notes")) self.model.beginReset() # figure out where to place the cursor after the deletion curRow = self.form.tableView.selectionModel().currentIndex().row() selectedRows = [i.row() for i in self.form.tableView.selectionModel().selectedRows()] if min(selectedRows) < curRow < max(selectedRows): # last selection in middle; place one below last selected item move = sum(1 for i in selectedRows if i > curRow) newRow = curRow - move elif max(selectedRows) <= curRow: # last selection at bottom; place one below bottommost selection newRow = max(selectedRows) - len(nids) + 1 else: # last selection at top; place one above topmost selection newRow = min(selectedRows) - 1 self.col.remNotes(nids) self.search() if len(self.model.cards): newRow = min(newRow, len(self.model.cards) - 1) newRow = max(newRow, 0) self.model.focusedCard = self.model.cards[newRow] self.model.endReset() self.mw.requireReset() tooltip(ngettext("%d note deleted.", "%d notes deleted.", len(nids)) % len(nids)) # Deck change ###################################################################### def setDeck(self): self.editor.saveNow(self._setDeck) def _setDeck(self): from aqt.studydeck import StudyDeck cids = self.selectedCards() if not cids: return did = self.mw.col.db.scalar( "select did from cards where id = ?", cids[0]) current=self.mw.col.decks.get(did)['name'] ret = StudyDeck( self.mw, current=current, accept=_("Move Cards"), title=_("Change Deck"), help="browse", parent=self) if not ret.name: return did = self.col.decks.id(ret.name) deck = self.col.decks.get(did) if deck['dyn']: showWarning(_("Cards can't be manually moved into a filtered deck.")) return self.model.beginReset() self.mw.checkpoint(_("Change Deck")) mod = intTime() usn = self.col.usn() # normal cards scids = ids2str(cids) # remove any cards from filtered deck first self.col.sched.remFromDyn(cids) # then move into new deck self.col.db.execute(""" update cards set usn=?, mod=?, did=? where id in """ + scids, usn, mod, did) self.model.endReset() self.mw.requireReset() # Tags ###################################################################### def addTags(self, tags=None, label=None, prompt=None, func=None): self.editor.saveNow(lambda: self._addTags(tags, label, prompt, func)) def _addTags(self, tags, label, prompt, func): if prompt is None: prompt = _("Enter tags to add:") if tags is None: (tags, r) = getTag(self, self.col, prompt) else: r = True if not r: return if func is None: func = self.col.tags.bulkAdd if label is None: label = _("Add Tags") if label: self.mw.checkpoint(label) self.model.beginReset() func(self.selectedNotes(), tags) self.model.endReset() self.mw.requireReset() def deleteTags(self, tags=None, label=None): if label is None: label = _("Delete Tags") self.addTags(tags, label, _("Enter tags to delete:"), func=self.col.tags.bulkRem) def clearUnusedTags(self): self.editor.saveNow(self._clearUnusedTags) def _clearUnusedTags(self): self.col.tags.registerNotes() # Suspending ###################################################################### def isSuspended(self): return not not (self.card and self.card.queue == -1) def onSuspend(self): self.editor.saveNow(self._onSuspend) def _onSuspend(self): sus = not self.isSuspended() c = self.selectedCards() if sus: self.col.sched.suspendCards(c) else: self.col.sched.unsuspendCards(c) self.model.reset() self.mw.requireReset() # Flags & Marking ###################################################################### def onSetFlag(self, n): self.col.setUserFlag(n, self.selectedCards()) self.model.reset() def onMark(self, mark=None): if mark is None: mark = not self.isMarked() if mark: self.addTags(tags="marked", label=False) else: self.deleteTags(tags="marked", label=False) def isMarked(self): return not not (self.card and self.card.note().hasTag("Marked")) # Repositioning ###################################################################### def reposition(self): self.editor.saveNow(self._reposition) def _reposition(self): cids = self.selectedCards() cids2 = self.col.db.list( "select id from cards where type = 0 and id in " + ids2str(cids)) if not cids2: return showInfo(_("Only new cards can be repositioned.")) d = QDialog(self) d.setWindowModality(Qt.WindowModal) frm = aqt.forms.reposition.Ui_Dialog() frm.setupUi(d) (pmin, pmax) = self.col.db.first( "select min(due), max(due) from cards where type=0 and odid=0") pmin = pmin or 0 pmax = pmax or 0 txt = _("Queue top: %d") % pmin txt += "\n" + _("Queue bottom: %d") % pmax frm.label.setText(txt) if not d.exec_(): return self.model.beginReset() self.mw.checkpoint(_("Reposition")) self.col.sched.sortCards( cids, start=frm.start.value(), step=frm.step.value(), shuffle=frm.randomize.isChecked(), shift=frm.shift.isChecked()) self.search() self.mw.requireReset() self.model.endReset() # Rescheduling ###################################################################### def reschedule(self): self.editor.saveNow(self._reschedule) def _reschedule(self): d = QDialog(self) d.setWindowModality(Qt.WindowModal) frm = aqt.forms.reschedule.Ui_Dialog() frm.setupUi(d) if not d.exec_(): return self.model.beginReset() self.mw.checkpoint(_("Reschedule")) if frm.asNew.isChecked(): self.col.sched.forgetCards(self.selectedCards()) else: fmin = frm.min.value() fmax = frm.max.value() fmax = max(fmin, fmax) self.col.sched.reschedCards( self.selectedCards(), fmin, fmax) self.search() self.mw.requireReset() self.model.endReset() # Edit: selection ###################################################################### def selectNotes(self): self.editor.saveNow(self._selectNotes) def _selectNotes(self): nids = self.selectedNotes() # bypass search history self._lastSearchTxt = "nid:"+",".join([str(x) for x in nids]) self.form.searchEdit.lineEdit().setText(self._lastSearchTxt) # clear the selection so we don't waste energy preserving it tv = self.form.tableView tv.selectionModel().clear() self.search() tv.selectAll() def invertSelection(self): sm = self.form.tableView.selectionModel() items = sm.selection() self.form.tableView.selectAll() sm.select(items, QItemSelectionModel.Deselect | QItemSelectionModel.Rows) # Edit: undo ###################################################################### def setupHooks(self): addHook("undoState", self.onUndoState) addHook("reset", self.onReset) addHook("editTimer", self.refreshCurrentCard) addHook("editFocusLost", self.refreshCurrentCardFilter) for t in "newTag", "newModel", "newDeck": addHook(t, self.maybeRefreshSidebar) def teardownHooks(self): remHook("reset", self.onReset) remHook("editTimer", self.refreshCurrentCard) remHook("editFocusLost", self.refreshCurrentCardFilter) remHook("undoState", self.onUndoState) for t in "newTag", "newModel", "newDeck": remHook(t, self.maybeRefreshSidebar) def onUndoState(self, on): self.form.actionUndo.setEnabled(on) if on: self.form.actionUndo.setText(self.mw.form.actionUndo.text()) # Edit: replacing ###################################################################### def onFindReplace(self): self.editor.saveNow(self._onFindReplace) def _onFindReplace(self): sf = self.selectedNotes() if not sf: return import anki.find fields = sorted(anki.find.fieldNames(self.col, downcase=False)) d = QDialog(self) frm = aqt.forms.findreplace.Ui_Dialog() frm.setupUi(d) d.setWindowModality(Qt.WindowModal) frm.field.addItems([_("All Fields")] + fields) frm.buttonBox.helpRequested.connect(self.onFindReplaceHelp) restoreGeom(d, "findreplace") r = d.exec_() saveGeom(d, "findreplace") if not r: return if frm.field.currentIndex() == 0: field = None else: field = fields[frm.field.currentIndex()-1] self.mw.checkpoint(_("Find and Replace")) self.mw.progress.start() self.model.beginReset() try: changed = self.col.findReplace(sf, str(frm.find.text()), str(frm.replace.text()), frm.re.isChecked(), field, frm.ignoreCase.isChecked()) except sre_constants.error: showInfo(_("Invalid regular expression."), parent=self) return else: self.search() self.mw.requireReset() finally: self.model.endReset() self.mw.progress.finish() showInfo(ngettext( "%(a)d of %(b)d note updated", "%(a)d of %(b)d notes updated", len(sf)) % { 'a': changed, 'b': len(sf), }) def onFindReplaceHelp(self): openHelp("findreplace") # Edit: finding dupes ###################################################################### def onFindDupes(self): self.editor.saveNow(self._onFindDupes) def _onFindDupes(self): d = QDialog(self) self.mw.setupDialogGC(d) frm = aqt.forms.finddupes.Ui_Dialog() frm.setupUi(d) restoreGeom(d, "findDupes") fields = sorted(anki.find.fieldNames(self.col, downcase=False)) frm.fields.addItems(fields) self._dupesButton = None # links frm.webView.onBridgeCmd = self.dupeLinkClicked def onFin(code): saveGeom(d, "findDupes") d.finished.connect(onFin) def onClick(): field = fields[frm.fields.currentIndex()] self.duplicatesReport(frm.webView, field, frm.search.text(), frm) search = frm.buttonBox.addButton( _("Search"), QDialogButtonBox.ActionRole) search.clicked.connect(onClick) d.show() def duplicatesReport(self, web, fname, search, frm): self.mw.progress.start() res = self.mw.col.findDupes(fname, search) if not self._dupesButton: self._dupesButton = b = frm.buttonBox.addButton( _("Tag Duplicates"), QDialogButtonBox.ActionRole) b.clicked.connect(lambda: self._onTagDupes(res)) t = "" groups = len(res) notes = sum(len(r[1]) for r in res) part1 = ngettext("%d group", "%d groups", groups) % groups part2 = ngettext("%d note", "%d notes", notes) % notes t += _("Found %(a)s across %(b)s.") % dict(a=part1, b=part2) t += "

    " for val, nids in res: t += '''
  1. %s: %s''' % ( "nid:" + ",".join(str(id) for id in nids), ngettext("%d note", "%d notes", len(nids)) % len(nids), html.escape(val)) t += "
" t += "" web.setHtml(t) self.mw.progress.finish() def _onTagDupes(self, res): if not res: return self.model.beginReset() self.mw.checkpoint(_("Tag Duplicates")) nids = set() for s, nidlist in res: nids.update(nidlist) self.col.tags.bulkAdd(nids, _("duplicate")) self.mw.progress.finish() self.model.endReset() self.mw.requireReset() tooltip(_("Notes tagged.")) def dupeLinkClicked(self, link): self.form.searchEdit.lineEdit().setText(link) # manually, because we've already saved self._lastSearchTxt = link self.search() self.onNote() # Jumping ###################################################################### def _moveCur(self, dir=None, idx=None): if not self.model.cards: return tv = self.form.tableView if idx is None: idx = tv.moveCursor(dir, self.mw.app.keyboardModifiers()) tv.selectionModel().setCurrentIndex( idx, QItemSelectionModel.Clear| QItemSelectionModel.Select| QItemSelectionModel.Rows) def onPreviousCard(self): self.focusTo = self.editor.currentField self.editor.saveNow(self._onPreviousCard) def _onPreviousCard(self): self._moveCur(QAbstractItemView.MoveUp) def onNextCard(self): self.focusTo = self.editor.currentField self.editor.saveNow(self._onNextCard) def _onNextCard(self): self._moveCur(QAbstractItemView.MoveDown) def onFirstCard(self): sm = self.form.tableView.selectionModel() idx = sm.currentIndex() self._moveCur(None, self.model.index(0, 0)) if not self.mw.app.keyboardModifiers() & Qt.ShiftModifier: return idx2 = sm.currentIndex() item = QItemSelection(idx2, idx) sm.select(item, QItemSelectionModel.SelectCurrent| QItemSelectionModel.Rows) def onLastCard(self): sm = self.form.tableView.selectionModel() idx = sm.currentIndex() self._moveCur( None, self.model.index(len(self.model.cards) - 1, 0)) if not self.mw.app.keyboardModifiers() & Qt.ShiftModifier: return idx2 = sm.currentIndex() item = QItemSelection(idx, idx2) sm.select(item, QItemSelectionModel.SelectCurrent| QItemSelectionModel.Rows) def onFind(self): self.form.searchEdit.setFocus() self.form.searchEdit.lineEdit().selectAll() def onNote(self): self.editor.web.setFocus() self.editor.web.eval("focusField(0);") def onCardList(self): self.form.tableView.setFocus() def focusCid(self, cid): try: row = self.model.cards.index(cid) except: return self.form.tableView.selectRow(row) # Change model dialog ###################################################################### class ChangeModel(QDialog): def __init__(self, browser, nids): QDialog.__init__(self, browser) self.browser = browser self.nids = nids self.oldModel = browser.card.note().model() self.form = aqt.forms.changemodel.Ui_Dialog() self.form.setupUi(self) self.setWindowModality(Qt.WindowModal) self.setup() restoreGeom(self, "changeModel") addHook("reset", self.onReset) addHook("currentModelChanged", self.onReset) self.exec_() def setup(self): # maps self.flayout = QHBoxLayout() self.flayout.setContentsMargins(0,0,0,0) self.fwidg = None self.form.fieldMap.setLayout(self.flayout) self.tlayout = QHBoxLayout() self.tlayout.setContentsMargins(0,0,0,0) self.twidg = None self.form.templateMap.setLayout(self.tlayout) if self.style().objectName() == "gtk+": # gtk+ requires margins in inner layout self.form.verticalLayout_2.setContentsMargins(0, 11, 0, 0) self.form.verticalLayout_3.setContentsMargins(0, 11, 0, 0) # model chooser import aqt.modelchooser self.oldModel = self.browser.col.models.get( self.browser.col.db.scalar( "select mid from notes where id = ?", self.nids[0])) self.form.oldModelLabel.setText(self.oldModel['name']) self.modelChooser = aqt.modelchooser.ModelChooser( self.browser.mw, self.form.modelChooserWidget, label=False) self.modelChooser.models.setFocus() self.form.buttonBox.helpRequested.connect(self.onHelp) self.modelChanged(self.browser.mw.col.models.current()) self.pauseUpdate = False def onReset(self): self.modelChanged(self.browser.col.models.current()) def modelChanged(self, model): self.targetModel = model self.rebuildTemplateMap() self.rebuildFieldMap() def rebuildTemplateMap(self, key=None, attr=None): if not key: key = "t" attr = "tmpls" map = getattr(self, key + "widg") lay = getattr(self, key + "layout") src = self.oldModel[attr] dst = self.targetModel[attr] if map: lay.removeWidget(map) map.deleteLater() setattr(self, key + "MapWidget", None) map = QWidget() l = QGridLayout() combos = [] targets = [x['name'] for x in dst] + [_("Nothing")] indices = {} for i, x in enumerate(src): l.addWidget(QLabel(_("Change %s to:") % x['name']), i, 0) cb = QComboBox() cb.addItems(targets) idx = min(i, len(targets)-1) cb.setCurrentIndex(idx) indices[cb] = idx cb.currentIndexChanged.connect( lambda i, cb=cb, key=key: self.onComboChanged(i, cb, key)) combos.append(cb) l.addWidget(cb, i, 1) map.setLayout(l) lay.addWidget(map) setattr(self, key + "widg", map) setattr(self, key + "layout", lay) setattr(self, key + "combos", combos) setattr(self, key + "indices", indices) def rebuildFieldMap(self): return self.rebuildTemplateMap(key="f", attr="flds") def onComboChanged(self, i, cb, key): indices = getattr(self, key + "indices") if self.pauseUpdate: indices[cb] = i return combos = getattr(self, key + "combos") if i == cb.count() - 1: # set to 'nothing' return # find another combo with same index for c in combos: if c == cb: continue if c.currentIndex() == i: self.pauseUpdate = True c.setCurrentIndex(indices[cb]) self.pauseUpdate = False break indices[cb] = i def getTemplateMap(self, old=None, combos=None, new=None): if not old: old = self.oldModel['tmpls'] combos = self.tcombos new = self.targetModel['tmpls'] map = {} for i, f in enumerate(old): idx = combos[i].currentIndex() if idx == len(new): # ignore map[f['ord']] = None else: f2 = new[idx] map[f['ord']] = f2['ord'] return map def getFieldMap(self): return self.getTemplateMap( old=self.oldModel['flds'], combos=self.fcombos, new=self.targetModel['flds']) def cleanup(self): remHook("reset", self.onReset) remHook("currentModelChanged", self.onReset) self.modelChooser.cleanup() saveGeom(self, "changeModel") def reject(self): self.cleanup() return QDialog.reject(self) def accept(self): # check maps fmap = self.getFieldMap() cmap = self.getTemplateMap() if any(True for c in list(cmap.values()) if c is None): if not askUser(_("""\ Any cards mapped to nothing will be deleted. \ If a note has no remaining cards, it will be lost. \ Are you sure you want to continue?""")): return QDialog.accept(self) self.browser.mw.checkpoint(_("Change Note Type")) b = self.browser b.mw.col.modSchema(check=True) b.mw.progress.start() b.model.beginReset() mm = b.mw.col.models mm.change(self.oldModel, self.nids, self.targetModel, fmap, cmap) b.search() b.model.endReset() b.mw.progress.finish() b.mw.reset() self.cleanup() def onHelp(self): openHelp("browsermisc") anki-2.1.0+dfsg~b36/aqt/clayout.py000066400000000000000000000447001323611211500167030ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import collections import re from aqt.qt import * from anki.consts import * import aqt from anki.sound import playFromText, clearAudioQueue from aqt.utils import saveGeom, restoreGeom, mungeQA,\ showInfo, askUser, getOnlyText, \ showWarning, openHelp, downArrow from anki.utils import isMac, isWin, joinFields, bodyClass from aqt.webview import AnkiWebView import json from anki.hooks import runFilter class CardLayout(QDialog): def __init__(self, mw, note, ord=0, parent=None, addMode=False): QDialog.__init__(self, parent or mw, Qt.Window) mw.setupDialogGC(self) self.mw = aqt.mw self.parent = parent or mw self.note = note self.ord = ord self.col = self.mw.col self.mm = self.mw.col.models self.model = note.model() self.mw.checkpoint(_("Card Types")) self.addMode = addMode if addMode: # save it to DB temporarily self.emptyFields = [] for name, val in list(note.items()): if val.strip(): continue self.emptyFields.append(name) note[name] = "(%s)" % name note.flush() self.setupTopArea() self.setupMainArea() self.setupButtons() self.setupShortcuts() self.setWindowTitle(_("Card Types for %s") % self.model['name']) v1 = QVBoxLayout() v1.addWidget(self.topArea) v1.addWidget(self.mainArea) v1.addLayout(self.buttons) v1.setContentsMargins(12,12,12,12) self.setLayout(v1) self.redraw() restoreGeom(self, "CardLayout") self.setWindowModality(Qt.ApplicationModal) self.show() # take the focus away from the first input area when starting up, # as users tend to accidentally type into the template self.setFocus() def redraw(self): self.cards = self.col.previewCards(self.note, 2) idx = self.ord if idx >= len(self.cards): self.ord = len(self.cards) - 1 self.redrawing = True self.updateTopArea() self.updateMainArea() self.redrawing = False self.onCardSelected(self.ord) def setupShortcuts(self): for i in range(1,9): QShortcut(QKeySequence("Ctrl+%d" % i), self, activated=lambda i=i: self.selectCard(i)) def selectCard(self, n): self.ord = n-1 self.redraw() def setupTopArea(self): self.topArea = QWidget() self.topAreaForm = aqt.forms.clayout_top.Ui_Form() self.topAreaForm.setupUi(self.topArea) self.topAreaForm.templateOptions.setText(_("Options") + " "+downArrow()) self.topAreaForm.templateOptions.clicked.connect(self.onMore) self.topAreaForm.templatesBox.currentIndexChanged.connect(self.onCardSelected) def updateTopArea(self): cnt = self.mw.col.models.useCount(self.model) self.topAreaForm.changesLabel.setText(ngettext( "Changes below will affect the %(cnt)d note that uses this card type.", "Changes below will affect the %(cnt)d notes that use this card type.", cnt) % dict(cnt=cnt)) self.updateCardNames() def updateCardNames(self): self.redrawing = True combo = self.topAreaForm.templatesBox combo.clear() combo.addItems(self._summarizedName(t) for t in self.model['tmpls']) combo.setCurrentIndex(self.ord) combo.setEnabled(not self._isCloze()) self.redrawing = False def _summarizedName(self, tmpl): return "{}: {} -> {}".format( tmpl['name'], self._fieldsOnTemplate(tmpl['qfmt']), self._fieldsOnTemplate(tmpl['afmt'])) def _fieldsOnTemplate(self, fmt): matches = re.findall("{{[^#/}]+?}}", fmt) charsAllowed = 30 result = collections.OrderedDict() for m in matches: # strip off mustache m = re.sub(r"[{}]", "", m) # strip off modifiers m = m.split(":")[-1] # don't show 'FrontSide' if m == "FrontSide": continue if m not in result: result[m] = True charsAllowed -= len(m) if charsAllowed <= 0: break str = "+".join(result.keys()) if charsAllowed <= 0: str += "+..." return str def _isCloze(self): return self.model['type'] == MODEL_CLOZE def setupMainArea(self): w = self.mainArea = QWidget() l = QHBoxLayout() l.setContentsMargins(0,0,0,0) l.setSpacing(3) left = QWidget() # template area tform = self.tform = aqt.forms.template.Ui_Form() tform.setupUi(left) tform.label1.setText(" →") tform.label2.setText(" →") tform.labelc1.setText(" ↗") tform.labelc2.setText(" ↘") if self.style().objectName() == "gtk+": # gtk+ requires margins in inner layout tform.tlayout1.setContentsMargins(0, 11, 0, 0) tform.tlayout2.setContentsMargins(0, 11, 0, 0) tform.tlayout3.setContentsMargins(0, 11, 0, 0) tform.groupBox_3.setTitle(_( "Styling (shared between cards)")) tform.front.textChanged.connect(self.saveCard) tform.css.textChanged.connect(self.saveCard) tform.back.textChanged.connect(self.saveCard) l.addWidget(left, 5) # preview area right = QWidget() pform = self.pform = aqt.forms.preview.Ui_Form() pform.setupUi(right) if self.style().objectName() == "gtk+": # gtk+ requires margins in inner layout pform.frontPrevBox.setContentsMargins(0, 11, 0, 0) pform.backPrevBox.setContentsMargins(0, 11, 0, 0) self.setupWebviews() l.addWidget(right, 5) w.setLayout(l) def setupWebviews(self): pform = self.pform pform.frontWeb = AnkiWebView() pform.frontPrevBox.addWidget(pform.frontWeb) pform.backWeb = AnkiWebView() pform.backPrevBox.addWidget(pform.backWeb) jsinc = ["jquery.js","browsersel.js", "mathjax/conf.js", "mathjax/MathJax.js", "reviewer.js"] pform.frontWeb.stdHtml(self.mw.reviewer.revHtml(), css=["reviewer.css"], js=jsinc) pform.backWeb.stdHtml(self.mw.reviewer.revHtml(), css=["reviewer.css"], js=jsinc) def updateMainArea(self): if self._isCloze(): cnt = len(self.mm.availOrds( self.model, joinFields(self.note.fields))) for g in self.pform.groupBox, self.pform.groupBox_2: g.setTitle(g.title() + _(" (1 of %d)") % max(cnt, 1)) def onRemove(self): if len(self.model['tmpls']) < 2: return showInfo(_("At least one card type is required.")) idx = self.ord cards = self.mm.tmplUseCount(self.model, idx) cards = ngettext("%d card", "%d cards", cards) % cards msg = (_("Delete the '%(a)s' card type, and its %(b)s?") % dict(a=self.model['tmpls'][idx]['name'], b=cards)) if not askUser(msg): return if not self.mm.remTemplate(self.model, self.cards[idx].template()): return showWarning(_("""\ Removing this card type would cause one or more notes to be deleted. \ Please create a new card type first.""")) self.redraw() # Buttons ########################################################################## def setupButtons(self): l = self.buttons = QHBoxLayout() help = QPushButton(_("Help")) help.setAutoDefault(False) l.addWidget(help) help.clicked.connect(self.onHelp) l.addStretch() addField = QPushButton(_("Add Field")) addField.setAutoDefault(False) l.addWidget(addField) addField.clicked.connect(self.onAddField) if not self._isCloze(): flip = QPushButton(_("Flip")) flip.setAutoDefault(False) l.addWidget(flip) flip.clicked.connect(self.onFlip) l.addStretch() close = QPushButton(_("Close")) close.setAutoDefault(False) l.addWidget(close) close.clicked.connect(self.accept) # Cards ########################################################################## def onCardSelected(self, idx): if self.redrawing: return self.card = self.cards[idx] self.ord = idx self.playedAudio = {} self.readCard() self.renderPreview() def readCard(self): t = self.card.template() self.redrawing = True self.tform.front.setPlainText(t['qfmt']) self.tform.css.setPlainText(self.model['css']) self.tform.back.setPlainText(t['afmt']) self.tform.front.setAcceptRichText(False) self.tform.css.setAcceptRichText(False) self.tform.back.setAcceptRichText(False) self.tform.front.setTabStopWidth(30) self.tform.css.setTabStopWidth(30) self.tform.back.setTabStopWidth(30) self.redrawing = False def saveCard(self): if self.redrawing: return text = self.tform.front.toPlainText() self.card.template()['qfmt'] = text text = self.tform.css.toPlainText() self.card.model()['css'] = text text = self.tform.back.toPlainText() self.card.template()['afmt'] = text self.renderPreview() # Preview ########################################################################## _previewTimer = None def renderPreview(self): # schedule a preview when timing stops self.cancelPreviewTimer() self._previewTimer = self.mw.progress.timer(500, self._renderPreview, False) def cancelPreviewTimer(self): if self._previewTimer: self._previewTimer.stop() self._previewTimer = None def _renderPreview(self): self.cancelPreviewTimer() c = self.card ti = self.maybeTextInput bodyclass = bodyClass(self.mw.col, c) q = ti(mungeQA(self.mw.col, c.q(reload=True))) q = runFilter("prepareQA", q, c, "clayoutQuestion") a = ti(mungeQA(self.mw.col, c.a()), type='a') a = runFilter("prepareQA", a, c, "clayoutAnswer") # use _showAnswer to avoid the longer delay self.pform.frontWeb.eval("_showAnswer(%s,'%s');" % (json.dumps(q), bodyclass)) self.pform.backWeb.eval("_showAnswer(%s, '%s');" % (json.dumps(a), bodyclass)) clearAudioQueue() if c.id not in self.playedAudio: playFromText(c.q()) playFromText(c.a()) self.playedAudio[c.id] = True self.updateCardNames() def maybeTextInput(self, txt, type='q'): if "[[type:" not in txt: return txt origLen = len(txt) txt = txt.replace("
", "") hadHR = origLen != len(txt) def answerRepl(match): res = self.mw.reviewer.correct("exomple", "an example") if hadHR: res = "
" + res return res if type == 'q': repl = "" repl = "
%s
" % repl else: repl = answerRepl return re.sub("\[\[type:.+?\]\]", repl, txt) # Card operations ###################################################################### def onRename(self): name = getOnlyText(_("New name:"), default=self.card.template()['name']) if not name: return if name in [c.template()['name'] for c in self.cards if c.template()['ord'] != self.ord]: return showWarning(_("That name is already used.")) self.card.template()['name'] = name self.redraw() def onReorder(self): n = len(self.cards) cur = self.card.template()['ord']+1 pos = getOnlyText( _("Enter new card position (1...%s):") % n, default=str(cur)) if not pos: return try: pos = int(pos) except ValueError: return if pos < 1 or pos > n: return if pos == cur: return pos -= 1 self.mm.moveTemplate(self.model, self.card.template(), pos) self.ord = pos self.redraw() def _newCardName(self): n = len(self.cards) + 1 while 1: name = _("Card %d") % n if name not in [c.template()['name'] for c in self.cards]: break n += 1 return name def onAddCard(self): cnt = self.mw.col.models.useCount(self.model) txt = ngettext("This will create %d card. Proceed?", "This will create %d cards. Proceed?", cnt) % cnt if not askUser(txt): return name = self._newCardName() t = self.mm.newTemplate(name) old = self.card.template() t['qfmt'] = old['qfmt'] t['afmt'] = old['afmt'] self.mm.addTemplate(self.model, t) self.ord = len(self.cards) self.redraw() def onFlip(self): old = self.card.template() self._flipQA(old, old) self.redraw() def _flipQA(self, src, dst): m = re.match("(?s)(.+)
(.+)", src['afmt']) if not m: showInfo(_("""\ Anki couldn't find the line between the question and answer. Please \ adjust the template manually to switch the question and answer.""")) return dst['afmt'] = "{{FrontSide}}\n\n
\n\n%s" % src['qfmt'] dst['qfmt'] = m.group(2).strip() return True def onMore(self): m = QMenu(self) if not self._isCloze(): a = m.addAction(_("Add Card Type...")) a.triggered.connect(self.onAddCard) a = m.addAction(_("Remove Card Type...")) a.triggered.connect(self.onRemove) a = m.addAction(_("Rename Card Type...")) a.triggered.connect(self.onRename) a = m.addAction(_("Reposition Card Type...")) a.triggered.connect(self.onReorder) m.addSeparator() t = self.card.template() if t['did']: s = _(" (on)") else: s = _(" (off)") a = m.addAction(_("Deck Override...") + s) a.triggered.connect(self.onTargetDeck) a = m.addAction(_("Browser Appearance...")) a.triggered.connect(self.onBrowserDisplay) m.exec_(self.topAreaForm.templateOptions.mapToGlobal(QPoint(0,0))) def onBrowserDisplay(self): d = QDialog() f = aqt.forms.browserdisp.Ui_Dialog() f.setupUi(d) t = self.card.template() f.qfmt.setText(t.get('bqfmt', "")) f.afmt.setText(t.get('bafmt', "")) if t.get("bfont"): f.overrideFont.setChecked(True) f.font.setCurrentFont(QFont(t.get('bfont', "Arial"))) f.fontSize.setValue(t.get('bsize', 12)) f.buttonBox.accepted.connect(lambda: self.onBrowserDisplayOk(f)) d.exec_() def onBrowserDisplayOk(self, f): t = self.card.template() t['bqfmt'] = f.qfmt.text().strip() t['bafmt'] = f.afmt.text().strip() if f.overrideFont.isChecked(): t['bfont'] = f.font.currentFont().family() t['bsize'] = f.fontSize.value() else: del t['bfont'] del t['bsize'] def onTargetDeck(self): from aqt.tagedit import TagEdit t = self.card.template() d = QDialog(self) d.setWindowTitle("Anki") d.setMinimumWidth(400) l = QVBoxLayout() lab = QLabel(_("""\ Enter deck to place new %s cards in, or leave blank:""") % self.card.template()['name']) lab.setWordWrap(True) l.addWidget(lab) te = TagEdit(d, type=1) te.setCol(self.col) l.addWidget(te) if t['did']: te.setText(self.col.decks.get(t['did'])['name']) te.selectAll() bb = QDialogButtonBox(QDialogButtonBox.Close) bb.rejected.connect(d.close) l.addWidget(bb) d.setLayout(l) d.exec_() if not te.text().strip(): t['did'] = None else: t['did'] = self.col.decks.id(te.text()) def onAddField(self): diag = QDialog(self) form = aqt.forms.addfield.Ui_Dialog() form.setupUi(diag) fields = [f['name'] for f in self.model['flds']] form.fields.addItems(fields) form.font.setCurrentFont(QFont("Arial")) form.size.setValue(20) diag.show() # Work around a Qt bug, # https://bugreports.qt-project.org/browse/QTBUG-1894 if isMac or isWin: # No problems on Macs or Windows. form.fields.showPopup() else: # Delay showing the pop-up. self.mw.progress.timer(200, form.fields.showPopup, False) if not diag.exec_(): return if form.radioQ.isChecked(): obj = self.tform.front else: obj = self.tform.back self._addField(obj, fields[form.fields.currentIndex()], form.font.currentFont().family(), form.size.value()) def _addField(self, widg, field, font, size): t = widg.toPlainText() t +="\n
{{%s}}
\n" % ( font, size, field) widg.setPlainText(t) self.saveCard() # Closing & Help ###################################################################### def accept(self): self.reject() def reject(self): self.cancelPreviewTimer() clearAudioQueue() if self.addMode: # remove the filler fields we added for name in self.emptyFields: self.note[name] = "" self.mw.col.db.execute("delete from notes where id = ?", self.note.id) self.mm.save(self.model, templates=True) self.mw.reset() saveGeom(self, "CardLayout") return QDialog.reject(self) def onHelp(self): openHelp("templates") anki-2.1.0+dfsg~b36/aqt/customstudy.py000066400000000000000000000145461323611211500176330ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * import aqt from aqt.utils import showInfo, showWarning from anki.consts import * RADIO_NEW = 1 RADIO_REV = 2 RADIO_FORGOT = 3 RADIO_AHEAD = 4 RADIO_PREVIEW = 5 RADIO_CRAM = 6 TYPE_NEW = 0 TYPE_DUE = 1 TYPE_ALL = 2 class CustomStudy(QDialog): def __init__(self, mw): QDialog.__init__(self, mw) self.mw = mw self.deck = self.mw.col.decks.current() self.conf = self.mw.col.decks.getConf(self.deck['conf']) self.form = f = aqt.forms.customstudy.Ui_Dialog() f.setupUi(self) self.setWindowModality(Qt.WindowModal) self.setupSignals() f.radio1.click() self.exec_() def setupSignals(self): f = self.form f.radio1.clicked.connect(lambda: self.onRadioChange(1)) f.radio2.clicked.connect(lambda: self.onRadioChange(2)) f.radio3.clicked.connect(lambda: self.onRadioChange(3)) f.radio4.clicked.connect(lambda: self.onRadioChange(4)) f.radio5.clicked.connect(lambda: self.onRadioChange(5)) f.radio6.clicked.connect(lambda: self.onRadioChange(6)) def onRadioChange(self, idx): f = self.form; sp = f.spin smin = 1; smax = DYN_MAX_SIZE; sval = 1 post = _("cards") tit = "" spShow = True typeShow = False ok = _("OK") def plus(num): if num == 1000: num = "1000+" return ""+str(num)+"" if idx == RADIO_NEW: new = self.mw.col.sched.totalNewForCurrentDeck() # get the number of new cards in deck that exceed the new cards limit newUnderLearning = min(new, self.conf['new']['perDay'] - self.deck['newToday'][1]) newExceeding = min(new, new - newUnderLearning) tit = _("New cards in deck over today limit: %s") % plus(newExceeding) pre = _("Increase today's new card limit by") sval = min(new, self.deck.get('extendNew', 10)) smax = newExceeding elif idx == RADIO_REV: rev = self.mw.col.sched.totalRevForCurrentDeck() # get the number of review due in deck that exceed the review due limit revUnderLearning = min(rev, self.conf['rev']['perDay'] - self.deck['revToday'][1]) revExceeding = min(rev, rev - revUnderLearning) tit = _("Reviews due in deck over today limit: %s") % plus(revExceeding) pre = _("Increase today's review limit by") sval = min(rev, self.deck.get('extendRev', 10)) smax = revExceeding elif idx == RADIO_FORGOT: pre = _("Review cards forgotten in last") post = _("days") smax = 30 elif idx == RADIO_AHEAD: pre = _("Review ahead by") post = _("days") elif idx == RADIO_PREVIEW: pre = _("Preview new cards added in the last") post = _("days") sval = 1 elif idx == RADIO_CRAM: pre = _("Select") post = _("cards from the deck") #tit = _("After pressing OK, you can choose which tags to include.") ok = _("Choose Tags") sval = 100 typeShow = True sp.setVisible(spShow) f.cardType.setVisible(typeShow) f.title.setText(tit) f.title.setVisible(not not tit) f.spin.setMinimum(smin) f.spin.setMaximum(smax) f.spin.setValue(sval) f.preSpin.setText(pre) f.postSpin.setText(post) f.buttonBox.button(QDialogButtonBox.Ok).setText(ok) self.radioIdx = idx def accept(self): f = self.form; i = self.radioIdx; spin = f.spin.value() if i == RADIO_NEW: self.deck['extendNew'] = spin self.mw.col.decks.save(self.deck) self.mw.col.sched.extendLimits(spin, 0) self.mw.reset() return QDialog.accept(self) elif i == RADIO_REV: self.deck['extendRev'] = spin self.mw.col.decks.save(self.deck) self.mw.col.sched.extendLimits(0, spin) self.mw.reset() return QDialog.accept(self) elif i == RADIO_CRAM: tags = self._getTags() # the rest create a filtered deck cur = self.mw.col.decks.byName(_("Custom Study Session")) if cur: if not cur['dyn']: showInfo("Please rename the existing Custom Study deck first.") return QDialog.accept(self) else: # safe to empty self.mw.col.sched.emptyDyn(cur['id']) # reuse; don't delete as it may have children dyn = cur self.mw.col.decks.select(cur['id']) else: did = self.mw.col.decks.newDyn(_("Custom Study Session")) dyn = self.mw.col.decks.get(did) # and then set various options if i == RADIO_FORGOT: dyn['terms'][0] = ['rated:%d:1' % spin, DYN_MAX_SIZE, DYN_RANDOM] dyn['resched'] = False elif i == RADIO_AHEAD: dyn['terms'][0] = ['prop:due<=%d' % spin, DYN_MAX_SIZE, DYN_DUE] dyn['resched'] = True elif i == RADIO_PREVIEW: dyn['terms'][0] = ['is:new added:%s'%spin, DYN_MAX_SIZE, DYN_OLDEST] dyn['resched'] = False elif i == RADIO_CRAM: type = f.cardType.currentRow() if type == TYPE_NEW: terms = "is:new " ord = DYN_ADDED dyn['resched'] = True elif type == TYPE_DUE: terms = "is:due " ord = DYN_DUE dyn['resched'] = True else: terms = "" ord = DYN_RANDOM dyn['resched'] = False dyn['terms'][0] = [(terms+tags).strip(), spin, ord] # add deck limit dyn['terms'][0][0] = "deck:\"%s\" %s " % (self.deck['name'], dyn['terms'][0][0]) # generate cards if not self.mw.col.sched.rebuildDyn(): return showWarning(_("No cards matched the criteria you provided.")) self.mw.moveToState("overview") QDialog.accept(self) def _getTags(self): from aqt.taglimit import TagLimit t = TagLimit(self.mw, self) return t.tags anki-2.1.0+dfsg~b36/aqt/deckbrowser.py000066400000000000000000000237231323611211500175370ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * from aqt.utils import askUser, getOnlyText, openLink, showWarning, shortcut, \ openHelp, downArrow from anki.utils import isMac, ids2str, fmtTimeSpan from anki.errors import DeckRenameError import aqt from anki.sound import clearAudioQueue from anki.hooks import runHook from copy import deepcopy class DeckBrowser: def __init__(self, mw): self.mw = mw self.web = mw.web self.bottom = aqt.toolbar.BottomBar(mw, mw.bottomWeb) self.scrollPos = QPoint(0, 0) def show(self): clearAudioQueue() self.web.resetHandlers() self.web.onBridgeCmd = self._linkHandler self._renderPage() def refresh(self): self._renderPage() # Event handlers ########################################################################## def _linkHandler(self, url): if ":" in url: (cmd, arg) = url.split(":") else: cmd = url if cmd == "open": self._selDeck(arg) elif cmd == "opts": self._showOptions(arg) elif cmd == "shared": self._onShared() elif cmd == "import": self.mw.onImport() elif cmd == "lots": openHelp("using-decks-appropriately") elif cmd == "hidelots": self.mw.pm.profile['hideDeckLotsMsg'] = True self.refresh() elif cmd == "create": deck = getOnlyText(_("Name for deck:")) if deck: self.mw.col.decks.id(deck) self.refresh() elif cmd == "drag": draggedDeckDid, ontoDeckDid = arg.split(',') self._dragDeckOnto(draggedDeckDid, ontoDeckDid) elif cmd == "collapse": self._collapse(arg) return False def _selDeck(self, did): self.mw.col.decks.select(did) self.mw.onOverview() # HTML generation ########################################################################## _body = """
%(tree)s

%(stats)s %(countwarn)s
""" def _renderPage(self, reuse=False): if not reuse: self._dueTree = self.mw.col.sched.deckDueTree() tree = self._renderDeckTree(self._dueTree) stats = self._renderStats() self.web.stdHtml(self._body%dict( tree=tree, stats=stats, countwarn=self._countWarn()), css=["deckbrowser.css"], js=["jquery.js", "jquery-ui.js", "deckbrowser.js"]) self.web.key = "deckBrowser" self._drawButtons() def _oldPos(self): if self.web.key == "deckBrowser": return self.web.page().mainFrame().scrollPosition() else: return self.scrollPos def _renderStats(self): cards, thetime = self.mw.col.db.first(""" select count(), sum(time)/1000 from revlog where id > ?""", (self.mw.col.sched.dayCutoff-86400)*1000) cards = cards or 0 thetime = thetime or 0 msgp1 = ngettext("%d card", "%d cards", cards) % cards buf = _("Studied %(a)s %(b)s today.") % dict(a=msgp1, b=fmtTimeSpan(thetime, unit=1, inTime=True)) return buf def _countWarn(self): if (self.mw.col.decks.count() < 25 or self.mw.pm.profile.get("hideDeckLotsMsg")): return "" return "
"+( _("You have a lot of decks. Please see %(a)s. %(b)s") % dict( a=("%s" % _( "this page")), b=("
(" "%s)" % (_("hide"))+ "
"))) def _renderDeckTree(self, nodes, depth=0): if not nodes: return "" if depth == 0: buf = """ %s%s %s""" % ( _("Deck"), _("Due"), _("New")) buf += self._topLevelDragRow() else: buf = "" for node in nodes: buf += self._deckRow(node, depth, len(nodes)) if depth == 0: buf += self._topLevelDragRow() return buf def _deckRow(self, node, depth, cnt): name, did, due, lrn, new, children = node deck = self.mw.col.decks.get(did) if did == 1 and cnt > 1 and not children: # if the default deck is empty, hide it if not self.mw.col.db.scalar("select 1 from cards where did = 1"): return "" # parent toggled for collapsing for parent in self.mw.col.decks.parents(did): if parent['collapsed']: buff = "" return buff prefix = "-" if self.mw.col.decks.get(did)['collapsed']: prefix = "+" due += lrn def indent(): return " "*6*depth if did == self.mw.col.conf['curDeck']: klass = 'deck current' else: klass = 'deck' buf = "" % (klass, did) # deck link if children: collapse = "%s" % (did, prefix) else: collapse = "" if deck['dyn']: extraclass = "filtered" else: extraclass = "" buf += """ %s%s%s"""% ( indent(), collapse, extraclass, did, name) # due counts def nonzeroColour(cnt, colour): if not cnt: colour = "#e0e0e0" if cnt >= 1000: cnt = "1000+" return "%s" % (colour, cnt) buf += "%s%s" % ( nonzeroColour(due, "#007700"), nonzeroColour(new, "#000099")) # options buf += ("" "" % did) # children buf += self._renderDeckTree(children, depth+1) return buf def _topLevelDragRow(self): return " " # Options ########################################################################## def _showOptions(self, did): m = QMenu(self.mw) a = m.addAction(_("Rename")) a.triggered.connect(lambda b, did=did: self._rename(did)) a = m.addAction(_("Options")) a.triggered.connect(lambda b, did=did: self._options(did)) a = m.addAction(_("Export")) a.triggered.connect(lambda b, did=did: self._export(did)) a = m.addAction(_("Delete")) a.triggered.connect(lambda b, did=did: self._delete(did)) runHook("showDeckOptions", m, did) m.exec_(QCursor.pos()) def _export(self, did): self.mw.onExport(did=did) def _rename(self, did): self.mw.checkpoint(_("Rename Deck")) deck = self.mw.col.decks.get(did) oldName = deck['name'] newName = getOnlyText(_("New deck name:"), default=oldName) newName = newName.replace('"', "") if not newName or newName == oldName: return try: self.mw.col.decks.rename(deck, newName) except DeckRenameError as e: return showWarning(e.description) self.show() def _options(self, did): # select the deck first, because the dyn deck conf assumes the deck # we're editing is the current one self.mw.col.decks.select(did) self.mw.onDeckConf() def _collapse(self, did): self.mw.col.decks.collapse(did) self._renderPage(reuse=True) def _dragDeckOnto(self, draggedDeckDid, ontoDeckDid): try: self.mw.col.decks.renameForDragAndDrop(draggedDeckDid, ontoDeckDid) except DeckRenameError as e: return showWarning(e.description) self.show() def _delete(self, did): if str(did) == '1': return showWarning(_("The default deck can't be deleted.")) self.mw.checkpoint(_("Delete Deck")) deck = self.mw.col.decks.get(did) if not deck['dyn']: dids = [did] + [r[1] for r in self.mw.col.decks.children(did)] cnt = self.mw.col.db.scalar( "select count() from cards where did in {0} or " "odid in {0}".format(ids2str(dids))) if cnt: extra = ngettext(" It has %d card.", " It has %d cards.", cnt) % cnt else: extra = None if deck['dyn'] or not extra or askUser( (_("Are you sure you wish to delete %s?") % deck['name']) + extra): self.mw.progress.start(immediate=True) self.mw.col.decks.rem(did, True) self.mw.progress.finish() self.show() # Top buttons ###################################################################### drawLinks = [ ["", "shared", _("Get Shared")], ["", "create", _("Create Deck")], ["Ctrl+I", "import", _("Import File")], # Ctrl+I works from menu ] def _drawButtons(self): buf = "" drawLinks = deepcopy(self.drawLinks) for b in drawLinks: if b[0]: b[0] = _("Shortcut key: %s") % shortcut(b[0]) buf += """ """ % tuple(b) self.bottom.draw(buf) self.bottom.web.onBridgeCmd = self._linkHandler def _onShared(self): openLink(aqt.appShared+"decks/") anki-2.1.0+dfsg~b36/aqt/deckchooser.py000066400000000000000000000060661323611211500175170ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * from anki.hooks import addHook, remHook from aqt.utils import shortcut class DeckChooser(QHBoxLayout): def __init__(self, mw, widget, label=True, start=None): QHBoxLayout.__init__(self) self.widget = widget self.mw = mw self.deck = mw.col self.label = label self.setContentsMargins(0,0,0,0) self.setSpacing(8) self.setupDecks() self.widget.setLayout(self) addHook('currentModelChanged', self.onModelChange) def setupDecks(self): if self.label: self.deckLabel = QLabel(_("Deck")) self.addWidget(self.deckLabel) # decks box self.deck = QPushButton(clicked=self.onDeckChange) self.deck.setToolTip(shortcut(_("Target Deck (Ctrl+D)"))) s = QShortcut(QKeySequence(_("Ctrl+D")), self.widget, activated=self.onDeckChange) self.addWidget(self.deck) # starting label if self.mw.col.conf.get("addToCur", True): col = self.mw.col did = col.conf['curDeck'] if col.decks.isDyn(did): # if they're reviewing, try default to current card c = self.mw.reviewer.card if self.mw.state == "review" and c: if not c.odid: did = c.did else: did = c.odid else: did = 1 self.setDeckName(self.mw.col.decks.nameOrNone( did) or _("Default")) else: self.setDeckName(self.mw.col.decks.nameOrNone( self.mw.col.models.current()['did']) or _("Default")) # layout sizePolicy = QSizePolicy( QSizePolicy.Policy(7), QSizePolicy.Policy(0)) self.deck.setSizePolicy(sizePolicy) def show(self): self.widget.show() def hide(self): self.widget.hide() def cleanup(self): remHook('currentModelChanged', self.onModelChange) def onModelChange(self): if not self.mw.col.conf.get("addToCur", True): self.setDeckName(self.mw.col.decks.nameOrNone( self.mw.col.models.current()['did']) or _("Default")) def onDeckChange(self): from aqt.studydeck import StudyDeck current = self.deckName() ret = StudyDeck( self.mw, current=current, accept=_("Choose"), title=_("Choose Deck"), help="addingnotes", cancel=False, parent=self.widget, geomKey="selectDeck") self.setDeckName(ret.name) def setDeckName(self, name): self.deck.setText(name.replace("&", "&&")) self._deckName = name def deckName(self): return self._deckName def selectedId(self): # save deck name name = self.deckName() if not name.strip(): did = 1 else: did = self.mw.col.decks.id(name) return did anki-2.1.0+dfsg~b36/aqt/deckconf.py000066400000000000000000000237531323611211500170040ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from operator import itemgetter from anki.consts import NEW_CARDS_RANDOM from aqt.qt import * import aqt from aqt.utils import showInfo, showWarning, openHelp, getOnlyText, askUser, \ tooltip, saveGeom, restoreGeom, downArrow class DeckConf(QDialog): def __init__(self, mw, deck): QDialog.__init__(self, mw) self.mw = mw self.deck = deck self.childDids = [ d[1] for d in self.mw.col.decks.children(self.deck['id'])] self._origNewOrder = None self.form = aqt.forms.dconf.Ui_Dialog() self.form.setupUi(self) self.mw.checkpoint(_("Options")) self.setupCombos() self.setupConfs() self.setWindowModality(Qt.WindowModal) self.form.buttonBox.helpRequested.connect(lambda: openHelp("deckoptions")) self.form.confOpts.clicked.connect(self.confOpts) self.form.buttonBox.button(QDialogButtonBox.RestoreDefaults).clicked.connect(self.onRestore) self.setWindowTitle(_("Options for %s") % self.deck['name']) # qt doesn't size properly with altered fonts otherwise restoreGeom(self, "deckconf", adjustSize=True) self.show() self.exec_() saveGeom(self, "deckconf") def setupCombos(self): import anki.consts as cs f = self.form f.newOrder.addItems(list(cs.newCardOrderLabels().values())) f.newOrder.currentIndexChanged.connect(self.onNewOrderChanged) # Conf list ###################################################################### def setupConfs(self): self.form.dconf.currentIndexChanged.connect(self.onConfChange) self.conf = None self.loadConfs() def loadConfs(self): current = self.deck['conf'] self.confList = self.mw.col.decks.allConf() self.confList.sort(key=itemgetter('name')) startOn = 0 self.ignoreConfChange = True self.form.dconf.clear() for idx, conf in enumerate(self.confList): self.form.dconf.addItem(conf['name']) if str(conf['id']) == str(current): startOn = idx self.ignoreConfChange = False self.form.dconf.setCurrentIndex(startOn) if self._origNewOrder is None: self._origNewOrder = self.confList[startOn]['new']['order'] self.onConfChange(startOn) def confOpts(self): m = QMenu(self.mw) a = m.addAction(_("Add")) a.triggered.connect(self.addGroup) a = m.addAction(_("Delete")) a.triggered.connect(self.remGroup) a = m.addAction(_("Rename")) a.triggered.connect(self.renameGroup) a = m.addAction(_("Set for all subdecks")) a.triggered.connect(self.setChildren) if not self.childDids: a.setEnabled(False) m.exec_(QCursor.pos()) def onConfChange(self, idx): if self.ignoreConfChange: return if self.conf: self.saveConf() conf = self.confList[idx] self.deck['conf'] = conf['id'] self.loadConf() cnt = 0 for d in self.mw.col.decks.all(): if d['dyn']: continue if d['conf'] == conf['id']: cnt += 1 if cnt > 1: txt = _("Your changes will affect multiple decks. If you wish to " "change only the current deck, please add a new options group first.") else: txt = "" self.form.count.setText(txt) def addGroup(self): name = getOnlyText(_("New options group name:")) if not name: return # first, save currently entered data to current conf self.saveConf() # then clone the conf id = self.mw.col.decks.confId(name, cloneFrom=self.conf) # set the deck to the new conf self.deck['conf'] = id # then reload the conf list self.loadConfs() def remGroup(self): if self.conf['id'] == 1: showInfo(_("The default configuration can't be removed."), self) else: self.mw.col.decks.remConf(self.conf['id']) self.deck['conf'] = 1 self.loadConfs() def renameGroup(self): old = self.conf['name'] name = getOnlyText(_("New name:"), default=old) if not name or name == old: return self.conf['name'] = name self.loadConfs() def setChildren(self): if not askUser( _("Set all decks below %s to this option group?") % self.deck['name']): return for did in self.childDids: deck = self.mw.col.decks.get(did) if deck['dyn']: continue deck['conf'] = self.deck['conf'] self.mw.col.decks.save(deck) tooltip(ngettext("%d deck updated.", "%d decks updated.", \ len(self.childDids)) % len(self.childDids)) # Loading ################################################## def listToUser(self, l): return " ".join([str(x) for x in l]) def parentLimText(self, type="new"): # top level? if "::" not in self.deck['name']: return "" lim = -1 for d in self.mw.col.decks.parents(self.deck['id']): c = self.mw.col.decks.confForDid(d['id']) x = c[type]['perDay'] if lim == -1: lim = x else: lim = min(x, lim) return _("(parent limit: %d)") % lim def loadConf(self): self.conf = self.mw.col.decks.confForDid(self.deck['id']) # new c = self.conf['new'] f = self.form f.lrnSteps.setText(self.listToUser(c['delays'])) f.lrnGradInt.setValue(c['ints'][0]) f.lrnEasyInt.setValue(c['ints'][1]) f.lrnEasyInt.setValue(c['ints'][1]) f.lrnFactor.setValue(c['initialFactor']/10.0) f.newOrder.setCurrentIndex(c['order']) f.newPerDay.setValue(c['perDay']) f.bury.setChecked(c.get("bury", True)) f.newplim.setText(self.parentLimText('new')) # rev c = self.conf['rev'] f.revPerDay.setValue(c['perDay']) f.easyBonus.setValue(c['ease4']*100) f.fi1.setValue(c['ivlFct']*100) f.maxIvl.setValue(c['maxIvl']) f.revplim.setText(self.parentLimText('rev')) f.buryRev.setChecked(c.get("bury", True)) # lapse c = self.conf['lapse'] f.lapSteps.setText(self.listToUser(c['delays'])) f.lapMult.setValue(c['mult']*100) f.lapMinInt.setValue(c['minInt']) f.leechThreshold.setValue(c['leechFails']) f.leechAction.setCurrentIndex(c['leechAction']) # general c = self.conf f.maxTaken.setValue(c['maxTaken']) f.showTimer.setChecked(c.get('timer', 0)) f.autoplaySounds.setChecked(c['autoplay']) f.replayQuestion.setChecked(c.get('replayq', True)) # description f.desc.setPlainText(self.deck['desc']) def onRestore(self): self.mw.progress.start() self.mw.col.decks.restoreToDefault(self.conf) self.mw.progress.finish() self.loadConf() # New order ################################################## def onNewOrderChanged(self, new): old = self.conf['new']['order'] if old == new: return self.conf['new']['order'] = new self.mw.progress.start() self.mw.col.sched.resortConf(self.conf) self.mw.progress.finish() # Saving ################################################## def updateList(self, conf, key, w, minSize=1): items = str(w.text()).split(" ") ret = [] for i in items: if not i: continue try: i = float(i) assert i > 0 if i == int(i): i = int(i) ret.append(i) except: # invalid, don't update showWarning(_("Steps must be numbers.")) return if len(ret) < minSize: showWarning(_("At least one step is required.")) return conf[key] = ret def saveConf(self): # new c = self.conf['new'] f = self.form self.updateList(c, 'delays', f.lrnSteps) c['ints'][0] = f.lrnGradInt.value() c['ints'][1] = f.lrnEasyInt.value() c['initialFactor'] = f.lrnFactor.value()*10 c['order'] = f.newOrder.currentIndex() c['perDay'] = f.newPerDay.value() c['bury'] = f.bury.isChecked() if self._origNewOrder != c['order']: # order of current deck has changed, so have to resort if c['order'] == NEW_CARDS_RANDOM: self.mw.col.sched.randomizeCards(self.deck['id']) else: self.mw.col.sched.orderCards(self.deck['id']) # rev c = self.conf['rev'] c['perDay'] = f.revPerDay.value() c['ease4'] = f.easyBonus.value()/100.0 c['ivlFct'] = f.fi1.value()/100.0 c['maxIvl'] = f.maxIvl.value() c['bury'] = f.buryRev.isChecked() # lapse c = self.conf['lapse'] self.updateList(c, 'delays', f.lapSteps, minSize=0) c['mult'] = f.lapMult.value()/100.0 c['minInt'] = f.lapMinInt.value() c['leechFails'] = f.leechThreshold.value() c['leechAction'] = f.leechAction.currentIndex() # general c = self.conf c['maxTaken'] = f.maxTaken.value() c['timer'] = f.showTimer.isChecked() and 1 or 0 c['autoplay'] = f.autoplaySounds.isChecked() c['replayq'] = f.replayQuestion.isChecked() # description self.deck['desc'] = f.desc.toPlainText() self.mw.col.decks.save(self.deck) self.mw.col.decks.save(self.conf) def reject(self): self.accept() def accept(self): self.saveConf() self.mw.reset() QDialog.accept(self) anki-2.1.0+dfsg~b36/aqt/downloader.py000066400000000000000000000044561323611211500173650ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import time, re, traceback from aqt.qt import * from anki.sync import AnkiRequestsClient from aqt.utils import showWarning from anki.hooks import addHook, remHook import aqt def download(mw, code): "Download addon from AnkiWeb. Caller must start & stop progress diag." # create downloading thread thread = Downloader(code) done = False def onRecv(): if done: return mw.progress.update(label="%dKB downloaded" % (thread.recvTotal/1024)) thread.recv.connect(onRecv) thread.start() while not thread.isFinished(): mw.app.processEvents() thread.wait(100) # make sure any posted events don't fire after we return done = True if not thread.error: # success return thread.data, thread.fname else: return "error", thread.error class Downloader(QThread): recv = pyqtSignal() def __init__(self, code): QThread.__init__(self) self.code = code self.error = None def run(self): # setup progress handler self.byteUpdate = time.time() self.recvTotal = 0 def recvEvent(bytes): self.recvTotal += bytes self.recv.emit() addHook("httpRecv", recvEvent) client = AnkiRequestsClient() try: resp = client.get( aqt.appShared + "download/%s?v=2.1" % self.code) if resp.status_code == 200: data = client.streamContent(resp) elif resp.status_code in (403,404): self.error = _("Invalid code, or add-on not available for your version of Anki.") return else: self.error = _("Error downloading: %s" % resp.status_code) return except Exception as e: exc = traceback.format_exc() try: self.error = str(e[0]) except: self.error = str(exc) return finally: remHook("httpRecv", recvEvent) self.fname = re.match("attachment; filename=(.+)", resp.headers['content-disposition']).group(1) self.data = data anki-2.1.0+dfsg~b36/aqt/dyndeckconf.py000066400000000000000000000106301323611211500175050ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * import aqt from aqt.utils import showWarning, openHelp, askUser, saveGeom, restoreGeom class DeckConf(QDialog): def __init__(self, mw, first=False, search="", deck=None): QDialog.__init__(self, mw) self.mw = mw self.deck = deck or self.mw.col.decks.current() self.search = search self.form = aqt.forms.dyndconf.Ui_Dialog() self.form.setupUi(self) if first: label = _("Build") else: label = _("Rebuild") self.ok = self.form.buttonBox.addButton( label, QDialogButtonBox.AcceptRole) self.mw.checkpoint(_("Options")) self.setWindowModality(Qt.WindowModal) self.form.buttonBox.helpRequested.connect(lambda: openHelp("filtered")) self.setWindowTitle(_("Options for %s") % self.deck['name']) restoreGeom(self, "dyndeckconf") self.initialSetup() self.loadConf() if search: self.form.search.setText(search + " is:due") self.form.search_2.setText(search + " is:new") self.form.search.selectAll() if self.mw.col.schedVer() == 1: self.form.secondFilter.setVisible(False) self.show() self.exec_() saveGeom(self, "dyndeckconf") def initialSetup(self): import anki.consts as cs self.form.order.addItems(list(cs.dynOrderLabels().values())) self.form.order_2.addItems(list(cs.dynOrderLabels().values())) self.form.resched.stateChanged.connect(self._onReschedToggled) def _onReschedToggled(self, _state): self.form.previewDelayWidget.setVisible(not self.form.resched.isChecked() and self.mw.col.schedVer() > 1) def loadConf(self): f = self.form d = self.deck f.resched.setChecked(d['resched']) self._onReschedToggled(0) search, limit, order = d['terms'][0] f.search.setText(search) f.order.setCurrentIndex(order) f.limit.setValue(limit) f.previewDelay.setValue(d.get("previewDelay", 10)) if len(d['terms']) > 1: search, limit, order = d['terms'][1] f.search_2.setText(search) f.order_2.setCurrentIndex(order) f.limit_2.setValue(limit) f.secondFilter.setChecked(True) f.filter2group.setVisible(True) else: f.order_2.setCurrentIndex(5) f.limit_2.setValue(20) f.secondFilter.setChecked(False) f.filter2group.setVisible(False) def saveConf(self): f = self.form d = self.deck d['resched'] = f.resched.isChecked() d['delays'] = None terms = [[ f.search.text(), f.limit.value(), f.order.currentIndex()]] if f.secondFilter.isChecked(): terms.append([ f.search_2.text(), f.limit_2.value(), f.order_2.currentIndex()]) d['terms'] = terms d['previewDelay'] = f.previewDelay.value() self.mw.col.decks.save(d) return True def reject(self): self.ok = False QDialog.reject(self) def accept(self): if not self.saveConf(): return if not self.mw.col.sched.rebuildDyn(): if askUser(_("""\ The provided search did not match any cards. Would you like to revise \ it?""")): return self.mw.reset() QDialog.accept(self) # Step load/save - fixme: share with std options screen ######################################################## def listToUser(self, l): return " ".join([str(x) for x in l]) def userToList(self, w, minSize=1): items = str(w.text()).split(" ") ret = [] for i in items: if not i: continue try: i = float(i) assert i > 0 if i == int(i): i = int(i) ret.append(i) except: # invalid, don't update showWarning(_("Steps must be numbers.")) return if len(ret) < minSize: showWarning(_("At least one step is required.")) return return ret anki-2.1.0+dfsg~b36/aqt/editcurrent.py000066400000000000000000000044261323611211500175540ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * import aqt.editor from aqt.utils import saveGeom, restoreGeom from anki.hooks import addHook, remHook from anki.utils import isMac class EditCurrent(QDialog): def __init__(self, mw): QDialog.__init__(self, None, Qt.Window) mw.setupDialogGC(self) self.mw = mw self.form = aqt.forms.editcurrent.Ui_Dialog() self.form.setupUi(self) self.setWindowTitle(_("Edit Current")) self.setMinimumHeight(400) self.setMinimumWidth(500) self.form.buttonBox.button(QDialogButtonBox.Close).setShortcut( QKeySequence("Ctrl+Return")) self.editor = aqt.editor.Editor(self.mw, self.form.fieldsArea, self) self.editor.setNote(self.mw.reviewer.card.note(), focusTo=0) restoreGeom(self, "editcurrent") addHook("reset", self.onReset) self.mw.requireReset() self.show() # reset focus after open self.editor.web.setFocus() def onReset(self): # lazy approach for now: throw away edits try: n = self.mw.reviewer.card.note() n.load() except: # card's been deleted remHook("reset", self.onReset) self.editor.setNote(None) self.mw.reset() aqt.dialogs.markClosed("EditCurrent") self.close() return self.editor.setNote(n) def reject(self): self.saveAndClose() def saveAndClose(self): self.editor.saveNow(self._saveAndClose) def _saveAndClose(self): remHook("reset", self.onReset) r = self.mw.reviewer try: r.card.load() except: # card was removed by clayout pass else: self.mw.reviewer.cardQueue.append(self.mw.reviewer.card) self.editor.cleanup() self.mw.moveToState("review") saveGeom(self, "editcurrent") aqt.dialogs.markClosed("EditCurrent") QDialog.reject(self) def closeWithCallback(self, onsuccess): def callback(): self._saveAndClose() onsuccess() self.editor.saveNow(callback) anki-2.1.0+dfsg~b36/aqt/editor.py000066400000000000000000000771031323611211500165140ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import re import os import urllib.request, urllib.error, urllib.parse import ctypes import urllib.request, urllib.parse, urllib.error import warnings import html import mimetypes import base64 import unicodedata from anki.lang import _ from aqt.qt import * from anki.utils import stripHTML, isWin, isMac, namedtmp, json, stripHTMLMedia, \ checksum import anki.sound from anki.hooks import runHook, runFilter from aqt.sound import getAudio from aqt.webview import AnkiWebView from aqt.utils import shortcut, showInfo, showWarning, getFile, \ openHelp, tooltip, downArrow import aqt from bs4 import BeautifulSoup import requests pics = ("jpg", "jpeg", "png", "tif", "tiff", "gif", "svg", "webp") audio = ("wav", "mp3", "ogg", "flac", "mp4", "swf", "mov", "mpeg", "mkv", "m4a", "3gp", "spx", "oga") _html = """
%s
""" # caller is responsible for resetting note on reset class Editor: def __init__(self, mw, widget, parentWindow, addMode=False): self.mw = mw self.widget = widget self.parentWindow = parentWindow self.note = None self.addMode = addMode self.currentField = None # current card, for card layout self.card = None self.setupOuter() self.setupWeb() self.setupShortcuts() self.setupTags() # Initial setup ############################################################ def setupOuter(self): l = QVBoxLayout() l.setContentsMargins(0,0,0,0) l.setSpacing(0) self.widget.setLayout(l) self.outerLayout = l def setupWeb(self): self.web = EditorWebView(self.widget, self) self.web.title = "editor" self.web.allowDrops = True self.web.onBridgeCmd = self.onBridgeCmd self.outerLayout.addWidget(self.web, 1) righttopbtns = list() righttopbtns.append(self._addButton('text_bold', 'bold', _("Bold text (Ctrl+B)"), id='bold')) righttopbtns.append(self._addButton('text_italic', 'italic', _("Italic text (Ctrl+I)"), id='italic')) righttopbtns.append(self._addButton('text_under', 'underline', _("Underline text (Ctrl+U)"), id='underline')) righttopbtns.append(self._addButton('text_super', 'super', _("Superscript (Ctrl++)"), id='superscript')) righttopbtns.append(self._addButton('text_sub', 'sub', _("Subscript (Ctrl+=)"), id='subscript')) righttopbtns.append(self._addButton('text_clear', 'clear', _("Remove formatting (Ctrl+R)"))) # The color selection buttons do not use an icon so the HTML must be specified manually tip = _("Set foreground colour (F7)") righttopbtns.append(''''''.format(tip)) tip = _("Change colour (F8)") righttopbtns.append(''''''.format(tip)) righttopbtns.append(self._addButton('text_cloze', 'cloze', _("Cloze deletion (Ctrl+Shift+C)"))) righttopbtns.append(self._addButton('paperclip', 'attach', _("Attach pictures/audio/video (F3)"))) righttopbtns.append(self._addButton('media-record', 'record', _("Record audio (F5)"))) righttopbtns.append(self._addButton('more', 'more')) righttopbtns = runFilter("setupEditorButtons", righttopbtns, self) topbuts = """
%(rightbts)s
""" % dict(flds=_("Fields"), cards=_("Cards"), rightbts="".join(righttopbtns)) bgcol = self.mw.app.palette().window().color().name() # then load page self.web.stdHtml(_html % ( bgcol, bgcol, topbuts, _("Show Duplicates")), css=["editor.css"], js=["jquery.js", "editor.js"]) # Top buttons ###################################################################### def resourceToData(self, path): """Convert a file (specified by a path) into a data URI.""" if not os.path.exists(path): raise FileNotFoundError mime, _ = mimetypes.guess_type(path) with open(path, 'rb') as fp: data = fp.read() data64 = b''.join(base64.encodestring(data).splitlines()) return 'data:%s;base64,%s' % (mime, data64.decode('ascii')) def addButton(self, icon, cmd, func, tip="", label="", id=None, toggleable=False, keys=None, disables=True): """Assign func to bridge cmd, register shortcut, return button""" if cmd not in self._links: self._links[cmd] = func if keys: QShortcut(QKeySequence(keys), self.widget, activated = lambda s=self: func(s)) btn = self._addButton(icon, cmd, tip=tip, label=label, id=id, toggleable=toggleable, disables=disables) return btn def _addButton(self, icon, cmd, tip="", label="", id=None, toggleable=False, disables=True): if icon: if os.path.isabs(icon): iconstr = self.resourceToData(icon) else: iconstr = "/_anki/imgs/{}.png".format(icon) imgelm = ''''''.format(iconstr) else: imgelm = "" if label or not imgelm: labelelm = '''{}'''.format(label or cmd) else: labelelm = "" if id: idstr = 'id={}'.format(id) else: idstr = "" if toggleable: toggleScript = 'toggleEditorButton(this);' else: toggleScript = '' tip = shortcut(tip) theclass = "linkb" if not disables: theclass += " perm" return (''''''.format( imgelm=imgelm, cmd=cmd, tip=tip, labelelm=labelelm, id=idstr, togglesc=toggleScript, theclass=theclass) ) def setupShortcuts(self): # if a third element is provided, enable shortcut even when no field selected cuts = [ ("Ctrl+L", self.onCardLayout, True), ("Ctrl+B", self.toggleBold), ("Ctrl+I", self.toggleItalic), ("Ctrl+U", self.toggleUnderline), ("Ctrl++", self.toggleSuper), ("Ctrl+=", self.toggleSub), ("Ctrl+R", self.removeFormat), ("F7", self.onForeground), ("F8", self.onChangeCol), ("Ctrl+Shift+C", self.onCloze), ("Ctrl+Shift+Alt+C", self.onCloze), ("F3", self.onAddMedia), ("F5", self.onRecSound), ("Ctrl+T, T", self.insertLatex), ("Ctrl+T, E", self.insertLatexEqn), ("Ctrl+T, M", self.insertLatexMathEnv), ("Ctrl+M, M", self.insertMathjaxInline), ("Ctrl+M, E", self.insertMathjaxBlock), ("Ctrl+Shift+X", self.onHtmlEdit), ("Ctrl+Shift+T", self.onFocusTags, True) ] runHook("setupEditorShortcuts", cuts, self) for row in cuts: if len(row) == 2: keys, fn = row fn = self._addFocusCheck(fn) else: keys, fn, _ = row QShortcut(QKeySequence(keys), self.widget, activated=fn) def _addFocusCheck(self, fn): def checkFocus(): if self.currentField is None: return fn() return checkFocus def onFields(self): self.saveNow(self._onFields) def _onFields(self): from aqt.fields import FieldDialog FieldDialog(self.mw, self.note, parent=self.parentWindow) def onCardLayout(self): self.saveNow(self._onCardLayout) def _onCardLayout(self): from aqt.clayout import CardLayout if self.card: ord = self.card.ord else: ord = 0 CardLayout(self.mw, self.note, ord=ord, parent=self.parentWindow, addMode=self.addMode) if isWin: self.parentWindow.activateWindow() # JS->Python bridge ###################################################################### def onBridgeCmd(self, cmd): if not self.note or not runHook: # shutdown return # focus lost or key/button pressed? if cmd.startswith("blur") or cmd.startswith("key"): (type, ord, txt) = cmd.split(":", 2) ord = int(ord) txt = urllib.parse.unquote(txt) txt = unicodedata.normalize("NFC", txt) txt = self.mungeHTML(txt) # misbehaving apps may include a null byte in the text txt = txt.replace("\x00", "") # reverse the url quoting we added to get images to display txt = self.mw.col.media.escapeImages(txt, unescape=True) self.note.fields[ord] = txt if not self.addMode: self.note.flush() self.mw.requireReset() if type == "blur": self.currentField = None # run any filters if runFilter( "editFocusLost", False, self.note, ord): # something updated the note; update it after a subsequent focus # event has had time to fire self.mw.progress.timer(100, self.loadNoteKeepingFocus, False) else: self.checkValid() else: runHook("editTimer", self.note) self.checkValid() # focused into field? elif cmd.startswith("focus"): (type, num) = cmd.split(":", 1) self.currentField = int(num) runHook("editFocusGained", self.note, self.currentField) elif cmd in self._links: self._links[cmd](self) else: print("uncaught cmd", cmd) def mungeHTML(self, txt): txt = re.sub(r"
$", "", txt) return txt # Setting/unsetting the current note ###################################################################### def setNote(self, note, hide=True, focusTo=None): "Make NOTE the current note." self.note = note self.currentField = None if self.note: self.loadNote(focusTo=focusTo) else: self.hideCompleters() if hide: self.widget.hide() def loadNoteKeepingFocus(self): self.loadNote(self.currentField) def loadNote(self, focusTo=None): if not self.note: return data = [] for fld, val in list(self.note.items()): data.append((fld, self.mw.col.media.escapeImages(val))) self.widget.show() self.updateTags() def oncallback(arg): if not self.note: return self.setupForegroundButton() self.checkValid() if focusTo is not None: self.web.setFocus() runHook("loadNote", self) self.web.evalWithCallback("setFields(%s); setFonts(%s); focusField(%s)" % ( json.dumps(data), json.dumps(self.fonts()), json.dumps(focusTo)), oncallback) def fonts(self): return [(f['font'], f['size'], f['rtl']) for f in self.note.model()['flds']] def saveNow(self, callback): "Save unsaved edits then call callback()." if not self.note: # calling code may not expect the callback to fire immediately self.mw.progress.timer(10, callback, False) return self.saveTags() self.web.evalWithCallback("saveNow()", lambda res: callback()) def checkValid(self): cols = [] err = None for f in self.note.fields: cols.append("#fff") err = self.note.dupeOrEmpty() if err == 2: cols[0] = "#fcc" self.web.eval("showDupes();") else: self.web.eval("hideDupes();") self.web.eval("setBackgrounds(%s);" % json.dumps(cols)) def showDupes(self): contents = stripHTMLMedia(self.note.fields[0]) browser = aqt.dialogs.open("Browser", self.mw) browser.form.searchEdit.lineEdit().setText( '"dupe:%s,%s"' % (self.note.model()['id'], contents)) browser.onSearchActivated() def fieldsAreBlank(self): if not self.note: return True m = self.note.model() for c, f in enumerate(self.note.fields): if f and not m['flds'][c]['sticky']: return False return True def cleanup(self): self.setNote(None) # prevent any remaining evalWithCallback() events from firing after C++ object deleted self.web = None # HTML editing ###################################################################### def onHtmlEdit(self): field = self.currentField self.saveNow(lambda: self._onHtmlEdit(field)) def _onHtmlEdit(self, field): d = QDialog(self.widget) form = aqt.forms.edithtml.Ui_Dialog() form.setupUi(d) form.buttonBox.helpRequested.connect(lambda: openHelp("editor")) form.textEdit.setPlainText(self.note.fields[field]) form.textEdit.moveCursor(QTextCursor.End) d.exec_() html = form.textEdit.toPlainText() # filter html through beautifulsoup so we can strip out things like a # leading
with warnings.catch_warnings() as w: warnings.simplefilter('ignore', UserWarning) html = str(BeautifulSoup(html, "html.parser")) self.note.fields[field] = html self.loadNote(focusTo=field) # Tag handling ###################################################################### def setupTags(self): import aqt.tagedit g = QGroupBox(self.widget) g.setFlat(True) tb = QGridLayout() tb.setSpacing(12) tb.setContentsMargins(6,6,6,6) # tags l = QLabel(_("Tags")) tb.addWidget(l, 1, 0) self.tags = aqt.tagedit.TagEdit(self.widget) self.tags.lostFocus.connect(self.saveTags) self.tags.setToolTip(shortcut(_("Jump to tags with Ctrl+Shift+T"))) tb.addWidget(self.tags, 1, 1) g.setLayout(tb) self.outerLayout.addWidget(g) def updateTags(self): if self.tags.col != self.mw.col: self.tags.setCol(self.mw.col) if not self.tags.text() or not self.addMode: self.tags.setText(self.note.stringTags().strip()) def saveTags(self): if not self.note: return tagsTxt = unicodedata.normalize("NFC", self.tags.text()) self.note.tags = self.mw.col.tags.canonify( self.mw.col.tags.split(tagsTxt)) self.tags.setText(self.mw.col.tags.join(self.note.tags).strip()) if not self.addMode: self.note.flush() runHook("tagsUpdated", self.note) def saveAddModeVars(self): if self.addMode: # save tags to model m = self.note.model() m['tags'] = self.note.tags self.mw.col.models.save(m) def hideCompleters(self): self.tags.hideCompleter() def onFocusTags(self): self.tags.setFocus() # Format buttons ###################################################################### def toggleBold(self): self.web.eval("setFormat('bold');") def toggleItalic(self): self.web.eval("setFormat('italic');") def toggleUnderline(self): self.web.eval("setFormat('underline');") def toggleSuper(self): self.web.eval("setFormat('superscript');") def toggleSub(self): self.web.eval("setFormat('subscript');") def removeFormat(self): self.web.eval("setFormat('removeFormat');") def onCloze(self): # check that the model is set up for cloze deletion if not re.search('{{(.*:)*cloze:',self.note.model()['tmpls'][0]['qfmt']): if self.addMode: tooltip(_("Warning, cloze deletions will not work until " "you switch the type at the top to Cloze.")) else: showInfo(_("""\ To make a cloze deletion on an existing note, you need to change it \ to a cloze type first, via Edit>Change Note Type.""")) return # find the highest existing cloze highest = 0 for name, val in list(self.note.items()): m = re.findall(r"\{\{c(\d+)::", val) if m: highest = max(highest, sorted([int(x) for x in m])[-1]) # reuse last? if not self.mw.app.keyboardModifiers() & Qt.AltModifier: highest += 1 # must start at 1 highest = max(1, highest) self.web.eval("wrap('{{c%d::', '}}');" % highest) # Foreground colour ###################################################################### def setupForegroundButton(self): self.fcolour = self.mw.pm.profile.get("lastColour", "#00f") self.onColourChanged() # use last colour def onForeground(self): self._wrapWithColour(self.fcolour) # choose new colour def onChangeCol(self): new = QColorDialog.getColor(QColor(self.fcolour), None) # native dialog doesn't refocus us for some reason self.parentWindow.activateWindow() if new.isValid(): self.fcolour = new.name() self.onColourChanged() self._wrapWithColour(self.fcolour) def _updateForegroundButton(self): self.web.eval("setFGButton('%s')" % self.fcolour) def onColourChanged(self): self._updateForegroundButton() self.mw.pm.profile['lastColour'] = self.fcolour def _wrapWithColour(self, colour): self.web.eval("setFormat('forecolor', '%s')" % colour) # Audio/video/images ###################################################################### def onAddMedia(self): key = (_("Media") + " (*.jpg *.png *.gif *.tiff *.svg *.tif *.jpeg "+ "*.mp3 *.ogg *.wav *.avi *.ogv *.mpg *.mpeg *.mov *.mp4 " + "*.mkv *.ogx *.ogv *.oga *.flv *.swf *.flac *.webp *.m4a)") def accept(file): self.addMedia(file, canDelete=True) file = getFile(self.widget, _("Add Media"), accept, key, key="media") self.parentWindow.activateWindow() def addMedia(self, path, canDelete=False): html = self._addMedia(path, canDelete) self.web.eval("setFormat('inserthtml', %s);" % json.dumps(html)) def _addMedia(self, path, canDelete=False): "Add to media folder and return local img or sound tag." # copy to media folder fname = self.mw.col.media.addFile(path) # remove original? if canDelete and self.mw.pm.profile['deleteMedia']: if os.path.abspath(fname) != os.path.abspath(path): try: os.unlink(path) except: pass # return a local html link return self.fnameToLink(fname) def onRecSound(self): try: file = getAudio(self.widget) except Exception as e: showWarning(_( "Couldn't record audio. Have you installed lame and sox?") + "\n\n" + repr(str(e))) return if file: self.addMedia(file) # Media downloads ###################################################################### def urlToLink(self, url): fname = self.urlToFile(url) if not fname: return url return self.fnameToLink(fname) def fnameToLink(self, fname): ext = fname.split(".")[-1].lower() if ext in pics: name = urllib.parse.quote(fname.encode("utf8")) return '' % name else: anki.sound.clearAudioQueue() anki.sound.play(fname) return '[sound:%s]' % fname def urlToFile(self, url): l = url.lower() for suffix in pics+audio: if l.endswith("." + suffix): return self._retrieveURL(url) # not a supported type return def isURL(self, s): s = s.lower() return (s.startswith("http://") or s.startswith("https://") or s.startswith("ftp://") or s.startswith("file://")) def _retrieveURL(self, url): "Download file into media folder and return local filename or None." # urllib doesn't understand percent-escaped utf8, but requires things like # '#' to be escaped. url = urllib.parse.unquote(url) if url.lower().startswith("file://"): url = url.replace("%", "%25") url = url.replace("#", "%23") local = True else: local = False # fetch it into a temporary folder self.mw.progress.start( immediate=not local, parent=self.parentWindow) ct = None try: if local: req = urllib.request.Request(url, None, { 'User-Agent': 'Mozilla/5.0 (compatible; Anki)'}) filecontents = urllib.request.urlopen(req).read() else: r = requests.get(url, timeout=30) if r.status_code != 200: showWarning(_("Unexpected response code: %s") % r.status_code) return filecontents = r.content ct = r.headers.get("content-type") except urllib.error.URLError as e: showWarning(_("An error occurred while opening %s") % e) return except requests.exceptions.RequestException as e: showWarning(_("An error occurred while opening %s") % e) return finally: self.mw.progress.finish() # strip off any query string url = re.sub(r"\?.*?$", "", url) path = urllib.parse.unquote(url) return self.mw.col.media.writeData(path, filecontents, typeHint=ct) # Paste/drag&drop ###################################################################### removeTags = ["script", "iframe", "object", "style"] def _pastePreFilter(self, html, internal): with warnings.catch_warnings() as w: warnings.simplefilter('ignore', UserWarning) doc = BeautifulSoup(html, "html.parser") if not internal: for tag in self.removeTags: for node in doc(tag): node.decompose() # convert p tags to divs for node in doc("p"): node.name = "div" for tag in doc("img"): try: src = tag['src'] except KeyError: # for some bizarre reason, mnemosyne removes src elements # from missing media continue # in internal pastes, rewrite mediasrv references to relative if internal: m = re.match(r"http://127.0.0.1:\d+/(.*)$", src) if m: tag['src'] = m.group(1) else: # in external pastes, download remote media if self.isURL(src): fname = self._retrieveURL(src) if fname: tag['src'] = fname html = str(doc) return html def doPaste(self, html, internal, extended=False): html = self._pastePreFilter(html, internal) if extended: extended = "true" else: extended = "false" self.web.eval("pasteHTML(%s, %s, %s);" % ( json.dumps(html), json.dumps(internal), extended)) def doDrop(self, html, internal): self.web.evalWithCallback("makeDropTargetCurrent();", lambda _: self.doPaste(html, internal)) def onPaste(self): self.web.onPaste() def onCutOrCopy(self): self.web.flagAnkiText() # Advanced menu ###################################################################### def onAdvanced(self): m = QMenu(self.mw) a = m.addAction(_("MathJax inline")) a.triggered.connect(self.insertMathjaxInline) a.setShortcut(QKeySequence("Ctrl+M, M")) a = m.addAction(_("MathJax block")) a.triggered.connect(self.insertMathjaxBlock) a.setShortcut(QKeySequence("Ctrl+M, E")) a = m.addAction(_("LaTeX")) a.triggered.connect(self.insertLatex) a.setShortcut(QKeySequence("Ctrl+T, T")) a = m.addAction(_("LaTeX equation")) a.triggered.connect(self.insertLatexEqn) a.setShortcut(QKeySequence("Ctrl+T, E")) a = m.addAction(_("LaTeX math env.")) a.triggered.connect(self.insertLatexMathEnv) a.setShortcut(QKeySequence("Ctrl+T, M")) a = m.addAction(_("Edit HTML")) a.triggered.connect(self.onHtmlEdit) a.setShortcut(QKeySequence("Ctrl+Shift+X")) m.exec_(QCursor.pos()) # LaTeX ###################################################################### def insertLatex(self): self.web.eval("wrap('[latex]', '[/latex]');") def insertLatexEqn(self): self.web.eval("wrap('[$]', '[/$]');") def insertLatexMathEnv(self): self.web.eval("wrap('[$$]', '[/$$]');") def insertMathjaxInline(self): self.web.eval("wrap('\\\\(', '\\\\)');") def insertMathjaxBlock(self): self.web.eval("wrap('\\\\[', '\\\\]');") # Links from HTML ###################################################################### _links = dict( fields=onFields, cards=onCardLayout, bold=toggleBold, italic=toggleItalic, underline=toggleUnderline, super=toggleSuper, sub=toggleSub, clear=removeFormat, colour=onForeground, changeCol=onChangeCol, cloze=onCloze, attach=onAddMedia, record=onRecSound, more=onAdvanced, dupes=showDupes, paste=onPaste, cutOrCopy=onCutOrCopy, ) # Pasting, drag & drop, and keyboard layouts ###################################################################### class EditorWebView(AnkiWebView): def __init__(self, parent, editor): AnkiWebView.__init__(self) self.editor = editor self.strip = self.editor.mw.pm.profile['stripHTML'] self.setAcceptDrops(True) self._markInternal = False clip = self.editor.mw.app.clipboard() clip.dataChanged.connect(self._onClipboardChange) def _onClipboardChange(self): if self._markInternal: self._markInternal = False self._flagAnkiText() def onCut(self): self.triggerPageAction(QWebEnginePage.Cut) def onCopy(self): self.triggerPageAction(QWebEnginePage.Copy) def onPaste(self): extended = self.editor.mw.app.queryKeyboardModifiers() & Qt.ShiftModifier mime = self.editor.mw.app.clipboard().mimeData(mode=QClipboard.Clipboard) html, internal = self._processMime(mime) if not html: return self.editor.doPaste(html, internal, extended) def dropEvent(self, evt): mime = evt.mimeData() if evt.source() and mime.hasHtml(): # don't filter html from other fields html, internal = mime.html(), True else: html, internal = self._processMime(mime) if not html: return self.editor.doDrop(html, internal) # returns (html, isInternal) def _processMime(self, mime): # print("html=%s image=%s urls=%s txt=%s" % ( # mime.hasHtml(), mime.hasImage(), mime.hasUrls(), mime.hasText())) # print("html", mime.html()) # print("urls", mime.urls()) # print("text", mime.text()) # try various content types in turn html, internal = self._processHtml(mime) if html: return html, internal for fn in (self._processUrls, self._processImage, self._processText): html = fn(mime) if html: return html, False return "", False def _processUrls(self, mime): if not mime.hasUrls(): return url = mime.urls()[0].toString() # chrome likes to give us the URL twice with a \n url = url.splitlines()[0] return self.editor.urlToLink(url) def _processText(self, mime): if not mime.hasText(): return txt = mime.text() # if the user is pasting an image or sound link, convert it to local if self.editor.isURL(txt): txt = txt.split("\r\n")[0] return self.editor.urlToLink(txt) # normal text; convert it to HTML txt = html.escape(txt) txt = txt.replace("\n", "
") return txt def _processHtml(self, mime): if not mime.hasHtml(): return None, False html = mime.html() # no filtering required for internal pastes if html.startswith(""): return html[11:], True return html, False def _processImage(self, mime): im = QImage(mime.imageData()) uname = namedtmp("paste") if self.editor.mw.pm.profile.get("pastePNG", False): ext = ".png" im.save(uname+ext, None, 50) else: ext = ".jpg" im.save(uname+ext, None, 80) # invalid image? path = uname+ext if not os.path.exists(path): return # hash and rename csum = checksum(open(path, "rb").read()) newpath = "{}-{}{}".format(uname, csum, ext) if os.path.exists(newpath): os.unlink(newpath) os.rename(path, newpath) # add to media and return resulting html link return self.editor._addMedia(newpath) def flagAnkiText(self): # be ready to adjust when clipboard event fires self._markInternal = True def _flagAnkiText(self): # add a comment in the clipboard html so we can tell text is copied # from us and doesn't need to be stripped clip = self.editor.mw.app.clipboard() mime = clip.mimeData() if not mime.hasHtml(): return html = mime.html() mime.setHtml("" + html) clip.setMimeData(mime) def contextMenuEvent(self, evt): m = QMenu(self) a = m.addAction(_("Cut")) a.triggered.connect(self.onCut) a = m.addAction(_("Copy")) a.triggered.connect(self.onCopy) a = m.addAction(_("Paste")) a.triggered.connect(self.onPaste) runHook("EditorWebView.contextMenuEvent", self, m) m.popup(QCursor.pos()) anki-2.1.0+dfsg~b36/aqt/errors.py000066400000000000000000000120001323611211500165230ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import sys, traceback import html from anki.lang import _ from aqt.qt import * from aqt.utils import showText, showWarning if not os.environ.get("DEBUG"): def excepthook(etype,val,tb): sys.stderr.write("Caught exception:\n%s%s\n" % ( ''.join(traceback.format_tb(tb)), '{0}: {1}'.format(etype, val))) sys.excepthook = excepthook class ErrorHandler(QObject): "Catch stderr and write into buffer." ivl = 100 errorTimer = pyqtSignal() def __init__(self, mw): QObject.__init__(self, mw) self.mw = mw self.timer = None self.errorTimer.connect(self._setTimer) self.pool = "" self._oldstderr = sys.stderr sys.stderr = self def unload(self): sys.stderr = self._oldstderr sys.excepthook = None def write(self, data): # dump to stdout sys.stdout.write(data) # save in buffer self.pool += data # and update timer self.setTimer() def setTimer(self): # we can't create a timer from a different thread, so we post a # message to the object on the main thread self.errorTimer.emit() def _setTimer(self): if not self.timer: self.timer = QTimer(self.mw) self.timer.timeout.connect(self.onTimeout) self.timer.setInterval(self.ivl) self.timer.setSingleShot(True) self.timer.start() def tempFolderMsg(self): return _("""Unable to access Anki media folder. The permissions on \ your system's temporary folder may be incorrect.""") def onTimeout(self): error = html.escape(self.pool) self.pool = "" self.mw.progress.clear() if "abortSchemaMod" in error: return if "10013" in error: return showWarning(_("Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.")) if "Pyaudio not" in error: return showWarning(_("Please install PyAudio")) if "install mplayer" in error: return showWarning(_("Sound and video on cards will not function until mpv or mplayer is installed.")) if "no default input" in error.lower(): return showWarning(_("Please connect a microphone, and ensure " "other programs are not using the audio device.")) if "invalidTempFolder" in error: return showWarning(self.tempFolderMsg()) if "Beautiful Soup is not an HTTP client" in error: return if "disk I/O error" in error: return showWarning(_("""\ An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be \ interfering with Anki. Try disabling such software and see if the \ problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection \ is not corrupt. """)) stdText = _("""\

Error

An error occurred. Please use Tools > Check Database to see if \ that fixes the problem.

If problems persist, please report the problem on our \ support site. Please copy and paste \ the information below into your report.

""") pluginText = _("""\

Error

An error occurred. Please start Anki while holding down the shift \ key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the \ Tools>Add-ons menu item to disable some add-ons and restart Anki, \ repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please \ report the issue on the \ add-ons section of our support site.

Debug info:

""") if self.mw.addonManager.dirty: txt = pluginText else: txt = stdText # show dialog error = self._supportText() + "\n" + error txt = txt + "
" + error + "
" showText(txt, type="html") def _supportText(self): import platform from aqt import appVersion if isWin: platname = "Windows " + platform.win32_ver()[0] elif isMac: platname = "Mac " + platform.mac_ver()[0] else: platname = "Linux" return """\ Anki {} Python {} Qt {} PyQt {} Platform: {} Flags: frz={} ao={} """.format(appVersion, platform.python_version(), QT_VERSION_STR, PYQT_VERSION_STR, platname, getattr(sys, "frozen", False), self.mw.addonManager.dirty) anki-2.1.0+dfsg~b36/aqt/exporting.py000066400000000000000000000120201323611211500172300ustar00rootroot00000000000000# Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import os import re from aqt.qt import * import aqt from aqt.utils import getSaveFile, tooltip, showWarning, askUser, \ checkInvalidFilename from anki.exporting import exporters from anki.hooks import addHook, remHook from anki.lang import ngettext import time class ExportDialog(QDialog): def __init__(self, mw, did=None): QDialog.__init__(self, mw, Qt.Window) self.mw = mw self.col = mw.col self.frm = aqt.forms.exporting.Ui_ExportDialog() self.frm.setupUi(self) self.exporter = None self.setup(did) self.exec_() def setup(self, did): self.exporters = exporters() # if a deck specified, start with .apkg type selected idx = 0 if did: for c, (k,e) in enumerate(self.exporters): if e.ext == ".apkg": idx = c break self.frm.format.insertItems(0, [e[0] for e in self.exporters]) self.frm.format.setCurrentIndex(idx) self.frm.format.activated.connect(self.exporterChanged) self.exporterChanged(idx) # deck list self.decks = [_("All Decks")] + sorted(self.col.decks.allNames()) self.frm.deck.addItems(self.decks) # save button b = QPushButton(_("Export...")) self.frm.buttonBox.addButton(b, QDialogButtonBox.AcceptRole) # set default option if accessed through deck button if did: name = self.mw.col.decks.get(did)['name'] index = self.frm.deck.findText(name) self.frm.deck.setCurrentIndex(index) def exporterChanged(self, idx): self.exporter = self.exporters[idx][1](self.col) self.isApkg = self.exporter.ext == ".apkg" self.isVerbatim = getattr(self.exporter, "verbatim", False) self.isTextNote = hasattr(self.exporter, "includeTags") self.frm.includeSched.setVisible( getattr(self.exporter, "includeSched", None) is not None) self.frm.includeMedia.setVisible( getattr(self.exporter, "includeMedia", None) is not None) self.frm.includeTags.setVisible( getattr(self.exporter, "includeTags", None) is not None) # show deck list? self.frm.deck.setVisible(not self.isVerbatim) def accept(self): self.exporter.includeSched = ( self.frm.includeSched.isChecked()) self.exporter.includeMedia = ( self.frm.includeMedia.isChecked()) self.exporter.includeTags = ( self.frm.includeTags.isChecked()) if not self.frm.deck.currentIndex(): self.exporter.did = None else: name = self.decks[self.frm.deck.currentIndex()] self.exporter.did = self.col.decks.id(name) if self.isVerbatim: name = time.strftime("-%Y-%m-%d@%H-%M-%S", time.localtime(time.time())) deck_name = _("collection")+name else: # Get deck name and remove invalid filename characters deck_name = self.decks[self.frm.deck.currentIndex()] deck_name = re.sub('[\\\\/?<>:*|"^]', '_', deck_name) filename = '{0}{1}'.format(deck_name, self.exporter.ext) while 1: file = getSaveFile(self, _("Export"), "export", self.exporter.key, self.exporter.ext, fname=filename) if not file: return if checkInvalidFilename(os.path.basename(file), dirsep=False): continue break self.hide() if file: self.mw.progress.start(immediate=True) try: f = open(file, "wb") f.close() except (OSError, IOError) as e: showWarning(_("Couldn't save file: %s") % str(e)) else: os.unlink(file) exportedMedia = lambda cnt: self.mw.progress.update( label=ngettext("Exported %d media file", "Exported %d media files", cnt) % cnt ) addHook("exportedMediaFiles", exportedMedia) self.exporter.exportInto(file) remHook("exportedMediaFiles", exportedMedia) period = 3000 if self.isVerbatim: msg = _("Collection exported.") else: if self.isTextNote: msg = ngettext("%d note exported.", "%d notes exported.", self.exporter.count) % self.exporter.count else: msg = ngettext("%d card exported.", "%d cards exported.", self.exporter.count) % self.exporter.count tooltip(msg, period=period) finally: self.mw.progress.finish() QDialog.accept(self) anki-2.1.0+dfsg~b36/aqt/fields.py000066400000000000000000000130321323611211500164630ustar00rootroot00000000000000# Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * from anki.consts import * import aqt from aqt.utils import showWarning, openHelp, getOnlyText, askUser class FieldDialog(QDialog): def __init__(self, mw, note, ord=0, parent=None): QDialog.__init__(self, parent or mw) #, Qt.Window) self.mw = aqt.mw self.parent = parent or mw self.note = note self.col = self.mw.col self.mm = self.mw.col.models self.model = note.model() self.mw.checkpoint(_("Fields")) self.form = aqt.forms.fields.Ui_Dialog() self.form.setupUi(self) self.setWindowTitle(_("Fields for %s") % self.model['name']) self.form.buttonBox.button(QDialogButtonBox.Help).setAutoDefault(False) self.form.buttonBox.button(QDialogButtonBox.Close).setAutoDefault(False) self.currentIdx = None self.oldSortField = self.model['sortf'] self.fillFields() self.setupSignals() self.form.fieldList.setCurrentRow(0) self.exec_() ########################################################################## def fillFields(self): self.currentIdx = None self.form.fieldList.clear() for c, f in enumerate(self.model['flds']): self.form.fieldList.addItem("{}: {}".format(c+1, f['name'])) def setupSignals(self): f = self.form f.fieldList.currentRowChanged.connect(self.onRowChange) f.fieldAdd.clicked.connect(self.onAdd) f.fieldDelete.clicked.connect(self.onDelete) f.fieldRename.clicked.connect(self.onRename) f.fieldPosition.clicked.connect(self.onPosition) f.sortField.clicked.connect(self.onSortField) f.buttonBox.helpRequested.connect(self.onHelp) def onRowChange(self, idx): if idx == -1: return self.saveField() self.loadField(idx) def _uniqueName(self, prompt, ignoreOrd=None, old=""): txt = getOnlyText(prompt, default=old) if not txt: return for f in self.model['flds']: if ignoreOrd is not None and f['ord'] == ignoreOrd: continue if f['name'] == txt: showWarning(_("That field name is already used.")) return return txt def onRename(self): idx = self.currentIdx f = self.model['flds'][idx] name = self._uniqueName(_("New name:"), self.currentIdx, f['name']) if not name: return self.mm.renameField(self.model, f, name) self.saveField() self.fillFields() self.form.fieldList.setCurrentRow(idx) def onAdd(self): name = self._uniqueName(_("Field name:")) if not name: return self.saveField() self.mw.progress.start() f = self.mm.newField(name) self.mm.addField(self.model, f) self.mw.progress.finish() self.fillFields() self.form.fieldList.setCurrentRow(len(self.model['flds'])-1) def onDelete(self): if len(self.model['flds']) < 2: return showWarning(_("Notes require at least one field.")) c = self.mm.useCount(self.model) c = ngettext("%d note", "%d notes", c) % c if not askUser(_("Delete field from %s?") % c): return f = self.model['flds'][self.form.fieldList.currentRow()] self.mw.progress.start() self.mm.remField(self.model, f) self.mw.progress.finish() self.fillFields() self.form.fieldList.setCurrentRow(0) def onPosition(self, delta=-1): idx = self.currentIdx l = len(self.model['flds']) txt = getOnlyText(_("New position (1...%d):") % l, default=str(idx+1)) if not txt: return try: pos = int(txt) except ValueError: return if not 0 < pos <= l: return self.saveField() f = self.model['flds'][self.currentIdx] self.mw.progress.start() self.mm.moveField(self.model, f, pos-1) self.mw.progress.finish() self.fillFields() self.form.fieldList.setCurrentRow(pos-1) def onSortField(self): # don't allow user to disable; it makes no sense self.form.sortField.setChecked(True) self.model['sortf'] = self.form.fieldList.currentRow() def loadField(self, idx): self.currentIdx = idx fld = self.model['flds'][idx] f = self.form f.fontFamily.setCurrentFont(QFont(fld['font'])) f.fontSize.setValue(fld['size']) f.sticky.setChecked(fld['sticky']) f.sortField.setChecked(self.model['sortf'] == fld['ord']) f.rtl.setChecked(fld['rtl']) def saveField(self): # not initialized yet? if self.currentIdx is None: return idx = self.currentIdx fld = self.model['flds'][idx] f = self.form fld['font'] = f.fontFamily.currentFont().family() fld['size'] = f.fontSize.value() fld['sticky'] = f.sticky.isChecked() fld['rtl'] = f.rtl.isChecked() def reject(self): self.saveField() if self.oldSortField != self.model['sortf']: self.mw.progress.start() self.mw.col.updateFieldCache(self.mm.nids(self.model)) self.mw.progress.finish() self.mm.save(self.model) self.mw.reset() QDialog.reject(self) def accept(self): self.reject() def onHelp(self): openHelp("fields") anki-2.1.0+dfsg~b36/aqt/forms/000077500000000000000000000000001323611211500157725ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/aqt/forms/__init__.py000066400000000000000000000027751323611211500201160ustar00rootroot00000000000000# This file auto-generated by build_ui.sh. Don't edit. __all__ = [ "about", "addcards", "addfield", "addmodel", "addonconf", "addons", "browser", "browserdisp", "browseropts", "changemap", "changemodel", "clayout_top", "customstudy", "dconf", "debug", "dyndconf", "editaddon", "editcurrent", "edithtml", "exporting", "fields", "finddupes", "findreplace", "getaddons", "importing", "main", "modelopts", "models", "preferences", "preview", "profiles", "progress", "reposition", "reschedule", "setgroup", "setlang", "stats", "studydeck", "taglimit", "template", ] from . import about from . import addcards from . import addfield from . import addmodel from . import addonconf from . import addons from . import browser from . import browserdisp from . import browseropts from . import changemap from . import changemodel from . import clayout_top from . import customstudy from . import dconf from . import debug from . import dyndconf from . import editaddon from . import editcurrent from . import edithtml from . import exporting from . import fields from . import finddupes from . import findreplace from . import getaddons from . import importing from . import main from . import modelopts from . import models from . import preferences from . import preview from . import profiles from . import progress from . import reposition from . import reschedule from . import setgroup from . import setlang from . import stats from . import studydeck from . import taglimit from . import template anki-2.1.0+dfsg~b36/aqt/forms/about.py000066400000000000000000000032641323611211500174630ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/about.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_About(object): def setupUi(self, About): About.setObjectName("About") About.resize(410, 664) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(About.sizePolicy().hasHeightForWidth()) About.setSizePolicy(sizePolicy) self.vboxlayout = QtWidgets.QVBoxLayout(About) self.vboxlayout.setContentsMargins(0, 0, 0, 0) self.vboxlayout.setObjectName("vboxlayout") self.label = AnkiWebView(About) self.label.setProperty("url", QtCore.QUrl("about:blank")) self.label.setObjectName("label") self.vboxlayout.addWidget(self.label) self.buttonBox = QtWidgets.QDialogButtonBox(About) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.vboxlayout.addWidget(self.buttonBox) self.retranslateUi(About) self.buttonBox.accepted.connect(About.accept) self.buttonBox.rejected.connect(About.reject) QtCore.QMetaObject.connectSlotsByName(About) def retranslateUi(self, About): _translate = QtCore.QCoreApplication.translate About.setWindowTitle(_("About Anki")) from aqt.webview import AnkiWebView from . import icons_rc anki-2.1.0+dfsg~b36/aqt/forms/addcards.py000066400000000000000000000051041323611211500201110ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/addcards.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(453, 366) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setContentsMargins(12, 6, 12, 12) self.verticalLayout.setSpacing(3) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setContentsMargins(-1, -1, -1, 0) self.horizontalLayout.setSpacing(6) self.horizontalLayout.setObjectName("horizontalLayout") self.modelArea = QtWidgets.QWidget(Dialog) self.modelArea.setMinimumSize(QtCore.QSize(0, 10)) self.modelArea.setObjectName("modelArea") self.horizontalLayout.addWidget(self.modelArea) self.deckArea = QtWidgets.QWidget(Dialog) self.deckArea.setObjectName("deckArea") self.horizontalLayout.addWidget(self.deckArea) self.verticalLayout.addLayout(self.horizontalLayout) self.line = QtWidgets.QFrame(Dialog) self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setFrameShadow(QtWidgets.QFrame.Sunken) self.line.setObjectName("line") self.verticalLayout.addWidget(self.line) self.fieldsArea = QtWidgets.QWidget(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(10) sizePolicy.setHeightForWidth(self.fieldsArea.sizePolicy().hasHeightForWidth()) self.fieldsArea.setSizePolicy(sizePolicy) self.fieldsArea.setAutoFillBackground(True) self.fieldsArea.setObjectName("fieldsArea") self.verticalLayout.addWidget(self.fieldsArea) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.NoButton) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Add")) anki-2.1.0+dfsg~b36/aqt/forms/addfield.py000066400000000000000000000066221323611211500201060ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/addfield.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(434, 186) self.horizontalLayout = QtWidgets.QHBoxLayout(Dialog) self.horizontalLayout.setObjectName("horizontalLayout") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.radioQ = QtWidgets.QRadioButton(Dialog) self.radioQ.setChecked(True) self.radioQ.setObjectName("radioQ") self.gridLayout.addWidget(self.radioQ, 3, 1, 1, 1) self.size = QtWidgets.QSpinBox(Dialog) self.size.setMinimum(6) self.size.setMaximum(200) self.size.setObjectName("size") self.gridLayout.addWidget(self.size, 2, 1, 1, 1) self.label = QtWidgets.QLabel(Dialog) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 0, 0, 1, 1) self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) self.font = QtWidgets.QFontComboBox(Dialog) self.font.setObjectName("font") self.gridLayout.addWidget(self.font, 1, 1, 1, 1) self.label_3 = QtWidgets.QLabel(Dialog) self.label_3.setObjectName("label_3") self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1) self.fields = QtWidgets.QComboBox(Dialog) self.fields.setObjectName("fields") self.gridLayout.addWidget(self.fields, 0, 1, 1, 1) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.gridLayout.addItem(spacerItem, 5, 1, 1, 1) self.radioA = QtWidgets.QRadioButton(Dialog) self.radioA.setObjectName("radioA") self.gridLayout.addWidget(self.radioA, 4, 1, 1, 1) self.label_4 = QtWidgets.QLabel(Dialog) self.label_4.setObjectName("label_4") self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1) self.horizontalLayout.addLayout(self.gridLayout) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Vertical) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.horizontalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.fields, self.font) Dialog.setTabOrder(self.font, self.size) Dialog.setTabOrder(self.size, self.radioQ) Dialog.setTabOrder(self.radioQ, self.radioA) Dialog.setTabOrder(self.radioA, self.buttonBox) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Add Field")) self.radioQ.setText(_("Front")) self.label.setText(_("Field:")) self.label_2.setText(_("Font:")) self.label_3.setText(_("Size:")) self.radioA.setText(_("Back")) self.label_4.setText(_("Add to:")) anki-2.1.0+dfsg~b36/aqt/forms/addmodel.py000066400000000000000000000033441323611211500201210ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/addmodel.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(285, 269) self.vboxlayout = QtWidgets.QVBoxLayout(Dialog) self.vboxlayout.setObjectName("vboxlayout") self.groupBox = QtWidgets.QGroupBox(Dialog) self.groupBox.setTitle("") self.groupBox.setObjectName("groupBox") self.vboxlayout1 = QtWidgets.QVBoxLayout(self.groupBox) self.vboxlayout1.setObjectName("vboxlayout1") self.models = QtWidgets.QListWidget(self.groupBox) self.models.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) self.models.setTabKeyNavigation(True) self.models.setObjectName("models") self.vboxlayout1.addWidget(self.models) self.vboxlayout.addWidget(self.groupBox) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Help|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.vboxlayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Add Note Type")) anki-2.1.0+dfsg~b36/aqt/forms/addonconf.py000066400000000000000000000063101323611211500202770ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/addonconf.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.setWindowModality(QtCore.Qt.ApplicationModal) Dialog.resize(631, 521) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.scrollArea = QtWidgets.QScrollArea(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth()) self.scrollArea.setSizePolicy(sizePolicy) self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame) self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName("scrollArea") self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 607, 112)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.label = QtWidgets.QLabel(self.scrollAreaWidgetContents) self.label.setText("") self.label.setTextFormat(QtCore.Qt.RichText) self.label.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) self.label.setWordWrap(True) self.label.setOpenExternalLinks(True) self.label.setObjectName("label") self.verticalLayout_2.addWidget(self.label) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.verticalLayout.addWidget(self.scrollArea) self.editor = QtWidgets.QPlainTextEdit(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(3) sizePolicy.setHeightForWidth(self.editor.sizePolicy().hasHeightForWidth()) self.editor.setSizePolicy(sizePolicy) self.editor.setObjectName("editor") self.verticalLayout.addWidget(self.editor) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok|QtWidgets.QDialogButtonBox.RestoreDefaults) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Configuration")) anki-2.1.0+dfsg~b36/aqt/forms/addons.py000066400000000000000000000063411323611211500176200ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/addons.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.setWindowModality(QtCore.Qt.ApplicationModal) Dialog.resize(577, 379) Dialog.setModal(True) self.horizontalLayout = QtWidgets.QHBoxLayout(Dialog) self.horizontalLayout.setObjectName("horizontalLayout") self.verticalLayout_2 = QtWidgets.QVBoxLayout() self.verticalLayout_2.setObjectName("verticalLayout_2") self.label = QtWidgets.QLabel(Dialog) self.label.setObjectName("label") self.verticalLayout_2.addWidget(self.label) self.addonList = QtWidgets.QListWidget(Dialog) self.addonList.setSelectionMode(QtWidgets.QAbstractItemView.ContiguousSelection) self.addonList.setObjectName("addonList") self.verticalLayout_2.addWidget(self.addonList) self.horizontalLayout.addLayout(self.verticalLayout_2) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.getAddons = QtWidgets.QPushButton(Dialog) self.getAddons.setObjectName("getAddons") self.verticalLayout.addWidget(self.getAddons) self.checkForUpdates = QtWidgets.QPushButton(Dialog) self.checkForUpdates.setObjectName("checkForUpdates") self.verticalLayout.addWidget(self.checkForUpdates) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.viewPage = QtWidgets.QPushButton(Dialog) self.viewPage.setObjectName("viewPage") self.verticalLayout.addWidget(self.viewPage) self.config = QtWidgets.QPushButton(Dialog) self.config.setObjectName("config") self.verticalLayout.addWidget(self.config) self.viewFiles = QtWidgets.QPushButton(Dialog) self.viewFiles.setObjectName("viewFiles") self.verticalLayout.addWidget(self.viewFiles) self.toggleEnabled = QtWidgets.QPushButton(Dialog) self.toggleEnabled.setObjectName("toggleEnabled") self.verticalLayout.addWidget(self.toggleEnabled) self.delete_2 = QtWidgets.QPushButton(Dialog) self.delete_2.setObjectName("delete_2") self.verticalLayout.addWidget(self.delete_2) self.horizontalLayout.addLayout(self.verticalLayout) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Add-ons")) self.label.setText(_("Changes will take effect when Anki is restarted.")) self.getAddons.setText(_("Get Add-ons...")) self.checkForUpdates.setText(_("Check for Updates")) self.viewPage.setText(_("View Add-on Page")) self.config.setText(_("Config")) self.viewFiles.setText(_("View Files")) self.toggleEnabled.setText(_("Toggle Enabled")) self.delete_2.setText(_("Delete")) anki-2.1.0+dfsg~b36/aqt/forms/browser.py000066400000000000000000000435271323611211500200420ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/browser.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(750, 493) Dialog.setMinimumSize(QtCore.QSize(400, 400)) self.centralwidget = QtWidgets.QWidget(Dialog) self.centralwidget.setObjectName("centralwidget") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout_3.setContentsMargins(12, 6, 12, 12) self.verticalLayout_3.setSpacing(12) self.verticalLayout_3.setObjectName("verticalLayout_3") self.splitter = QtWidgets.QSplitter(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(4) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.splitter.sizePolicy().hasHeightForWidth()) self.splitter.setSizePolicy(sizePolicy) self.splitter.setOrientation(QtCore.Qt.Vertical) self.splitter.setObjectName("splitter") self.widget = QtWidgets.QWidget(self.splitter) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(3) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.widget.sizePolicy().hasHeightForWidth()) self.widget.setSizePolicy(sizePolicy) self.widget.setObjectName("widget") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setSpacing(0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setContentsMargins(0, 0, 0, 12) self.gridLayout.setHorizontalSpacing(12) self.gridLayout.setVerticalSpacing(0) self.gridLayout.setObjectName("gridLayout") self.searchEdit = QtWidgets.QComboBox(self.widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(9) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.searchEdit.sizePolicy().hasHeightForWidth()) self.searchEdit.setSizePolicy(sizePolicy) self.searchEdit.setEditable(True) self.searchEdit.setInsertPolicy(QtWidgets.QComboBox.NoInsert) self.searchEdit.setObjectName("searchEdit") self.gridLayout.addWidget(self.searchEdit, 0, 1, 1, 1) self.searchButton = QtWidgets.QPushButton(self.widget) self.searchButton.setObjectName("searchButton") self.gridLayout.addWidget(self.searchButton, 0, 2, 1, 1) self.previewButton = QtWidgets.QPushButton(self.widget) self.previewButton.setCheckable(True) self.previewButton.setObjectName("previewButton") self.gridLayout.addWidget(self.previewButton, 0, 3, 1, 1) self.filter = QtWidgets.QPushButton(self.widget) self.filter.setObjectName("filter") self.gridLayout.addWidget(self.filter, 0, 0, 1, 1) self.verticalLayout_2.addLayout(self.gridLayout) self.tableView = QtWidgets.QTableView(self.widget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(9) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.tableView.sizePolicy().hasHeightForWidth()) self.tableView.setSizePolicy(sizePolicy) self.tableView.setMinimumSize(QtCore.QSize(0, 150)) self.tableView.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) self.tableView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.tableView.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) self.tableView.setTabKeyNavigation(False) self.tableView.setAlternatingRowColors(True) self.tableView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.tableView.setObjectName("tableView") self.tableView.horizontalHeader().setCascadingSectionResizes(False) self.tableView.horizontalHeader().setHighlightSections(False) self.tableView.horizontalHeader().setMinimumSectionSize(20) self.tableView.horizontalHeader().setSortIndicatorShown(True) self.verticalLayout_2.addWidget(self.tableView) self.verticalLayoutWidget = QtWidgets.QWidget(self.splitter) self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) self.verticalLayout.setContentsMargins(0, 1, 0, 0) self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout2 = QtWidgets.QHBoxLayout() self.horizontalLayout2.setSpacing(0) self.horizontalLayout2.setObjectName("horizontalLayout2") self.fieldsArea = QtWidgets.QWidget(self.verticalLayoutWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.fieldsArea.sizePolicy().hasHeightForWidth()) self.fieldsArea.setSizePolicy(sizePolicy) self.fieldsArea.setMinimumSize(QtCore.QSize(50, 200)) self.fieldsArea.setObjectName("fieldsArea") self.horizontalLayout2.addWidget(self.fieldsArea) self.verticalLayout.addLayout(self.horizontalLayout2) self.verticalLayout_3.addWidget(self.splitter) Dialog.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(Dialog) self.menubar.setGeometry(QtCore.QRect(0, 0, 750, 22)) self.menubar.setObjectName("menubar") self.menuEdit = QtWidgets.QMenu(self.menubar) self.menuEdit.setObjectName("menuEdit") self.menuJump = QtWidgets.QMenu(self.menubar) self.menuJump.setObjectName("menuJump") self.menu_Help = QtWidgets.QMenu(self.menubar) self.menu_Help.setObjectName("menu_Help") self.menu_Cards = QtWidgets.QMenu(self.menubar) self.menu_Cards.setObjectName("menu_Cards") self.menuFlag = QtWidgets.QMenu(self.menu_Cards) self.menuFlag.setObjectName("menuFlag") self.menu_Notes = QtWidgets.QMenu(self.menubar) self.menu_Notes.setObjectName("menu_Notes") Dialog.setMenuBar(self.menubar) self.actionReschedule = QtWidgets.QAction(Dialog) self.actionReschedule.setObjectName("actionReschedule") self.actionSelectAll = QtWidgets.QAction(Dialog) self.actionSelectAll.setObjectName("actionSelectAll") self.actionUndo = QtWidgets.QAction(Dialog) self.actionUndo.setObjectName("actionUndo") self.actionInvertSelection = QtWidgets.QAction(Dialog) self.actionInvertSelection.setObjectName("actionInvertSelection") self.actionFind = QtWidgets.QAction(Dialog) self.actionFind.setObjectName("actionFind") self.actionNote = QtWidgets.QAction(Dialog) self.actionNote.setObjectName("actionNote") self.actionNextCard = QtWidgets.QAction(Dialog) self.actionNextCard.setObjectName("actionNextCard") self.actionPreviousCard = QtWidgets.QAction(Dialog) self.actionPreviousCard.setObjectName("actionPreviousCard") self.actionGuide = QtWidgets.QAction(Dialog) self.actionGuide.setObjectName("actionGuide") self.actionChangeModel = QtWidgets.QAction(Dialog) self.actionChangeModel.setObjectName("actionChangeModel") self.actionSelectNotes = QtWidgets.QAction(Dialog) self.actionSelectNotes.setObjectName("actionSelectNotes") self.actionFindReplace = QtWidgets.QAction(Dialog) self.actionFindReplace.setObjectName("actionFindReplace") self.actionCram = QtWidgets.QAction(Dialog) self.actionCram.setObjectName("actionCram") self.actionTags = QtWidgets.QAction(Dialog) self.actionTags.setObjectName("actionTags") self.actionCardList = QtWidgets.QAction(Dialog) self.actionCardList.setObjectName("actionCardList") self.actionFindDuplicates = QtWidgets.QAction(Dialog) self.actionFindDuplicates.setObjectName("actionFindDuplicates") self.actionReposition = QtWidgets.QAction(Dialog) self.actionReposition.setObjectName("actionReposition") self.actionFirstCard = QtWidgets.QAction(Dialog) self.actionFirstCard.setObjectName("actionFirstCard") self.actionLastCard = QtWidgets.QAction(Dialog) self.actionLastCard.setObjectName("actionLastCard") self.actionClose = QtWidgets.QAction(Dialog) self.actionClose.setObjectName("actionClose") self.action_Info = QtWidgets.QAction(Dialog) self.action_Info.setObjectName("action_Info") self.actionAdd_Tags = QtWidgets.QAction(Dialog) self.actionAdd_Tags.setObjectName("actionAdd_Tags") self.actionRemove_Tags = QtWidgets.QAction(Dialog) self.actionRemove_Tags.setObjectName("actionRemove_Tags") self.actionToggle_Suspend = QtWidgets.QAction(Dialog) self.actionToggle_Suspend.setObjectName("actionToggle_Suspend") self.actionDelete = QtWidgets.QAction(Dialog) self.actionDelete.setObjectName("actionDelete") self.actionAdd = QtWidgets.QAction(Dialog) self.actionAdd.setObjectName("actionAdd") self.actionChange_Deck = QtWidgets.QAction(Dialog) self.actionChange_Deck.setObjectName("actionChange_Deck") self.actionClear_Flag = QtWidgets.QAction(Dialog) self.actionClear_Flag.setObjectName("actionClear_Flag") self.actionRed_Flag = QtWidgets.QAction(Dialog) self.actionRed_Flag.setObjectName("actionRed_Flag") self.actionPurple_Flag = QtWidgets.QAction(Dialog) self.actionPurple_Flag.setObjectName("actionPurple_Flag") self.actionGreen_Flag = QtWidgets.QAction(Dialog) self.actionGreen_Flag.setObjectName("actionGreen_Flag") self.actionBlue_Flag = QtWidgets.QAction(Dialog) self.actionBlue_Flag.setObjectName("actionBlue_Flag") self.actionSidebar = QtWidgets.QAction(Dialog) self.actionSidebar.setObjectName("actionSidebar") self.actionClear_Unused_Tags = QtWidgets.QAction(Dialog) self.actionClear_Unused_Tags.setObjectName("actionClear_Unused_Tags") self.actionManage_Note_Types = QtWidgets.QAction(Dialog) self.actionManage_Note_Types.setObjectName("actionManage_Note_Types") self.actionToggle_Mark = QtWidgets.QAction(Dialog) self.actionToggle_Mark.setObjectName("actionToggle_Mark") self.menuEdit.addAction(self.actionUndo) self.menuEdit.addSeparator() self.menuEdit.addAction(self.actionSelectAll) self.menuEdit.addAction(self.actionSelectNotes) self.menuEdit.addAction(self.actionInvertSelection) self.menuEdit.addSeparator() self.menuEdit.addAction(self.actionClose) self.menuJump.addAction(self.actionFind) self.menuJump.addAction(self.actionTags) self.menuJump.addAction(self.actionSidebar) self.menuJump.addAction(self.actionNote) self.menuJump.addAction(self.actionCardList) self.menuJump.addSeparator() self.menuJump.addAction(self.actionFirstCard) self.menuJump.addAction(self.actionPreviousCard) self.menuJump.addAction(self.actionNextCard) self.menuJump.addAction(self.actionLastCard) self.menu_Help.addAction(self.actionGuide) self.menuFlag.addAction(self.actionRed_Flag) self.menuFlag.addAction(self.actionPurple_Flag) self.menuFlag.addAction(self.actionGreen_Flag) self.menuFlag.addAction(self.actionBlue_Flag) self.menuFlag.addSeparator() self.menuFlag.addAction(self.actionClear_Flag) self.menu_Cards.addAction(self.actionChange_Deck) self.menu_Cards.addSeparator() self.menu_Cards.addAction(self.actionReschedule) self.menu_Cards.addAction(self.actionReposition) self.menu_Cards.addSeparator() self.menu_Cards.addAction(self.actionToggle_Suspend) self.menu_Cards.addSeparator() self.menu_Cards.addAction(self.menuFlag.menuAction()) self.menu_Cards.addSeparator() self.menu_Cards.addAction(self.action_Info) self.menu_Notes.addAction(self.actionAdd) self.menu_Notes.addSeparator() self.menu_Notes.addAction(self.actionAdd_Tags) self.menu_Notes.addAction(self.actionRemove_Tags) self.menu_Notes.addAction(self.actionClear_Unused_Tags) self.menu_Notes.addAction(self.actionToggle_Mark) self.menu_Notes.addSeparator() self.menu_Notes.addAction(self.actionChangeModel) self.menu_Notes.addSeparator() self.menu_Notes.addAction(self.actionFindDuplicates) self.menu_Notes.addAction(self.actionFindReplace) self.menu_Notes.addSeparator() self.menu_Notes.addAction(self.actionManage_Note_Types) self.menu_Notes.addSeparator() self.menu_Notes.addAction(self.actionDelete) self.menubar.addAction(self.menuEdit.menuAction()) self.menubar.addAction(self.menu_Notes.menuAction()) self.menubar.addAction(self.menu_Cards.menuAction()) self.menubar.addAction(self.menuJump.menuAction()) self.menubar.addAction(self.menu_Help.menuAction()) self.retranslateUi(Dialog) self.actionSelectAll.triggered.connect(self.tableView.selectAll) self.actionClose.triggered.connect(Dialog.close) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate self.searchButton.setText(_("Search")) self.previewButton.setText(_("Preview")) self.previewButton.setShortcut(_("Ctrl+Shift+P")) self.filter.setText(_("Filter...")) self.menuEdit.setTitle(_("&Edit")) self.menuJump.setTitle(_("&Go")) self.menu_Help.setTitle(_("&Help")) self.menu_Cards.setTitle(_("&Cards")) self.menuFlag.setTitle(_("Flag")) self.menu_Notes.setTitle(_("&Notes")) self.actionReschedule.setText(_("&Reschedule...")) self.actionSelectAll.setText(_("Select &All")) self.actionSelectAll.setShortcut(_("Ctrl+Alt+A")) self.actionUndo.setText(_("&Undo")) self.actionUndo.setShortcut(_("Ctrl+Z")) self.actionInvertSelection.setText(_("&Invert Selection")) self.actionFind.setText(_("&Find")) self.actionFind.setShortcut(_("Ctrl+F")) self.actionNote.setText(_("N&ote")) self.actionNote.setShortcut(_("Ctrl+Shift+N")) self.actionNextCard.setText(_("&Next Card")) self.actionNextCard.setShortcut(_("Ctrl+N")) self.actionPreviousCard.setText(_("&Previous Card")) self.actionPreviousCard.setShortcut(_("Ctrl+P")) self.actionGuide.setText(_("&Guide")) self.actionGuide.setShortcut(_("F1")) self.actionChangeModel.setText(_("Change Note Type...")) self.actionChangeModel.setShortcut(_("Ctrl+Shift+M")) self.actionSelectNotes.setText(_("Select &Notes")) self.actionFindReplace.setText(_("Find and Re&place...")) self.actionFindReplace.setShortcut(_("Ctrl+Alt+F")) self.actionCram.setText(_("&Cram...")) self.actionTags.setText(_("Fil&ter")) self.actionTags.setShortcut(_("Ctrl+Shift+F")) self.actionCardList.setText(_("Card List")) self.actionCardList.setShortcut(_("Ctrl+Shift+L")) self.actionFindDuplicates.setText(_("Find &Duplicates...")) self.actionReposition.setText(_("Reposition...")) self.actionReposition.setShortcut(_("Ctrl+Shift+S")) self.actionFirstCard.setText(_("First Card")) self.actionFirstCard.setShortcut(_("Home")) self.actionLastCard.setText(_("Last Card")) self.actionLastCard.setShortcut(_("End")) self.actionClose.setText(_("Close")) self.actionClose.setShortcut(_("Ctrl+W")) self.action_Info.setText(_("&Info...")) self.action_Info.setShortcut(_("Ctrl+Shift+I")) self.actionAdd_Tags.setText(_("Add Tags...")) self.actionAdd_Tags.setShortcut(_("Ctrl+Shift+A")) self.actionRemove_Tags.setText(_("Remove Tags...")) self.actionRemove_Tags.setShortcut(_("Ctrl+Shift+D")) self.actionToggle_Suspend.setText(_("Toggle Suspend")) self.actionToggle_Suspend.setShortcut(_("Ctrl+J")) self.actionDelete.setText(_("Delete")) self.actionDelete.setShortcut(_("Ctrl+Del")) self.actionAdd.setText(_("Add...")) self.actionAdd.setShortcut(_("Ctrl+E")) self.actionChange_Deck.setText(_("Change Deck...")) self.actionChange_Deck.setShortcut(_("Ctrl+D")) self.actionClear_Flag.setText(_("Clear Flag")) self.actionClear_Flag.setShortcut(_("Ctrl+0")) self.actionRed_Flag.setText(_("Red Flag")) self.actionRed_Flag.setShortcut(_("Ctrl+1")) self.actionPurple_Flag.setText(_("Purple Flag")) self.actionPurple_Flag.setShortcut(_("Ctrl+2")) self.actionGreen_Flag.setText(_("Green Flag")) self.actionGreen_Flag.setShortcut(_("Ctrl+3")) self.actionBlue_Flag.setText(_("Blue Flag")) self.actionBlue_Flag.setShortcut(_("Ctrl+4")) self.actionSidebar.setText(_("Sidebar")) self.actionSidebar.setShortcut(_("Ctrl+Shift+R")) self.actionClear_Unused_Tags.setText(_("Clear Unused Tags")) self.actionManage_Note_Types.setText(_("Manage Note Types...")) self.actionToggle_Mark.setText(_("Toggle Mark")) self.actionToggle_Mark.setShortcut(_("Ctrl+K")) from . import icons_rc anki-2.1.0+dfsg~b36/aqt/forms/browserdisp.py000066400000000000000000000063141323611211500207130ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/browserdisp.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(412, 241) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.label = QtWidgets.QLabel(Dialog) self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.qfmt = QtWidgets.QLineEdit(Dialog) self.qfmt.setObjectName("qfmt") self.verticalLayout.addWidget(self.qfmt) self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setObjectName("label_2") self.verticalLayout.addWidget(self.label_2) self.afmt = QtWidgets.QLineEdit(Dialog) self.afmt.setObjectName("afmt") self.verticalLayout.addWidget(self.afmt) self.overrideFont = QtWidgets.QCheckBox(Dialog) self.overrideFont.setObjectName("overrideFont") self.verticalLayout.addWidget(self.overrideFont) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.font = QtWidgets.QFontComboBox(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(5) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.font.sizePolicy().hasHeightForWidth()) self.font.setSizePolicy(sizePolicy) self.font.setObjectName("font") self.horizontalLayout.addWidget(self.font) self.fontSize = QtWidgets.QSpinBox(Dialog) self.fontSize.setMinimum(6) self.fontSize.setObjectName("fontSize") self.horizontalLayout.addWidget(self.fontSize) self.verticalLayout.addLayout(self.horizontalLayout) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.qfmt, self.afmt) Dialog.setTabOrder(self.afmt, self.font) Dialog.setTabOrder(self.font, self.fontSize) Dialog.setTabOrder(self.fontSize, self.buttonBox) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Browser Appearance")) self.label.setText(_("Override front template:")) self.label_2.setText(_("Override back template:")) self.overrideFont.setText(_("Override font:")) anki-2.1.0+dfsg~b36/aqt/forms/browseropts.py000066400000000000000000000065761323611211500207530ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/browseropts.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(288, 195) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.label = QtWidgets.QLabel(Dialog) self.label.setObjectName("label") self.horizontalLayout.addWidget(self.label) self.fontCombo = QtWidgets.QFontComboBox(Dialog) self.fontCombo.setObjectName("fontCombo") self.horizontalLayout.addWidget(self.fontCombo) self.verticalLayout.addLayout(self.horizontalLayout) self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1) self.fontSize = QtWidgets.QSpinBox(Dialog) self.fontSize.setMinimumSize(QtCore.QSize(75, 0)) self.fontSize.setObjectName("fontSize") self.gridLayout.addWidget(self.fontSize, 0, 1, 1, 1) self.label_3 = QtWidgets.QLabel(Dialog) self.label_3.setObjectName("label_3") self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1) self.lineSize = QtWidgets.QSpinBox(Dialog) self.lineSize.setObjectName("lineSize") self.gridLayout.addWidget(self.lineSize, 1, 1, 1, 1) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem, 0, 2, 1, 1) self.verticalLayout.addLayout(self.gridLayout) self.fullSearch = QtWidgets.QCheckBox(Dialog) self.fullSearch.setObjectName("fullSearch") self.verticalLayout.addWidget(self.fullSearch) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem1) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.fontCombo, self.fontSize) Dialog.setTabOrder(self.fontSize, self.lineSize) Dialog.setTabOrder(self.lineSize, self.fullSearch) Dialog.setTabOrder(self.fullSearch, self.buttonBox) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Browser Options")) self.label.setText(_("Font:")) self.label_2.setText(_("Font Size:")) self.label_3.setText(_("Line Size:")) self.fullSearch.setText(_("Search within formatting (slow)")) anki-2.1.0+dfsg~b36/aqt/forms/changemap.py000066400000000000000000000030721323611211500202710ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/changemap.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_ChangeMap(object): def setupUi(self, ChangeMap): ChangeMap.setObjectName("ChangeMap") ChangeMap.resize(391, 360) self.vboxlayout = QtWidgets.QVBoxLayout(ChangeMap) self.vboxlayout.setObjectName("vboxlayout") self.label = QtWidgets.QLabel(ChangeMap) self.label.setWordWrap(True) self.label.setObjectName("label") self.vboxlayout.addWidget(self.label) self.fields = QtWidgets.QListWidget(ChangeMap) self.fields.setObjectName("fields") self.vboxlayout.addWidget(self.fields) self.buttonBox = QtWidgets.QDialogButtonBox(ChangeMap) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.vboxlayout.addWidget(self.buttonBox) self.retranslateUi(ChangeMap) self.buttonBox.accepted.connect(ChangeMap.accept) self.buttonBox.rejected.connect(ChangeMap.reject) self.fields.doubleClicked['QModelIndex'].connect(ChangeMap.accept) QtCore.QMetaObject.connectSlotsByName(ChangeMap) def retranslateUi(self, ChangeMap): _translate = QtCore.QCoreApplication.translate ChangeMap.setWindowTitle(_("Import")) self.label.setText(_("Target field:")) anki-2.1.0+dfsg~b36/aqt/forms/changemodel.py000066400000000000000000000134051323611211500206150ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/changemodel.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(362, 391) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setSpacing(10) self.verticalLayout.setObjectName("verticalLayout") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setVerticalSpacing(4) self.gridLayout.setObjectName("gridLayout") self.label_6 = QtWidgets.QLabel(Dialog) self.label_6.setObjectName("label_6") self.gridLayout.addWidget(self.label_6, 0, 0, 1, 1) self.oldModelLabel = QtWidgets.QLabel(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.oldModelLabel.sizePolicy().hasHeightForWidth()) self.oldModelLabel.setSizePolicy(sizePolicy) self.oldModelLabel.setText("") self.oldModelLabel.setObjectName("oldModelLabel") self.gridLayout.addWidget(self.oldModelLabel, 0, 1, 1, 1) self.label = QtWidgets.QLabel(Dialog) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 1, 0, 1, 1) self.modelChooserWidget = QtWidgets.QWidget(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.modelChooserWidget.sizePolicy().hasHeightForWidth()) self.modelChooserWidget.setSizePolicy(sizePolicy) self.modelChooserWidget.setObjectName("modelChooserWidget") self.gridLayout.addWidget(self.modelChooserWidget, 1, 1, 1, 1) self.verticalLayout.addLayout(self.gridLayout) self.tgroup = QtWidgets.QGroupBox(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.tgroup.sizePolicy().hasHeightForWidth()) self.tgroup.setSizePolicy(sizePolicy) self.tgroup.setObjectName("tgroup") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tgroup) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.scrollArea = QtWidgets.QScrollArea(self.tgroup) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth()) self.scrollArea.setSizePolicy(sizePolicy) self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName("scrollArea") self.templateMap = QtWidgets.QWidget() self.templateMap.setGeometry(QtCore.QRect(0, 0, 330, 120)) self.templateMap.setObjectName("templateMap") self.scrollArea.setWidget(self.templateMap) self.verticalLayout_2.addWidget(self.scrollArea) self.verticalLayout.addWidget(self.tgroup) self.fgroup = QtWidgets.QGroupBox(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.fgroup.sizePolicy().hasHeightForWidth()) self.fgroup.setSizePolicy(sizePolicy) self.fgroup.setObjectName("fgroup") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.fgroup) self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) self.verticalLayout_3.setObjectName("verticalLayout_3") self.scrollArea_2 = QtWidgets.QScrollArea(self.fgroup) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.scrollArea_2.sizePolicy().hasHeightForWidth()) self.scrollArea_2.setSizePolicy(sizePolicy) self.scrollArea_2.setWidgetResizable(True) self.scrollArea_2.setObjectName("scrollArea_2") self.fieldMap = QtWidgets.QWidget() self.fieldMap.setGeometry(QtCore.QRect(0, 0, 330, 119)) self.fieldMap.setObjectName("fieldMap") self.scrollArea_2.setWidget(self.fieldMap) self.verticalLayout_3.addWidget(self.scrollArea_2) self.verticalLayout.addWidget(self.fgroup) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Help|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Change Note Type")) self.label_6.setText(_("Current note type:")) self.label.setText(_("New note type:")) self.tgroup.setTitle(_("Cards")) self.fgroup.setTitle(_("Fields")) anki-2.1.0+dfsg~b36/aqt/forms/clayout_top.py000066400000000000000000000046441323611211500207160ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/clayout_top.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(400, 300) self.verticalLayout = QtWidgets.QVBoxLayout(Form) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setSpacing(3) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setSpacing(12) self.horizontalLayout.setObjectName("horizontalLayout") self.label = QtWidgets.QLabel(Form) self.label.setObjectName("label") self.horizontalLayout.addWidget(self.label) self.templatesBox = QtWidgets.QComboBox(Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(10) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.templatesBox.sizePolicy().hasHeightForWidth()) self.templatesBox.setSizePolicy(sizePolicy) self.templatesBox.setObjectName("templatesBox") self.horizontalLayout.addWidget(self.templatesBox) spacerItem = QtWidgets.QSpacerItem(1, 20, QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.templateOptions = QtWidgets.QPushButton(Form) self.templateOptions.setText("") self.templateOptions.setAutoDefault(False) self.templateOptions.setDefault(False) self.templateOptions.setObjectName("templateOptions") self.horizontalLayout.addWidget(self.templateOptions) self.verticalLayout.addLayout(self.horizontalLayout) self.changesLabel = QtWidgets.QLabel(Form) self.changesLabel.setText("") self.changesLabel.setAlignment(QtCore.Qt.AlignCenter) self.changesLabel.setObjectName("changesLabel") self.verticalLayout.addWidget(self.changesLabel) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_("Form")) self.label.setText(_("Card Type:")) anki-2.1.0+dfsg~b36/aqt/forms/customstudy.py000066400000000000000000000123541323611211500207540ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/customstudy.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(332, 380) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.radio4 = QtWidgets.QRadioButton(Dialog) self.radio4.setObjectName("radio4") self.gridLayout.addWidget(self.radio4, 3, 0, 1, 1) self.radio3 = QtWidgets.QRadioButton(Dialog) self.radio3.setObjectName("radio3") self.gridLayout.addWidget(self.radio3, 2, 0, 1, 1) self.radio1 = QtWidgets.QRadioButton(Dialog) self.radio1.setObjectName("radio1") self.gridLayout.addWidget(self.radio1, 0, 0, 1, 1) self.radio2 = QtWidgets.QRadioButton(Dialog) self.radio2.setObjectName("radio2") self.gridLayout.addWidget(self.radio2, 1, 0, 1, 1) self.radio6 = QtWidgets.QRadioButton(Dialog) self.radio6.setObjectName("radio6") self.gridLayout.addWidget(self.radio6, 5, 0, 1, 1) self.radio5 = QtWidgets.QRadioButton(Dialog) self.radio5.setObjectName("radio5") self.gridLayout.addWidget(self.radio5, 4, 0, 1, 1) self.verticalLayout.addLayout(self.gridLayout) self.groupBox = QtWidgets.QGroupBox(Dialog) self.groupBox.setTitle("") self.groupBox.setObjectName("groupBox") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox) self.verticalLayout_2.setObjectName("verticalLayout_2") self.title = QtWidgets.QLabel(self.groupBox) self.title.setObjectName("title") self.verticalLayout_2.addWidget(self.title) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.preSpin = QtWidgets.QLabel(self.groupBox) self.preSpin.setObjectName("preSpin") self.horizontalLayout.addWidget(self.preSpin) self.spin = QtWidgets.QSpinBox(self.groupBox) self.spin.setObjectName("spin") self.horizontalLayout.addWidget(self.spin) self.postSpin = QtWidgets.QLabel(self.groupBox) self.postSpin.setObjectName("postSpin") self.horizontalLayout.addWidget(self.postSpin) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem) self.verticalLayout_2.addLayout(self.horizontalLayout) self.cardType = QtWidgets.QListWidget(self.groupBox) self.cardType.setObjectName("cardType") item = QtWidgets.QListWidgetItem() self.cardType.addItem(item) item = QtWidgets.QListWidgetItem() self.cardType.addItem(item) item = QtWidgets.QListWidgetItem() self.cardType.addItem(item) self.verticalLayout_2.addWidget(self.cardType) self.verticalLayout.addWidget(self.groupBox) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem1) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.cardType.setCurrentRow(0) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.radio1, self.radio2) Dialog.setTabOrder(self.radio2, self.radio3) Dialog.setTabOrder(self.radio3, self.radio4) Dialog.setTabOrder(self.radio4, self.radio6) Dialog.setTabOrder(self.radio6, self.spin) Dialog.setTabOrder(self.spin, self.buttonBox) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Custom Study")) self.radio4.setText(_("Review ahead")) self.radio3.setText(_("Review forgotten cards")) self.radio1.setText(_("Increase today\'s new card limit")) self.radio2.setText(_("Increase today\'s review card limit")) self.radio6.setText(_("Study by card state or tag")) self.radio5.setText(_("Preview new cards")) self.title.setText(_("...")) self.preSpin.setText(_("...")) self.postSpin.setText(_("...")) __sortingEnabled = self.cardType.isSortingEnabled() self.cardType.setSortingEnabled(False) item = self.cardType.item(0) item.setText(_("New cards only")) item = self.cardType.item(1) item.setText(_("Due cards only")) item = self.cardType.item(2) item.setText(_("All cards in random order (cram mode)")) self.cardType.setSortingEnabled(__sortingEnabled) anki-2.1.0+dfsg~b36/aqt/forms/dconf.py000066400000000000000000000473401323611211500174450ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/dconf.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(587, 514) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label_31 = QtWidgets.QLabel(Dialog) self.label_31.setObjectName("label_31") self.horizontalLayout_2.addWidget(self.label_31) self.dconf = QtWidgets.QComboBox(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(3) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.dconf.sizePolicy().hasHeightForWidth()) self.dconf.setSizePolicy(sizePolicy) self.dconf.setObjectName("dconf") self.horizontalLayout_2.addWidget(self.dconf) self.confOpts = QtWidgets.QToolButton(Dialog) self.confOpts.setMaximumSize(QtCore.QSize(16777215, 32)) self.confOpts.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) self.confOpts.setArrowType(QtCore.Qt.NoArrow) self.confOpts.setObjectName("confOpts") self.horizontalLayout_2.addWidget(self.confOpts) self.verticalLayout.addLayout(self.horizontalLayout_2) self.count = QtWidgets.QLabel(Dialog) self.count.setStyleSheet("* { color: red }") self.count.setText("") self.count.setAlignment(QtCore.Qt.AlignCenter) self.count.setWordWrap(True) self.count.setObjectName("count") self.verticalLayout.addWidget(self.count) self.tabWidget = QtWidgets.QTabWidget(Dialog) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.tab) self.verticalLayout_2.setContentsMargins(12, 12, 12, 12) self.verticalLayout_2.setObjectName("verticalLayout_2") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setSpacing(12) self.gridLayout.setObjectName("gridLayout") self.label_27 = QtWidgets.QLabel(self.tab) self.label_27.setObjectName("label_27") self.gridLayout.addWidget(self.label_27, 5, 2, 1, 1) self.label_24 = QtWidgets.QLabel(self.tab) self.label_24.setObjectName("label_24") self.gridLayout.addWidget(self.label_24, 5, 0, 1, 1) self.lrnFactor = QtWidgets.QSpinBox(self.tab) self.lrnFactor.setMinimum(130) self.lrnFactor.setMaximum(999) self.lrnFactor.setObjectName("lrnFactor") self.gridLayout.addWidget(self.lrnFactor, 5, 1, 1, 1) self.label_8 = QtWidgets.QLabel(self.tab) self.label_8.setObjectName("label_8") self.gridLayout.addWidget(self.label_8, 1, 0, 1, 1) self.lrnEasyInt = QtWidgets.QSpinBox(self.tab) self.lrnEasyInt.setMinimum(1) self.lrnEasyInt.setObjectName("lrnEasyInt") self.gridLayout.addWidget(self.lrnEasyInt, 4, 1, 1, 1) self.lrnGradInt = QtWidgets.QSpinBox(self.tab) self.lrnGradInt.setMinimum(1) self.lrnGradInt.setObjectName("lrnGradInt") self.gridLayout.addWidget(self.lrnGradInt, 3, 1, 1, 1) self.newplim = QtWidgets.QLabel(self.tab) self.newplim.setText("") self.newplim.setObjectName("newplim") self.gridLayout.addWidget(self.newplim, 2, 2, 1, 1) self.label_5 = QtWidgets.QLabel(self.tab) self.label_5.setObjectName("label_5") self.gridLayout.addWidget(self.label_5, 4, 0, 1, 1) self.label_4 = QtWidgets.QLabel(self.tab) self.label_4.setObjectName("label_4") self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1) self.newPerDay = QtWidgets.QSpinBox(self.tab) self.newPerDay.setMaximum(9999) self.newPerDay.setObjectName("newPerDay") self.gridLayout.addWidget(self.newPerDay, 2, 1, 1, 1) self.label_6 = QtWidgets.QLabel(self.tab) self.label_6.setObjectName("label_6") self.gridLayout.addWidget(self.label_6, 2, 0, 1, 1) self.lrnSteps = QtWidgets.QLineEdit(self.tab) self.lrnSteps.setObjectName("lrnSteps") self.gridLayout.addWidget(self.lrnSteps, 0, 1, 1, 2) self.label_2 = QtWidgets.QLabel(self.tab) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1) self.newOrder = QtWidgets.QComboBox(self.tab) self.newOrder.setObjectName("newOrder") self.gridLayout.addWidget(self.newOrder, 1, 1, 1, 2) self.bury = QtWidgets.QCheckBox(self.tab) self.bury.setObjectName("bury") self.gridLayout.addWidget(self.bury, 6, 0, 1, 3) self.label_9 = QtWidgets.QLabel(self.tab) self.label_9.setObjectName("label_9") self.gridLayout.addWidget(self.label_9, 4, 2, 1, 1) self.label_7 = QtWidgets.QLabel(self.tab) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_7.sizePolicy().hasHeightForWidth()) self.label_7.setSizePolicy(sizePolicy) self.label_7.setObjectName("label_7") self.gridLayout.addWidget(self.label_7, 3, 2, 1, 1) self.verticalLayout_2.addLayout(self.gridLayout) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_2.addItem(spacerItem) self.tabWidget.addTab(self.tab, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.tab_3) self.verticalLayout_4.setContentsMargins(12, 12, 12, 12) self.verticalLayout_4.setObjectName("verticalLayout_4") self.gridLayout_3 = QtWidgets.QGridLayout() self.gridLayout_3.setSpacing(12) self.gridLayout_3.setObjectName("gridLayout_3") self.label_20 = QtWidgets.QLabel(self.tab_3) self.label_20.setObjectName("label_20") self.gridLayout_3.addWidget(self.label_20, 1, 0, 1, 1) self.easyBonus = QtWidgets.QSpinBox(self.tab_3) self.easyBonus.setMinimum(100) self.easyBonus.setMaximum(1000) self.easyBonus.setSingleStep(5) self.easyBonus.setObjectName("easyBonus") self.gridLayout_3.addWidget(self.easyBonus, 1, 1, 1, 1) self.label_21 = QtWidgets.QLabel(self.tab_3) self.label_21.setObjectName("label_21") self.gridLayout_3.addWidget(self.label_21, 1, 2, 1, 1) self.label_34 = QtWidgets.QLabel(self.tab_3) self.label_34.setObjectName("label_34") self.gridLayout_3.addWidget(self.label_34, 2, 2, 1, 1) self.revPerDay = QtWidgets.QSpinBox(self.tab_3) self.revPerDay.setMinimum(0) self.revPerDay.setMaximum(9999) self.revPerDay.setObjectName("revPerDay") self.gridLayout_3.addWidget(self.revPerDay, 0, 1, 1, 1) self.label_33 = QtWidgets.QLabel(self.tab_3) self.label_33.setObjectName("label_33") self.gridLayout_3.addWidget(self.label_33, 2, 0, 1, 1) self.label_37 = QtWidgets.QLabel(self.tab_3) self.label_37.setObjectName("label_37") self.gridLayout_3.addWidget(self.label_37, 0, 0, 1, 1) self.label_3 = QtWidgets.QLabel(self.tab_3) self.label_3.setObjectName("label_3") self.gridLayout_3.addWidget(self.label_3, 3, 0, 1, 1) self.maxIvl = QtWidgets.QSpinBox(self.tab_3) self.maxIvl.setMinimum(1) self.maxIvl.setMaximum(99999) self.maxIvl.setObjectName("maxIvl") self.gridLayout_3.addWidget(self.maxIvl, 3, 1, 1, 1) self.label_23 = QtWidgets.QLabel(self.tab_3) self.label_23.setObjectName("label_23") self.gridLayout_3.addWidget(self.label_23, 3, 2, 1, 1) self.revplim = QtWidgets.QLabel(self.tab_3) self.revplim.setText("") self.revplim.setObjectName("revplim") self.gridLayout_3.addWidget(self.revplim, 0, 2, 1, 1) self.fi1 = QtWidgets.QDoubleSpinBox(self.tab_3) self.fi1.setDecimals(0) self.fi1.setMinimum(0.0) self.fi1.setMaximum(999.0) self.fi1.setSingleStep(1.0) self.fi1.setProperty("value", 100.0) self.fi1.setObjectName("fi1") self.gridLayout_3.addWidget(self.fi1, 2, 1, 1, 1) self.buryRev = QtWidgets.QCheckBox(self.tab_3) self.buryRev.setObjectName("buryRev") self.gridLayout_3.addWidget(self.buryRev, 4, 0, 1, 3) self.verticalLayout_4.addLayout(self.gridLayout_3) spacerItem1 = QtWidgets.QSpacerItem(20, 152, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_4.addItem(spacerItem1) self.tabWidget.addTab(self.tab_3, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.tab_2) self.verticalLayout_3.setContentsMargins(12, 12, 12, 12) self.verticalLayout_3.setObjectName("verticalLayout_3") self.gridLayout_2 = QtWidgets.QGridLayout() self.gridLayout_2.setSpacing(12) self.gridLayout_2.setObjectName("gridLayout_2") self.label_17 = QtWidgets.QLabel(self.tab_2) self.label_17.setObjectName("label_17") self.gridLayout_2.addWidget(self.label_17, 0, 0, 1, 1) self.lapSteps = QtWidgets.QLineEdit(self.tab_2) self.lapSteps.setObjectName("lapSteps") self.gridLayout_2.addWidget(self.lapSteps, 0, 1, 1, 2) self.label = QtWidgets.QLabel(self.tab_2) self.label.setObjectName("label") self.gridLayout_2.addWidget(self.label, 1, 0, 1, 1) self.label_10 = QtWidgets.QLabel(self.tab_2) self.label_10.setObjectName("label_10") self.gridLayout_2.addWidget(self.label_10, 3, 0, 1, 1) self.leechThreshold = QtWidgets.QSpinBox(self.tab_2) self.leechThreshold.setObjectName("leechThreshold") self.gridLayout_2.addWidget(self.leechThreshold, 3, 1, 1, 1) self.label_11 = QtWidgets.QLabel(self.tab_2) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.label_11.sizePolicy().hasHeightForWidth()) self.label_11.setSizePolicy(sizePolicy) self.label_11.setObjectName("label_11") self.gridLayout_2.addWidget(self.label_11, 3, 2, 1, 1) self.label_12 = QtWidgets.QLabel(self.tab_2) self.label_12.setObjectName("label_12") self.gridLayout_2.addWidget(self.label_12, 4, 0, 1, 1) self.lapMinInt = QtWidgets.QSpinBox(self.tab_2) self.lapMinInt.setMinimum(1) self.lapMinInt.setMaximum(99) self.lapMinInt.setObjectName("lapMinInt") self.gridLayout_2.addWidget(self.lapMinInt, 2, 1, 1, 1) self.label_13 = QtWidgets.QLabel(self.tab_2) self.label_13.setObjectName("label_13") self.gridLayout_2.addWidget(self.label_13, 2, 0, 1, 1) self.label_14 = QtWidgets.QLabel(self.tab_2) self.label_14.setObjectName("label_14") self.gridLayout_2.addWidget(self.label_14, 2, 2, 1, 1) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.leechAction = QtWidgets.QComboBox(self.tab_2) self.leechAction.setObjectName("leechAction") self.leechAction.addItem("") self.leechAction.addItem("") self.horizontalLayout.addWidget(self.leechAction) spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem2) self.gridLayout_2.addLayout(self.horizontalLayout, 4, 1, 1, 2) self.label_28 = QtWidgets.QLabel(self.tab_2) self.label_28.setObjectName("label_28") self.gridLayout_2.addWidget(self.label_28, 1, 2, 1, 1) self.lapMult = QtWidgets.QSpinBox(self.tab_2) self.lapMult.setMaximum(100) self.lapMult.setSingleStep(5) self.lapMult.setObjectName("lapMult") self.gridLayout_2.addWidget(self.lapMult, 1, 1, 1, 1) self.verticalLayout_3.addLayout(self.gridLayout_2) spacerItem3 = QtWidgets.QSpacerItem(20, 72, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_3.addItem(spacerItem3) self.tabWidget.addTab(self.tab_2, "") self.tab_5 = QtWidgets.QWidget() self.tab_5.setObjectName("tab_5") self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.tab_5) self.verticalLayout_6.setContentsMargins(12, 12, 12, 12) self.verticalLayout_6.setObjectName("verticalLayout_6") self.gridLayout_5 = QtWidgets.QGridLayout() self.gridLayout_5.setSpacing(12) self.gridLayout_5.setObjectName("gridLayout_5") self.label_25 = QtWidgets.QLabel(self.tab_5) self.label_25.setObjectName("label_25") self.gridLayout_5.addWidget(self.label_25, 0, 0, 1, 1) self.maxTaken = QtWidgets.QSpinBox(self.tab_5) self.maxTaken.setMinimum(30) self.maxTaken.setMaximum(3600) self.maxTaken.setSingleStep(10) self.maxTaken.setObjectName("maxTaken") self.gridLayout_5.addWidget(self.maxTaken, 0, 1, 1, 1) self.label_26 = QtWidgets.QLabel(self.tab_5) self.label_26.setObjectName("label_26") self.gridLayout_5.addWidget(self.label_26, 0, 2, 1, 1) self.verticalLayout_6.addLayout(self.gridLayout_5) self.showTimer = QtWidgets.QCheckBox(self.tab_5) self.showTimer.setObjectName("showTimer") self.verticalLayout_6.addWidget(self.showTimer) self.autoplaySounds = QtWidgets.QCheckBox(self.tab_5) self.autoplaySounds.setObjectName("autoplaySounds") self.verticalLayout_6.addWidget(self.autoplaySounds) self.replayQuestion = QtWidgets.QCheckBox(self.tab_5) self.replayQuestion.setChecked(False) self.replayQuestion.setObjectName("replayQuestion") self.verticalLayout_6.addWidget(self.replayQuestion) spacerItem4 = QtWidgets.QSpacerItem(20, 199, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_6.addItem(spacerItem4) self.tabWidget.addTab(self.tab_5, "") self.tab_4 = QtWidgets.QWidget() self.tab_4.setObjectName("tab_4") self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.tab_4) self.verticalLayout_5.setContentsMargins(12, 12, 12, 12) self.verticalLayout_5.setSpacing(12) self.verticalLayout_5.setObjectName("verticalLayout_5") self.label_22 = QtWidgets.QLabel(self.tab_4) self.label_22.setObjectName("label_22") self.verticalLayout_5.addWidget(self.label_22) self.desc = QtWidgets.QTextEdit(self.tab_4) self.desc.setObjectName("desc") self.verticalLayout_5.addWidget(self.desc) self.tabWidget.addTab(self.tab_4, "") self.verticalLayout.addWidget(self.tabWidget) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Help|QtWidgets.QDialogButtonBox.Ok|QtWidgets.QDialogButtonBox.RestoreDefaults) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.tabWidget.setCurrentIndex(0) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.dconf, self.confOpts) Dialog.setTabOrder(self.confOpts, self.tabWidget) Dialog.setTabOrder(self.tabWidget, self.lrnSteps) Dialog.setTabOrder(self.lrnSteps, self.newOrder) Dialog.setTabOrder(self.newOrder, self.newPerDay) Dialog.setTabOrder(self.newPerDay, self.lrnGradInt) Dialog.setTabOrder(self.lrnGradInt, self.lrnEasyInt) Dialog.setTabOrder(self.lrnEasyInt, self.lrnFactor) Dialog.setTabOrder(self.lrnFactor, self.bury) Dialog.setTabOrder(self.bury, self.revPerDay) Dialog.setTabOrder(self.revPerDay, self.easyBonus) Dialog.setTabOrder(self.easyBonus, self.fi1) Dialog.setTabOrder(self.fi1, self.maxIvl) Dialog.setTabOrder(self.maxIvl, self.buryRev) Dialog.setTabOrder(self.buryRev, self.lapSteps) Dialog.setTabOrder(self.lapSteps, self.lapMult) Dialog.setTabOrder(self.lapMult, self.lapMinInt) Dialog.setTabOrder(self.lapMinInt, self.leechThreshold) Dialog.setTabOrder(self.leechThreshold, self.leechAction) Dialog.setTabOrder(self.leechAction, self.maxTaken) Dialog.setTabOrder(self.maxTaken, self.showTimer) Dialog.setTabOrder(self.showTimer, self.autoplaySounds) Dialog.setTabOrder(self.autoplaySounds, self.replayQuestion) Dialog.setTabOrder(self.replayQuestion, self.buttonBox) Dialog.setTabOrder(self.buttonBox, self.desc) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate self.label_31.setText(_("Options group:")) self.confOpts.setText(_("Manage...")) self.label_27.setText(_("%")) self.label_24.setText(_("Starting ease")) self.label_8.setText(_("Order")) self.label_5.setText(_("Easy interval")) self.label_4.setText(_("Graduating interval")) self.label_6.setText(_("New cards/day")) self.label_2.setText(_("Steps (in minutes)")) self.bury.setText(_("Bury related new cards until the next day")) self.label_9.setText(_("days")) self.label_7.setText(_("days")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _("New Cards")) self.label_20.setText(_("Easy bonus")) self.label_21.setText(_("%")) self.label_34.setText(_("%")) self.label_33.setText(_("Interval modifier")) self.label_37.setText(_("Maximum reviews/day")) self.label_3.setText(_("Maximum interval")) self.label_23.setText(_("days")) self.buryRev.setText(_("Bury related reviews until the next day")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _("Reviews")) self.label_17.setText(_("Steps (in minutes)")) self.label.setText(_("New interval")) self.label_10.setText(_("Leech threshold")) self.label_11.setText(_("lapses")) self.label_12.setText(_("Leech action")) self.label_13.setText(_("Minimum interval")) self.label_14.setText(_("days")) self.leechAction.setItemText(0, _("Suspend Card")) self.leechAction.setItemText(1, _("Tag Only")) self.label_28.setText(_("%")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _("Lapses")) self.label_25.setText(_("Ignore answer times longer than")) self.label_26.setText(_("seconds")) self.showTimer.setText(_("Show answer timer")) self.autoplaySounds.setText(_("Automatically play audio")) self.replayQuestion.setText(_("Always include question side when replaying audio")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_5), _("General")) self.label_22.setText(_("Description to show on study screen (current deck only):")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _("Description")) from . import icons_rc anki-2.1.0+dfsg~b36/aqt/forms/debug.py000066400000000000000000000036461323611211500174430ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/debug.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(643, 580) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.text = QtWidgets.QPlainTextEdit(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.text.sizePolicy().hasHeightForWidth()) self.text.setSizePolicy(sizePolicy) self.text.setMaximumSize(QtCore.QSize(16777215, 100)) self.text.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap) self.text.setObjectName("text") self.verticalLayout.addWidget(self.text) self.log = QtWidgets.QPlainTextEdit(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(8) sizePolicy.setHeightForWidth(self.log.sizePolicy().hasHeightForWidth()) self.log.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setFamily("Courier") self.log.setFont(font) self.log.setFocusPolicy(QtCore.Qt.ClickFocus) self.log.setReadOnly(True) self.log.setObjectName("log") self.verticalLayout.addWidget(self.log) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Debug Console")) anki-2.1.0+dfsg~b36/aqt/forms/dyndconf.py000066400000000000000000000155021323611211500201530ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/dyndconf.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(382, 413) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.groupBox = QtWidgets.QGroupBox(Dialog) self.groupBox.setObjectName("groupBox") self.gridLayout = QtWidgets.QGridLayout(self.groupBox) self.gridLayout.setObjectName("gridLayout") self.label_5 = QtWidgets.QLabel(self.groupBox) self.label_5.setObjectName("label_5") self.gridLayout.addWidget(self.label_5, 1, 0, 1, 1) self.label_2 = QtWidgets.QLabel(self.groupBox) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1) self.limit = QtWidgets.QSpinBox(self.groupBox) self.limit.setMaximumSize(QtCore.QSize(60, 16777215)) self.limit.setMinimum(1) self.limit.setMaximum(99999) self.limit.setObjectName("limit") self.gridLayout.addWidget(self.limit, 1, 1, 1, 1) self.label = QtWidgets.QLabel(self.groupBox) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 1, 2, 1, 1) self.search = QtWidgets.QLineEdit(self.groupBox) self.search.setObjectName("search") self.gridLayout.addWidget(self.search, 0, 1, 1, 4) self.order = QtWidgets.QComboBox(self.groupBox) self.order.setObjectName("order") self.gridLayout.addWidget(self.order, 1, 3, 1, 2) self.verticalLayout.addWidget(self.groupBox) self.filter2group = QtWidgets.QGroupBox(Dialog) self.filter2group.setObjectName("filter2group") self.gridLayout_3 = QtWidgets.QGridLayout(self.filter2group) self.gridLayout_3.setObjectName("gridLayout_3") self.label_6 = QtWidgets.QLabel(self.filter2group) self.label_6.setObjectName("label_6") self.gridLayout_3.addWidget(self.label_6, 1, 0, 1, 1) self.order_2 = QtWidgets.QComboBox(self.filter2group) self.order_2.setObjectName("order_2") self.gridLayout_3.addWidget(self.order_2, 1, 3, 1, 2) self.search_2 = QtWidgets.QLineEdit(self.filter2group) self.search_2.setObjectName("search_2") self.gridLayout_3.addWidget(self.search_2, 0, 1, 1, 4) self.label_3 = QtWidgets.QLabel(self.filter2group) self.label_3.setObjectName("label_3") self.gridLayout_3.addWidget(self.label_3, 0, 0, 1, 1) self.limit_2 = QtWidgets.QSpinBox(self.filter2group) self.limit_2.setMaximumSize(QtCore.QSize(60, 16777215)) self.limit_2.setMinimum(1) self.limit_2.setMaximum(99999) self.limit_2.setObjectName("limit_2") self.gridLayout_3.addWidget(self.limit_2, 1, 1, 1, 1) self.label_4 = QtWidgets.QLabel(self.filter2group) self.label_4.setObjectName("label_4") self.gridLayout_3.addWidget(self.label_4, 1, 2, 1, 1) self.verticalLayout.addWidget(self.filter2group) self.groupBox_2 = QtWidgets.QGroupBox(Dialog) self.groupBox_2.setObjectName("groupBox_2") self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_2) self.gridLayout_2.setObjectName("gridLayout_2") self.resched = QtWidgets.QCheckBox(self.groupBox_2) self.resched.setChecked(True) self.resched.setObjectName("resched") self.gridLayout_2.addWidget(self.resched, 0, 0, 1, 2) self.secondFilter = QtWidgets.QCheckBox(self.groupBox_2) self.secondFilter.setObjectName("secondFilter") self.gridLayout_2.addWidget(self.secondFilter, 2, 0, 1, 1) self.previewDelayWidget = QtWidgets.QWidget(self.groupBox_2) self.previewDelayWidget.setObjectName("previewDelayWidget") self.previewDelayBox = QtWidgets.QHBoxLayout(self.previewDelayWidget) self.previewDelayBox.setContentsMargins(0, 0, 0, 0) self.previewDelayBox.setObjectName("previewDelayBox") self.label_7 = QtWidgets.QLabel(self.previewDelayWidget) self.label_7.setObjectName("label_7") self.previewDelayBox.addWidget(self.label_7) self.previewDelay = QtWidgets.QSpinBox(self.previewDelayWidget) self.previewDelay.setObjectName("previewDelay") self.previewDelayBox.addWidget(self.previewDelay) self.label_8 = QtWidgets.QLabel(self.previewDelayWidget) self.label_8.setObjectName("label_8") self.previewDelayBox.addWidget(self.label_8) self.gridLayout_2.addWidget(self.previewDelayWidget, 1, 0, 1, 1) self.verticalLayout.addWidget(self.groupBox_2) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Help) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) self.secondFilter.toggled['bool'].connect(self.filter2group.setVisible) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.search, self.limit) Dialog.setTabOrder(self.limit, self.order) Dialog.setTabOrder(self.order, self.search_2) Dialog.setTabOrder(self.search_2, self.limit_2) Dialog.setTabOrder(self.limit_2, self.order_2) Dialog.setTabOrder(self.order_2, self.resched) Dialog.setTabOrder(self.resched, self.previewDelay) Dialog.setTabOrder(self.previewDelay, self.secondFilter) Dialog.setTabOrder(self.secondFilter, self.buttonBox) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Dialog")) self.groupBox.setTitle(_("Filter")) self.label_5.setText(_("Limit to")) self.label_2.setText(_("Search")) self.label.setText(_("cards selected by")) self.filter2group.setTitle(_("Filter 2")) self.label_6.setText(_("Limit to")) self.label_3.setText(_("Search")) self.label_4.setText(_("cards selected by")) self.groupBox_2.setTitle(_("Options")) self.resched.setText(_("Reschedule cards based on my answers in this deck")) self.secondFilter.setText(_("Enable second filter")) self.label_7.setText(_("Repeat failed cards after")) self.label_8.setText(_("minutes")) anki-2.1.0+dfsg~b36/aqt/forms/editaddon.py000066400000000000000000000026461323611211500203070ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/editaddon.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(753, 475) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.text = QtWidgets.QPlainTextEdit(Dialog) font = QtGui.QFont() font.setFamily("Courier 10 Pitch") self.text.setFont(font) self.text.setPlainText("") self.text.setObjectName("text") self.verticalLayout.addWidget(self.text) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Save) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Dialog")) anki-2.1.0+dfsg~b36/aqt/forms/editcurrent.py000066400000000000000000000025661323611211500207050ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/editcurrent.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(400, 300) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setContentsMargins(12, 12, 12, 12) self.verticalLayout.setSpacing(3) self.verticalLayout.setObjectName("verticalLayout") self.fieldsArea = QtWidgets.QWidget(Dialog) self.fieldsArea.setObjectName("fieldsArea") self.verticalLayout.addWidget(self.fieldsArea) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Close) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Dialog")) anki-2.1.0+dfsg~b36/aqt/forms/edithtml.py000066400000000000000000000025301323611211500201560ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/edithtml.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(400, 300) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.textEdit = QtWidgets.QTextEdit(Dialog) self.textEdit.setAcceptRichText(False) self.textEdit.setObjectName("textEdit") self.verticalLayout.addWidget(self.textEdit) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Close|QtWidgets.QDialogButtonBox.Help) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("HTML Editor")) anki-2.1.0+dfsg~b36/aqt/forms/exporting.py000066400000000000000000000070111323611211500203620ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/exporting.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_ExportDialog(object): def setupUi(self, ExportDialog): ExportDialog.setObjectName("ExportDialog") ExportDialog.resize(295, 202) self.vboxlayout = QtWidgets.QVBoxLayout(ExportDialog) self.vboxlayout.setObjectName("vboxlayout") self.gridlayout = QtWidgets.QGridLayout() self.gridlayout.setObjectName("gridlayout") self.label = QtWidgets.QLabel(ExportDialog) self.label.setMinimumSize(QtCore.QSize(100, 0)) self.label.setObjectName("label") self.gridlayout.addWidget(self.label, 0, 0, 1, 1) self.format = QtWidgets.QComboBox(ExportDialog) self.format.setObjectName("format") self.gridlayout.addWidget(self.format, 0, 1, 1, 1) self.label_2 = QtWidgets.QLabel(ExportDialog) self.label_2.setObjectName("label_2") self.gridlayout.addWidget(self.label_2, 1, 0, 1, 1) self.deck = QtWidgets.QComboBox(ExportDialog) self.deck.setObjectName("deck") self.gridlayout.addWidget(self.deck, 1, 1, 1, 1) self.vboxlayout.addLayout(self.gridlayout) self.vboxlayout1 = QtWidgets.QVBoxLayout() self.vboxlayout1.setObjectName("vboxlayout1") self.includeSched = QtWidgets.QCheckBox(ExportDialog) self.includeSched.setChecked(True) self.includeSched.setObjectName("includeSched") self.vboxlayout1.addWidget(self.includeSched) self.includeMedia = QtWidgets.QCheckBox(ExportDialog) self.includeMedia.setChecked(True) self.includeMedia.setObjectName("includeMedia") self.vboxlayout1.addWidget(self.includeMedia) self.includeTags = QtWidgets.QCheckBox(ExportDialog) self.includeTags.setChecked(True) self.includeTags.setObjectName("includeTags") self.vboxlayout1.addWidget(self.includeTags) self.vboxlayout.addLayout(self.vboxlayout1) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.vboxlayout.addItem(spacerItem) self.buttonBox = QtWidgets.QDialogButtonBox(ExportDialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel) self.buttonBox.setObjectName("buttonBox") self.vboxlayout.addWidget(self.buttonBox) self.retranslateUi(ExportDialog) self.buttonBox.accepted.connect(ExportDialog.accept) self.buttonBox.rejected.connect(ExportDialog.reject) QtCore.QMetaObject.connectSlotsByName(ExportDialog) ExportDialog.setTabOrder(self.format, self.deck) ExportDialog.setTabOrder(self.deck, self.includeSched) ExportDialog.setTabOrder(self.includeSched, self.includeMedia) ExportDialog.setTabOrder(self.includeMedia, self.includeTags) ExportDialog.setTabOrder(self.includeTags, self.buttonBox) def retranslateUi(self, ExportDialog): _translate = QtCore.QCoreApplication.translate ExportDialog.setWindowTitle(_("Export")) self.label.setText(_("Export format:")) self.label_2.setText(_("Include:")) self.includeSched.setText(_("Include scheduling information")) self.includeMedia.setText(_("Include media")) self.includeTags.setText(_("Include tags")) anki-2.1.0+dfsg~b36/aqt/forms/fields.py000066400000000000000000000123341323611211500176150ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/fields.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(412, 352) Dialog.setModal(True) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.fieldList = QtWidgets.QListWidget(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.fieldList.sizePolicy().hasHeightForWidth()) self.fieldList.setSizePolicy(sizePolicy) self.fieldList.setMinimumSize(QtCore.QSize(50, 60)) self.fieldList.setObjectName("fieldList") self.horizontalLayout.addWidget(self.fieldList) self.verticalLayout_3 = QtWidgets.QVBoxLayout() self.verticalLayout_3.setObjectName("verticalLayout_3") self.fieldAdd = QtWidgets.QPushButton(Dialog) self.fieldAdd.setObjectName("fieldAdd") self.verticalLayout_3.addWidget(self.fieldAdd) self.fieldDelete = QtWidgets.QPushButton(Dialog) self.fieldDelete.setObjectName("fieldDelete") self.verticalLayout_3.addWidget(self.fieldDelete) self.fieldRename = QtWidgets.QPushButton(Dialog) self.fieldRename.setObjectName("fieldRename") self.verticalLayout_3.addWidget(self.fieldRename) self.fieldPosition = QtWidgets.QPushButton(Dialog) self.fieldPosition.setObjectName("fieldPosition") self.verticalLayout_3.addWidget(self.fieldPosition) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_3.addItem(spacerItem) self.horizontalLayout.addLayout(self.verticalLayout_3) self.verticalLayout.addLayout(self.horizontalLayout) self._2 = QtWidgets.QGridLayout() self._2.setObjectName("_2") self.label_5 = QtWidgets.QLabel(Dialog) self.label_5.setObjectName("label_5") self._2.addWidget(self.label_5, 0, 0, 1, 1) self.fontFamily = QtWidgets.QFontComboBox(Dialog) self.fontFamily.setMinimumSize(QtCore.QSize(0, 25)) self.fontFamily.setObjectName("fontFamily") self._2.addWidget(self.fontFamily, 0, 1, 1, 1) self.rtl = QtWidgets.QCheckBox(Dialog) self.rtl.setObjectName("rtl") self._2.addWidget(self.rtl, 3, 1, 1, 1) self.fontSize = QtWidgets.QSpinBox(Dialog) self.fontSize.setMinimum(5) self.fontSize.setMaximum(300) self.fontSize.setObjectName("fontSize") self._2.addWidget(self.fontSize, 0, 2, 1, 1) self.sticky = QtWidgets.QCheckBox(Dialog) self.sticky.setObjectName("sticky") self._2.addWidget(self.sticky, 2, 1, 1, 1) self.label_18 = QtWidgets.QLabel(Dialog) self.label_18.setObjectName("label_18") self._2.addWidget(self.label_18, 1, 0, 1, 1) self.sortField = QtWidgets.QRadioButton(Dialog) self.sortField.setObjectName("sortField") self._2.addWidget(self.sortField, 1, 1, 1, 1) self.verticalLayout.addLayout(self._2) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Close|QtWidgets.QDialogButtonBox.Help) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.fieldList, self.fieldAdd) Dialog.setTabOrder(self.fieldAdd, self.fieldDelete) Dialog.setTabOrder(self.fieldDelete, self.fieldRename) Dialog.setTabOrder(self.fieldRename, self.fieldPosition) Dialog.setTabOrder(self.fieldPosition, self.fontFamily) Dialog.setTabOrder(self.fontFamily, self.fontSize) Dialog.setTabOrder(self.fontSize, self.sortField) Dialog.setTabOrder(self.sortField, self.sticky) Dialog.setTabOrder(self.sticky, self.rtl) Dialog.setTabOrder(self.rtl, self.buttonBox) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Fields")) self.fieldAdd.setText(_("Add")) self.fieldDelete.setText(_("Delete")) self.fieldRename.setText(_("Rename")) self.fieldPosition.setText(_("Reposition")) self.label_5.setText(_("Editing Font")) self.rtl.setText(_("Reverse text direction (RTL)")) self.sticky.setText(_("Remember last input when adding")) self.label_18.setText(_("Options")) self.sortField.setText(_("Sort by this field in the browser")) from . import icons_rc anki-2.1.0+dfsg~b36/aqt/forms/finddupes.py000066400000000000000000000054021323611211500203260ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/finddupes.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(531, 345) self.verticalLayout_2 = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout_2.setObjectName("verticalLayout_2") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.fields = QtWidgets.QComboBox(Dialog) self.fields.setObjectName("fields") self.gridLayout.addWidget(self.fields, 1, 2, 1, 2) self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 2, 1, 1, 1) self.label = QtWidgets.QLabel(Dialog) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 1, 1, 1, 1) self.search = QtWidgets.QLineEdit(Dialog) self.search.setObjectName("search") self.gridLayout.addWidget(self.search, 2, 2, 1, 2) self.verticalLayout_2.addLayout(self.gridLayout) self.frame = QtWidgets.QFrame(Dialog) self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setObjectName("frame") self.verticalLayout = QtWidgets.QVBoxLayout(self.frame) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.webView = AnkiWebView(self.frame) self.webView.setProperty("url", QtCore.QUrl("about:blank")) self.webView.setObjectName("webView") self.verticalLayout.addWidget(self.webView) self.verticalLayout_2.addWidget(self.frame) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Close) self.buttonBox.setObjectName("buttonBox") self.verticalLayout_2.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.fields, self.webView) Dialog.setTabOrder(self.webView, self.buttonBox) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Find Duplicates")) self.label_2.setText(_("Optional limit:")) self.label.setText(_("Look in field:")) from aqt.webview import AnkiWebView anki-2.1.0+dfsg~b36/aqt/forms/findreplace.py000066400000000000000000000063531323611211500206270ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/findreplace.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(367, 209) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.label = QtWidgets.QLabel(Dialog) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 0, 0, 1, 1) self.find = QtWidgets.QLineEdit(Dialog) self.find.setObjectName("find") self.gridLayout.addWidget(self.find, 0, 1, 1, 1) self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1) self.replace = QtWidgets.QLineEdit(Dialog) self.replace.setObjectName("replace") self.gridLayout.addWidget(self.replace, 1, 1, 1, 1) self.label_3 = QtWidgets.QLabel(Dialog) self.label_3.setObjectName("label_3") self.gridLayout.addWidget(self.label_3, 2, 0, 1, 1) self.field = QtWidgets.QComboBox(Dialog) self.field.setObjectName("field") self.gridLayout.addWidget(self.field, 2, 1, 1, 1) self.re = QtWidgets.QCheckBox(Dialog) self.re.setObjectName("re") self.gridLayout.addWidget(self.re, 4, 1, 1, 1) self.ignoreCase = QtWidgets.QCheckBox(Dialog) self.ignoreCase.setChecked(True) self.ignoreCase.setObjectName("ignoreCase") self.gridLayout.addWidget(self.ignoreCase, 3, 1, 1, 1) self.verticalLayout.addLayout(self.gridLayout) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Help|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.find, self.replace) Dialog.setTabOrder(self.replace, self.field) Dialog.setTabOrder(self.field, self.ignoreCase) Dialog.setTabOrder(self.ignoreCase, self.re) Dialog.setTabOrder(self.re, self.buttonBox) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Find and Replace")) self.label.setText(_("Find:")) self.label_2.setText(_("Replace With:")) self.label_3.setText(_("In:")) self.re.setText(_("Treat input as regular expression")) self.ignoreCase.setText(_("Ignore case")) anki-2.1.0+dfsg~b36/aqt/forms/getaddons.py000066400000000000000000000042721323611211500203210ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/getaddons.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(367, 204) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.label = QtWidgets.QLabel(Dialog) self.label.setWordWrap(True) self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setObjectName("label_2") self.horizontalLayout.addWidget(self.label_2) self.code = QtWidgets.QLineEdit(Dialog) self.code.setObjectName("code") self.horizontalLayout.addWidget(self.code) self.verticalLayout.addLayout(self.horizontalLayout) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Install Add-on")) self.label.setText(_("To browse add-ons, please click the browse button below.

When you\'ve found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.")) self.label_2.setText(_("Code:")) anki-2.1.0+dfsg~b36/aqt/forms/icons_rc.py000066400000000000000000001057641323611211500201600ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Resource object code # # Created by: The Resource Compiler for PyQt5 (Qt v5.9.2) # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore qt_resource_data = b"\ \x00\x00\x05\x55\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ \x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ \x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\ \x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\ \x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\ \x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\ \x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\ \x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\ \x31\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x77\x69\ \x64\x74\x68\x3d\x22\x31\x30\x30\x25\x22\x20\x68\x65\x69\x67\x68\ \x74\x3d\x22\x31\x30\x30\x25\x22\x20\x76\x69\x65\x77\x42\x6f\x78\ \x3d\x22\x30\x20\x30\x20\x36\x30\x20\x36\x30\x22\x20\x76\x65\x72\ \x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x78\x6d\x6c\x6e\x73\ \x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ \x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\ \x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\ \x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\ \x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\ \x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x20\x73\x74\ \x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\ \x76\x65\x6e\x6f\x64\x64\x3b\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\ \x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ \x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\ \x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\ \x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ \x6c\x69\x6d\x69\x74\x3a\x31\x2e\x35\x3b\x22\x3e\x0a\x20\x20\x20\ \x20\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ \x61\x74\x72\x69\x78\x28\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x2d\x33\ \x35\x30\x2c\x30\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ \x3c\x67\x20\x69\x64\x3d\x22\x6e\x6f\x74\x65\x74\x79\x70\x65\x22\ \x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\ \x69\x78\x28\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x2d\x31\x33\x34\x31\ \x2c\x30\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x3c\x72\x65\x63\x74\x20\x78\x3d\x22\x31\x36\x39\x31\x22\ \x20\x79\x3d\x22\x30\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x30\ \x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x30\x22\x20\x73\x74\ \x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x22\ \x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ \x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\ \x72\x69\x78\x28\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x31\x33\x34\x31\ \x2e\x35\x2c\x2d\x31\x2e\x35\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x72\x65\x63\x74\ \x20\x78\x3d\x22\x33\x35\x33\x22\x20\x79\x3d\x22\x31\x37\x22\x20\ \x77\x69\x64\x74\x68\x3d\x22\x35\x33\x22\x20\x68\x65\x69\x67\x68\ \x74\x3d\x22\x31\x32\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ \x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x62\ \x6c\x61\x63\x6b\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\ \x68\x3a\x32\x2e\x30\x38\x70\x78\x3b\x22\x2f\x3e\x0a\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x67\x20\x74\x72\x61\ \x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x31\ \x2c\x30\x2c\x30\x2c\x31\x2c\x31\x33\x34\x31\x2e\x35\x2c\x32\x35\ \x2e\x35\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x3c\x72\x65\x63\x74\x20\x78\x3d\x22\x33\ \x35\x33\x22\x20\x79\x3d\x22\x31\x37\x22\x20\x77\x69\x64\x74\x68\ \x3d\x22\x35\x33\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x31\x32\ \x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\ \x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x62\x6c\x61\x63\x6b\x3b\ \x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x2e\x30\ \x38\x70\x78\x3b\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\ \x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x31\x2c\x30\x2c\x30\x2c\ \x31\x2c\x31\x33\x34\x31\x2e\x35\x2c\x2d\x30\x2e\x35\x29\x22\x3e\ \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x3c\x72\x65\x63\x74\x20\x78\x3d\x22\x33\x35\x33\x22\x20\x79\ \x3d\x22\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x35\x22\x20\ \x68\x65\x69\x67\x68\x74\x3d\x22\x35\x22\x20\x73\x74\x79\x6c\x65\ \x3d\x22\x73\x74\x72\x6f\x6b\x65\x3a\x62\x6c\x61\x63\x6b\x3b\x73\ \x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x2e\x30\x38\ \x70\x78\x3b\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\ \x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x31\x2c\x30\x2c\x30\x2c\x31\ \x2c\x31\x33\x34\x31\x2e\x35\x2c\x32\x36\x2e\x35\x29\x22\x3e\x0a\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x3c\x72\x65\x63\x74\x20\x78\x3d\x22\x33\x35\x33\x22\x20\x79\x3d\ \x22\x36\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x35\x22\x20\x68\ \x65\x69\x67\x68\x74\x3d\x22\x35\x22\x20\x73\x74\x79\x6c\x65\x3d\ \x22\x73\x74\x72\x6f\x6b\x65\x3a\x62\x6c\x61\x63\x6b\x3b\x73\x74\ \x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x2e\x30\x38\x70\ \x78\x3b\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ \x2f\x67\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\ \x76\x67\x3e\x0a\ \x00\x00\x06\xb8\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ \x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ \x00\x00\x00\x06\x62\x4b\x47\x44\x00\xff\x00\xff\x00\xff\xa0\xbd\ \xa7\x93\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\ \x0b\x13\x01\x00\x9a\x9c\x18\x00\x00\x00\x07\x74\x49\x4d\x45\x07\ \xd7\x07\x04\x11\x23\x35\x0b\x53\xb7\x75\x00\x00\x06\x45\x49\x44\ \x41\x54\x58\xc3\xa5\x97\xdd\x6f\x53\xc9\x19\x87\x9f\x33\x33\xc7\ \xc7\x07\x3b\x8e\x93\x98\xac\x0d\x74\x93\x10\xb3\x0d\xa1\x1f\x44\ \x2a\x52\x43\xa1\x12\xbd\x43\xea\x6a\xb9\x58\x40\x6a\xd4\xa5\xe5\ \x1f\xe8\x1f\xd0\xcb\x5e\xb4\x17\xdb\xab\xed\x55\xa5\xb6\x5c\xb4\ \xf4\x82\xad\xa8\x8a\x44\xb9\x08\xbb\x02\xb4\x04\x2a\x05\x89\x6c\ \x8d\x8d\x12\x05\x27\xa4\x09\x6d\xec\x26\xc1\x1f\x27\xc9\xb1\x67\ \x7a\x91\xf5\x91\x49\x1c\x62\xca\x48\xaf\x66\x34\x3e\x3a\xef\x33\ \xbf\xf7\xc3\x73\x2c\xf6\x18\xe7\xce\x9d\x8b\x1b\x63\x12\xc6\x18\ \xc7\x18\xc3\x76\xd3\x5a\xd3\x6a\xdf\x18\x03\xe0\x6b\xad\x97\x36\ \x37\x37\xcb\x13\x13\x13\xa6\xd5\xfb\xad\xdd\x1c\x9f\x3f\x7f\xde\ \xd5\x5a\x8f\x19\x63\x2e\x34\x03\x68\xad\x01\x5e\xeb\xb8\xe9\x39\ \x5f\x6b\xbd\x68\x8c\xb9\xd5\xdb\xdb\xfb\xc9\xb5\x6b\xd7\x4c\x5b\ \x00\x63\x63\x63\xae\xd6\xfa\x9a\x6d\xdb\x67\xbb\xbb\xbb\x45\x38\ \x1c\x46\x29\xb5\xfd\x74\xaf\x3b\x39\xc6\x18\x7c\xdf\xa7\x54\x2a\ \x51\x2c\x16\xa9\x54\x2a\x7f\x16\x42\xfc\x6c\x7c\x7c\x7c\xb9\xd9\ \x97\x6a\x05\x20\x84\x18\x0b\x87\xc3\x67\x93\xc9\xa4\x70\x1c\x67\ \x2f\x99\x77\xfd\xcd\x71\x1c\x42\xa1\x10\xd1\x68\x94\x67\xcf\x9e\ \x7d\xe0\xfb\xfe\x7d\xe0\x37\xaf\xf8\xda\xee\xfc\xf2\xe5\xcb\x71\ \xa5\xd4\x85\x54\x2a\x25\x62\xb1\x18\xa1\x50\x88\x50\x28\x84\x6d\ \xdb\x28\xa5\x76\x98\x94\x72\x87\x85\xc3\x61\xd2\xe9\x34\x1d\x1d\ \x1d\x48\x29\x71\x5d\x97\x03\x07\x0e\xec\x53\x4a\x7d\xb4\xdd\xdf\ \x0e\x05\xa4\x94\x09\x63\x4c\x22\x16\x8b\xa1\x94\x42\x6b\xfd\x8a\ \xb5\x4a\xbc\xee\xee\x6e\xf6\xef\xdf\x4f\xb1\x58\xa4\x5a\xad\x72\ \xfa\xf4\x69\x06\x0e\x1f\xe6\xaf\xd7\xaf\x33\x37\x37\x87\x31\x06\ \xd7\x75\x71\x1c\xe7\xe8\x9e\x00\x4a\x29\x07\x70\x22\x91\x48\x4b\ \xc7\x8d\x75\xbd\x5e\x0f\xf6\x1c\xc7\xe1\x83\x0f\x2f\xf2\xef\x72\ \x1d\x47\x68\xfe\x59\xac\x51\x40\x04\x0a\x18\x63\x1a\x4a\x46\xdb\ \x01\xc0\x18\x13\x9c\x7e\xbb\xe3\xc6\x5a\x08\x11\xac\xd7\xd6\xd6\ \x58\x29\x7b\xdc\x9a\xad\x51\xf5\x35\x45\x4f\xf3\xa3\x63\x51\x06\ \x06\x06\x98\x9e\x9e\x0e\x9e\x57\x6a\x67\xca\x89\x56\x00\x4a\x29\ \x6c\xdb\x7e\xad\x35\x72\xa3\x91\x1f\xac\x97\xf8\x5a\x87\x42\x5a\ \x16\x07\xa2\x8a\x6c\x61\x93\x77\xbf\x71\x82\x0b\x17\x2f\x92\x48\ \x24\x82\xf7\xfe\xdf\x0a\xec\xa6\x84\xd6\x9a\x74\x3a\x8d\x8c\x76\ \xb3\xb9\xb6\x49\x2a\x2a\x51\xc2\xa2\x3f\xae\x08\x49\x8b\xae\x78\ \x9c\x68\x34\x1a\x24\xe8\x9e\x00\xb9\x5c\x0e\x29\x25\x87\x0e\x1d\ \x42\x08\x11\x9c\xb2\x39\x21\x9b\x01\x6c\xdb\x66\x70\x70\x10\xc7\ \x6c\xf0\xfd\x94\x45\x4d\xb8\x14\xbc\x3a\x87\x42\x1e\xf7\xef\xdc\ \x27\x93\xc9\x50\xab\xd5\x90\x52\xb6\xa7\xc0\x8d\x1b\x37\xb0\x2c\ \x8b\xce\xce\x4e\xa4\x94\x81\xc4\x91\x48\x84\x78\x3c\x4e\x6f\x6f\ \x2f\x52\xca\x00\x00\xe0\xf1\xe3\xc7\x38\xb9\x1c\x00\xa3\x27\x4f\ \x32\xd8\xd5\x43\x7e\x66\x89\x99\x99\x99\x20\xf6\xf5\x7a\xbd\x3d\ \x80\x46\x63\xb1\x2c\x8b\x5a\xad\x86\xef\xfb\x68\xad\x29\x14\x0a\ \xe4\xf3\x79\xa4\x94\xf4\xf4\xf4\x90\x4a\xa5\x88\x46\xa3\x44\x22\ \x11\x2a\x95\x0a\xe5\x72\x19\xad\x35\x9f\x7f\xf6\x19\xa3\xa3\xa3\ \x64\x32\x99\x40\xc1\x06\x6c\xdb\x00\x5f\xf5\x83\x20\xd3\x9b\x33\ \xde\x18\x83\x94\x92\xa9\xa9\x29\xc2\xe1\x30\x9d\x9d\x9d\x24\x12\ \x09\x92\xc9\x24\x4a\x29\x2a\x95\x0a\x13\x13\x13\x94\x4a\xa5\x20\ \x9f\x1a\xce\xdf\x18\xa0\xa1\x44\x63\x16\x42\x30\x32\x32\xc2\x47\ \x3f\xf9\x29\xb3\x33\xd3\x5c\xb9\x72\x85\xa5\xa5\x25\x16\x17\x17\ \xc9\x64\x32\x1c\x3c\x78\x90\xbe\xbe\x3e\x2c\xcb\x42\x29\x85\x10\ \x22\x00\xd8\x2d\x04\x62\x37\x80\x46\x9b\xdd\xde\x6e\x47\x47\x47\ \x19\x5f\x94\x74\xf6\x0d\x73\xe6\xcc\x99\x60\x5f\x6b\xcd\xfc\xfc\ \x3c\x93\x93\x93\x64\xb3\x59\x7c\xdf\x0f\xda\x77\x73\x1b\x7f\xab\ \x10\x84\xc3\x61\x06\x87\xbf\xc5\x2f\x6e\xae\xf2\x47\x0b\x7e\x7b\ \xf6\x7d\x72\xb9\x1c\xb9\x5c\x2e\xe8\x8c\x9e\xe7\x31\x37\x37\xc7\ \xc2\xc2\x02\xa9\x54\x8a\x81\x81\x01\x62\xb1\x58\x00\xf1\x56\x21\ \x18\x1e\x1e\x66\xb1\x2a\xf8\x57\xa9\x46\x7e\xb5\xc6\xa7\x39\x8f\ \x4b\x97\x2e\x31\x3b\x3b\x1b\x54\x44\xa1\x50\xe0\xde\xbd\x7b\xbc\ \x78\xf1\x82\x85\x85\x05\x0a\x85\x02\xa9\x54\x8a\x74\x3a\xfd\x66\ \x00\x4a\x29\x2c\xcb\x22\x99\x4c\xd2\xd5\xd5\xc5\xf0\xf0\x30\xef\ \x7d\x7d\x88\xeb\x73\x1b\xac\xd7\x0c\x11\xdb\xe2\x57\xf7\x57\xd0\ \x27\xe3\xa8\xc8\xb7\x11\xd6\xd6\xe5\xe2\xe2\x77\xa3\xb8\xae\xcb\ \xd5\xab\x57\x31\xc6\xb0\xb9\xb9\x49\x3e\x9f\x27\x9f\xcf\x6f\x75\ \xcc\x76\x01\x1c\xc7\xe1\xc4\x89\x13\x9c\x3a\x75\x0a\xe1\x76\xf0\ \x65\x41\xf3\xa7\x99\x0d\xbe\x78\xee\xd1\x1d\x96\x84\x84\x45\xb5\ \x66\xf8\xe5\x17\xab\x78\xbe\xa1\xea\x6b\xce\xf4\xef\xe3\xdc\x80\ \x60\x7a\x7a\x7a\x87\x82\x2b\x2b\x2b\x3c\x7a\xf4\xa8\x7d\x80\x48\ \x24\xc2\xd0\xd0\x10\x2b\x56\x8c\xbf\x7d\x59\xe1\xf9\xcb\x1a\x5e\ \xcd\x20\x85\xe1\x9d\x88\x60\x9f\x6d\xe1\x7d\xa5\x84\xe7\x1b\x8e\ \xee\x77\xf9\xf8\x07\x5d\x8c\xff\xfd\x2f\x64\x32\x99\xa0\x73\x36\ \x00\xa4\x94\xac\xaf\xaf\xb7\x5f\x05\xeb\xeb\xeb\xdc\xbd\x7b\x97\ \x2e\xca\x7c\x78\x34\x4a\xba\xcb\xa6\x27\x2c\xe9\x71\x25\xdd\xae\ \xa4\xc7\x15\x81\x25\xa3\x92\x9f\x7f\x2f\x4e\xf9\x79\x96\x07\x13\ \x13\x08\x21\x82\x0a\x6a\xae\x22\xcb\xb2\xda\x07\x90\x52\xb2\xb8\ \xb8\xc8\x1f\x7e\xff\x3b\x96\xb2\x93\xfc\xf8\xd8\x3e\x4e\xbf\x1b\ \xa6\x37\x22\x79\x67\x9b\x1d\xea\x90\xbc\xd7\x69\x78\xf8\xf0\x21\ \x5a\xeb\x1d\x37\xa4\x06\x44\xcb\x5c\xdb\xab\x0a\xaa\xd5\x2a\xb7\ \x6f\xdf\xc6\x75\x5d\x8e\xf5\x0f\x93\x5f\xab\xe1\x29\x83\x23\xb7\ \x72\x20\x24\xb7\x42\xb0\x50\x15\xf4\xf7\xf7\xf3\xe4\xc9\x93\x57\ \xa4\x6f\xcc\x42\x88\x37\x53\xa0\xf9\xde\x67\x8c\xa1\x5c\x2e\x63\ \x4b\x2b\x38\xf5\x50\x4f\x88\xef\xa4\x1c\x06\xbb\x6c\x92\x51\x49\ \xb6\xe0\x73\x7c\x64\x64\xd7\xbb\x63\xab\x12\x7c\xa3\x3e\x60\xdb\ \x36\xb6\x80\x84\x2b\x70\x3b\x2c\x8e\x74\x87\x70\x6d\x8b\xe5\x6a\ \x9d\xe7\x2f\x6b\xfc\xa7\x52\x27\x1c\xdb\xba\x1b\x2e\x2f\x2f\xb7\ \xad\x40\x2b\x80\x0d\x60\xa3\x5c\x2e\x13\x8b\xc5\x82\x2e\x68\xdb\ \x36\xae\xb2\xf8\x66\x6f\x08\x55\x5b\xe7\xfe\xdd\x71\xb2\xd9\x2c\ \x47\x8e\x1c\xe1\xf0\xe1\xc3\x1c\x4d\xa5\x60\xa3\x12\xfc\xf1\x6c\ \xbf\xba\xd5\xeb\x75\x7c\xdf\x2f\xb7\x03\x50\x00\x0a\xf3\xf3\xf3\ \x1c\x3f\x7e\x3c\x88\xe7\xea\xea\x2a\x61\x65\x51\x5d\xfb\x2f\x9f\ \xdf\xbb\x47\x2e\x97\x43\x6b\xcd\xe4\xe4\x24\x53\x53\x53\x24\x12\ \x09\x00\x3c\xcf\x0b\x32\xbe\xb9\x95\x97\x4a\x25\x3c\xcf\xcb\xee\ \x50\xba\x55\x05\x02\xce\xf2\xf2\xf2\x0f\xfb\xfa\xfa\xac\x78\x3c\ \x8e\x10\x82\x95\x95\x15\x9e\x3e\x7d\xca\x83\x07\x0f\x28\x16\x8b\ \x81\x03\xcb\xb2\xd0\x5a\x53\x2e\x97\x79\xf9\xf2\x25\x96\x65\xed\ \xb0\xd5\xd5\x55\x6e\xde\xbc\x59\xf5\x3c\xef\xd7\xc0\x3f\xf6\x02\ \x00\xc8\x56\x2a\x95\x91\x7c\x3e\x9f\xee\xe8\xe8\xb0\x5c\xd7\xc5\ \xb6\x6d\x3c\xcf\x0b\xe2\xda\x6c\x0d\x90\xe6\x19\xa0\x5a\xad\x92\ \xcd\x66\xb9\x73\xe7\x0e\x85\x42\xe1\x53\xe0\x63\xa0\xda\xd6\xc7\ \x29\xe0\x02\x63\xc0\x05\x20\x01\x38\xbc\xf9\xf0\x81\x45\xe0\x16\ \xf0\x09\xd0\xde\xc7\xe9\xb6\x11\x7f\x4b\x80\x25\xa0\xdc\xca\x39\ \xc0\xff\x00\x27\xf2\xcd\xbe\x4f\x7b\xc5\xe3\x00\x00\x00\x00\x49\ \x45\x4e\x44\xae\x42\x60\x82\ \x00\x00\x04\x30\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ \x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ \x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\ \x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\ \x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\ \x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\ \x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\ \x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\ \x31\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x77\x69\ \x64\x74\x68\x3d\x22\x31\x30\x30\x25\x22\x20\x68\x65\x69\x67\x68\ \x74\x3d\x22\x31\x30\x30\x25\x22\x20\x76\x69\x65\x77\x42\x6f\x78\ \x3d\x22\x30\x20\x30\x20\x36\x30\x20\x36\x30\x22\x20\x76\x65\x72\ \x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x78\x6d\x6c\x6e\x73\ \x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ \x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\ \x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\ \x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\ \x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\ \x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x20\x73\x74\ \x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\ \x76\x65\x6e\x6f\x64\x64\x3b\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\ \x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ \x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\ \x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\ \x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ \x6c\x69\x6d\x69\x74\x3a\x31\x2e\x35\x3b\x22\x3e\x0a\x20\x20\x20\ \x20\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ \x61\x74\x72\x69\x78\x28\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x2d\x31\ \x34\x30\x2c\x30\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ \x3c\x67\x20\x69\x64\x3d\x22\x74\x61\x67\x22\x20\x74\x72\x61\x6e\ \x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x31\x2c\ \x30\x2c\x30\x2c\x31\x2c\x2d\x37\x34\x36\x2c\x30\x29\x22\x3e\x0a\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x72\x65\x63\ \x74\x20\x78\x3d\x22\x38\x38\x36\x22\x20\x79\x3d\x22\x30\x22\x20\ \x77\x69\x64\x74\x68\x3d\x22\x36\x30\x22\x20\x68\x65\x69\x67\x68\ \x74\x3d\x22\x36\x30\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ \x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x22\x2f\x3e\x0a\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x3c\x67\x20\x74\x72\x61\x6e\x73\ \x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x31\x2e\x30\ \x32\x36\x31\x33\x2c\x30\x2c\x30\x2c\x31\x2e\x32\x35\x39\x32\x36\ \x2c\x35\x32\x36\x2e\x35\x38\x33\x2c\x2d\x38\x2e\x34\x30\x37\x34\ \x31\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\ \x35\x34\x2c\x31\x37\x4c\x33\x38\x38\x2c\x31\x37\x4c\x34\x30\x35\ \x2e\x30\x30\x31\x2c\x32\x33\x2e\x37\x35\x4c\x34\x30\x35\x2e\x30\ \x30\x31\x2c\x33\x37\x2e\x32\x35\x31\x4c\x33\x38\x38\x2c\x34\x34\ \x4c\x33\x35\x34\x2c\x34\x34\x4c\x33\x35\x34\x2c\x31\x37\x5a\x22\ \x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\ \x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x62\x6c\x61\x63\x6b\x3b\x73\ \x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x2e\x31\x38\ \x70\x78\x3b\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\ \x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x38\x39\ \x36\x31\x32\x38\x2c\x30\x2c\x30\x2c\x30\x2e\x38\x39\x36\x31\x32\ \x38\x2c\x33\x39\x2e\x33\x30\x39\x32\x2c\x33\x2e\x31\x36\x37\x34\ \x38\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x69\x72\x63\x6c\x65\ \x20\x63\x78\x3d\x22\x34\x30\x30\x22\x20\x63\x79\x3d\x22\x33\x30\ \x2e\x35\x30\x31\x22\x20\x72\x3d\x22\x32\x2e\x34\x39\x39\x22\x20\ \x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x72\x6f\x6b\x65\x3a\x62\x6c\ \x61\x63\x6b\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ \x3a\x32\x2e\x36\x33\x70\x78\x3b\x22\x2f\x3e\x0a\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x67\x3e\ \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x67\ \x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\ \x20\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ \x00\x00\x05\x69\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ \x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ \x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\ \x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\ \x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\ \x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\ \x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\ \x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\ \x31\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x77\x69\ \x64\x74\x68\x3d\x22\x31\x30\x30\x25\x22\x20\x68\x65\x69\x67\x68\ \x74\x3d\x22\x31\x30\x30\x25\x22\x20\x76\x69\x65\x77\x42\x6f\x78\ \x3d\x22\x30\x20\x30\x20\x36\x30\x20\x36\x30\x22\x20\x76\x65\x72\ \x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x78\x6d\x6c\x6e\x73\ \x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ \x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\ \x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\ \x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\ \x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\ \x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x20\x73\x74\ \x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\ \x76\x65\x6e\x6f\x64\x64\x3b\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\ \x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ \x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\ \x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\ \x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ \x6c\x69\x6d\x69\x74\x3a\x31\x2e\x35\x3b\x22\x3e\x0a\x20\x20\x20\ \x20\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ \x61\x74\x72\x69\x78\x28\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x2d\x32\ \x31\x30\x2c\x30\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ \x3c\x67\x20\x69\x64\x3d\x22\x64\x65\x63\x6b\x22\x20\x74\x72\x61\ \x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x31\ \x2c\x30\x2c\x30\x2c\x31\x2c\x2d\x31\x34\x38\x31\x2c\x30\x29\x22\ \x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x72\ \x65\x63\x74\x20\x78\x3d\x22\x31\x36\x39\x31\x22\x20\x79\x3d\x22\ \x30\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x30\x22\x20\x68\x65\ \x69\x67\x68\x74\x3d\x22\x36\x30\x22\x20\x73\x74\x79\x6c\x65\x3d\ \x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x22\x2f\x3e\x0a\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x67\x20\x74\x72\ \x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\ \x31\x2e\x33\x34\x36\x35\x34\x2c\x30\x2e\x30\x30\x33\x33\x35\x39\ \x30\x34\x2c\x2d\x30\x2e\x30\x30\x33\x39\x36\x31\x30\x32\x2c\x31\ \x2e\x35\x38\x37\x38\x36\x2c\x38\x32\x39\x2e\x30\x31\x39\x2c\x2d\ \x33\x2e\x39\x30\x35\x38\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\ \x64\x3d\x22\x4d\x36\x37\x33\x2c\x37\x4c\x36\x35\x32\x2c\x37\x4c\ \x36\x35\x32\x2c\x31\x30\x2e\x39\x31\x4c\x36\x36\x38\x2e\x32\x30\ \x31\x2c\x31\x31\x2e\x30\x31\x33\x4c\x36\x36\x38\x2e\x32\x34\x33\ \x2c\x33\x32\x2e\x39\x30\x33\x4c\x36\x37\x33\x2c\x33\x32\x2e\x39\ \x30\x33\x4c\x36\x37\x33\x2c\x37\x5a\x22\x20\x73\x74\x79\x6c\x65\ \x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\ \x6b\x65\x3a\x62\x6c\x61\x63\x6b\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ \x77\x69\x64\x74\x68\x3a\x31\x2e\x38\x34\x70\x78\x3b\x22\x2f\x3e\ \x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x67\ \x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x67\ \x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\ \x69\x78\x28\x31\x2e\x33\x34\x36\x35\x34\x2c\x30\x2e\x30\x30\x33\ \x33\x35\x39\x30\x34\x2c\x2d\x30\x2e\x30\x30\x33\x39\x36\x31\x30\ \x32\x2c\x31\x2e\x35\x38\x37\x38\x36\x2c\x38\x33\x36\x2e\x30\x39\ \x36\x2c\x2d\x31\x30\x2e\x33\x34\x32\x29\x22\x3e\x0a\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\ \x74\x68\x20\x64\x3d\x22\x4d\x36\x37\x33\x2c\x37\x4c\x36\x35\x32\ \x2c\x37\x4c\x36\x35\x32\x2c\x31\x30\x2e\x39\x31\x4c\x36\x36\x38\ \x2e\x32\x30\x31\x2c\x31\x31\x2e\x30\x31\x33\x4c\x36\x36\x38\x2e\ \x32\x34\x33\x2c\x33\x32\x2e\x39\x30\x33\x4c\x36\x37\x33\x2c\x33\ \x32\x2e\x39\x30\x33\x4c\x36\x37\x33\x2c\x37\x5a\x22\x20\x73\x74\ \x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\ \x74\x72\x6f\x6b\x65\x3a\x62\x6c\x61\x63\x6b\x3b\x73\x74\x72\x6f\ \x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x2e\x38\x34\x70\x78\x3b\ \x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ \x61\x74\x72\x69\x78\x28\x31\x2e\x33\x34\x36\x35\x34\x2c\x30\x2e\ \x30\x30\x33\x33\x35\x39\x30\x34\x2c\x2d\x30\x2e\x30\x30\x33\x39\ \x36\x31\x30\x32\x2c\x31\x2e\x35\x38\x37\x38\x36\x2c\x38\x32\x32\ \x2e\x35\x34\x31\x2c\x32\x2e\x35\x32\x30\x39\x31\x29\x22\x3e\x0a\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x36\x37\x33\x2c\x37\x4c\ \x36\x35\x32\x2c\x37\x4c\x36\x35\x32\x2c\x33\x32\x2e\x39\x30\x33\ \x4c\x36\x37\x33\x2c\x33\x32\x2e\x39\x30\x33\x4c\x36\x37\x33\x2c\ \x37\x5a\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\ \x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x62\x6c\x61\x63\ \x6b\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\ \x2e\x38\x34\x70\x78\x3b\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\ \x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x67\x3e\ \x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ \x00\x00\x02\xd7\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ \x00\x00\x3c\x00\x00\x00\x3c\x08\x06\x00\x00\x00\x3a\xfc\xd9\x72\ \x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\x74\x77\x61\x72\x65\ \x00\x41\x64\x6f\x62\x65\x20\x49\x6d\x61\x67\x65\x52\x65\x61\x64\ \x79\x71\xc9\x65\x3c\x00\x00\x02\x79\x49\x44\x41\x54\x78\xda\xec\ \x9a\xd1\x6d\xc2\x30\x10\x40\x0d\x62\x80\x6c\x40\x3a\x01\xde\xa0\ \x19\x21\x23\xa4\x13\xc0\x06\xf5\x06\xa8\x13\xa4\x1b\xa4\x1b\x44\ \x4c\x10\x98\x20\x6c\x10\x36\x68\x8d\xe4\x48\xc8\x75\x82\xef\xb0\ \x0f\x87\xf8\xa4\xfb\x31\x89\xc3\xf3\x9d\xed\xbb\xb3\x17\x8c\x56\ \xb8\xd4\x5c\xea\x46\x6a\xa2\xda\x2e\x52\x4f\x52\x7f\xa4\x1e\xd9\ \x8b\xc8\x15\xb2\x91\xfa\x7b\x47\x5b\xf5\xec\x64\xe5\x6a\xc5\xca\ \x02\x54\xd7\xea\xc6\x03\x26\x05\xdb\x20\x60\x7b\x6d\xd4\x14\x98\ \x05\x6c\xaf\xdd\x54\x2c\xed\x02\xf6\xd6\xd2\x41\x8b\x70\x08\xdb\ \xab\x08\x15\x36\xf5\x00\xdb\x6b\x1a\x22\x70\xe9\x11\xb8\x9e\x93\ \x75\x9d\x59\x79\xe9\x10\x78\x4b\x30\xa8\xdb\x90\x2c\xdc\x12\x58\ \xb8\x0b\x05\x96\x13\xc0\xf6\xca\x43\x70\xe9\x8c\x38\x2e\x47\xcb\ \xea\x0e\x04\x57\x19\xcc\x59\xe9\x90\x6c\x08\x81\x37\x3e\x81\x3f\ \xb5\xb6\x2b\xfc\x97\xd4\x6f\xc3\x0a\x4d\xb9\x1b\xe8\x61\x6c\xae\ \xda\xfb\xb4\x93\xab\xb4\xf3\x0d\x02\x3c\x34\x57\xd3\x27\xbb\x34\ \x1f\xd8\xff\x4d\xf1\x3c\x68\x0e\xbf\x0f\xb4\x87\x96\xa4\x5f\x7c\ \x2f\x5a\x17\x36\x61\x59\xb2\x99\xc9\x12\x61\xc9\xf4\x55\x81\x4f\ \x13\x01\x4e\x7c\xbb\xf4\xfa\xc9\x0b\xd9\xd1\x62\xd5\x1e\xfc\x4f\ \x4b\x40\xc7\x63\x1f\x38\x3f\x71\x55\xe6\x90\x29\x89\x05\x4e\x2c\ \xdd\xdf\x87\x1c\x2c\x23\xaf\x03\xa6\xf3\x6e\x20\x80\xcf\x0d\x81\ \x07\x55\xf2\x90\x21\xff\xa3\x95\x0c\xd5\x94\x4b\xc0\xe0\xf8\x4c\ \x0f\xf3\x91\x67\x51\xd5\xce\x02\xd0\x61\x49\x00\x5c\x5a\x7e\x13\ \x5d\xe9\x4c\x98\x7d\x25\x91\x13\xbb\xf3\x58\x49\x69\xf7\xc8\x22\ \x51\x31\xfb\x22\x79\x4d\x58\xc4\x2b\x7d\xd5\xbe\x32\x80\x95\xb3\ \x00\xac\x5b\xfa\xae\x57\x71\x82\xb9\x5c\x01\x3c\xc9\x49\xaa\x3a\ \xb6\x1a\x36\x9a\x6b\x27\x8e\x0b\x7a\xad\xd6\xbf\x60\x44\xb5\xeb\ \x1a\xe0\x46\xdc\xd1\x36\xd5\x69\x1e\x94\xfb\x2c\xf0\x41\x2b\x93\ \xae\xa1\x75\xd8\x7b\xfd\xed\x7d\x84\x75\x02\x01\x8d\x39\x49\x6c\ \x80\xb0\x2d\xf3\x78\xac\x5a\x33\xd8\xe9\x7d\xa2\x06\xaa\xb3\xb4\ \xaa\xd0\xde\x2f\x98\xe7\x5a\xb5\x4d\x30\xd2\x58\x2c\x34\x99\xe1\ \xbd\x42\x0d\x48\xab\x3d\x5b\xa9\xdf\xf4\x81\xb2\xb9\x2e\x51\x50\ \x55\x0e\x3b\xcb\xed\x04\x13\x04\xec\x2c\xfb\x17\x94\x95\x06\xc8\ \xa2\x54\x1b\x2c\x68\xea\x6f\x0f\xe8\x13\x15\x60\x2c\x1e\x84\x4e\ \x95\x15\x21\x73\xe8\x6c\x28\x18\x40\x83\x85\x0f\xf6\xff\x30\x80\ \xb4\xa6\x84\xb9\x9a\x84\xdd\xaa\x82\xb9\xc7\xb5\x63\x7e\x73\xe2\ \x9a\x05\x78\xa3\x27\xf1\x10\x4b\x4f\xe2\x76\x5e\xaa\xc0\x1f\xb1\ \x78\x43\xb5\xe5\xb8\xb6\x78\xa1\xe0\x5b\x4b\x6b\x0a\x36\xa1\x1b\ \x78\xd8\xbc\x9a\x6c\x5f\x8d\x67\x4b\x11\x38\x02\x47\xe0\x08\x1c\ \x81\x03\x92\x15\xf2\x3d\x8e\x88\x6b\x6d\x82\x89\x35\x22\x73\x32\ \x65\x5f\xe4\x65\x1e\x4a\x15\xd1\xa5\x23\x70\x04\x9e\x8f\xfc\x09\ \x30\x00\xa0\x1c\x74\x67\x26\xea\x15\x76\x00\x00\x00\x00\x49\x45\ \x4e\x44\xae\x42\x60\x82\ \x00\x00\x04\x06\ \x3c\ \x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ \x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ \x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ \x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\ \x73\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\ \x33\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\ \x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\ \x2e\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\ \x2f\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\ \x31\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x77\x69\ \x64\x74\x68\x3d\x22\x31\x30\x30\x25\x22\x20\x68\x65\x69\x67\x68\ \x74\x3d\x22\x31\x30\x30\x25\x22\x20\x76\x69\x65\x77\x42\x6f\x78\ \x3d\x22\x30\x20\x30\x20\x36\x30\x20\x36\x30\x22\x20\x76\x65\x72\ \x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x78\x6d\x6c\x6e\x73\ \x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\ \x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\ \x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\ \x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\ \x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\ \x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x20\x73\x74\ \x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\ \x76\x65\x6e\x6f\x64\x64\x3b\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\ \x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ \x6c\x69\x6e\x65\x63\x61\x70\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\ \x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\ \x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ \x6c\x69\x6d\x69\x74\x3a\x31\x2e\x35\x3b\x22\x3e\x0a\x20\x20\x20\ \x20\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ \x61\x74\x72\x69\x78\x28\x31\x2c\x30\x2c\x30\x2c\x31\x2c\x2d\x32\ \x38\x30\x2c\x30\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ \x3c\x67\x20\x69\x64\x3d\x22\x68\x65\x61\x72\x74\x22\x20\x74\x72\ \x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\ \x31\x2c\x30\x2c\x30\x2c\x31\x2c\x2d\x31\x34\x31\x31\x2c\x30\x29\ \x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ \x72\x65\x63\x74\x20\x78\x3d\x22\x31\x36\x39\x31\x22\x20\x79\x3d\ \x22\x30\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x30\x22\x20\x68\ \x65\x69\x67\x68\x74\x3d\x22\x36\x30\x22\x20\x73\x74\x79\x6c\x65\ \x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x22\x2f\x3e\x0a\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x67\x20\x74\ \x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\ \x28\x30\x2e\x39\x36\x30\x32\x34\x31\x2c\x30\x2c\x30\x2c\x30\x2e\ \x39\x36\x30\x32\x34\x31\x2c\x31\x34\x33\x31\x2e\x30\x31\x2c\x33\ \x2e\x31\x34\x37\x30\x31\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x20\ \x64\x3d\x22\x4d\x33\x30\x32\x2c\x31\x30\x2e\x38\x43\x33\x30\x37\ \x2e\x36\x38\x34\x2c\x30\x20\x33\x31\x39\x2e\x30\x35\x33\x2c\x30\ \x20\x33\x32\x34\x2e\x37\x33\x37\x2c\x35\x2e\x34\x43\x33\x33\x30\ \x2e\x34\x32\x31\x2c\x31\x30\x2e\x38\x20\x33\x33\x30\x2e\x34\x32\ \x31\x2c\x32\x31\x2e\x36\x20\x33\x32\x34\x2e\x37\x33\x37\x2c\x33\ \x32\x2e\x34\x43\x33\x32\x30\x2e\x37\x35\x38\x2c\x34\x30\x2e\x35\ \x20\x33\x31\x30\x2e\x35\x32\x36\x2c\x34\x38\x2e\x36\x20\x33\x30\ \x32\x2c\x35\x34\x43\x32\x39\x33\x2e\x34\x37\x34\x2c\x34\x38\x2e\ \x36\x20\x32\x38\x33\x2e\x32\x34\x32\x2c\x34\x30\x2e\x35\x20\x32\ \x37\x39\x2e\x32\x36\x33\x2c\x33\x32\x2e\x34\x43\x32\x37\x33\x2e\ \x35\x37\x39\x2c\x32\x31\x2e\x36\x20\x32\x37\x33\x2e\x35\x37\x39\ \x2c\x31\x30\x2e\x38\x20\x32\x37\x39\x2e\x32\x36\x33\x2c\x35\x2e\ \x34\x43\x32\x38\x34\x2e\x39\x34\x37\x2c\x30\x20\x32\x39\x36\x2e\ \x33\x31\x36\x2c\x30\x20\x33\x30\x32\x2c\x31\x30\x2e\x38\x5a\x22\ \x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\ \x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x62\x6c\x61\x63\x6b\x3b\x73\ \x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x2e\x38\x32\ \x70\x78\x3b\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ \x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\ \x73\x76\x67\x3e\x0a\ \x00\x00\x02\x68\ \x00\ \x00\x10\x25\x78\x9c\xed\x97\x5b\x6f\xd3\x30\x14\xc7\xdf\xf7\x29\ \x8c\x25\x24\x90\x52\x5f\x13\x3b\xce\x9a\x4d\xda\x85\x09\x69\xc0\ \x24\x36\x10\xbc\x85\xc4\x6b\xcd\xd2\x24\x4a\xb2\xb6\xfb\xf6\x9c\ \x64\xed\xb4\x6e\xd5\x40\x88\xf1\xb2\xb4\x55\xeb\x73\x72\x7c\x2e\ \x3f\xfb\xff\xd0\xf1\xfe\x72\x96\xa3\xb9\xad\x1b\x57\x16\x31\xe6\ \x84\x61\x64\x8b\xb4\xcc\x5c\x31\x89\xf1\xc5\xf9\xbb\x51\x88\x51\ \xd3\x26\x45\x96\xe4\x65\x61\x63\x5c\x94\x78\x7f\x6f\x67\xfc\xea\ \xe8\xd3\xe1\xf9\xb7\xb3\x63\xd4\xcc\x27\xe8\xec\xe2\xe0\xf4\xfd\ \x21\xc2\x23\x4a\xbf\xca\x43\x4a\x8f\xce\x8f\xd0\xe7\x2f\x27\x88\ \x13\x4e\xe9\xf1\x47\x8c\xf0\xb4\x6d\xab\x88\xd2\xc5\x62\x41\x16\ \x92\x94\xf5\x84\x9e\xd4\x49\x35\x75\x69\x43\x21\x90\x76\x81\xb0\ \x89\x42\x32\xce\x49\xd6\x66\x18\x4a\x74\x99\x17\x2e\x6b\xa7\xd0\ \x16\x63\xaf\x31\x9a\x5a\x37\x99\xb6\x6b\x6b\xee\xec\xe2\xa0\x5c\ \xc6\x98\x21\x86\x54\xf7\xc1\xf7\xe7\xe0\x18\xc1\x64\x45\x13\x6f\ \xa9\x2d\x18\x63\x5d\xad\x55\x48\xb4\xcc\x5d\x71\xb5\x2d\x90\x1b\ \x63\x68\xff\xb4\x0f\x8d\x9a\x2a\x49\x81\x41\x55\xdb\xc6\xd6\x73\ \xdb\x91\xb9\xc9\xc1\x71\xe9\xf2\x7c\x54\x5f\xe7\x36\xb2\x73\x5b\ \x94\x59\xb6\x9b\xe6\xae\xda\xf4\x34\x6d\x5d\x5e\xd9\x11\x24\xb3\ \x69\x52\x45\x75\x79\x5d\x6c\x38\x7f\x96\xae\xd8\xf4\xce\x5c\x6b\ \xeb\xdc\xc1\x4f\xc4\x49\xb0\x0b\x4c\x10\xbc\xc6\x13\xd4\xd6\x49\ \xd1\x5c\x96\xf5\x2c\xc6\xb3\xa4\xad\xdd\xf2\x0d\xf7\x18\xbc\xb9\ \x37\xf2\xb9\xf6\xd8\xdb\x55\xe8\x2a\xdc\x65\x31\x4e\xcb\x3c\xb7\ \x69\x0b\x70\xf0\x53\xdb\xb9\xd0\xfe\xe6\xfe\x3e\x47\x0d\x5b\x11\ \xa0\xe6\xca\x00\xd7\x1b\x60\x8e\xd7\x47\xd3\x61\x5f\x1f\x4c\xb7\ \xbe\x47\x24\x2a\xe0\xc6\xec\x62\xfa\x20\xd9\xb6\xfe\x19\x31\x7e\ \xe0\x4b\xd9\xf7\x71\x67\x18\x41\x94\x62\xdc\x13\x84\x2b\xa5\xcc\ \xc3\xb6\x9e\xc8\xa6\x82\x80\x73\xc8\x46\x18\xe3\x4a\xfa\x42\x78\ \xa3\x7e\x6d\x84\x66\x06\xdc\x5a\x8b\x00\x48\x71\x61\x0c\x31\xd2\ \x13\x21\x91\xa1\x0e\xb7\x15\xe8\x8b\x54\x49\x3b\x45\x40\xf1\x83\ \xd2\xd2\xd3\xa7\x2a\x10\xab\x6f\x0e\xbd\xf2\x53\xa5\x42\x22\xa0\ \x4f\xb8\xbb\x8c\xcb\x5b\xd3\x97\x9e\x14\xc4\x30\x30\xf5\xc6\x52\ \x7f\xdf\x02\xe9\xf6\xc4\xa3\x1f\x79\x92\x5e\xad\x8f\xbf\x07\x1c\ \xf9\xd5\xf2\x11\xc2\xbe\x27\x3a\xf9\xe7\x34\x24\x93\xc0\xc1\x13\ \x01\x11\x81\x0a\x5e\x3a\x0d\x61\x14\xd1\xa1\x27\x41\x7b\xdc\xff\ \x0b\x1a\xff\x77\xe0\xc7\x8e\x3f\xd7\x99\x52\x83\xce\x06\x9d\x0d\ \x3a\x7b\x6e\x9d\xc1\xa0\x4c\x19\xe5\x8d\x84\x26\x42\x85\x6a\x10\ \xda\x33\x5f\xad\x41\x68\x2f\x53\x68\x1a\xe6\xf7\x75\x30\x08\x6d\ \x10\xda\x20\xb4\xdf\x0d\xbc\xe1\xb8\x33\xfa\xc5\xb8\xfb\x97\xbc\ \xb7\xf3\x0b\x46\x33\xee\x37\ " qt_resource_name = b"\ \x00\x05\ \x00\x6f\xa6\x53\ \x00\x69\ \x00\x63\x00\x6f\x00\x6e\x00\x73\ \x00\x0c\ \x0e\xcd\x03\x47\ \x00\x6e\ \x00\x6f\x00\x74\x00\x65\x00\x74\x00\x79\x00\x70\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x08\ \x05\x1c\x5a\x47\ \x00\x61\ \x00\x6e\x00\x6b\x00\x69\x00\x2e\x00\x70\x00\x6e\x00\x67\ \x00\x07\ \x0a\x7a\x5a\x27\ \x00\x74\ \x00\x61\x00\x67\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x08\ \x0b\x9e\x57\x87\ \x00\x64\ \x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x10\ \x08\x12\xae\xa7\ \x00\x6d\ \x00\x65\x00\x64\x00\x69\x00\x61\x00\x2d\x00\x72\x00\x65\x00\x63\x00\x6f\x00\x72\x00\x64\x00\x2e\x00\x70\x00\x6e\x00\x67\ \x00\x09\ \x08\x97\x87\xa7\ \x00\x68\ \x00\x65\x00\x61\x00\x72\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0e\ \x04\x44\x35\x07\ \x00\x63\ \x00\x6f\x00\x6c\x00\x6c\x00\x65\x00\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\ " qt_resource_struct_v1 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x02\ \x00\x00\x00\xac\x00\x01\x00\x00\x00\x01\x00\x00\x1c\x9b\ \x00\x00\x00\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x05\x59\ \x00\x00\x00\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x15\xb6\ \x00\x00\x00\x94\x00\x00\x00\x00\x00\x01\x00\x00\x18\x91\ \x00\x00\x00\x44\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x15\ \x00\x00\x00\x58\x00\x00\x00\x00\x00\x01\x00\x00\x10\x49\ \x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ " qt_resource_struct_v2 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x02\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\xac\x00\x01\x00\x00\x00\x01\x00\x00\x1c\x9b\ \x00\x00\x01\x5f\xb2\xe6\x4b\xb0\ \x00\x00\x00\x2e\x00\x00\x00\x00\x00\x01\x00\x00\x05\x59\ \x00\x00\x01\x37\x58\x6b\x1d\xa0\ \x00\x00\x00\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x15\xb6\ \x00\x00\x01\x5f\xb2\xe6\x4b\xb0\ \x00\x00\x00\x94\x00\x00\x00\x00\x00\x01\x00\x00\x18\x91\ \x00\x00\x01\x5f\xb2\xe6\x4b\xb0\ \x00\x00\x00\x44\x00\x00\x00\x00\x00\x01\x00\x00\x0c\x15\ \x00\x00\x01\x5f\xb2\xe6\x4b\xb0\ \x00\x00\x00\x58\x00\x00\x00\x00\x00\x01\x00\x00\x10\x49\ \x00\x00\x01\x5f\xb2\xe6\x4b\xb0\ \x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x01\x5f\xb2\xe6\x4b\xb0\ " qt_version = QtCore.qVersion().split('.') if qt_version < ['5', '8', '0']: rcc_version = 1 qt_resource_struct = qt_resource_struct_v1 else: rcc_version = 2 qt_resource_struct = qt_resource_struct_v2 def qInitResources(): QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) def qCleanupResources(): QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) qInitResources() anki-2.1.0+dfsg~b36/aqt/forms/importing.py000066400000000000000000000122241323611211500203550ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/importing.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_ImportDialog(object): def setupUi(self, ImportDialog): ImportDialog.setObjectName("ImportDialog") ImportDialog.resize(553, 466) self.vboxlayout = QtWidgets.QVBoxLayout(ImportDialog) self.vboxlayout.setObjectName("vboxlayout") self.groupBox = QtWidgets.QGroupBox(ImportDialog) self.groupBox.setObjectName("groupBox") self.toplayout = QtWidgets.QVBoxLayout(self.groupBox) self.toplayout.setObjectName("toplayout") self.gridLayout_2 = QtWidgets.QGridLayout() self.gridLayout_2.setObjectName("gridLayout_2") self.deckArea = QtWidgets.QWidget(self.groupBox) self.deckArea.setObjectName("deckArea") self.gridLayout_2.addWidget(self.deckArea, 0, 3, 1, 1) self.modelArea = QtWidgets.QWidget(self.groupBox) self.modelArea.setObjectName("modelArea") self.gridLayout_2.addWidget(self.modelArea, 0, 1, 1, 1) self.label = QtWidgets.QLabel(self.groupBox) self.label.setObjectName("label") self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1) self.label_2 = QtWidgets.QLabel(self.groupBox) self.label_2.setObjectName("label_2") self.gridLayout_2.addWidget(self.label_2, 0, 2, 1, 1) self.toplayout.addLayout(self.gridLayout_2) self.autoDetect = QtWidgets.QPushButton(self.groupBox) self.autoDetect.setText("") self.autoDetect.setObjectName("autoDetect") self.toplayout.addWidget(self.autoDetect) self.importMode = QtWidgets.QComboBox(self.groupBox) self.importMode.setObjectName("importMode") self.importMode.addItem("") self.importMode.addItem("") self.importMode.addItem("") self.toplayout.addWidget(self.importMode) self.allowHTML = QtWidgets.QCheckBox(self.groupBox) self.allowHTML.setObjectName("allowHTML") self.toplayout.addWidget(self.allowHTML) self.vboxlayout.addWidget(self.groupBox) self.mappingGroup = QtWidgets.QGroupBox(ImportDialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.mappingGroup.sizePolicy().hasHeightForWidth()) self.mappingGroup.setSizePolicy(sizePolicy) self.mappingGroup.setObjectName("mappingGroup") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.mappingGroup) self.verticalLayout_2.setObjectName("verticalLayout_2") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.mappingArea = QtWidgets.QScrollArea(self.mappingGroup) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.mappingArea.sizePolicy().hasHeightForWidth()) self.mappingArea.setSizePolicy(sizePolicy) self.mappingArea.setMinimumSize(QtCore.QSize(400, 150)) self.mappingArea.setFrameShape(QtWidgets.QFrame.NoFrame) self.mappingArea.setWidgetResizable(True) self.mappingArea.setObjectName("mappingArea") self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 529, 251)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.mappingArea.setWidget(self.scrollAreaWidgetContents) self.gridLayout.addWidget(self.mappingArea, 0, 0, 1, 1) self.verticalLayout_2.addLayout(self.gridLayout) self.vboxlayout.addWidget(self.mappingGroup) self.buttonBox = QtWidgets.QDialogButtonBox(ImportDialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Close|QtWidgets.QDialogButtonBox.Help) self.buttonBox.setObjectName("buttonBox") self.vboxlayout.addWidget(self.buttonBox) self.retranslateUi(ImportDialog) self.buttonBox.accepted.connect(ImportDialog.accept) self.buttonBox.rejected.connect(ImportDialog.reject) QtCore.QMetaObject.connectSlotsByName(ImportDialog) def retranslateUi(self, ImportDialog): _translate = QtCore.QCoreApplication.translate ImportDialog.setWindowTitle(_("Import")) self.groupBox.setTitle(_("Import options")) self.label.setText(_("Type")) self.label_2.setText(_("Deck")) self.importMode.setItemText(0, _("Update existing notes when first field matches")) self.importMode.setItemText(1, _("Ignore lines where first field matches existing note")) self.importMode.setItemText(2, _("Import even if existing note has same first field")) self.allowHTML.setText(_("Allow HTML in fields")) self.mappingGroup.setTitle(_("Field mapping")) anki-2.1.0+dfsg~b36/aqt/forms/main.py000066400000000000000000000201131323611211500172650ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/main.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(412, 301) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) MainWindow.setMinimumSize(QtCore.QSize(400, 0)) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/icons/anki.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) MainWindow.setWindowIcon(icon) self.centralwidget = QtWidgets.QWidget(MainWindow) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth()) self.centralwidget.setSizePolicy(sizePolicy) self.centralwidget.setAutoFillBackground(True) self.centralwidget.setObjectName("centralwidget") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 412, 22)) self.menubar.setObjectName("menubar") self.menuHelp = QtWidgets.QMenu(self.menubar) self.menuHelp.setObjectName("menuHelp") self.menuEdit = QtWidgets.QMenu(self.menubar) self.menuEdit.setObjectName("menuEdit") self.menuCol = QtWidgets.QMenu(self.menubar) self.menuCol.setObjectName("menuCol") self.menuTools = QtWidgets.QMenu(self.menubar) self.menuTools.setObjectName("menuTools") MainWindow.setMenuBar(self.menubar) self.actionExit = QtWidgets.QAction(MainWindow) self.actionExit.setObjectName("actionExit") self.actionPreferences = QtWidgets.QAction(MainWindow) self.actionPreferences.setMenuRole(QtWidgets.QAction.PreferencesRole) self.actionPreferences.setObjectName("actionPreferences") self.actionAbout = QtWidgets.QAction(MainWindow) self.actionAbout.setMenuRole(QtWidgets.QAction.AboutRole) self.actionAbout.setObjectName("actionAbout") self.actionUndo = QtWidgets.QAction(MainWindow) self.actionUndo.setEnabled(False) self.actionUndo.setObjectName("actionUndo") self.actionCheckMediaDatabase = QtWidgets.QAction(MainWindow) self.actionCheckMediaDatabase.setObjectName("actionCheckMediaDatabase") self.actionOpenPluginFolder = QtWidgets.QAction(MainWindow) self.actionOpenPluginFolder.setObjectName("actionOpenPluginFolder") self.actionDonate = QtWidgets.QAction(MainWindow) self.actionDonate.setObjectName("actionDonate") self.actionDownloadSharedPlugin = QtWidgets.QAction(MainWindow) self.actionDownloadSharedPlugin.setStatusTip("") self.actionDownloadSharedPlugin.setObjectName("actionDownloadSharedPlugin") self.actionFullDatabaseCheck = QtWidgets.QAction(MainWindow) self.actionFullDatabaseCheck.setObjectName("actionFullDatabaseCheck") self.actionDocumentation = QtWidgets.QAction(MainWindow) self.actionDocumentation.setObjectName("actionDocumentation") self.actionSwitchProfile = QtWidgets.QAction(MainWindow) self.actionSwitchProfile.setObjectName("actionSwitchProfile") self.actionExport = QtWidgets.QAction(MainWindow) self.actionExport.setObjectName("actionExport") self.actionImport = QtWidgets.QAction(MainWindow) self.actionImport.setObjectName("actionImport") self.actionStudyDeck = QtWidgets.QAction(MainWindow) self.actionStudyDeck.setObjectName("actionStudyDeck") self.actionEmptyCards = QtWidgets.QAction(MainWindow) self.actionEmptyCards.setObjectName("actionEmptyCards") self.actionCreateFiltered = QtWidgets.QAction(MainWindow) self.actionCreateFiltered.setObjectName("actionCreateFiltered") self.actionNoteTypes = QtWidgets.QAction(MainWindow) self.actionNoteTypes.setObjectName("actionNoteTypes") self.actionAdd_ons = QtWidgets.QAction(MainWindow) self.actionAdd_ons.setObjectName("actionAdd_ons") self.menuHelp.addAction(self.actionDocumentation) self.menuHelp.addSeparator() self.menuHelp.addAction(self.actionDonate) self.menuHelp.addAction(self.actionAbout) self.menuEdit.addAction(self.actionUndo) self.menuCol.addAction(self.actionSwitchProfile) self.menuCol.addSeparator() self.menuCol.addAction(self.actionImport) self.menuCol.addAction(self.actionExport) self.menuCol.addSeparator() self.menuCol.addAction(self.actionExit) self.menuTools.addAction(self.actionStudyDeck) self.menuTools.addAction(self.actionCreateFiltered) self.menuTools.addSeparator() self.menuTools.addAction(self.actionFullDatabaseCheck) self.menuTools.addAction(self.actionCheckMediaDatabase) self.menuTools.addAction(self.actionEmptyCards) self.menuTools.addSeparator() self.menuTools.addAction(self.actionAdd_ons) self.menuTools.addSeparator() self.menuTools.addAction(self.actionNoteTypes) self.menuTools.addAction(self.actionPreferences) self.menubar.addAction(self.menuCol.menuAction()) self.menubar.addAction(self.menuEdit.menuAction()) self.menubar.addAction(self.menuTools.menuAction()) self.menubar.addAction(self.menuHelp.menuAction()) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_("Anki")) self.menuHelp.setTitle(_("&Help")) self.menuEdit.setTitle(_("&Edit")) self.menuCol.setTitle(_("&File")) self.menuTools.setTitle(_("&Tools")) self.actionExit.setText(_("E&xit")) self.actionExit.setShortcut(_("Ctrl+Q")) self.actionPreferences.setText(_("&Preferences...")) self.actionPreferences.setStatusTip(_("Configure interface language and options")) self.actionPreferences.setShortcut(_("Ctrl+P")) self.actionAbout.setText(_("&About...")) self.actionUndo.setText(_("&Undo")) self.actionUndo.setShortcut(_("Ctrl+Alt+Z")) self.actionCheckMediaDatabase.setText(_("Check &Media...")) self.actionCheckMediaDatabase.setStatusTip(_("Check the files in the media directory")) self.actionOpenPluginFolder.setText(_("&Open Add-ons Folder...")) self.actionDonate.setText(_("&Support Anki...")) self.actionDownloadSharedPlugin.setText(_("&Browse and Install...")) self.actionFullDatabaseCheck.setText(_("&Check Database")) self.actionDocumentation.setText(_("&Guide...")) self.actionDocumentation.setShortcut(_("F1")) self.actionSwitchProfile.setText(_("&Switch Profile")) self.actionSwitchProfile.setShortcut(_("Ctrl+Shift+P")) self.actionExport.setText(_("&Export...")) self.actionExport.setShortcut(_("Ctrl+E")) self.actionImport.setText(_("&Import...")) self.actionImport.setShortcut(_("Ctrl+Shift+I")) self.actionStudyDeck.setText(_("Study Deck...")) self.actionStudyDeck.setShortcut(_("/")) self.actionEmptyCards.setText(_("Empty Cards...")) self.actionCreateFiltered.setText(_("Create Filtered Deck...")) self.actionCreateFiltered.setShortcut(_("F")) self.actionNoteTypes.setText(_("Manage Note Types")) self.actionNoteTypes.setShortcut(_("Ctrl+Shift+N")) self.actionAdd_ons.setText(_("Add-ons")) self.actionAdd_ons.setShortcut(_("Ctrl+Shift+A")) from . import icons_rc anki-2.1.0+dfsg~b36/aqt/forms/modelopts.py000066400000000000000000000056461323611211500203650ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/modelopts.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.setWindowModality(QtCore.Qt.ApplicationModal) Dialog.resize(374, 344) Dialog.setWindowTitle("") self.verticalLayout_2 = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout_2.setObjectName("verticalLayout_2") self.qtabwidget = QtWidgets.QTabWidget(Dialog) self.qtabwidget.setObjectName("qtabwidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.verticalLayout = QtWidgets.QVBoxLayout(self.tab) self.verticalLayout.setObjectName("verticalLayout") self.latexsvg = QtWidgets.QCheckBox(self.tab) self.latexsvg.setObjectName("latexsvg") self.verticalLayout.addWidget(self.latexsvg) self.label_6 = QtWidgets.QLabel(self.tab) self.label_6.setObjectName("label_6") self.verticalLayout.addWidget(self.label_6) self.latexHeader = QtWidgets.QTextEdit(self.tab) self.latexHeader.setTabChangesFocus(True) self.latexHeader.setObjectName("latexHeader") self.verticalLayout.addWidget(self.latexHeader) self.label_7 = QtWidgets.QLabel(self.tab) self.label_7.setObjectName("label_7") self.verticalLayout.addWidget(self.label_7) self.latexFooter = QtWidgets.QTextEdit(self.tab) self.latexFooter.setTabChangesFocus(True) self.latexFooter.setObjectName("latexFooter") self.verticalLayout.addWidget(self.latexFooter) self.qtabwidget.addTab(self.tab, "") self.verticalLayout_2.addWidget(self.qtabwidget) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Close|QtWidgets.QDialogButtonBox.Help) self.buttonBox.setObjectName("buttonBox") self.verticalLayout_2.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.qtabwidget.setCurrentIndex(0) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.qtabwidget, self.buttonBox) Dialog.setTabOrder(self.buttonBox, self.latexHeader) Dialog.setTabOrder(self.latexHeader, self.latexFooter) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate self.latexsvg.setText(_("Create scalable images with dvisvgm")) self.label_6.setText(_("Header")) self.label_7.setText(_("Footer")) self.qtabwidget.setTabText(self.qtabwidget.indexOf(self.tab), _("LaTeX")) anki-2.1.0+dfsg~b36/aqt/forms/models.py000066400000000000000000000046301323611211500176320ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/models.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.setWindowModality(QtCore.Qt.ApplicationModal) Dialog.resize(396, 255) self.verticalLayout_5 = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout_5.setSpacing(0) self.verticalLayout_5.setObjectName("verticalLayout_5") self.gridLayout_2 = QtWidgets.QGridLayout() self.gridLayout_2.setSpacing(6) self.gridLayout_2.setObjectName("gridLayout_2") self.modelsList = QtWidgets.QListWidget(Dialog) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.modelsList.sizePolicy().hasHeightForWidth()) self.modelsList.setSizePolicy(sizePolicy) self.modelsList.setObjectName("modelsList") self.gridLayout_2.addWidget(self.modelsList, 1, 0, 1, 1) self.verticalLayout_3 = QtWidgets.QVBoxLayout() self.verticalLayout_3.setSpacing(12) self.verticalLayout_3.setObjectName("verticalLayout_3") self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Vertical) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Close|QtWidgets.QDialogButtonBox.Help) self.buttonBox.setObjectName("buttonBox") self.verticalLayout_3.addWidget(self.buttonBox) self.gridLayout_2.addLayout(self.verticalLayout_3, 1, 1, 1, 1) self.verticalLayout_5.addLayout(self.gridLayout_2) spacerItem = QtWidgets.QSpacerItem(20, 6, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.verticalLayout_5.addItem(spacerItem) self.verticalLayout_5.setStretch(0, 100) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Note Types")) from . import icons_rc anki-2.1.0+dfsg~b36/aqt/forms/preferences.py000066400000000000000000000331611323611211500206510ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/preferences.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Preferences(object): def setupUi(self, Preferences): Preferences.setObjectName("Preferences") Preferences.resize(405, 455) self.verticalLayout_2 = QtWidgets.QVBoxLayout(Preferences) self.verticalLayout_2.setObjectName("verticalLayout_2") self.tabWidget = QtWidgets.QTabWidget(Preferences) self.tabWidget.setFocusPolicy(QtCore.Qt.StrongFocus) self.tabWidget.setObjectName("tabWidget") self.tab_1 = QtWidgets.QWidget() self.tab_1.setObjectName("tab_1") self.verticalLayout = QtWidgets.QVBoxLayout(self.tab_1) self.verticalLayout.setContentsMargins(12, 12, 12, 12) self.verticalLayout.setSpacing(12) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label = QtWidgets.QLabel(self.tab_1) self.label.setObjectName("label") self.horizontalLayout_2.addWidget(self.label) self.lang = QtWidgets.QComboBox(self.tab_1) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.lang.sizePolicy().hasHeightForWidth()) self.lang.setSizePolicy(sizePolicy) self.lang.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToMinimumContentsLengthWithIcon) self.lang.setObjectName("lang") self.horizontalLayout_2.addWidget(self.lang) self.verticalLayout.addLayout(self.horizontalLayout_2) self.showEstimates = QtWidgets.QCheckBox(self.tab_1) self.showEstimates.setObjectName("showEstimates") self.verticalLayout.addWidget(self.showEstimates) self.showProgress = QtWidgets.QCheckBox(self.tab_1) self.showProgress.setObjectName("showProgress") self.verticalLayout.addWidget(self.showProgress) self.pastePNG = QtWidgets.QCheckBox(self.tab_1) self.pastePNG.setObjectName("pastePNG") self.verticalLayout.addWidget(self.pastePNG) self.nightMode = QtWidgets.QCheckBox(self.tab_1) self.nightMode.setObjectName("nightMode") self.verticalLayout.addWidget(self.nightMode) self.dayLearnFirst = QtWidgets.QCheckBox(self.tab_1) self.dayLearnFirst.setObjectName("dayLearnFirst") self.verticalLayout.addWidget(self.dayLearnFirst) self.useCurrent = QtWidgets.QComboBox(self.tab_1) self.useCurrent.setObjectName("useCurrent") self.useCurrent.addItem("") self.useCurrent.addItem("") self.verticalLayout.addWidget(self.useCurrent) self.newSpread = QtWidgets.QComboBox(self.tab_1) self.newSpread.setObjectName("newSpread") self.verticalLayout.addWidget(self.newSpread) self.gridLayout_4 = QtWidgets.QGridLayout() self.gridLayout_4.setSpacing(12) self.gridLayout_4.setObjectName("gridLayout_4") self.label_23 = QtWidgets.QLabel(self.tab_1) self.label_23.setObjectName("label_23") self.gridLayout_4.addWidget(self.label_23, 0, 0, 1, 1) self.dayOffset = QtWidgets.QSpinBox(self.tab_1) self.dayOffset.setMaximumSize(QtCore.QSize(60, 16777215)) self.dayOffset.setMaximum(23) self.dayOffset.setObjectName("dayOffset") self.gridLayout_4.addWidget(self.dayOffset, 0, 1, 1, 1) self.label_24 = QtWidgets.QLabel(self.tab_1) self.label_24.setObjectName("label_24") self.gridLayout_4.addWidget(self.label_24, 1, 0, 1, 1) self.lrnCutoff = QtWidgets.QSpinBox(self.tab_1) self.lrnCutoff.setMaximumSize(QtCore.QSize(60, 16777215)) self.lrnCutoff.setMaximum(999) self.lrnCutoff.setObjectName("lrnCutoff") self.gridLayout_4.addWidget(self.lrnCutoff, 1, 1, 1, 1) self.label_29 = QtWidgets.QLabel(self.tab_1) self.label_29.setObjectName("label_29") self.gridLayout_4.addWidget(self.label_29, 1, 2, 1, 1) self.label_30 = QtWidgets.QLabel(self.tab_1) self.label_30.setObjectName("label_30") self.gridLayout_4.addWidget(self.label_30, 2, 0, 1, 1) self.timeLimit = QtWidgets.QSpinBox(self.tab_1) self.timeLimit.setMaximum(9999) self.timeLimit.setObjectName("timeLimit") self.gridLayout_4.addWidget(self.timeLimit, 2, 1, 1, 1) self.label_39 = QtWidgets.QLabel(self.tab_1) self.label_39.setObjectName("label_39") self.gridLayout_4.addWidget(self.label_39, 2, 2, 1, 1) self.label_40 = QtWidgets.QLabel(self.tab_1) self.label_40.setObjectName("label_40") self.gridLayout_4.addWidget(self.label_40, 0, 2, 1, 1) self.verticalLayout.addLayout(self.gridLayout_4) spacerItem = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.tabWidget.addTab(self.tab_1, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.tab_2) self.verticalLayout_4.setContentsMargins(12, 12, 12, 12) self.verticalLayout_4.setSpacing(12) self.verticalLayout_4.setObjectName("verticalLayout_4") self.hboxlayout = QtWidgets.QHBoxLayout() self.hboxlayout.setSpacing(10) self.hboxlayout.setObjectName("hboxlayout") self.vboxlayout = QtWidgets.QVBoxLayout() self.vboxlayout.setObjectName("vboxlayout") self.syncLabel = QtWidgets.QLabel(self.tab_2) self.syncLabel.setWordWrap(True) self.syncLabel.setOpenExternalLinks(True) self.syncLabel.setObjectName("syncLabel") self.vboxlayout.addWidget(self.syncLabel) self.syncMedia = QtWidgets.QCheckBox(self.tab_2) self.syncMedia.setObjectName("syncMedia") self.vboxlayout.addWidget(self.syncMedia) self.syncOnProgramOpen = QtWidgets.QCheckBox(self.tab_2) self.syncOnProgramOpen.setObjectName("syncOnProgramOpen") self.vboxlayout.addWidget(self.syncOnProgramOpen) self.fullSync = QtWidgets.QCheckBox(self.tab_2) self.fullSync.setObjectName("fullSync") self.vboxlayout.addWidget(self.fullSync) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.syncDeauth = QtWidgets.QPushButton(self.tab_2) self.syncDeauth.setAutoDefault(False) self.syncDeauth.setObjectName("syncDeauth") self.horizontalLayout.addWidget(self.syncDeauth) self.syncUser = QtWidgets.QLabel(self.tab_2) self.syncUser.setText("") self.syncUser.setObjectName("syncUser") self.horizontalLayout.addWidget(self.syncUser) spacerItem1 = QtWidgets.QSpacerItem(40, 1, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.vboxlayout.addLayout(self.horizontalLayout) self.hboxlayout.addLayout(self.vboxlayout) self.verticalLayout_4.addLayout(self.hboxlayout) spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_4.addItem(spacerItem2) self.tabWidget.addTab(self.tab_2, "") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.tab) self.verticalLayout_3.setContentsMargins(12, 12, 12, 12) self.verticalLayout_3.setSpacing(12) self.verticalLayout_3.setObjectName("verticalLayout_3") self.label_9 = QtWidgets.QLabel(self.tab) self.label_9.setWordWrap(True) self.label_9.setObjectName("label_9") self.verticalLayout_3.addWidget(self.label_9) self.gridLayout_2 = QtWidgets.QGridLayout() self.gridLayout_2.setObjectName("gridLayout_2") self.label_10 = QtWidgets.QLabel(self.tab) self.label_10.setObjectName("label_10") self.gridLayout_2.addWidget(self.label_10, 0, 0, 1, 1) self.numBackups = QtWidgets.QSpinBox(self.tab) self.numBackups.setMinimumSize(QtCore.QSize(60, 0)) self.numBackups.setMaximumSize(QtCore.QSize(60, 16777215)) self.numBackups.setObjectName("numBackups") self.gridLayout_2.addWidget(self.numBackups, 0, 1, 1, 1) self.label_11 = QtWidgets.QLabel(self.tab) self.label_11.setObjectName("label_11") self.gridLayout_2.addWidget(self.label_11, 0, 2, 1, 1) spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_2.addItem(spacerItem3, 0, 3, 1, 1) self.verticalLayout_3.addLayout(self.gridLayout_2) self.openBackupFolder = QtWidgets.QLabel(self.tab) self.openBackupFolder.setObjectName("openBackupFolder") self.verticalLayout_3.addWidget(self.openBackupFolder) self.label_4 = QtWidgets.QLabel(self.tab) self.label_4.setWordWrap(True) self.label_4.setObjectName("label_4") self.verticalLayout_3.addWidget(self.label_4) spacerItem4 = QtWidgets.QSpacerItem(20, 59, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_3.addItem(spacerItem4) self.label_21 = QtWidgets.QLabel(self.tab) self.label_21.setAlignment(QtCore.Qt.AlignCenter) self.label_21.setObjectName("label_21") self.verticalLayout_3.addWidget(self.label_21) self.tabWidget.addTab(self.tab, "") self.verticalLayout_2.addWidget(self.tabWidget) self.buttonBox = QtWidgets.QDialogButtonBox(Preferences) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Close|QtWidgets.QDialogButtonBox.Help) self.buttonBox.setObjectName("buttonBox") self.verticalLayout_2.addWidget(self.buttonBox) self.retranslateUi(Preferences) self.tabWidget.setCurrentIndex(0) self.buttonBox.accepted.connect(Preferences.accept) self.buttonBox.rejected.connect(Preferences.reject) QtCore.QMetaObject.connectSlotsByName(Preferences) Preferences.setTabOrder(self.lang, self.showEstimates) Preferences.setTabOrder(self.showEstimates, self.showProgress) Preferences.setTabOrder(self.showProgress, self.pastePNG) Preferences.setTabOrder(self.pastePNG, self.nightMode) Preferences.setTabOrder(self.nightMode, self.dayLearnFirst) Preferences.setTabOrder(self.dayLearnFirst, self.useCurrent) Preferences.setTabOrder(self.useCurrent, self.newSpread) Preferences.setTabOrder(self.newSpread, self.dayOffset) Preferences.setTabOrder(self.dayOffset, self.lrnCutoff) Preferences.setTabOrder(self.lrnCutoff, self.timeLimit) Preferences.setTabOrder(self.timeLimit, self.buttonBox) Preferences.setTabOrder(self.buttonBox, self.numBackups) Preferences.setTabOrder(self.numBackups, self.syncOnProgramOpen) Preferences.setTabOrder(self.syncOnProgramOpen, self.tabWidget) Preferences.setTabOrder(self.tabWidget, self.fullSync) Preferences.setTabOrder(self.fullSync, self.syncMedia) Preferences.setTabOrder(self.syncMedia, self.syncDeauth) def retranslateUi(self, Preferences): _translate = QtCore.QCoreApplication.translate Preferences.setWindowTitle(_("Preferences")) self.label.setText(_("Interface language:")) self.showEstimates.setText(_("Show next review time above answer buttons")) self.showProgress.setText(_("Show remaining card count during review")) self.pastePNG.setText(_("Paste clipboard images as PNG")) self.nightMode.setText(_("Show cards as white on black (night mode)")) self.dayLearnFirst.setText(_("Show learning cards with larger steps before reviews")) self.useCurrent.setItemText(0, _("When adding, default to current deck")) self.useCurrent.setItemText(1, _("Change deck depending on note type")) self.label_23.setText(_("Next day starts at")) self.label_24.setText(_("Learn ahead limit")) self.label_29.setText(_("mins")) self.label_30.setText(_("Timebox time limit")) self.label_39.setText(_("mins")) self.label_40.setText(_("hours past midnight")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_1), _("Basic")) self.syncLabel.setText(_("Synchronisation")) self.syncMedia.setText(_("Synchronize audio and images too")) self.syncOnProgramOpen.setText(_("Automatically sync on profile open/close")) self.fullSync.setText(_("On next sync, force changes in one direction")) self.syncDeauth.setText(_("Deauthorize")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _("Network")) self.label_9.setText(_("Backups
Anki will create a backup of your collection each time it is closed or synchronized.")) self.label_10.setText(_("Keep")) self.label_11.setText(_("backups")) self.openBackupFolder.setText(_("Open backup folder")) self.label_4.setText(_("Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.")) self.label_21.setText(_("Some settings will take effect after you restart Anki.")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _("Backups")) anki-2.1.0+dfsg~b36/aqt/forms/preview.py000066400000000000000000000030001323611211500200160ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/preview.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(335, 282) self.verticalLayout_3 = QtWidgets.QVBoxLayout(Form) self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) self.verticalLayout_3.setObjectName("verticalLayout_3") self.groupBox = QtWidgets.QGroupBox(Form) self.groupBox.setObjectName("groupBox") self.frontPrevBox = QtWidgets.QVBoxLayout(self.groupBox) self.frontPrevBox.setContentsMargins(0, 0, 0, 0) self.frontPrevBox.setObjectName("frontPrevBox") self.verticalLayout_3.addWidget(self.groupBox) self.groupBox_2 = QtWidgets.QGroupBox(Form) self.groupBox_2.setObjectName("groupBox_2") self.backPrevBox = QtWidgets.QVBoxLayout(self.groupBox_2) self.backPrevBox.setContentsMargins(0, 0, 0, 0) self.backPrevBox.setObjectName("backPrevBox") self.verticalLayout_3.addWidget(self.groupBox_2) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_("Form")) self.groupBox.setTitle(_("Front Preview")) self.groupBox_2.setTitle(_("Back Preview")) anki-2.1.0+dfsg~b36/aqt/forms/profiles.py000066400000000000000000000066561323611211500202040ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/profiles.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(423, 356) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout_3.setObjectName("verticalLayout_3") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.verticalLayout_2 = QtWidgets.QVBoxLayout() self.verticalLayout_2.setObjectName("verticalLayout_2") self.profiles = QtWidgets.QListWidget(self.centralwidget) self.profiles.setObjectName("profiles") self.verticalLayout_2.addWidget(self.profiles) self.horizontalLayout.addLayout(self.verticalLayout_2) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.login = QtWidgets.QPushButton(self.centralwidget) self.login.setDefault(True) self.login.setObjectName("login") self.verticalLayout.addWidget(self.login) self.add = QtWidgets.QPushButton(self.centralwidget) self.add.setObjectName("add") self.verticalLayout.addWidget(self.add) self.rename = QtWidgets.QPushButton(self.centralwidget) self.rename.setObjectName("rename") self.verticalLayout.addWidget(self.rename) self.delete_2 = QtWidgets.QPushButton(self.centralwidget) self.delete_2.setObjectName("delete_2") self.verticalLayout.addWidget(self.delete_2) self.quit = QtWidgets.QPushButton(self.centralwidget) self.quit.setObjectName("quit") self.verticalLayout.addWidget(self.quit) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.openBackup = QtWidgets.QPushButton(self.centralwidget) self.openBackup.setObjectName("openBackup") self.verticalLayout.addWidget(self.openBackup) self.horizontalLayout.addLayout(self.verticalLayout) self.verticalLayout_3.addLayout(self.horizontalLayout) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setEnabled(False) self.menubar.setGeometry(QtCore.QRect(0, 0, 423, 22)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setEnabled(False) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_("Profiles")) self.login.setText(_("Open")) self.add.setText(_("Add")) self.rename.setText(_("Rename")) self.delete_2.setText(_("Delete")) self.quit.setText(_("Quit")) self.openBackup.setText(_("Open Backup...")) anki-2.1.0+dfsg~b36/aqt/forms/progress.py000066400000000000000000000030201323611211500202030ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/progress.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(310, 69) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setContentsMargins(6, 6, 6, 6) self.verticalLayout.setObjectName("verticalLayout") spacerItem = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.label = QtWidgets.QLabel(Dialog) self.label.setText("") self.label.setAlignment(QtCore.Qt.AlignCenter) self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.progressBar = QtWidgets.QProgressBar(Dialog) self.progressBar.setProperty("value", 24) self.progressBar.setObjectName("progressBar") self.verticalLayout.addWidget(self.progressBar) spacerItem1 = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.MinimumExpanding) self.verticalLayout.addItem(spacerItem1) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Dialog")) anki-2.1.0+dfsg~b36/aqt/forms/reposition.py000066400000000000000000000062231323611211500205420ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/reposition.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(272, 229) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.label = QtWidgets.QLabel(Dialog) self.label.setText("") self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1) self.start = QtWidgets.QSpinBox(Dialog) self.start.setMinimum(-20000000) self.start.setMaximum(200000000) self.start.setProperty("value", 0) self.start.setObjectName("start") self.gridLayout.addWidget(self.start, 0, 1, 1, 1) self.label_3 = QtWidgets.QLabel(Dialog) self.label_3.setObjectName("label_3") self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1) self.step = QtWidgets.QSpinBox(Dialog) self.step.setMinimum(1) self.step.setMaximum(10000) self.step.setObjectName("step") self.gridLayout.addWidget(self.step, 1, 1, 1, 1) self.verticalLayout.addLayout(self.gridLayout) self.randomize = QtWidgets.QCheckBox(Dialog) self.randomize.setObjectName("randomize") self.verticalLayout.addWidget(self.randomize) self.shift = QtWidgets.QCheckBox(Dialog) self.shift.setChecked(True) self.shift.setObjectName("shift") self.verticalLayout.addWidget(self.shift) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout.addItem(spacerItem) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.start, self.step) Dialog.setTabOrder(self.step, self.randomize) Dialog.setTabOrder(self.randomize, self.shift) Dialog.setTabOrder(self.shift, self.buttonBox) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Reposition New Cards")) self.label_2.setText(_("Start position:")) self.label_3.setText(_("Step:")) self.randomize.setText(_("Randomize order")) self.shift.setText(_("Shift position of existing cards")) anki-2.1.0+dfsg~b36/aqt/forms/reschedule.py000066400000000000000000000067371323611211500205040ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/reschedule.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(325, 144) self.verticalLayout_2 = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout_2.setObjectName("verticalLayout_2") self.asNew = QtWidgets.QRadioButton(Dialog) self.asNew.setChecked(True) self.asNew.setObjectName("asNew") self.verticalLayout_2.addWidget(self.asNew) self.asRev = QtWidgets.QRadioButton(Dialog) self.asRev.setObjectName("asRev") self.verticalLayout_2.addWidget(self.asRev) self.rangebox = QtWidgets.QWidget(Dialog) self.rangebox.setEnabled(False) self.rangebox.setObjectName("rangebox") self.verticalLayout = QtWidgets.QVBoxLayout(self.rangebox) self.verticalLayout.setContentsMargins(20, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.label_3 = QtWidgets.QLabel(self.rangebox) self.label_3.setObjectName("label_3") self.gridLayout.addWidget(self.label_3, 0, 1, 1, 1) self.min = QtWidgets.QSpinBox(self.rangebox) self.min.setMaximum(9999) self.min.setObjectName("min") self.gridLayout.addWidget(self.min, 0, 0, 1, 1) self.max = QtWidgets.QSpinBox(self.rangebox) self.max.setMaximum(9999) self.max.setObjectName("max") self.gridLayout.addWidget(self.max, 0, 2, 1, 1) self.label_4 = QtWidgets.QLabel(self.rangebox) self.label_4.setObjectName("label_4") self.gridLayout.addWidget(self.label_4, 0, 3, 1, 1) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout.addItem(spacerItem, 0, 4, 1, 1) self.verticalLayout.addLayout(self.gridLayout) self.verticalLayout_2.addWidget(self.rangebox) spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_2.addItem(spacerItem1) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayout_2.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) self.asRev.toggled['bool'].connect(self.rangebox.setEnabled) QtCore.QMetaObject.connectSlotsByName(Dialog) Dialog.setTabOrder(self.asNew, self.asRev) Dialog.setTabOrder(self.asRev, self.min) Dialog.setTabOrder(self.min, self.max) Dialog.setTabOrder(self.max, self.buttonBox) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Reschedule")) self.asNew.setText(_("Place at end of new card queue")) self.asRev.setText(_("Place in review queue with interval between:")) self.label_3.setText(_("~")) self.label_4.setText(_("days")) anki-2.1.0+dfsg~b36/aqt/forms/setgroup.py000066400000000000000000000027661323611211500202270ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/setgroup.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(433, 143) self.verticalLayout_2 = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout_2.setObjectName("verticalLayout_2") self.label = QtWidgets.QLabel(Dialog) self.label.setObjectName("label") self.verticalLayout_2.addWidget(self.label) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_2.addItem(spacerItem) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayout_2.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Anki")) self.label.setText(_("Move cards to deck:")) anki-2.1.0+dfsg~b36/aqt/forms/setlang.py000066400000000000000000000026571323611211500200130ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/setlang.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(400, 300) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.label = QtWidgets.QLabel(Dialog) self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.lang = QtWidgets.QListWidget(Dialog) self.lang.setObjectName("lang") self.verticalLayout.addWidget(self.lang) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Anki")) self.label.setText(_("Interface language:")) anki-2.1.0+dfsg~b36/aqt/forms/stats.py000066400000000000000000000070601323611211500175050ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/stats.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(607, 556) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName("verticalLayout") self.web = AnkiWebView(Dialog) self.web.setProperty("url", QtCore.QUrl("about:blank")) self.web.setObjectName("web") self.verticalLayout.addWidget(self.web) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setContentsMargins(6, 6, 6, 6) self.horizontalLayout_3.setSpacing(8) self.horizontalLayout_3.setObjectName("horizontalLayout_3") spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem) self.groupBox_2 = QtWidgets.QGroupBox(Dialog) self.groupBox_2.setTitle("") self.groupBox_2.setObjectName("groupBox_2") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.groupBox_2) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.groups = QtWidgets.QRadioButton(self.groupBox_2) self.groups.setChecked(True) self.groups.setObjectName("groups") self.horizontalLayout_2.addWidget(self.groups) self.all = QtWidgets.QRadioButton(self.groupBox_2) self.all.setObjectName("all") self.horizontalLayout_2.addWidget(self.all) self.horizontalLayout_3.addWidget(self.groupBox_2) self.groupBox = QtWidgets.QGroupBox(Dialog) self.groupBox.setTitle("") self.groupBox.setObjectName("groupBox") self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox) self.horizontalLayout.setObjectName("horizontalLayout") self.month = QtWidgets.QRadioButton(self.groupBox) self.month.setChecked(True) self.month.setObjectName("month") self.horizontalLayout.addWidget(self.month) self.year = QtWidgets.QRadioButton(self.groupBox) self.year.setObjectName("year") self.horizontalLayout.addWidget(self.year) self.life = QtWidgets.QRadioButton(self.groupBox) self.life.setObjectName("life") self.horizontalLayout.addWidget(self.life) self.horizontalLayout_3.addWidget(self.groupBox) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Close) self.buttonBox.setObjectName("buttonBox") self.horizontalLayout_3.addWidget(self.buttonBox) self.verticalLayout.addLayout(self.horizontalLayout_3) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Statistics")) self.groups.setText(_("deck")) self.all.setText(_("collection")) self.month.setText(_("1 month")) self.year.setText(_("1 year")) self.life.setText(_("deck life")) from aqt.webview import AnkiWebView anki-2.1.0+dfsg~b36/aqt/forms/studydeck.py000066400000000000000000000034311323611211500203440ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/studydeck.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(400, 300) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.label = QtWidgets.QLabel(Dialog) self.label.setObjectName("label") self.horizontalLayout.addWidget(self.label) self.filter = QtWidgets.QLineEdit(Dialog) self.filter.setObjectName("filter") self.horizontalLayout.addWidget(self.filter) self.verticalLayout.addLayout(self.horizontalLayout) self.list = QtWidgets.QListWidget(Dialog) self.list.setObjectName("list") self.verticalLayout.addWidget(self.list) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Help) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Study Deck")) self.label.setText(_("Filter:")) anki-2.1.0+dfsg~b36/aqt/forms/taglimit.py000066400000000000000000000055711323611211500201660ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/taglimit.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(361, 394) self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) self.verticalLayout.setObjectName("verticalLayout") self.activeCheck = QtWidgets.QCheckBox(Dialog) self.activeCheck.setObjectName("activeCheck") self.verticalLayout.addWidget(self.activeCheck) self.activeList = QtWidgets.QListWidget(Dialog) self.activeList.setEnabled(False) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(2) sizePolicy.setHeightForWidth(self.activeList.sizePolicy().hasHeightForWidth()) self.activeList.setSizePolicy(sizePolicy) self.activeList.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection) self.activeList.setObjectName("activeList") self.verticalLayout.addWidget(self.activeList) self.label = QtWidgets.QLabel(Dialog) self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.inactiveList = QtWidgets.QListWidget(Dialog) self.inactiveList.setEnabled(True) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(2) sizePolicy.setHeightForWidth(self.inactiveList.sizePolicy().hasHeightForWidth()) self.inactiveList.setSizePolicy(sizePolicy) self.inactiveList.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection) self.inactiveList.setObjectName("inactiveList") self.verticalLayout.addWidget(self.inactiveList) self.buttonBox = QtWidgets.QDialogButtonBox(Dialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.verticalLayout.addWidget(self.buttonBox) self.retranslateUi(Dialog) self.buttonBox.accepted.connect(Dialog.accept) self.buttonBox.rejected.connect(Dialog.reject) self.activeCheck.toggled['bool'].connect(self.activeList.setEnabled) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_("Selective Study")) self.activeCheck.setText(_("Require one or more of these tags:")) self.label.setText(_("Select tags to exclude:")) anki-2.1.0+dfsg~b36/aqt/forms/template.py000066400000000000000000000122051323611211500201570ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'designer/template.ui' # # Created by: PyQt5 UI code generator 5.9 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(470, 569) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(Form.sizePolicy().hasHeightForWidth()) Form.setSizePolicy(sizePolicy) self.verticalLayout_5 = QtWidgets.QVBoxLayout(Form) self.verticalLayout_5.setContentsMargins(0, 0, 0, 0) self.verticalLayout_5.setSpacing(0) self.verticalLayout_5.setObjectName("verticalLayout_5") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setSpacing(0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.groupBox = QtWidgets.QGroupBox(Form) self.groupBox.setObjectName("groupBox") self.tlayout1 = QtWidgets.QVBoxLayout(self.groupBox) self.tlayout1.setContentsMargins(0, 0, 0, 0) self.tlayout1.setSpacing(0) self.tlayout1.setObjectName("tlayout1") self.front = QtWidgets.QTextEdit(self.groupBox) self.front.setObjectName("front") self.tlayout1.addWidget(self.front) self.horizontalLayout_2.addWidget(self.groupBox) self.label1 = QtWidgets.QLabel(Form) self.label1.setText("") self.label1.setObjectName("label1") self.horizontalLayout_2.addWidget(self.label1) self.verticalLayout_5.addLayout(self.horizontalLayout_2) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setSpacing(0) self.horizontalLayout.setObjectName("horizontalLayout") self.groupBox_3 = QtWidgets.QGroupBox(Form) self.groupBox_3.setObjectName("groupBox_3") self.tlayout2 = QtWidgets.QVBoxLayout(self.groupBox_3) self.tlayout2.setContentsMargins(0, 0, 0, 0) self.tlayout2.setSpacing(0) self.tlayout2.setObjectName("tlayout2") self.css = QtWidgets.QTextEdit(self.groupBox_3) self.css.setObjectName("css") self.tlayout2.addWidget(self.css) self.horizontalLayout.addWidget(self.groupBox_3) self.verticalLayout_4 = QtWidgets.QVBoxLayout() self.verticalLayout_4.setSpacing(0) self.verticalLayout_4.setObjectName("verticalLayout_4") spacerItem = QtWidgets.QSpacerItem(1, 15, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) self.verticalLayout_4.addItem(spacerItem) self.labelc1 = QtWidgets.QLabel(Form) self.labelc1.setText("") self.labelc1.setObjectName("labelc1") self.verticalLayout_4.addWidget(self.labelc1) spacerItem1 = QtWidgets.QSpacerItem(1, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.verticalLayout_4.addItem(spacerItem1) self.labelc2 = QtWidgets.QLabel(Form) self.labelc2.setText("") self.labelc2.setObjectName("labelc2") self.verticalLayout_4.addWidget(self.labelc2) spacerItem2 = QtWidgets.QSpacerItem(1, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) self.verticalLayout_4.addItem(spacerItem2) self.horizontalLayout.addLayout(self.verticalLayout_4) self.verticalLayout_5.addLayout(self.horizontalLayout) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setSpacing(0) self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.groupBox_2 = QtWidgets.QGroupBox(Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(10) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.groupBox_2.sizePolicy().hasHeightForWidth()) self.groupBox_2.setSizePolicy(sizePolicy) self.groupBox_2.setObjectName("groupBox_2") self.tlayout3 = QtWidgets.QVBoxLayout(self.groupBox_2) self.tlayout3.setContentsMargins(0, 0, 0, 0) self.tlayout3.setSpacing(0) self.tlayout3.setObjectName("tlayout3") self.back = QtWidgets.QTextEdit(self.groupBox_2) self.back.setObjectName("back") self.tlayout3.addWidget(self.back) self.horizontalLayout_3.addWidget(self.groupBox_2) self.label2 = QtWidgets.QLabel(Form) self.label2.setText("") self.label2.setObjectName("label2") self.horizontalLayout_3.addWidget(self.label2) self.verticalLayout_5.addLayout(self.horizontalLayout_3) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_("Form")) self.groupBox.setTitle(_("Front Template")) self.groupBox_3.setTitle(_("Styling")) self.groupBox_2.setTitle(_("Back Template")) from . import icons_rc anki-2.1.0+dfsg~b36/aqt/importing.py000066400000000000000000000357641323611211500172450ustar00rootroot00000000000000# coding=utf-8 # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import os import re import traceback import zipfile import json import unicodedata import shutil from aqt.qt import * import anki.importing as importing from aqt.utils import getOnlyText, getFile, showText, showWarning, openHelp,\ askUser, tooltip from anki.hooks import addHook, remHook import aqt.forms import aqt.modelchooser import aqt.deckchooser from anki.lang import ngettext class ChangeMap(QDialog): def __init__(self, mw, model, current): QDialog.__init__(self, mw, Qt.Window) self.mw = mw self.model = model self.frm = aqt.forms.changemap.Ui_ChangeMap() self.frm.setupUi(self) n = 0 setCurrent = False for field in self.model['flds']: item = QListWidgetItem(_("Map to %s") % field['name']) self.frm.fields.addItem(item) if current == field['name']: setCurrent = True self.frm.fields.setCurrentRow(n) n += 1 self.frm.fields.addItem(QListWidgetItem(_("Map to Tags"))) self.frm.fields.addItem(QListWidgetItem(_("Ignore field"))) if not setCurrent: if current == "_tags": self.frm.fields.setCurrentRow(n) else: self.frm.fields.setCurrentRow(n+1) self.field = None def getField(self): self.exec_() return self.field def accept(self): row = self.frm.fields.currentRow() if row < len(self.model['flds']): self.field = self.model['flds'][row]['name'] elif row == self.frm.fields.count() - 2: self.field = "_tags" else: self.field = None QDialog.accept(self) def reject(self): self.accept() class ImportDialog(QDialog): def __init__(self, mw, importer): QDialog.__init__(self, mw, Qt.Window) self.mw = mw self.importer = importer self.frm = aqt.forms.importing.Ui_ImportDialog() self.frm.setupUi(self) self.frm.buttonBox.button(QDialogButtonBox.Help).clicked.connect( self.helpRequested) self.setupMappingFrame() self.setupOptions() self.modelChanged() self.frm.autoDetect.setVisible(self.importer.needDelimiter) addHook("currentModelChanged", self.modelChanged) self.frm.autoDetect.clicked.connect(self.onDelimiter) self.updateDelimiterButtonText() self.frm.allowHTML.setChecked(self.mw.pm.profile.get('allowHTML', True)) self.frm.importMode.setCurrentIndex(self.mw.pm.profile.get('importMode', 1)) # import button b = QPushButton(_("Import")) self.frm.buttonBox.addButton(b, QDialogButtonBox.AcceptRole) self.exec_() def setupOptions(self): self.model = self.mw.col.models.current() self.modelChooser = aqt.modelchooser.ModelChooser( self.mw, self.frm.modelArea, label=False) self.deck = aqt.deckchooser.DeckChooser( self.mw, self.frm.deckArea, label=False) def modelChanged(self): self.importer.model = self.mw.col.models.current() self.importer.initMapping() self.showMapping() if self.mw.col.conf.get("addToCur", True): did = self.mw.col.conf['curDeck'] if self.mw.col.decks.isDyn(did): did = 1 else: did = self.importer.model['did'] #self.deck.setText(self.mw.col.decks.name(did)) def onDelimiter(self): str = getOnlyText(_("""\ By default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \\t to represent tab."""), self, help="importing") or "\t" str = str.replace("\\t", "\t") if len(str) > 1: showWarning(_( "Multi-character separators are not supported. " "Please enter one character only.")) return self.hideMapping() def updateDelim(): self.importer.delimiter = str self.importer.updateDelimiter() self.showMapping(hook=updateDelim) self.updateDelimiterButtonText() def updateDelimiterButtonText(self): if not self.importer.needDelimiter: return if self.importer.delimiter: d = self.importer.delimiter else: d = self.importer.dialect.delimiter if d == "\t": d = _("Tab") elif d == ",": d = _("Comma") elif d == " ": d = _("Space") elif d == ";": d = _("Semicolon") elif d == ":": d = _("Colon") else: d = repr(d) txt = _("Fields separated by: %s") % d self.frm.autoDetect.setText(txt) def accept(self): self.importer.mapping = self.mapping if not self.importer.mappingOk(): showWarning( _("The first field of the note type must be mapped.")) return self.importer.importMode = self.frm.importMode.currentIndex() self.mw.pm.profile['importMode'] = self.importer.importMode self.importer.allowHTML = self.frm.allowHTML.isChecked() self.mw.pm.profile['allowHTML'] = self.importer.allowHTML did = self.deck.selectedId() if did != self.importer.model['did']: self.importer.model['did'] = did self.mw.col.models.save(self.importer.model) self.mw.col.decks.select(did) self.mw.progress.start(immediate=True) self.mw.checkpoint(_("Import")) try: self.importer.run() except UnicodeDecodeError: showUnicodeWarning() return except Exception as e: msg = _("Import failed.\n") err = repr(str(e)) if "1-character string" in err: msg += err elif "invalidTempFolder" in err: msg += self.mw.errorHandler.tempFolderMsg() else: msg += str(traceback.format_exc(), "ascii", "replace") showText(msg) return finally: self.mw.progress.finish() txt = _("Importing complete.") + "\n" if self.importer.log: txt += "\n".join(self.importer.log) self.close() showText(txt) self.mw.reset() def setupMappingFrame(self): # qt seems to have a bug with adding/removing from a grid, so we add # to a separate object and add/remove that instead self.frame = QFrame(self.frm.mappingArea) self.frm.mappingArea.setWidget(self.frame) self.mapbox = QVBoxLayout(self.frame) self.mapbox.setContentsMargins(0,0,0,0) self.mapwidget = None def hideMapping(self): self.frm.mappingGroup.hide() def showMapping(self, keepMapping=False, hook=None): if hook: hook() if not keepMapping: self.mapping = self.importer.mapping self.frm.mappingGroup.show() assert self.importer.fields() # set up the mapping grid if self.mapwidget: self.mapbox.removeWidget(self.mapwidget) self.mapwidget.deleteLater() self.mapwidget = QWidget() self.mapbox.addWidget(self.mapwidget) self.grid = QGridLayout(self.mapwidget) self.mapwidget.setLayout(self.grid) self.grid.setContentsMargins(3,3,3,3) self.grid.setSpacing(6) fields = self.importer.fields() for num in range(len(self.mapping)): text = _("Field %d of file is:") % (num + 1) self.grid.addWidget(QLabel(text), num, 0) if self.mapping[num] == "_tags": text = _("mapped to Tags") elif self.mapping[num]: text = _("mapped to %s") % self.mapping[num] else: text = _("") self.grid.addWidget(QLabel(text), num, 1) button = QPushButton(_("Change")) self.grid.addWidget(button, num, 2) button.clicked.connect(lambda _, s=self,n=num: s.changeMappingNum(n)) def changeMappingNum(self, n): f = ChangeMap(self.mw, self.importer.model, self.mapping[n]).getField() try: # make sure we don't have it twice index = self.mapping.index(f) self.mapping[index] = None except ValueError: pass self.mapping[n] = f if getattr(self.importer, "delimiter", False): self.savedDelimiter = self.importer.delimiter def updateDelim(): self.importer.delimiter = self.savedDelimiter self.showMapping(hook=updateDelim, keepMapping=True) else: self.showMapping(keepMapping=True) def reject(self): self.modelChooser.cleanup() remHook("currentModelChanged", self.modelChanged) QDialog.reject(self) def helpRequested(self): openHelp("importing") def showUnicodeWarning(): """Shorthand to show a standard warning.""" showWarning(_( "Selected file was not in UTF-8 format. Please see the " "importing section of the manual.")) def onImport(mw): filt = ";;".join([x[0] for x in importing.Importers]) file = getFile(mw, _("Import"), None, key="import", filter=filt) if not file: return file = str(file) importFile(mw, file) def importFile(mw, file): importer = None done = False for i in importing.Importers: if done: break for mext in re.findall("[( ]?\*\.(.+?)[) ]", i[0]): if file.endswith("." + mext): importer = i[1] done = True break if not importer: # if no matches, assume TSV importer = importing.Importers[0][1] importer = importer(mw.col, file) # need to show import dialog? if importer.needMapper: # make sure we can load the file first mw.progress.start(immediate=True) try: importer.open() except UnicodeDecodeError: showUnicodeWarning() return except Exception as e: msg = repr(str(e)) if msg == "'unknownFormat'": if file.endswith(".anki2"): showWarning(_("""\ .anki2 files are not designed for importing. If you're trying to restore from a \ backup, please see the 'Backups' section of the user manual.""")) else: showWarning(_("Unknown file format.")) else: msg = _("Import failed. Debugging info:\n") msg += str(traceback.format_exc()) showText(msg) return finally: mw.progress.finish() diag = ImportDialog(mw, importer) else: # if it's an apkg/zip, first test it's a valid file if importer.__class__.__name__ == "AnkiPackageImporter": try: z = zipfile.ZipFile(importer.file) z.getinfo("collection.anki2") except: showWarning(invalidZipMsg()) return # we need to ask whether to import/replace if not setupApkgImport(mw, importer): return mw.progress.start(immediate=True) try: importer.run() except zipfile.BadZipfile: showWarning(invalidZipMsg()) except Exception as e: err = repr(str(e)) if "invalidFile" in err: msg = _("""\ Invalid file. Please restore from backup.""") showWarning(msg) elif "invalidTempFolder" in err: showWarning(mw.errorHandler.tempFolderMsg()) elif "readonly" in err: showWarning(_("""\ Unable to import from a read-only file.""")) else: msg = _("Import failed.\n") msg += str(traceback.format_exc()) showText(msg) else: log = "\n".join(importer.log) if "\n" not in log: tooltip(log) else: showText(log) finally: mw.progress.finish() mw.reset() def invalidZipMsg(): return _("""\ This file does not appear to be a valid .apkg file. If you're getting this \ error from a file downloaded from AnkiWeb, chances are that your download \ failed. Please try again, and if the problem persists, please try again \ with a different browser.""") def setupApkgImport(mw, importer): base = os.path.basename(importer.file).lower() full = ((base == "collection.apkg") or re.match("backup-.*\\.apkg", base) or base.endswith(".colpkg")) if not full: # adding return True backup = re.match("backup-.*\\.apkg", base) if not mw.restoringBackup and not askUser(_("""\ This will delete your existing collection and replace it with the data in \ the file you're importing. Are you sure?"""), msgfunc=QMessageBox.warning, defaultno=True): return False # schedule replacement; don't do it immediately as we may have been # called as part of the startup routine mw.progress.timer( 100, lambda mw=mw, f=importer.file: replaceWithApkg(mw, f, backup), False) def replaceWithApkg(mw, file, backup): mw.unloadCollection(lambda: _replaceWithApkg(mw, file, backup)) def _replaceWithApkg(mw, file, backup): mw.progress.start(immediate=True) z = zipfile.ZipFile(file) # v2 scheduler? colname = "collection.anki21" try: z.getinfo(colname) except KeyError: colname = "collection.anki2" try: with z.open(colname) as source, \ open(mw.pm.collectionPath(), "wb") as target: shutil.copyfileobj(source, target) except: mw.progress.finish() showWarning(_("The provided file is not a valid .apkg file.")) return # because users don't have a backup of media, it's safer to import new # data and rely on them running a media db check to get rid of any # unwanted media. in the future we might also want to deduplicate this # step d = os.path.join(mw.pm.profileFolder(), "collection.media") for n, (cStr, file) in enumerate( json.loads(z.read("media").decode("utf8")).items()): mw.progress.update(ngettext("Processed %d media file", "Processed %d media files", n) % n) size = z.getinfo(cStr).file_size dest = os.path.join(d, unicodedata.normalize("NFC", file)) # if we have a matching file size if os.path.exists(dest) and size == os.stat(dest).st_size: continue data = z.read(cStr) open(dest, "wb").write(data) z.close() # reload if not mw.loadCollection(): mw.progress.finish() return if backup: mw.col.modSchema(check=False) mw.progress.finish() anki-2.1.0+dfsg~b36/aqt/main.py000066400000000000000000001215541323611211500161520ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import re import signal import zipfile import gc import time import faulthandler from threading import Thread from send2trash import send2trash from aqt.qt import * from anki import Collection from anki.utils import isWin, isMac, intTime, splitFields, ids2str, \ devMode from anki.hooks import runHook, addHook import aqt import aqt.progress import aqt.webview import aqt.toolbar import aqt.stats import aqt.mediasrv from aqt.utils import showWarning import anki.sound import anki.mpv from aqt.utils import saveGeom, restoreGeom, showInfo, showWarning, \ restoreState, getOnlyText, askUser, applyStyles, showText, tooltip, \ openHelp, openLink, checkInvalidFilename, getFile import sip class AnkiQt(QMainWindow): def __init__(self, app, profileManager, opts, args): QMainWindow.__init__(self) self.state = "startup" self.opts = opts aqt.mw = self self.app = app self.pm = profileManager # running 2.0 for the first time? if self.pm.meta['firstRun']: # load the new deck user profile self.pm.load(self.pm.profiles()[0]) self.pm.meta['firstRun'] = False self.pm.save() # init rest of app self.safeMode = self.app.queryKeyboardModifiers() & Qt.ShiftModifier try: self.setupUI() self.setupAddons() except: showInfo(_("Error during startup:\n%s") % traceback.format_exc()) sys.exit(1) # must call this after ui set up if self.safeMode: tooltip(_("Shift key was held down. Skipping automatic " "syncing and add-on loading.")) # were we given a file to import? if args and args[0]: self.onAppMsg(args[0]) # Load profile in a timer so we can let the window finish init and not # close on profile load error. self.progress.timer(10, self.setupProfile, False) def setupUI(self): self.col = None self.setupCrashLog() self.disableGC() self.setupAppMsg() self.setupKeys() self.setupThreads() self.setupMediaServer() self.setupSound() self.setupMainWindow() self.setupSystemSpecific() self.setupStyle() self.setupMenus() self.setupProgress() self.setupErrorHandler() self.setupSignals() self.setupAutoUpdate() self.setupHooks() self.setupRefreshTimer() self.updateTitleBar() # screens self.setupDeckBrowser() self.setupOverview() self.setupReviewer() # Profiles ########################################################################## class ProfileManager(QMainWindow): onClose = pyqtSignal() closeFires = True def closeEvent(self, evt): if self.closeFires: self.onClose.emit() evt.accept() def closeWithoutQuitting(self): self.closeFires = False self.close() self.closeFires = True def setupProfile(self): self.pendingImport = None self.restoringBackup = False # profile not provided on command line? if not self.pm.name: # if there's a single profile, load it automatically profs = self.pm.profiles() if len(profs) == 1: self.pm.load(profs[0]) if not self.pm.name: self.showProfileManager() else: self.loadProfile() def showProfileManager(self): self.pm.profile = None self.state = "profileManager" d = self.profileDiag = self.ProfileManager() f = self.profileForm = aqt.forms.profiles.Ui_MainWindow() f.setupUi(d) f.login.clicked.connect(self.onOpenProfile) f.profiles.itemDoubleClicked.connect(self.onOpenProfile) f.openBackup.clicked.connect(self.onOpenBackup) f.quit.clicked.connect(d.close) d.onClose.connect(self.cleanupAndExit) f.add.clicked.connect(self.onAddProfile) f.rename.clicked.connect(self.onRenameProfile) f.delete_2.clicked.connect(self.onRemProfile) f.profiles.currentRowChanged.connect(self.onProfileRowChange) f.statusbar.setVisible(False) # enter key opens profile QShortcut(QKeySequence("Return"), d, activated=self.onOpenProfile) self.refreshProfilesList() # raise first, for osx testing d.show() d.activateWindow() d.raise_() def refreshProfilesList(self): f = self.profileForm f.profiles.clear() profs = self.pm.profiles() f.profiles.addItems(profs) try: idx = profs.index(self.pm.name) except: idx = 0 f.profiles.setCurrentRow(idx) def onProfileRowChange(self, n): if n < 0: # called on .clear() return name = self.pm.profiles()[n] f = self.profileForm self.pm.load(name) def openProfile(self): name = self.pm.profiles()[self.profileForm.profiles.currentRow()] return self.pm.load(name) def onOpenProfile(self): self.loadProfile(self.profileDiag.closeWithoutQuitting) def profileNameOk(self, str): return not checkInvalidFilename(str) def onAddProfile(self): name = getOnlyText(_("Name:")) if name: name = name.strip() if name in self.pm.profiles(): return showWarning(_("Name exists.")) if not self.profileNameOk(name): return self.pm.create(name) self.pm.name = name self.refreshProfilesList() def onRenameProfile(self): name = getOnlyText(_("New name:"), default=self.pm.name) if not name: return if name == self.pm.name: return if name in self.pm.profiles(): return showWarning(_("Name exists.")) if not self.profileNameOk(name): return self.pm.rename(name) self.refreshProfilesList() def onRemProfile(self): profs = self.pm.profiles() if len(profs) < 2: return showWarning(_("There must be at least one profile.")) # sure? if not askUser(_("""\ All cards, notes, and media for this profile will be deleted. \ Are you sure?"""), msgfunc=QMessageBox.warning, defaultno=True): return self.pm.remove(self.pm.name) self.refreshProfilesList() def onOpenBackup(self): if not askUser(_("""\ Replace your collection with an earlier backup?"""), msgfunc=QMessageBox.warning, defaultno=True): return def doOpen(path): self._openBackup(path) getFile(self.profileDiag, _("Revert to backup"), cb=doOpen, filter="*.colpkg", dir=self.pm.backupFolder()) def _openBackup(self, path): try: # move the existing collection to the trash, as it may not open self.pm.trashCollection() except: showWarning(_("Unable to move existing file to trash - please try restarting your computer.")) return self.pendingImport = path self.restoringBackup = True showInfo(_("""\ Automatic syncing and backups have been disabled while restoring. To enable them again, \ close the profile or restart Anki.""")) self.onOpenProfile() def loadProfile(self, onsuccess=None): self.maybeAutoSync() if not self.loadCollection(): return # show main window if self.pm.profile['mainWindowState']: restoreGeom(self, "mainWindow") restoreState(self, "mainWindow") # titlebar self.setWindowTitle("Anki - " + self.pm.name) # show and raise window for osx self.show() self.activateWindow() self.raise_() # import pending? if self.pendingImport: self.handleImport(self.pendingImport) self.pendingImport = None runHook("profileLoaded") if onsuccess: onsuccess() def unloadProfile(self, onsuccess): def callback(): self._unloadProfile() onsuccess() runHook("unloadProfile") self.unloadCollection(callback) def _unloadProfile(self): self.pm.profile['mainWindowGeom'] = self.saveGeometry() self.pm.profile['mainWindowState'] = self.saveState() self.pm.save() self.hide() self.restoringBackup = False # at this point there should be no windows left self._checkForUnclosedWidgets() self.maybeAutoSync() def _checkForUnclosedWidgets(self): for w in self.app.topLevelWidgets(): if w.isVisible(): # windows with this property are safe to close immediately if getattr(w, "silentlyClose", None): w.close() else: showWarning("Window should have been closed: {}".format(w)) def unloadProfileAndExit(self): self.unloadProfile(self.cleanupAndExit) def unloadProfileAndShowProfileManager(self): self.unloadProfile(self.showProfileManager) def cleanupAndExit(self): self.errorHandler.unload() self.mediaServer.shutdown() anki.sound.cleanupMPV() self.app.exit(0) # Sound/video ########################################################################## def setupSound(self): try: anki.sound.setupMPV() except FileNotFoundError: print("mpv not found, reverting to mplayer") except anki.mpv.MPVProcessError: print("mpv too old, reverting to mplayer") # Collection load/unload ########################################################################## def loadCollection(self): try: return self._loadCollection() except Exception as e: showWarning(_("""\ Anki was unable to open your collection file. If problems persist after \ restarting your computer, please use the Open Backup button in the profile \ manager. Debug info: """)+traceback.format_exc()) # clean up open collection if possible if self.col: try: self.col.close(save=False) except: pass self.col = None # return to profile manager self.showProfileManager() return False def _loadCollection(self): cpath = self.pm.collectionPath() self.col = Collection(cpath, log=True) self.setEnabled(True) self.progress.setupDB(self.col.db) self.maybeEnableUndo() self.moveToState("deckBrowser") return True def unloadCollection(self, onsuccess): def callback(): self.setEnabled(False) self._unloadCollection() onsuccess() self.closeAllWindows(callback) def _unloadCollection(self): if not self.col: return if self.restoringBackup: label = _("Closing...") else: label = _("Backing Up...") self.progress.start(label=label, immediate=True) corrupt = False try: self.maybeOptimize() if not devMode: corrupt = self.col.db.scalar("pragma integrity_check") != "ok" except: corrupt = True try: self.col.close() except: corrupt = True finally: self.col = None if corrupt: showWarning(_("Your collection file appears to be corrupt. \ This can happen when the file is copied or moved while Anki is open, or \ when the collection is stored on a network or cloud drive. If problems \ persist after restarting your computer, please open an automatic backup \ from the profile screen.")) if not corrupt and not self.restoringBackup: self.backup() self.progress.finish() # Backup and auto-optimize ########################################################################## class BackupThread(Thread): def __init__(self, path, data): Thread.__init__(self) self.path = path self.data = data # create the file in calling thread to ensure the same # file is not created twice open(self.path, "wb").close() def run(self): z = zipfile.ZipFile(self.path, "w", zipfile.ZIP_DEFLATED) z.writestr("collection.anki2", self.data) z.writestr("media", "{}") z.close() def backup(self): nbacks = self.pm.profile['numBackups'] if not nbacks or devMode: return dir = self.pm.backupFolder() path = self.pm.collectionPath() # do backup fname = time.strftime("backup-%Y-%m-%d-%H.%M.%S.colpkg", time.localtime(time.time())) newpath = os.path.join(dir, fname) with open(path, "rb") as f: data = f.read() b = self.BackupThread(newpath, data) b.start() # find existing backups backups = [] for file in os.listdir(dir): # only look for new-style format m = re.match(r"backup-\d{4}-\d{2}-.+.colpkg", file) if not m: continue backups.append(file) backups.sort() # remove old ones while len(backups) > nbacks: fname = backups.pop(0) path = os.path.join(dir, fname) os.unlink(path) def maybeOptimize(self): # have two weeks passed? if (intTime() - self.pm.profile['lastOptimize']) < 86400*14: return self.progress.start(label=_("Optimizing..."), immediate=True) self.col.optimize() self.pm.profile['lastOptimize'] = intTime() self.pm.save() self.progress.finish() # State machine ########################################################################## def moveToState(self, state, *args): #print("-> move from", self.state, "to", state) oldState = self.state or "dummy" cleanup = getattr(self, "_"+oldState+"Cleanup", None) if cleanup: cleanup(state) self.clearStateShortcuts() self.state = state runHook('beforeStateChange', state, oldState, *args) getattr(self, "_"+state+"State")(oldState, *args) if state != "resetRequired": self.bottomWeb.show() runHook('afterStateChange', state, oldState, *args) def _deckBrowserState(self, oldState): self.deckBrowser.show() def _colLoadingState(self, oldState): "Run once, when col is loaded." self.enableColMenuItems() # ensure cwd is set if media dir exists self.col.media.dir() runHook("colLoading", self.col) self.moveToState("overview") def _selectedDeck(self): did = self.col.decks.selected() if not self.col.decks.nameOrNone(did): showInfo(_("Please select a deck.")) return return self.col.decks.get(did) def _overviewState(self, oldState): if not self._selectedDeck(): return self.moveToState("deckBrowser") self.col.reset() self.overview.show() def _reviewState(self, oldState): self.reviewer.show() def _reviewCleanup(self, newState): if newState != "resetRequired" and newState != "review": self.reviewer.cleanup() def noteChanged(self, nid): "Called when a card or note is edited (but not deleted)." runHook("noteChanged", nid) # Resetting state ########################################################################## def reset(self, guiOnly=False): "Called for non-trivial edits. Rebuilds queue and updates UI." if self.col: if not guiOnly: self.col.reset() runHook("reset") self.maybeEnableUndo() self.moveToState(self.state) def requireReset(self, modal=False): "Signal queue needs to be rebuilt when edits are finished or by user." self.autosave() self.resetModal = modal if self.interactiveState(): self.moveToState("resetRequired") def interactiveState(self): "True if not in profile manager, syncing, etc." return self.state in ("overview", "review", "deckBrowser") def maybeReset(self): self.autosave() if self.state == "resetRequired": self.state = self.returnState self.reset() def delayedMaybeReset(self): # if we redraw the page in a button click event it will often crash on # windows self.progress.timer(100, self.maybeReset, False) def _resetRequiredState(self, oldState): if oldState != "resetRequired": self.returnState = oldState if self.resetModal: # we don't have to change the webview, as we have a covering window return self.web.resetHandlers() self.web.onBridgeCmd = lambda url: self.delayedMaybeReset() i = _("Waiting for editing to finish.") b = self.button("refresh", _("Resume Now"), id="resume") self.web.stdHtml("""
%s
%s
""" % (i, b)) self.bottomWeb.hide() self.web.setFocus() # HTML helpers ########################################################################## def button(self, link, name, key=None, class_="", id="", extra=""): class_ = "but "+ class_ if key: key = _("Shortcut key: %s") % key else: key = "" return ''' ''' % ( id, class_, link, key, extra, name) # Main window setup ########################################################################## def setupMainWindow(self): # main window self.form = aqt.forms.main.Ui_MainWindow() self.form.setupUi(self) # toolbar tweb = self.toolbarWeb = aqt.webview.AnkiWebView() tweb.title = "top toolbar" tweb.setFocusPolicy(Qt.WheelFocus) self.toolbar = aqt.toolbar.Toolbar(self, tweb) self.toolbar.draw() # main area self.web = aqt.webview.AnkiWebView() self.web.title = "main webview" self.web.setFocusPolicy(Qt.WheelFocus) self.web.setMinimumWidth(400) # bottom area sweb = self.bottomWeb = aqt.webview.AnkiWebView() sweb.title = "bottom toolbar" sweb.setFocusPolicy(Qt.WheelFocus) # add in a layout self.mainLayout = QVBoxLayout() self.mainLayout.setContentsMargins(0,0,0,0) self.mainLayout.setSpacing(0) self.mainLayout.addWidget(tweb) self.mainLayout.addWidget(self.web) self.mainLayout.addWidget(sweb) self.form.centralwidget.setLayout(self.mainLayout) def closeAllWindows(self, onsuccess): aqt.dialogs.closeAll(onsuccess) # Components ########################################################################## def setupSignals(self): signal.signal(signal.SIGINT, self.onSigInt) def onSigInt(self, signum, frame): # interrupt any current transaction and schedule a rollback & quit if self.col: self.col.db.interrupt() def quit(): self.col.db.rollback() self.close() self.progress.timer(100, quit, False) def setupProgress(self): self.progress = aqt.progress.ProgressManager(self) def setupErrorHandler(self): import aqt.errors self.errorHandler = aqt.errors.ErrorHandler(self) def setupAddons(self): import aqt.addons self.addonManager = aqt.addons.AddonManager(self) if not self.safeMode: self.addonManager.loadAddons() def setupThreads(self): self._mainThread = QThread.currentThread() def inMainThread(self): return self._mainThread == QThread.currentThread() def setupDeckBrowser(self): from aqt.deckbrowser import DeckBrowser self.deckBrowser = DeckBrowser(self) def setupOverview(self): from aqt.overview import Overview self.overview = Overview(self) def setupReviewer(self): from aqt.reviewer import Reviewer self.reviewer = Reviewer(self) # Syncing ########################################################################## # expects a current profile and a loaded collection; reloads # collection after sync completes def onSync(self): self.unloadCollection(self._onSync) def _onSync(self): self._sync() if not self.loadCollection(): return # expects a current profile, but no collection loaded def maybeAutoSync(self): if (not self.pm.profile['syncKey'] or not self.pm.profile['autoSync'] or self.safeMode or self.restoringBackup): return # ok to sync self._sync() def _sync(self): from aqt.sync import SyncManager self.state = "sync" self.syncer = SyncManager(self, self.pm) self.syncer.sync() # Tools ########################################################################## def raiseMain(self): if not self.app.activeWindow(): # make sure window is shown self.setWindowState(self.windowState() & ~Qt.WindowMinimized) return True def setStatus(self, text, timeout=3000): self.form.statusbar.showMessage(text, timeout) def setupStyle(self): applyStyles(self) # Key handling ########################################################################## def setupKeys(self): globalShortcuts = [ ("Ctrl+Shift+;", self.onDebug), ("d", lambda: self.moveToState("deckBrowser")), ("s", self.onStudyKey), ("a", self.onAddCard), ("b", self.onBrowse), ("Shift+s", self.onStats), ("y", self.onSync) ] self.applyShortcuts(globalShortcuts) self.stateShortcuts = [] def applyShortcuts(self, shortcuts): qshortcuts = [] for key, fn in shortcuts: qshortcuts.append(QShortcut(QKeySequence(key), self, activated=fn)) return qshortcuts def setStateShortcuts(self, shortcuts): runHook(self.state+"StateShortcuts", shortcuts) self.stateShortcuts = self.applyShortcuts(shortcuts) def clearStateShortcuts(self): for qs in self.stateShortcuts: sip.delete(qs) self.stateShortcuts = [] def onStudyKey(self): if self.state == "overview": self.col.startTimebox() self.moveToState("review") else: self.moveToState("overview") # App exit ########################################################################## def closeEvent(self, event): if self.state == "profileManager": # if profile manager active, this event may fire via OS X menu bar's # quit option self.profileDiag.close() event.accept() else: # ignore the event for now, as we need time to clean up event.ignore() self.unloadProfileAndExit() # Undo & autosave ########################################################################## def onUndo(self): n = self.col.undoName() if not n: return cid = self.col.undo() if cid and self.state == "review": card = self.col.getCard(cid) self.reviewer.cardQueue.append(card) else: tooltip(_("Reverted to state prior to '%s'.") % n.lower()) self.reset() self.maybeEnableUndo() def maybeEnableUndo(self): if self.col and self.col.undoName(): self.form.actionUndo.setText(_("Undo %s") % self.col.undoName()) self.form.actionUndo.setEnabled(True) runHook("undoState", True) else: self.form.actionUndo.setText(_("Undo")) self.form.actionUndo.setEnabled(False) runHook("undoState", False) def checkpoint(self, name): self.col.save(name) self.maybeEnableUndo() def autosave(self): saved = self.col.autosave() self.maybeEnableUndo() if saved: self.doGC() # Other menu operations ########################################################################## def onAddCard(self): aqt.dialogs.open("AddCards", self) def onBrowse(self): aqt.dialogs.open("Browser", self) def onEditCurrent(self): aqt.dialogs.open("EditCurrent", self) def onDeckConf(self, deck=None): if not deck: deck = self.col.decks.current() if deck['dyn']: import aqt.dyndeckconf aqt.dyndeckconf.DeckConf(self, deck=deck) else: import aqt.deckconf aqt.deckconf.DeckConf(self, deck) def onOverview(self): self.col.reset() self.moveToState("overview") def onStats(self): deck = self._selectedDeck() if not deck: return aqt.dialogs.open("DeckStats", self) def onPrefs(self): aqt.dialogs.open("Preferences", self) def onNoteTypes(self): import aqt.models aqt.models.Models(self, self, fromMain=True) def onAbout(self): aqt.dialogs.open("About", self) def onDonate(self): openLink(aqt.appDonate) def onDocumentation(self): openHelp("") # Importing & exporting ########################################################################## def handleImport(self, path): import aqt.importing if not os.path.exists(path): return showInfo(_("Please use File>Import to import this file.")) aqt.importing.importFile(self, path) def onImport(self): import aqt.importing aqt.importing.onImport(self) def onExport(self, did=None): import aqt.exporting aqt.exporting.ExportDialog(self, did=did) # Cramming ########################################################################## def onCram(self, search=""): import aqt.dyndeckconf n = 1 deck = self.col.decks.current() if not search: if not deck['dyn']: search = 'deck:"%s" ' % deck['name'] decks = self.col.decks.allNames() while _("Filtered Deck %d") % n in decks: n += 1 name = _("Filtered Deck %d") % n did = self.col.decks.newDyn(name) diag = aqt.dyndeckconf.DeckConf(self, first=True, search=search) if not diag.ok: # user cancelled first config self.col.decks.rem(did) self.col.decks.select(deck['id']) else: self.moveToState("overview") # Menu, title bar & status ########################################################################## def setupMenus(self): m = self.form m.actionSwitchProfile.triggered.connect( self.unloadProfileAndShowProfileManager) m.actionImport.triggered.connect(self.onImport) m.actionExport.triggered.connect(self.onExport) m.actionExit.triggered.connect(self.close) m.actionPreferences.triggered.connect(self.onPrefs) m.actionAbout.triggered.connect(self.onAbout) m.actionUndo.triggered.connect(self.onUndo) m.actionFullDatabaseCheck.triggered.connect(self.onCheckDB) m.actionCheckMediaDatabase.triggered.connect(self.onCheckMediaDB) m.actionDocumentation.triggered.connect(self.onDocumentation) m.actionDonate.triggered.connect(self.onDonate) m.actionStudyDeck.triggered.connect(self.onStudyDeck) m.actionCreateFiltered.triggered.connect(self.onCram) m.actionEmptyCards.triggered.connect(self.onEmptyCards) m.actionNoteTypes.triggered.connect(self.onNoteTypes) def updateTitleBar(self): self.setWindowTitle("Anki") # Auto update ########################################################################## def setupAutoUpdate(self): import aqt.update self.autoUpdate = aqt.update.LatestVersionFinder(self) self.autoUpdate.newVerAvail.connect(self.newVerAvail) self.autoUpdate.newMsg.connect(self.newMsg) self.autoUpdate.clockIsOff.connect(self.clockIsOff) self.autoUpdate.start() def newVerAvail(self, ver): if self.pm.meta.get('suppressUpdate', None) != ver: aqt.update.askAndUpdate(self, ver) def newMsg(self, data): aqt.update.showMessages(self, data) def clockIsOff(self, diff): diffText = ngettext("%s second", "%s seconds", diff) % diff warn = _("""\ In order to ensure your collection works correctly when moved between \ devices, Anki requires your computer's internal clock to be set correctly. \ The internal clock can be wrong even if your system is showing the correct \ local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.""") % diffText showWarning(warn) self.app.closeAllWindows() # Count refreshing ########################################################################## def setupRefreshTimer(self): # every 10 minutes self.progress.timer(10*60*1000, self.onRefreshTimer, True) def onRefreshTimer(self): if self.state == "deckBrowser": self.deckBrowser.refresh() elif self.state == "overview": self.overview.refresh() # Permanent libanki hooks ########################################################################## def setupHooks(self): addHook("modSchema", self.onSchemaMod) addHook("remNotes", self.onRemNotes) addHook("odueInvalid", self.onOdueInvalid) def onOdueInvalid(self): showWarning(_("""\ Invalid property found on card. Please use Tools>Check Database, \ and if the problem comes up again, please ask on the support site.""")) # Log note deletion ########################################################################## def onRemNotes(self, col, nids): path = os.path.join(self.pm.profileFolder(), "deleted.txt") existed = os.path.exists(path) with open(path, "ab") as f: if not existed: f.write(b"nid\tmid\tfields\n") for id, mid, flds in col.db.execute( "select id, mid, flds from notes where id in %s" % ids2str(nids)): fields = splitFields(flds) f.write(("\t".join([str(id), str(mid)] + fields)).encode("utf8")) f.write(b"\n") # Schema modifications ########################################################################## def onSchemaMod(self, arg): return askUser(_("""\ The requested change will require a full upload of the database when \ you next synchronize your collection. If you have reviews or other changes \ waiting on another device that haven't been synchronized here yet, they \ will be lost. Continue?""")) # Advanced features ########################################################################## def onCheckDB(self): "True if no problems" self.progress.start(immediate=True) ret, ok = self.col.fixIntegrity() self.progress.finish() if not ok: showText(ret) else: tooltip(ret) self.reset() return ret def onCheckMediaDB(self): self.progress.start(immediate=True) (nohave, unused, warnings) = self.col.media.check() self.progress.finish() # generate report report = "" if warnings: report += "\n".join(warnings) + "\n" if unused: if report: report += "\n\n\n" report += _( "In media folder but not used by any cards:") report += "\n" + "\n".join(unused) if nohave: if report: report += "\n\n\n" report += _( "Used on cards but missing from media folder:") report += "\n" + "\n".join(nohave) if not report: tooltip(_("No unused or missing files found.")) return # show report and offer to delete diag = QDialog(self) diag.setWindowTitle("Anki") layout = QVBoxLayout(diag) diag.setLayout(layout) text = QTextEdit() text.setReadOnly(True) text.setPlainText(report) layout.addWidget(text) box = QDialogButtonBox(QDialogButtonBox.Close) layout.addWidget(box) b = QPushButton(_("Delete Unused")) b.setAutoDefault(False) box.addButton(b, QDialogButtonBox.ActionRole) b.clicked.connect( lambda c, u=unused, d=diag: self.deleteUnused(u, d)) box.rejected.connect(diag.reject) diag.setMinimumHeight(400) diag.setMinimumWidth(500) restoreGeom(diag, "checkmediadb") diag.exec_() saveGeom(diag, "checkmediadb") def deleteUnused(self, unused, diag): if not askUser( _("Delete unused media?")): return mdir = self.col.media.dir() for f in unused: path = os.path.join(mdir, f) if os.path.exists(path): send2trash(path) tooltip(_("Deleted.")) diag.close() def onStudyDeck(self): from aqt.studydeck import StudyDeck ret = StudyDeck( self, dyn=True, current=self.col.decks.current()['name']) if ret.name: self.col.decks.select(self.col.decks.id(ret.name)) self.moveToState("overview") def onEmptyCards(self): self.progress.start(immediate=True) cids = self.col.emptyCids() if not cids: self.progress.finish() tooltip(_("No empty cards.")) return report = self.col.emptyCardReport(cids) self.progress.finish() part1 = ngettext("%d card", "%d cards", len(cids)) % len(cids) part1 = _("%s to delete:") % part1 diag, box = showText(part1 + "\n\n" + report, run=False, geomKey="emptyCards") box.addButton(_("Delete Cards"), QDialogButtonBox.AcceptRole) box.button(QDialogButtonBox.Close).setDefault(True) def onDelete(): saveGeom(diag, "emptyCards") QDialog.accept(diag) self.checkpoint(_("Delete Empty")) self.col.remCards(cids) tooltip(ngettext("%d card deleted.", "%d cards deleted.", len(cids)) % len(cids)) self.reset() box.accepted.connect(onDelete) diag.show() # Debugging ###################################################################### def onDebug(self): d = self.debugDiag = QDialog() d.silentlyClose = True frm = aqt.forms.debug.Ui_Dialog() frm.setupUi(d) s = self.debugDiagShort = QShortcut(QKeySequence("ctrl+return"), d) s.activated.connect(lambda: self.onDebugRet(frm)) s = self.debugDiagShort = QShortcut( QKeySequence("ctrl+shift+return"), d) s.activated.connect(lambda: self.onDebugPrint(frm)) d.show() def _captureOutput(self, on): mw = self class Stream: def write(self, data): mw._output += data if on: self._output = "" self._oldStderr = sys.stderr self._oldStdout = sys.stdout s = Stream() sys.stderr = s sys.stdout = s else: sys.stderr = self._oldStderr sys.stdout = self._oldStdout def _debugCard(self): return self.reviewer.card.__dict__ def _debugBrowserCard(self): return aqt.dialogs._dialogs['Browser'][1].card.__dict__ def onDebugPrint(self, frm): frm.text.setPlainText("pp(%s)" % frm.text.toPlainText()) self.onDebugRet(frm) def onDebugRet(self, frm): import pprint, traceback text = frm.text.toPlainText() card = self._debugCard bcard = self._debugBrowserCard mw = self pp = pprint.pprint self._captureOutput(True) try: exec(text) except: self._output += traceback.format_exc() self._captureOutput(False) buf = "" for c, line in enumerate(text.strip().split("\n")): if c == 0: buf += ">>> %s\n" % line else: buf += "... %s\n" % line try: frm.log.appendPlainText(buf + (self._output or "")) except UnicodeDecodeError: frm.log.appendPlainText(_("")) frm.log.ensureCursorVisible() # System specific code ########################################################################## def setupSystemSpecific(self): self.hideMenuAccels = False if isMac: # mac users expect a minimize option self.minimizeShortcut = QShortcut("Ctrl+M", self) self.minimizeShortcut.activated.connect(self.onMacMinimize) self.hideMenuAccels = True self.maybeHideAccelerators() self.hideStatusTips() elif isWin: # make sure ctypes is bundled from ctypes import windll, wintypes _dummy = windll _dummy = wintypes def maybeHideAccelerators(self, tgt=None): if not self.hideMenuAccels: return tgt = tgt or self for action in tgt.findChildren(QAction): txt = str(action.text()) m = re.match(r"^(.+)\(&.+\)(.+)?", txt) if m: action.setText(m.group(1) + (m.group(2) or "")) def hideStatusTips(self): for action in self.findChildren(QAction): action.setStatusTip("") def onMacMinimize(self): self.setWindowState(self.windowState() | Qt.WindowMinimized) # Single instance support ########################################################################## def setupAppMsg(self): self.app.appMsg.connect(self.onAppMsg) def onAppMsg(self, buf): if self.state == "startup": # try again in a second return self.progress.timer(1000, lambda: self.onAppMsg(buf), False) elif self.state == "profileManager": # can't raise window while in profile manager if buf == "raise": return self.pendingImport = buf return tooltip(_("Deck will be imported when a profile is opened.")) if not self.interactiveState() or self.progress.busy(): # we can't raise the main window while in profile dialog, syncing, etc if buf != "raise": showInfo(_("""\ Please ensure a profile is open and Anki is not busy, then try again."""), parent=None) return # raise window if isWin: # on windows we can raise the window by minimizing and restoring self.showMinimized() self.setWindowState(Qt.WindowActive) self.showNormal() else: # on osx we can raise the window. on unity the icon in the tray will just flash. self.activateWindow() self.raise_() if buf == "raise": return # import self.handleImport(buf) # GC ########################################################################## # ensure gc runs in main thread def setupDialogGC(self, obj): obj.finished.connect(lambda: self.gcWindow(obj)) def gcWindow(self, obj): obj.deleteLater() self.progress.timer(1000, self.doGC, False) def disableGC(self): gc.collect() gc.disable() def doGC(self): assert not self.progress.inDB gc.collect() # Crash log ########################################################################## def setupCrashLog(self): p = os.path.join(self.pm.base, "crash.log") self._crashLog = open(p, "ab", 0) faulthandler.enable(self._crashLog) # Media server ########################################################################## def setupMediaServer(self): self.mediaServer = aqt.mediasrv.MediaServer() self.mediaServer.start() def baseHTML(self): return '' % self.serverURL() def serverURL(self): return "http://127.0.0.1:%d/" % self.mediaServer.getPort()anki-2.1.0+dfsg~b36/aqt/mediasrv.py000066400000000000000000000100321323611211500170240ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * from http import HTTPStatus import http.server import socketserver import socket from anki.utils import devMode import threading # locate web folder in source/binary distribution def _getExportFolder(): # running from source? srcFolder = os.path.join(os.path.dirname(__file__), "..") webInSrcFolder = os.path.abspath(os.path.join(srcFolder, "web")) if os.path.exists(webInSrcFolder): return webInSrcFolder elif isMac: dir = os.path.dirname(os.path.abspath(__file__)) return os.path.abspath(dir + "/../../Resources/web") else: raise Exception("couldn't find web folder") _exportFolder = _getExportFolder() # webengine on windows sometimes opens a connection and fails to send a request, # which will hang the server if unthreaded class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer): # allow for a flood of requests before we've started up properly request_queue_size = 100 # work around python not being able to handle non-latin hostnames def server_bind(self): """Override server_bind to store the server name.""" socketserver.TCPServer.server_bind(self) host, port = self.server_address[:2] try: self.server_name = socket.getfqdn(host) except: self.server_name = "server" self.server_port = port class MediaServer(threading.Thread): _port = None _ready = threading.Event() def run(self): self.server = ThreadedHTTPServer(("127.0.0.1", 0), RequestHandler) self._ready.set() self.server.serve_forever() def getPort(self): self._ready.wait() return self.server.server_port def shutdown(self): self.server.shutdown() class RequestHandler(http.server.SimpleHTTPRequestHandler): timeout = 1 def do_GET(self): f = self.send_head() if f: try: self.copyfile(f, self.wfile) except Exception as e: if devMode: print("http server caught exception:", e) else: # swallow it - user likely surfed away from # review screen before an image had finished # downloading pass finally: f.close() def send_head(self): path = self.translate_path(self.path) path = self._redirectWebExports(path) if os.path.isdir(path): self.send_error(HTTPStatus.NOT_FOUND, "File not found") return None ctype = self.guess_type(path) try: f = open(path, 'rb') except OSError: self.send_error(HTTPStatus.NOT_FOUND, "File not found") return None try: self.send_response(HTTPStatus.OK) self.send_header("Content-type", ctype) fs = os.fstat(f.fileno()) self.send_header("Content-Length", str(fs[6])) self.send_header("Last-Modified", self.date_time_string(fs.st_mtime)) self.send_header("Access-Control-Allow-Origin", "*") self.end_headers() return f except: f.close() raise def log_message(self, format, *args): if not devMode: return print("%s - - [%s] %s" % (self.address_string(), self.log_date_time_string(), format%args)) # catch /_anki references and rewrite them to web export folder def _redirectWebExports(self, path): targetPath = os.path.join(os.getcwd(), "_anki", "") if path.startswith(targetPath): newPath = os.path.join(_exportFolder, path[len(targetPath):]) return newPath return path # work around Windows machines with incorrect mime type RequestHandler.extensions_map['.css'] = "text/css" anki-2.1.0+dfsg~b36/aqt/modelchooser.py000066400000000000000000000051401323611211500177010ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * from anki.hooks import addHook, remHook, runHook from aqt.utils import shortcut import aqt class ModelChooser(QHBoxLayout): def __init__(self, mw, widget, label=True): QHBoxLayout.__init__(self) self.widget = widget self.mw = mw self.deck = mw.col self.label = label self.setContentsMargins(0,0,0,0) self.setSpacing(8) self.setupModels() addHook('reset', self.onReset) self.widget.setLayout(self) def setupModels(self): if self.label: self.modelLabel = QLabel(_("Type")) self.addWidget(self.modelLabel) # models box self.models = QPushButton() #self.models.setStyleSheet("* { text-align: left; }") self.models.setToolTip(shortcut(_("Change Note Type (Ctrl+N)"))) s = QShortcut(QKeySequence(_("Ctrl+N")), self.widget, activated=self.onModelChange) self.models.setAutoDefault(False) self.addWidget(self.models) self.models.clicked.connect(self.onModelChange) # layout sizePolicy = QSizePolicy( QSizePolicy.Policy(7), QSizePolicy.Policy(0)) self.models.setSizePolicy(sizePolicy) self.updateModels() def cleanup(self): remHook('reset', self.onReset) def onReset(self): self.updateModels() def show(self): self.widget.show() def hide(self): self.widget.hide() def onEdit(self): import aqt.models aqt.models.Models(self.mw, self.widget) def onModelChange(self): from aqt.studydeck import StudyDeck current = self.deck.models.current()['name'] # edit button edit = QPushButton(_("Manage"), clicked=self.onEdit) def nameFunc(): return sorted(self.deck.models.allNames()) ret = StudyDeck( self.mw, names=nameFunc, accept=_("Choose"), title=_("Choose Note Type"), help="_notes", current=current, parent=self.widget, buttons=[edit], cancel=True, geomKey="selectModel") if not ret.name: return m = self.deck.models.byName(ret.name) self.deck.conf['curModel'] = m['id'] cdeck = self.deck.decks.current() cdeck['mid'] = m['id'] self.deck.decks.save(cdeck) runHook("currentModelChanged") self.mw.reset() def updateModels(self): self.models.setText(self.deck.models.current()['name']) anki-2.1.0+dfsg~b36/aqt/models.py000066400000000000000000000157471323611211500165170ustar00rootroot00000000000000# Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * from operator import itemgetter from aqt.utils import showInfo, askUser, getText, maybeHideClose, openHelp import aqt.modelchooser, aqt.clayout from anki import stdmodels from aqt.utils import saveGeom, restoreGeom import collections class Models(QDialog): def __init__(self, mw, parent=None, fromMain=False): self.mw = mw self.parent = parent or mw self.fromMain = fromMain QDialog.__init__(self, self.parent, Qt.Window) self.col = mw.col self.mm = self.col.models self.mw.checkpoint(_("Note Types")) self.form = aqt.forms.models.Ui_Dialog() self.form.setupUi(self) self.form.buttonBox.helpRequested.connect(lambda: openHelp("notetypes")) self.setupModels() restoreGeom(self, "models") self.exec_() # Models ########################################################################## def setupModels(self): self.model = None f = self.form; box = f.buttonBox t = QDialogButtonBox.ActionRole b = box.addButton(_("Add"), t) b.clicked.connect(self.onAdd) b = box.addButton(_("Rename"), t) b.clicked.connect(self.onRename) b = box.addButton(_("Delete"), t) b.clicked.connect(self.onDelete) if self.fromMain: b = box.addButton(_("Fields..."), t) b.clicked.connect(self.onFields) b = box.addButton(_("Cards..."), t) b.clicked.connect(self.onCards) b = box.addButton(_("Options..."), t) b.clicked.connect(self.onAdvanced) f.modelsList.currentRowChanged.connect(self.modelChanged) f.modelsList.itemDoubleClicked.connect(self.onRename) self.updateModelsList() f.modelsList.setCurrentRow(0) maybeHideClose(box) def onRename(self): txt = getText(_("New name:"), default=self.model['name']) if txt[1] and txt[0]: self.model['name'] = txt[0] self.mm.save(self.model) self.updateModelsList() def updateModelsList(self): row = self.form.modelsList.currentRow() if row == -1: row = 0 self.models = self.col.models.all() self.models.sort(key=itemgetter("name")) self.form.modelsList.clear() for m in self.models: mUse = self.mm.useCount(m) mUse = ngettext("%d note", "%d notes", mUse) % mUse item = QListWidgetItem("%s [%s]" % (m['name'], mUse)) self.form.modelsList.addItem(item) self.form.modelsList.setCurrentRow(row) def modelChanged(self): if self.model: self.saveModel() idx = self.form.modelsList.currentRow() self.model = self.models[idx] def onAdd(self): m = AddModel(self.mw, self).get() if m: txt = getText(_("Name:"), default=m['name'])[0] if txt: m['name'] = txt self.mm.ensureNameUnique(m) self.mm.save(m) self.updateModelsList() def onDelete(self): if len(self.models) < 2: showInfo(_("Please add another note type first."), parent=self) return if self.mm.useCount(self.model): msg = _("Delete this note type and all its cards?") else: msg = _("Delete this unused note type?") if not askUser(msg, parent=self): return self.mm.rem(self.model) self.model = None self.updateModelsList() def onAdvanced(self): d = QDialog(self) frm = aqt.forms.modelopts.Ui_Dialog() frm.setupUi(d) frm.latexsvg.setChecked(self.model.get("latexsvg", False)) frm.latexHeader.setText(self.model['latexPre']) frm.latexFooter.setText(self.model['latexPost']) d.setWindowTitle(_("Options for %s") % self.model['name']) frm.buttonBox.helpRequested.connect(lambda: openHelp("latex")) restoreGeom(d, "modelopts") d.exec_() saveGeom(d, "modelopts") self.model['latexsvg'] = frm.latexsvg.isChecked() self.model['latexPre'] = str(frm.latexHeader.toPlainText()) self.model['latexPost'] = str(frm.latexFooter.toPlainText()) def saveModel(self): self.mm.save(self.model) def _tmpNote(self): self.mm.setCurrent(self.model) n = self.col.newNote(forDeck=False) for name in list(n.keys()): n[name] = "("+name+")" try: if "{{cloze:Text}}" in self.model['tmpls'][0]['qfmt']: n['Text'] = _("This is a {{c1::sample}} cloze deletion.") except: # invalid cloze pass return n def onFields(self): from aqt.fields import FieldDialog n = self._tmpNote() FieldDialog(self.mw, n, parent=self) def onCards(self): from aqt.clayout import CardLayout n = self._tmpNote() CardLayout(self.mw, n, ord=0, parent=self, addMode=True) # Cleanup ########################################################################## # need to flush model on change or reject def reject(self): self.saveModel() self.mw.reset() saveGeom(self, "models") QDialog.reject(self) class AddModel(QDialog): def __init__(self, mw, parent=None): self.parent = parent or mw self.mw = mw self.col = mw.col QDialog.__init__(self, self.parent, Qt.Window) self.model = None self.dialog = aqt.forms.addmodel.Ui_Dialog() self.dialog.setupUi(self) # standard models self.models = [] for (name, func) in stdmodels.models: if isinstance(name, collections.Callable): name = name() item = QListWidgetItem(_("Add: %s") % name) self.dialog.models.addItem(item) self.models.append((True, func)) # add copies for m in sorted(self.col.models.all(), key=itemgetter("name")): item = QListWidgetItem(_("Clone: %s") % m['name']) self.dialog.models.addItem(item) self.models.append((False, m)) self.dialog.models.setCurrentRow(0) # the list widget will swallow the enter key s = QShortcut(QKeySequence("Return"), self) s.activated.connect(self.accept) # help self.dialog.buttonBox.helpRequested.connect(self.onHelp) def get(self): self.exec_() return self.model def reject(self): QDialog.reject(self) def accept(self): (isStd, model) = self.models[self.dialog.models.currentRow()] if isStd: # create self.model = model(self.col) else: # add copy to deck self.model = self.mw.col.models.copy(model) self.mw.col.models.setCurrent(self.model) QDialog.accept(self) def onHelp(self): openHelp("notetypes") anki-2.1.0+dfsg~b36/aqt/overview.py000066400000000000000000000160731323611211500170730ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.utils import openLink, shortcut, tooltip, askUserDialog from anki.utils import isMac import aqt from anki.sound import clearAudioQueue class Overview: "Deck overview." def __init__(self, mw): self.mw = mw self.web = mw.web self.bottom = aqt.toolbar.BottomBar(mw, mw.bottomWeb) def show(self): clearAudioQueue() self.web.resetHandlers() self.web.onBridgeCmd = self._linkHandler self.mw.setStateShortcuts(self._shortcutKeys()) self.refresh() def refresh(self): self.mw.col.reset() self._renderPage() self._renderBottom() self.mw.web.setFocus() # Handlers ############################################################ def _linkHandler(self, url): if url == "study": self.mw.col.startTimebox() self.mw.moveToState("review") if self.mw.state == "overview": tooltip(_("No cards are due yet.")) elif url == "anki": print("anki menu") elif url == "opts": self.mw.onDeckConf() elif url == "cram": deck = self.mw.col.decks.current() self.mw.onCram("'deck:%s'" % deck['name']) elif url == "refresh": self.mw.col.sched.rebuildDyn() self.mw.reset() elif url == "empty": self.mw.col.sched.emptyDyn(self.mw.col.decks.selected()) self.mw.reset() elif url == "decks": self.mw.moveToState("deckBrowser") elif url == "review": openLink(aqt.appShared+"info/%s?v=%s"%(self.sid, self.sidVer)) elif url == "studymore": self.onStudyMore() elif url == "unbury": self.onUnbury() elif url.lower().startswith("http"): openLink(url) return False def _shortcutKeys(self): return [ ("o", self.mw.onDeckConf), ("r", self.onRebuildKey), ("e", self.onEmptyKey), ("c", self.onCustomStudyKey), ("u", self.onUnbury) ] def _filteredDeck(self): return self.mw.col.decks.current()['dyn'] def onRebuildKey(self): if self._filteredDeck(): self.mw.col.sched.rebuildDyn() self.mw.reset() def onEmptyKey(self): if self._filteredDeck(): self.mw.col.sched.emptyDyn(self.mw.col.decks.selected()) self.mw.reset() def onCustomStudyKey(self): if not self._filteredDeck(): self.onStudyMore() def onUnbury(self): if self.mw.col.schedVer() == 1: self.mw.col.sched.unburyCardsForDeck() self.mw.reset() return sibs = self.mw.col.sched.haveBuriedSiblings() man = self.mw.col.sched.haveManuallyBuried() if sibs and man: opts = [_("Manually Buried Cards"), _("Buried Siblings"), _("All Buried Cards"), _("Cancel")] diag = askUserDialog(_("What would you like to unbury?"), opts) diag.setDefault(0) ret = diag.run() if ret == opts[0]: self.mw.col.sched.unburyCardsForDeck(type="manual") elif ret == opts[1]: self.mw.col.sched.unburyCardsForDeck(type="siblings") elif ret == opts[2]: self.mw.col.sched.unburyCardsForDeck(type="all") else: self.mw.col.sched.unburyCardsForDeck(type="all") self.mw.reset() # HTML ############################################################ def _renderPage(self): but = self.mw.button deck = self.mw.col.decks.current() self.sid = deck.get("sharedFrom") if self.sid: self.sidVer = deck.get("ver", None) shareLink = 'Reviews and Updates' else: shareLink = "" self.web.stdHtml(self._body % dict( deck=deck['name'], shareLink=shareLink, desc=self._desc(deck), table=self._table() ), css=["overview.css"], js=["jquery.js", "overview.js"]) def _desc(self, deck): if deck['dyn']: desc = _("""\ This is a special deck for studying outside of the normal schedule.""") desc += " " + _("""\ Cards will be automatically returned to their original decks after you review \ them.""") desc += " " + _("""\ Deleting this deck from the deck list will return all remaining cards \ to their original deck.""") else: desc = deck.get("desc", "") if not desc: return "

" if deck['dyn']: dyn = "dyn" else: dyn = "" return '

%s
' % ( dyn, desc) def _table(self): counts = list(self.mw.col.sched.counts()) finished = not sum(counts) for n in range(len(counts)): if counts[n] >= 1000: counts[n] = "1000+" but = self.mw.button if finished: return '
%s
' % ( self.mw.col.sched.finishedMsg()) else: return '''
%s:%s
%s:%s
%s:%s
%s
''' % ( _("New"), counts[0], _("Learning"), counts[1], _("To Review"), counts[2], but("study", _("Study Now"), id="study",extra=" autofocus")) _body = """

%(deck)s

%(shareLink)s %(desc)s %(table)s
""" # Bottom area ###################################################################### def _renderBottom(self): links = [ ["O", "opts", _("Options")], ] if self.mw.col.decks.current()['dyn']: links.append(["R", "refresh", _("Rebuild")]) links.append(["E", "empty", _("Empty")]) else: links.append(["C", "studymore", _("Custom Study")]) #links.append(["F", "cram", _("Filter/Cram")]) if self.mw.col.sched.haveBuried(): links.append(["U", "unbury", _("Unbury")]) buf = "" for b in links: if b[0]: b[0] = _("Shortcut key: %s") % shortcut(b[0]) buf += """ """ % tuple(b) self.bottom.draw(buf) self.bottom.web.onBridgeCmd = self._linkHandler # Studying more ###################################################################### def onStudyMore(self): import aqt.customstudy aqt.customstudy.CustomStudy(self.mw) anki-2.1.0+dfsg~b36/aqt/preferences.py000066400000000000000000000146461323611211500175320ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import datetime, time from aqt.qt import * import anki.lang from aqt.utils import openFolder, showWarning, getText, openHelp, showInfo import aqt class Preferences(QDialog): def __init__(self, mw): if not mw.col: showInfo(_("Please open a profile first.")) return QDialog.__init__(self, mw, Qt.Window) self.mw = mw self.prof = self.mw.pm.profile self.form = aqt.forms.preferences.Ui_Preferences() self.form.setupUi(self) self.form.buttonBox.button(QDialogButtonBox.Help).setAutoDefault(False) self.form.buttonBox.button(QDialogButtonBox.Close).setAutoDefault(False) self.form.buttonBox.helpRequested.connect(lambda: openHelp("profileprefs")) self.silentlyClose = True self.setupLang() self.setupCollection() self.setupNetwork() self.setupBackup() self.setupOptions() self.show() def accept(self): # avoid exception if main window is already closed if not self.mw.col: return self.updateCollection() self.updateNetwork() self.updateBackup() self.updateOptions() self.mw.pm.save() self.mw.reset() self.done(0) aqt.dialogs.markClosed("Preferences") def reject(self): self.accept() # Language ###################################################################### def setupLang(self): f = self.form f.lang.addItems([x[0] for x in anki.lang.langs]) f.lang.setCurrentIndex(self.langIdx()) f.lang.currentIndexChanged.connect(self.onLangIdxChanged) def langIdx(self): codes = [x[1] for x in anki.lang.langs] try: return codes.index(anki.lang.getLang()) except: return codes.index("en") def onLangIdxChanged(self, idx): code = anki.lang.langs[idx][1] self.mw.pm.setLang(code) showInfo(_("Please restart Anki to complete language change."), parent=self) # Collection options ###################################################################### def setupCollection(self): import anki.consts as c f = self.form qc = self.mw.col.conf self._setupDayCutoff() f.lrnCutoff.setValue(qc['collapseTime']/60.0) f.timeLimit.setValue(qc['timeLim']/60.0) f.showEstimates.setChecked(qc['estTimes']) f.showProgress.setChecked(qc['dueCounts']) f.nightMode.setChecked(qc.get("nightMode", False)) f.newSpread.addItems(list(c.newCardSchedulingLabels().values())) f.newSpread.setCurrentIndex(qc['newSpread']) f.useCurrent.setCurrentIndex(int(not qc.get("addToCur", True))) f.dayLearnFirst.setChecked(qc.get("dayLearnFirst", False)) if self.mw.col.schedVer() != 2: f.dayLearnFirst.setVisible(False) def updateCollection(self): f = self.form d = self.mw.col qc = d.conf qc['dueCounts'] = f.showProgress.isChecked() qc['estTimes'] = f.showEstimates.isChecked() qc['newSpread'] = f.newSpread.currentIndex() qc['nightMode'] = f.nightMode.isChecked() qc['timeLim'] = f.timeLimit.value()*60 qc['collapseTime'] = f.lrnCutoff.value()*60 qc['addToCur'] = not f.useCurrent.currentIndex() qc['dayLearnFirst'] = f.dayLearnFirst.isChecked() self._updateDayCutoff() d.setMod() # Day cutoff ###################################################################### def _setupDayCutoff(self): if self.mw.col.schedVer() == 2: self._setupDayCutoffV2() else: self._setupDayCutoffV1() def _setupDayCutoffV1(self): self.startDate = datetime.datetime.fromtimestamp(self.mw.col.crt) self.form.dayOffset.setValue(self.startDate.hour) def _setupDayCutoffV2(self): self.form.dayOffset.setValue(self.mw.col.conf.get("rollover", 4)) def _updateDayCutoff(self): if self.mw.col.schedVer() == 2: self._updateDayCutoffV2() else: self._updateDayCutoffV1() def _updateDayCutoffV1(self): hrs = self.form.dayOffset.value() old = self.startDate date = datetime.datetime( old.year, old.month, old.day, hrs) self.mw.col.crt = int(time.mktime(date.timetuple())) def _updateDayCutoffV2(self): self.mw.col.conf['rollover'] = self.form.dayOffset.value() # Network ###################################################################### def setupNetwork(self): self.form.syncOnProgramOpen.setChecked( self.prof['autoSync']) self.form.syncMedia.setChecked( self.prof['syncMedia']) if not self.prof['syncKey']: self._hideAuth() else: self.form.syncUser.setText(self.prof.get('syncUser', "")) self.form.syncDeauth.clicked.connect(self.onSyncDeauth) def _hideAuth(self): self.form.syncDeauth.setVisible(False) self.form.syncUser.setText("") self.form.syncLabel.setText(_("""\ Synchronization
Not currently enabled; click the sync button in the main window to enable.""")) def onSyncDeauth(self): self.prof['syncKey'] = None self.mw.col.media.forceResync() self._hideAuth() def updateNetwork(self): self.prof['autoSync'] = self.form.syncOnProgramOpen.isChecked() self.prof['syncMedia'] = self.form.syncMedia.isChecked() if self.form.fullSync.isChecked(): self.mw.col.modSchema(check=False) self.mw.col.setMod() # Backup ###################################################################### def setupBackup(self): self.form.numBackups.setValue(self.prof['numBackups']) self.form.openBackupFolder.linkActivated.connect(self.onOpenBackup) def onOpenBackup(self): openFolder(self.mw.pm.backupFolder()) def updateBackup(self): self.prof['numBackups'] = self.form.numBackups.value() # Basic & Advanced Options ###################################################################### def setupOptions(self): self.form.pastePNG.setChecked(self.prof.get("pastePNG", False)) def updateOptions(self): self.prof['pastePNG'] = self.form.pastePNG.isChecked() anki-2.1.0+dfsg~b36/aqt/profiles.py000066400000000000000000000331451323611211500170470ustar00rootroot00000000000000# Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # Profile handling ########################################################################## # - Saves in pickles rather than json to easily store Qt window state. # - Saves in sqlite rather than a flat file so the config can't be corrupted import os import random import pickle import shutil import io import locale import re from aqt.qt import * from anki.db import DB from anki.utils import isMac, isWin, intTime, checksum import anki.lang from aqt.utils import showWarning from aqt import appHelpSite import aqt.forms from send2trash import send2trash metaConf = dict( ver=0, updates=True, created=intTime(), id=random.randrange(0, 2**63), lastMsg=-1, suppressUpdate=False, firstRun=True, defaultLang=None, disabledAddons=[], ) profileConf = dict( # profile mainWindowGeom=None, mainWindowState=None, numBackups=50, lastOptimize=intTime(), # editing fullSearch=False, searchHistory=[], lastColour="#00f", stripHTML=True, pastePNG=False, # not exposed in gui deleteMedia=False, preserveKeyboard=True, # syncing syncKey=None, syncMedia=True, autoSync=True, # importing allowHTML=False, importMode=1, ) class ProfileManager: def __init__(self, base=None, profile=None): self.name = None self.db = None # instantiate base folder self._setBaseFolder(base) # load metadata self.firstRun = self._loadMeta() # did the user request a profile to start up with? if profile: if profile not in self.profiles(): QMessageBox.critical(None, "Error", "Requested profile does not exist.") sys.exit(1) try: self.load(profile) except TypeError: raise Exception("Provided profile does not exist.") # Base creation ###################################################################### def ensureBaseExists(self): try: self._ensureExists(self.base) except: # can't translate, as lang not initialized QMessageBox.critical( None, "Error", """\ Anki could not create the folder %s. Please ensure that location is not \ read-only and you have permission to write to it. If you cannot fix this \ issue, please see the documentation for information on running Anki from \ a flash drive.""" % self.base) raise # Folder migration ###################################################################### def _oldFolderLocation(self): if isMac: return os.path.expanduser("~/Documents/Anki") elif isWin: loc = QStandardPaths.writableLocation(QStandardPaths.DocumentsLocation) return os.path.join(loc, "Anki") else: p = os.path.expanduser("~/Anki") if os.path.exists(p): return p else: loc = QStandardPaths.writableLocation(QStandardPaths.DocumentsLocation) if loc[:-1] == QStandardPaths.writableLocation( QStandardPaths.HomeLocation): # occasionally "documentsLocation" will return the home # folder because the Documents folder isn't configured # properly; fall back to an English path return os.path.expanduser("~/Documents/Anki") else: return os.path.join(loc, "Anki") def maybeMigrateFolder(self): oldBase = self._oldFolderLocation() if not os.path.exists(self.base) and os.path.exists(oldBase): shutil.move(oldBase, self.base) # Profile load/save ###################################################################### def profiles(self): return sorted(x for x in self.db.list("select name from profiles") if x != "_global") def _unpickle(self, data): class Unpickler(pickle.Unpickler): def find_class(self, module, name): fn = super().find_class(module, name) if module == "sip" and name == "_unpickle_type": def wrapper(mod, obj, args): if mod.startswith("PyQt4") and obj == "QByteArray": # can't trust str objects from python 2 return QByteArray() return fn(mod, obj, args) return wrapper else: return fn up = Unpickler(io.BytesIO(data), errors="ignore") return up.load() def _pickle(self, obj): return pickle.dumps(obj, protocol=0) def load(self, name): assert name != "_global" data = self.db.scalar("select cast(data as blob) from profiles where name = ?", name) self.name = name try: self.profile = self._unpickle(data) except: print("resetting corrupt profile") self.profile = profileConf.copy() self.save() return True def save(self): sql = "update profiles set data = ? where name = ?" self.db.execute(sql, self._pickle(self.profile), self.name) self.db.execute(sql, self._pickle(self.meta), "_global") self.db.commit() def create(self, name): prof = profileConf.copy() self.db.execute("insert or ignore into profiles values (?, ?)", name, self._pickle(prof)) self.db.commit() def remove(self, name): p = self.profileFolder() if os.path.exists(p): send2trash(p) self.db.execute("delete from profiles where name = ?", name) self.db.commit() def trashCollection(self): p = self.collectionPath() if os.path.exists(p): send2trash(p) def rename(self, name): oldName = self.name oldFolder = self.profileFolder() self.name = name newFolder = self.profileFolder(create=False) if os.path.exists(newFolder): if (oldFolder != newFolder) and ( oldFolder.lower() == newFolder.lower()): # OS is telling us the folder exists because it does not take # case into account; use a temporary folder location midFolder = ''.join([oldFolder, '-temp']) if not os.path.exists(midFolder): os.rename(oldFolder, midFolder) oldFolder = midFolder else: showWarning(_("Please remove the folder %s and try again.") % midFolder) self.name = oldName return else: showWarning(_("Folder already exists.")) self.name = oldName return # update name self.db.execute("update profiles set name = ? where name = ?", name, oldName) # rename folder try: os.rename(oldFolder, newFolder) except WindowsError as e: self.db.rollback() if "Access is denied" in e: showWarning(_("""\ Anki could not rename your profile because it could not rename the profile \ folder on disk. Please ensure you have permission to write to Documents/Anki \ and no other programs are accessing your profile folders, then try again.""")) else: raise except: self.db.rollback() raise else: self.db.commit() # Folder handling ###################################################################### def profileFolder(self, create=True): path = os.path.join(self.base, self.name) if create: self._ensureExists(path) return path def addonFolder(self): return self._ensureExists(os.path.join(self.base, "addons21")) def backupFolder(self): return self._ensureExists( os.path.join(self.profileFolder(), "backups")) def collectionPath(self): return os.path.join(self.profileFolder(), "collection.anki2") # Helpers ###################################################################### def _ensureExists(self, path): if not os.path.exists(path): os.makedirs(path) return path def _setBaseFolder(self, cmdlineBase): if cmdlineBase: self.base = os.path.abspath(cmdlineBase) elif os.environ.get("ANKI_BASE"): self.base = os.path.abspath(os.environ["ANKI_BASE"]) else: self.base = self._defaultBase() self.maybeMigrateFolder() self.ensureBaseExists() def _defaultBase(self): if isWin: loc = QStandardPaths.writableLocation(QStandardPaths.AppDataLocation) # the returned value seem to automatically include the app name, but we use Anki2 rather # than Anki assert loc.endswith("/Anki") loc += "2" return loc elif isMac: return os.path.expanduser("~/Library/Application Support/Anki2") else: dataDir = os.environ.get( "XDG_DATA_HOME", os.path.expanduser("~/.local/share")) if not os.path.exists(dataDir): os.makedirs(dataDir) return os.path.join(dataDir, "Anki2") def _loadMeta(self): opath = os.path.join(self.base, "prefs.db") path = os.path.join(self.base, "prefs21.db") if os.path.exists(opath) and not os.path.exists(path): shutil.copy(opath, path) new = not os.path.exists(path) def recover(): # if we can't load profile, start with a new one if self.db: try: self.db.close() except: pass os.unlink(path) QMessageBox.warning( None, "Preferences Corrupt", """\ Anki's prefs21.db file was corrupt and has been recreated. If you were using multiple \ profiles, please add them back using the same names to recover your cards.""") try: self.db = DB(path) assert self.db.scalar("pragma integrity_check") == "ok" self.db.execute(""" create table if not exists profiles (name text primary key, data text not null);""") data = self.db.scalar( "select cast(data as blob) from profiles where name = '_global'") except: recover() return self._loadMeta() if not new: # load previously created data try: self.meta = self._unpickle(data) return except: print("resetting corrupt _global") # create a default global profile self.meta = metaConf.copy() self.db.execute("insert or replace into profiles values ('_global', ?)", self._pickle(metaConf)) self._setDefaultLang() return True def ensureProfile(self): "Create a new profile if none exists." if self.firstRun: self.create(_("User 1")) p = os.path.join(self.base, "README.txt") open(p, "w").write(_("""\ This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s """) % (appHelpSite + "#startupopts")) # Default language ###################################################################### # On first run, allow the user to choose the default language def _setDefaultLang(self): # the dialog expects _ to be defined, but we're running before # setupLang() has been called. so we create a dummy op for now import builtins builtins.__dict__['_'] = lambda x: x # create dialog class NoCloseDiag(QDialog): def reject(self): pass d = self.langDiag = NoCloseDiag() f = self.langForm = aqt.forms.setlang.Ui_Dialog() f.setupUi(d) d.accepted.connect(self._onLangSelected) d.rejected.connect(lambda: True) # default to the system language try: (lang, enc) = locale.getdefaultlocale() except: # fails on osx lang = "en" if lang and lang not in ("pt_BR", "zh_CN", "zh_TW"): lang = re.sub("(.*)_.*", "\\1", lang) # find index idx = None en = None for c, (name, code) in enumerate(anki.lang.langs): if code == "en": en = c if code == lang: idx = c # if the system language isn't available, revert to english if idx is None: idx = en # update list f.lang.addItems([x[0] for x in anki.lang.langs]) f.lang.setCurrentRow(idx) d.exec_() def _onLangSelected(self): f = self.langForm obj = anki.lang.langs[f.lang.currentRow()] code = obj[1] name = obj[0] en = "Are you sure you wish to display Anki's interface in %s?" r = QMessageBox.question( None, "Anki", en%name, QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if r != QMessageBox.Yes: return self._setDefaultLang() self.setLang(code) def setLang(self, code): self.meta['defaultLang'] = code sql = "update profiles set data = ? where name = ?" self.db.execute(sql, self._pickle(self.meta), "_global") self.db.commit() anki.lang.setLang(code, local=False) anki-2.1.0+dfsg~b36/aqt/progress.py000066400000000000000000000145001323611211500170620ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import time from aqt.qt import * import aqt.forms # fixme: if mw->subwindow opens a progress dialog with mw as the parent, mw # gets raised on finish on compiz. perhaps we should be using the progress # dialog as the parent? # Progress info ########################################################################## class ProgressManager: def __init__(self, mw): self.mw = mw self.app = QApplication.instance() self.inDB = False self.blockUpdates = False self._win = None self._levels = 0 # SQLite progress handler ########################################################################## def setupDB(self, db): "Install a handler in the current DB." self.lastDbProgress = 0 self.inDB = False db.set_progress_handler(self._dbProgress, 10000) def _dbProgress(self): "Called from SQLite." # do nothing if we don't have a progress window if not self._win: return # make sure we're not executing too frequently if (time.time() - self.lastDbProgress) < 0.01: return self.lastDbProgress = time.time() # and we're in the main thread if not self.mw.inMainThread(): return # ensure timers don't fire self.inDB = True # handle GUI events if not self.blockUpdates: self._maybeShow() self.app.processEvents(QEventLoop.ExcludeUserInputEvents) self.inDB = False # Safer timers ########################################################################## # QTimer may fire in processEvents(). We provide a custom timer which # automatically defers until the DB is not busy, and avoids running # while a progress window is visible. def timer(self, ms, func, repeat): def handler(): if self.inDB or self._levels: # retry in 100ms self.timer(100, func, False) else: func() t = QTimer(self.mw) if not repeat: t.setSingleShot(True) t.timeout.connect(handler) t.start(ms) return t # Creating progress dialogs ########################################################################## class ProgressDialog(QDialog): def __init__(self, parent): QDialog.__init__(self, parent) self.form = aqt.forms.progress.Ui_Dialog() self.form.setupUi(self) self._closingDown = False self.wantCancel = False def cancel(self): self._closingDown = True self.hide() def closeEvent(self, evt): if self._closingDown: evt.accept() else: self.wantCancel = True evt.ignore() def keyPressEvent(self, evt): if evt.key() == Qt.Key_Escape: evt.ignore() self.wantCancel = True def start(self, max=0, min=0, label=None, parent=None, immediate=False): self._levels += 1 if self._levels > 1: return # setup window parent = parent or self.app.activeWindow() if not parent and self.mw.isVisible(): parent = self.mw label = label or _("Processing...") self._win = self.ProgressDialog(parent) self._win.form.progressBar.setMinimum(min) self._win.form.progressBar.setMaximum(max) self._win.form.progressBar.setTextVisible(False) self._win.form.label.setText(label) self._win.setWindowTitle("Anki") self._win.setWindowModality(Qt.ApplicationModal) self._win.setMinimumWidth(300) if immediate: self._showWin() else: self._shown = False self._counter = min self._min = min self._max = max self._firstTime = time.time() self._lastUpdate = time.time() self._updating = False return self._win def update(self, label=None, value=None, process=True, maybeShow=True): #print self._min, self._counter, self._max, label, time.time() - self._lastTime if self._updating: return if maybeShow: self._maybeShow() if not self._shown: return elapsed = time.time() - self._lastUpdate if label: self._win.form.label.setText(label) if self._max: self._counter = value or (self._counter+1) self._win.form.progressBar.setValue(self._counter) if process and elapsed >= 0.2: self._updating = True self.app.processEvents(QEventLoop.ExcludeUserInputEvents) self._updating = False self._lastUpdate = time.time() def finish(self): self._levels -= 1 self._levels = max(0, self._levels) if self._levels == 0 and self._win: self._closeWin() def clear(self): "Restore the interface after an error." if self._levels: self._levels = 1 self.finish() def _maybeShow(self): if not self._levels: return if self._shown: self.update(maybeShow=False) return delta = time.time() - self._firstTime if delta > 0.5: self._showWin() def _showWin(self): self._shown = time.time() self._win.show() self._setBusy() def _closeWin(self): if self._shown: while True: # give the window system a second to present # window before we close it again - fixes # progress window getting stuck, especially # on ubuntu 16.10+ elap = time.time() - self._shown if elap >= 0.5: break self.app.processEvents(QEventLoop.ExcludeUserInputEvents) self._win.cancel() self._win = None self._shown = False self._unsetBusy() def _setBusy(self): self.mw.app.setOverrideCursor(QCursor(Qt.WaitCursor)) def _unsetBusy(self): self.app.restoreOverrideCursor() def busy(self): "True if processing." return self._levels anki-2.1.0+dfsg~b36/aqt/qt.py000066400000000000000000000023511323611211500156430ustar00rootroot00000000000000# Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # fixme: make sure not to optimize imports on this file import sip import os # fix buggy ubuntu12.04 display of language selector os.environ["LIBOVERLAY_SCROLLBAR"] = "0" from anki.utils import isWin, isMac from PyQt5.Qt import * # trigger explicit message in case of missing libraries # instead of silently failing to import from PyQt5.QtWebEngineWidgets import QWebEnginePage def debug(): from PyQt5.QtCore import pyqtRemoveInputHook from pdb import set_trace pyqtRemoveInputHook() set_trace() import sys, traceback if os.environ.get("DEBUG"): def info(type, value, tb): from PyQt5.QtCore import pyqtRemoveInputHook for line in traceback.format_exception(type, value, tb): sys.stdout.write(line) pyqtRemoveInputHook() from pdb import pm pm() sys.excepthook = info qtmajor = (QT_VERSION & 0xff0000) >> 16 qtminor = (QT_VERSION & 0x00ff00) >> 8 qtpoint = QT_VERSION & 0xff if qtmajor < 5 or (qtmajor == 5 and qtminor < 9): raise Exception("Anki requires Qt 5.9.0+") if qtmajor == 5 and qtminor == 10: raise Exception("Qt 5.10 is known to be buggy.")anki-2.1.0+dfsg~b36/aqt/reviewer.py000066400000000000000000000557401323611211500170610ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import difflib import re import html import unicodedata as ucd import html.parser from anki.lang import _, ngettext from aqt.qt import * from anki.utils import stripHTML, json, bodyClass from anki.hooks import addHook, runHook, runFilter from anki.sound import playFromText, clearAudioQueue, play from aqt.utils import mungeQA, tooltip, askUserDialog, \ downArrow from aqt.sound import getAudio import aqt class Reviewer: "Manage reviews. Maintains a separate state." def __init__(self, mw): self.mw = mw self.web = mw.web self.card = None self.cardQueue = [] self.hadCardQueue = False self._answeredIds = [] self._recordedAudio = None self.typeCorrect = None # web init happens before this is set self.state = None self.bottom = aqt.toolbar.BottomBar(mw, mw.bottomWeb) addHook("leech", self.onLeech) def show(self): self.mw.col.reset() self.web.resetHandlers() self.mw.setStateShortcuts(self._shortcutKeys()) self.web.onBridgeCmd = self._linkHandler self.bottom.web.onBridgeCmd = self._linkHandler self._reps = None self.nextCard() def lastCard(self): if self._answeredIds: if not self.card or self._answeredIds[-1] != self.card.id: try: return self.mw.col.getCard(self._answeredIds[-1]) except TypeError: # id was deleted return def cleanup(self): runHook("reviewCleanup") # Fetching a card ########################################################################## def nextCard(self): elapsed = self.mw.col.timeboxReached() if elapsed: part1 = ngettext("%d card studied in", "%d cards studied in", elapsed[1]) % elapsed[1] mins = int(round(elapsed[0]/60)) part2 = ngettext("%s minute.", "%s minutes.", mins) % mins fin = _("Finish") diag = askUserDialog("%s %s" % (part1, part2), [_("Continue"), fin]) diag.setIcon(QMessageBox.Information) if diag.run() == fin: return self.mw.moveToState("deckBrowser") self.mw.col.startTimebox() if self.cardQueue: # undone/edited cards to show c = self.cardQueue.pop() c.startTimer() self.hadCardQueue = True else: if self.hadCardQueue: # the undone/edited cards may be sitting in the regular queue; # need to reset self.mw.col.reset() self.hadCardQueue = False c = self.mw.col.sched.getCard() self.card = c clearAudioQueue() if not c: self.mw.moveToState("overview") return if self._reps is None or self._reps % 100 == 0: # we recycle the webview periodically so webkit can free memory self._initWeb() self._showQuestion() # Audio ########################################################################## def replayAudio(self, previewer=None): if previewer: state = previewer._previewState c = previewer.card else: state = self.state c = self.card clearAudioQueue() if state == "question": playFromText(c.q()) elif state == "answer": txt = "" if self._replayq(c, previewer): txt = c.q() txt += c.a() playFromText(txt) # Initializing the webview ########################################################################## def revHtml(self): extra = self.mw.col.conf.get("reviewExtra", "") return """
{} """.format(extra) def _initWeb(self): self._reps = 0 # main window self.web.stdHtml(self.revHtml(), css=["reviewer.css"], js=["jquery.js", "browsersel.js", "mathjax/conf.js", "mathjax/MathJax.js", "reviewer.js"]) # show answer / ease buttons self.bottom.web.show() self.bottom.web.stdHtml( self._bottomHTML(), css=["toolbar-bottom.css", "reviewer-bottom.css"], js=["jquery.js", "reviewer-bottom.js"] ) # Showing the question ########################################################################## def _mungeQA(self, buf): return self.typeAnsFilter(mungeQA(self.mw.col, buf)) def _showQuestion(self): self._reps += 1 self.state = "question" self.typedAnswer = None c = self.card # grab the question and play audio if c.isEmpty(): q = _("""\ The front of this card is empty. Please run Tools>Empty Cards.""") else: q = c.q() if self.autoplay(c): playFromText(q) # render & update bottom q = self._mungeQA(q) q = runFilter("prepareQA", q, c, "reviewQuestion") bodyclass = bodyClass(self.mw.col, c) self.web.eval("_showQuestion(%s,'%s');" % (json.dumps(q), bodyclass)) self._drawFlag() self._drawMark() self._showAnswerButton() # if we have a type answer field, focus main web if self.typeCorrect: self.mw.web.setFocus() # user hook runHook('showQuestion') def autoplay(self, card): return self.mw.col.decks.confForDid( card.odid or card.did)['autoplay'] def _replayq(self, card, previewer=None): s = previewer if previewer else self return s.mw.col.decks.confForDid( s.card.odid or s.card.did).get('replayq', True) def _drawFlag(self): self.web.eval("_drawFlag(%s);" % self.card.userFlag()) def _drawMark(self): self.web.eval("_drawMark(%s);" % json.dumps( self.card.note().hasTag("marked"))) # Showing the answer ########################################################################## def _showAnswer(self): if self.mw.state != "review": # showing resetRequired screen; ignore space return self.state = "answer" c = self.card a = c.a() # play audio? clearAudioQueue() if self.autoplay(c): playFromText(a) a = self._mungeQA(a) a = runFilter("prepareQA", a, c, "reviewAnswer") # render and update bottom self.web.eval("_showAnswer(%s);" % json.dumps(a)) self._showEaseButtons() # user hook runHook('showAnswer') # Answering a card ############################################################ def _answerCard(self, ease): "Reschedule card and show next." if self.mw.state != "review": # showing resetRequired screen; ignore key return if self.state != "answer": return if self.mw.col.sched.answerButtons(self.card) < ease: return self.mw.col.sched.answerCard(self.card, ease) self._answeredIds.append(self.card.id) self.mw.autosave() self.nextCard() # Handlers ############################################################ def _shortcutKeys(self): return [ ("e", self.mw.onEditCurrent), (" ", self.onEnterKey), (Qt.Key_Return, self.onEnterKey), (Qt.Key_Enter, self.onEnterKey), ("r", self.replayAudio), (Qt.Key_F5, self.replayAudio), ("Ctrl+1", lambda: self.setFlag(1)), ("Ctrl+2", lambda: self.setFlag(2)), ("Ctrl+3", lambda: self.setFlag(3)), ("Ctrl+4", lambda: self.setFlag(4)), ("Ctrl+0", lambda: self.setFlag(0)), ("*", self.onMark), ("=", self.onBuryNote), ("-", self.onBuryCard), ("!", self.onSuspend), ("@", self.onSuspendCard), ("Ctrl+Delete", self.onDelete), ("v", self.onReplayRecorded), ("Shift+v", self.onRecordVoice), ("o", self.onOptions), ("1", lambda: self._answerCard(1)), ("2", lambda: self._answerCard(2)), ("3", lambda: self._answerCard(3)), ("4", lambda: self._answerCard(4)), ] def onEnterKey(self): if self.state == "question": self._getTypedAnswer() elif self.state == "answer": self._answerCard(self._defaultEase()) def _linkHandler(self, url): if url == "ans": self._getTypedAnswer() elif url.startswith("ease"): self._answerCard(int(url[4:])) elif url == "edit": self.mw.onEditCurrent() elif url == "more": self.showContextMenu() else: print("unrecognized anki link:", url) # Type in the answer ########################################################################## typeAnsPat = "\[\[type:(.+?)\]\]" def typeAnsFilter(self, buf): if self.state == "question": return self.typeAnsQuestionFilter(buf) else: return self.typeAnsAnswerFilter(buf) def typeAnsQuestionFilter(self, buf): self.typeCorrect = None clozeIdx = None m = re.search(self.typeAnsPat, buf) if not m: return buf fld = m.group(1) # if it's a cloze, extract data if fld.startswith("cloze:"): # get field and cloze position clozeIdx = self.card.ord + 1 fld = fld.split(":")[1] # loop through fields for a match for f in self.card.model()['flds']: if f['name'] == fld: self.typeCorrect = self.card.note()[f['name']] if clozeIdx: # narrow to cloze self.typeCorrect = self._contentForCloze( self.typeCorrect, clozeIdx) self.typeFont = f['font'] self.typeSize = f['size'] break if not self.typeCorrect: if self.typeCorrect is None: if clozeIdx: warn = _("""\ Please run Tools>Empty Cards""") else: warn = _("Type answer: unknown field %s") % fld return re.sub(self.typeAnsPat, warn, buf) else: # empty field, remove type answer pattern return re.sub(self.typeAnsPat, "", buf) return re.sub(self.typeAnsPat, """
""" % (self.typeFont, self.typeSize), buf) def typeAnsAnswerFilter(self, buf): if not self.typeCorrect: return re.sub(self.typeAnsPat, "", buf) origSize = len(buf) buf = buf.replace("
", "") hadHR = len(buf) != origSize # munge correct value parser = html.parser.HTMLParser() cor = stripHTML(self.mw.col.media.strip(self.typeCorrect)) # ensure we don't chomp multiple whitespace cor = cor.replace(" ", " ") cor = parser.unescape(cor) cor = cor.replace("\xa0", " ") given = self.typedAnswer # compare with typed answer res = self.correct(given, cor, showBad=False) # and update the type answer area def repl(match): # can't pass a string in directly, and can't use re.escape as it # escapes too much s = """ %s""" % ( self.typeFont, self.typeSize, res) if hadHR: # a hack to ensure the q/a separator falls before the answer # comparison when user is using {{FrontSide}} s = "
" + s return s return re.sub(self.typeAnsPat, repl, buf) def _contentForCloze(self, txt, idx): matches = re.findall("\{\{c%s::(.+?)\}\}"%idx, txt) if not matches: return None def noHint(txt): if "::" in txt: return txt.split("::")[0] return txt matches = [noHint(txt) for txt in matches] uniqMatches = set(matches) if len(uniqMatches) == 1: txt = matches[0] else: txt = ", ".join(matches) return txt def tokenizeComparison(self, given, correct): # compare in NFC form so accents appear correct given = ucd.normalize("NFC", given) correct = ucd.normalize("NFC", correct) s = difflib.SequenceMatcher(None, given, correct, autojunk=False) givenElems = [] correctElems = [] givenPoint = 0 correctPoint = 0 offby = 0 def logBad(old, new, str, array): if old != new: array.append((False, str[old:new])) def logGood(start, cnt, str, array): if cnt: array.append((True, str[start:start+cnt])) for x, y, cnt in s.get_matching_blocks(): # if anything was missed in correct, pad given if cnt and y-offby > x: givenElems.append((False, "-"*(y-x-offby))) offby = y-x # log any proceeding bad elems logBad(givenPoint, x, given, givenElems) logBad(correctPoint, y, correct, correctElems) givenPoint = x+cnt correctPoint = y+cnt # log the match logGood(x, cnt, given, givenElems) logGood(y, cnt, correct, correctElems) return givenElems, correctElems def correct(self, given, correct, showBad=True): "Diff-corrects the typed-in answer." givenElems, correctElems = self.tokenizeComparison(given, correct) def good(s): return ""+html.escape(s)+"" def bad(s): return ""+html.escape(s)+"" def missed(s): return ""+html.escape(s)+"" if given == correct: res = good(given) else: res = "" for ok, txt in givenElems: if ok: res += good(txt) else: res += bad(txt) res += "

" for ok, txt in correctElems: if ok: res += good(txt) else: res += missed(txt) res = "
" + res + "
" return res def _getTypedAnswer(self): self.web.evalWithCallback("typeans ? typeans.value : null", self._onTypedAnswer) def _onTypedAnswer(self, val): self.typedAnswer = val or "" self._showAnswer() # Bottom bar ########################################################################## def _bottomHTML(self): return """


""" % dict(rem=self._remaining(), edit=_("Edit"), editkey=_("Shortcut key: %s") % "E", more=_("More"), downArrow=downArrow(), time=self.card.timeTaken() // 1000) def _showAnswerButton(self): if not self.typeCorrect: self.bottom.web.setFocus() middle = ''' %s
''' % ( self._remaining(), _("Shortcut key: %s") % _("Space"), _("Show Answer")) # wrap it in a table so it has the same top margin as the ease buttons middle = "
%s
" % middle if self.card.shouldShowTimer(): maxTime = self.card.timeLimit() / 1000 else: maxTime = 0 self.bottom.web.eval("showQuestion(%s,%d);" % ( json.dumps(middle), maxTime)) self.bottom.web.adjustHeightToFit() def _showEaseButtons(self): self.bottom.web.setFocus() middle = self._answerButtons() self.bottom.web.eval("showAnswer(%s);" % json.dumps(middle)) def _remaining(self): if not self.mw.col.conf['dueCounts']: return "" if self.hadCardQueue: # if it's come from the undo queue, don't count it separately counts = list(self.mw.col.sched.counts()) else: counts = list(self.mw.col.sched.counts(self.card)) idx = self.mw.col.sched.countIdx(self.card) counts[idx] = "%s" % (counts[idx]) space = " + " ctxt = '%s' % counts[0] ctxt += space + '%s' % counts[1] ctxt += space + '%s' % counts[2] return ctxt def _defaultEase(self): if self.mw.col.sched.answerButtons(self.card) == 4: return 3 else: return 2 def _answerButtonList(self): l = ((1, _("Again")),) cnt = self.mw.col.sched.answerButtons(self.card) if cnt == 2: return l + ((2, _("Good")),) elif cnt == 3: return l + ((2, _("Good")), (3, _("Easy"))) else: return l + ((2, _("Hard")), (3, _("Good")), (4, _("Easy"))) def _answerButtons(self): default = self._defaultEase() def but(i, label): if i == default: extra = "id=defease" else: extra = "" due = self._buttonTime(i) return ''' %s''' % (due, extra, _("Shortcut key: %s") % i, i, label) buf = "
" for ease, label in self._answerButtonList(): buf += but(ease, label) buf += "
" script = """ """ return buf + script def _buttonTime(self, i): if not self.mw.col.conf['estTimes']: return "
" txt = self.mw.col.sched.nextIvlStr(self.card, i, True) or " " return '%s
' % txt # Leeches ########################################################################## def onLeech(self, card): # for now s = _("Card was a leech.") if card.queue < 0: s += " " + _("It has been suspended.") tooltip(s) # Context menu ########################################################################## # note the shortcuts listed here also need to be defined above def _contextMenu(self): opts = [ [_("Flag Card"), [ [_("Red Flag"), "Ctrl+1", lambda: self.setFlag(1)], [_("Purple Flag"), "Ctrl+2", lambda: self.setFlag(2)], [_("Green Flag"), "Ctrl+3", lambda: self.setFlag(3)], [_("Blue Flag"), "Ctrl+4", lambda: self.setFlag(4)], None, [_("Clear Flag"), "Ctrl+0", lambda: self.setFlag(0)], ]], [_("Mark Note"), "*", self.onMark], [_("Bury Card"), "-", self.onBuryCard], [_("Bury Note"), "=", self.onBuryNote], [_("Suspend Card"), "@", self.onSuspendCard], [_("Suspend Note"), "!", self.onSuspend], [_("Delete Note"), "Ctrl+Delete", self.onDelete], [_("Options"), "O", self.onOptions], None, [_("Replay Audio"), "R", self.replayAudio], [_("Record Own Voice"), "Shift+V", self.onRecordVoice], [_("Replay Own Voice"), "V", self.onReplayRecorded], ] return opts def showContextMenu(self): opts = self._contextMenu() m = QMenu(self.mw) self._addMenuItems(m, opts) runHook("Reviewer.contextMenuEvent", self, m) m.exec_(QCursor.pos()) def _addMenuItems(self, m, rows): for row in rows: if not row: m.addSeparator() continue if len(row) == 2: subm = m.addMenu(row[0]) self._addMenuItems(subm, row[1]) continue label, scut, func = row a = m.addAction(label) if scut: a.setShortcut(QKeySequence(scut)) a.triggered.connect(func) def onOptions(self): self.mw.onDeckConf(self.mw.col.decks.get( self.card.odid or self.card.did)) def setFlag(self, flag): self.card.setUserFlag(flag) self.card.flush() self._drawFlag() def onMark(self): f = self.card.note() if f.hasTag("marked"): f.delTag("marked") else: f.addTag("marked") f.flush() self._drawMark() def onSuspend(self): self.mw.checkpoint(_("Suspend")) self.mw.col.sched.suspendCards( [c.id for c in self.card.note().cards()]) tooltip(_("Note suspended.")) self.mw.reset() def onSuspendCard(self): self.mw.checkpoint(_("Suspend")) self.mw.col.sched.suspendCards([self.card.id]) tooltip(_("Card suspended.")) self.mw.reset() def onDelete(self): # need to check state because the shortcut is global to the main # window if self.mw.state != "review" or not self.card: return self.mw.checkpoint(_("Delete")) cnt = len(self.card.note().cards()) self.mw.col.remNotes([self.card.note().id]) self.mw.reset() tooltip(ngettext( "Note and its %d card deleted.", "Note and its %d cards deleted.", cnt) % cnt) def onBuryCard(self): self.mw.checkpoint(_("Bury")) self.mw.col.sched.buryCards([self.card.id]) self.mw.reset() tooltip(_("Card buried.")) def onBuryNote(self): self.mw.checkpoint(_("Bury")) self.mw.col.sched.buryNote(self.card.nid) self.mw.reset() tooltip(_("Note buried.")) def onRecordVoice(self): self._recordedAudio = getAudio(self.mw, encode=False) self.onReplayRecorded() def onReplayRecorded(self): if not self._recordedAudio: return tooltip(_("You haven't recorded your voice yet.")) clearAudioQueue() play(self._recordedAudio) anki-2.1.0+dfsg~b36/aqt/sound.py000066400000000000000000000023571323611211500163550ustar00rootroot00000000000000# Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * import time from anki.sound import Recorder from aqt.utils import saveGeom, restoreGeom def getAudio(parent, encode=True): "Record and return filename" # record first r = Recorder() mb = QMessageBox(parent) restoreGeom(mb, "audioRecorder") mb.setWindowTitle("Anki") mb.setIconPixmap(QPixmap(":/icons/media-record.png")) but = QPushButton(_("Save")) mb.addButton(but, QMessageBox.AcceptRole) but = QPushButton(_("Cancel")) mb.addButton(but, QMessageBox.RejectRole) mb.setEscapeButton(but) t = time.time() r.start() time.sleep(r.startupDelay) QApplication.instance().processEvents() while not mb.clickedButton(): txt =_("Recording...
Time: %0.1f") mb.setText(txt % (time.time() - t)) mb.show() QApplication.instance().processEvents() if mb.clickedButton() == mb.escapeButton(): r.stop() return saveGeom(mb, "audioRecorder") # ensure at least a second captured while time.time() - t < 1: time.sleep(0.1) r.stop() # process r.postprocess(encode) return r.file() anki-2.1.0+dfsg~b36/aqt/stats.py000066400000000000000000000055271323611211500163650ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * import os, time from aqt.utils import saveGeom, restoreGeom, maybeHideClose, addCloseShortcut, \ tooltip, getSaveFile import aqt # Deck Stats ###################################################################### class DeckStats(QDialog): def __init__(self, mw): QDialog.__init__(self, mw, Qt.Window) mw.setupDialogGC(self) self.mw = mw self.name = "deckStats" self.period = 0 self.form = aqt.forms.stats.Ui_Dialog() self.oldPos = None self.wholeCollection = False self.setMinimumWidth(700) f = self.form f.setupUi(self) restoreGeom(self, self.name) b = f.buttonBox.addButton(_("Save PDF"), QDialogButtonBox.ActionRole) b.clicked.connect(self.saveImage) b.setAutoDefault(False) f.groups.clicked.connect(lambda: self.changeScope("deck")) f.groups.setShortcut("g") f.all.clicked.connect(lambda: self.changeScope("collection")) f.month.clicked.connect(lambda: self.changePeriod(0)) f.year.clicked.connect(lambda: self.changePeriod(1)) f.life.clicked.connect(lambda: self.changePeriod(2)) maybeHideClose(self.form.buttonBox) addCloseShortcut(self) self.refresh() self.show() self.activateWindow() def reject(self): saveGeom(self, self.name) aqt.dialogs.markClosed("DeckStats") QDialog.reject(self) def closeWithCallback(self, callback): self.reject() callback() def _imagePath(self): name = time.strftime("-%Y-%m-%d@%H-%M-%S.pdf", time.localtime(time.time())) name = "anki-"+_("stats")+name file = getSaveFile(self, title=_("Save PDF"), dir_description="stats", key="stats", ext=".pdf", fname=name) return file def saveImage(self): path = self._imagePath() if not path: return self.form.web.page().printToPdf(path) tooltip(_("Saved.")) def changePeriod(self, n): self.period = n self.refresh() def changeScope(self, type): self.wholeCollection = type == "collection" self.refresh() def refresh(self): self.mw.progress.start(immediate=True) stats = self.mw.col.stats() stats.wholeCollection = self.wholeCollection self.report = stats.report(type=self.period) self.form.web.stdHtml(""+self.report+"", js=["jquery.js", "plot.js"]) self.mw.progress.finish() anki-2.1.0+dfsg~b36/aqt/studydeck.py000066400000000000000000000112361323611211500172200ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * import aqt from aqt.utils import showInfo, openHelp, getOnlyText, shortcut, restoreGeom, saveGeom from anki.hooks import addHook, remHook class StudyDeck(QDialog): def __init__(self, mw, names=None, accept=None, title=None, help="studydeck", current=None, cancel=True, parent=None, dyn=False, buttons=[], geomKey="default"): QDialog.__init__(self, parent or mw) self.mw = mw self.form = aqt.forms.studydeck.Ui_Dialog() self.form.setupUi(self) self.form.filter.installEventFilter(self) self.cancel = cancel addHook('reset', self.onReset) self.geomKey = "studyDeck-"+geomKey restoreGeom(self, self.geomKey) if not cancel: self.form.buttonBox.removeButton( self.form.buttonBox.button(QDialogButtonBox.Cancel)) if buttons: for b in buttons: self.form.buttonBox.addButton(b, QDialogButtonBox.ActionRole) else: b = QPushButton(_("Add")) b.setShortcut(QKeySequence("Ctrl+N")) b.setToolTip(shortcut(_("Add New Deck (Ctrl+N)"))) self.form.buttonBox.addButton(b, QDialogButtonBox.ActionRole) b.clicked.connect(self.onAddDeck) if title: self.setWindowTitle(title) if not names: names = sorted(self.mw.col.decks.allNames(dyn=dyn)) self.nameFunc = None self.origNames = names else: self.nameFunc = names self.origNames = names() self.name = None self.ok = self.form.buttonBox.addButton( accept or _("Study"), QDialogButtonBox.AcceptRole) self.setWindowModality(Qt.WindowModal) self.form.buttonBox.helpRequested.connect(lambda: openHelp(help)) self.form.filter.textEdited.connect(self.redraw) self.form.list.itemDoubleClicked.connect(self.accept) self.show() # redraw after show so position at center correct self.redraw("", current) self.exec_() def eventFilter(self, obj, evt): if evt.type() == QEvent.KeyPress: if evt.key() == Qt.Key_Up: c = self.form.list.count() row = self.form.list.currentRow() - 1 if row < 0: row = c - 1 self.form.list.setCurrentRow(row) return True elif evt.key() == Qt.Key_Down: c = self.form.list.count() row = self.form.list.currentRow() + 1 if row == c: row = 0 self.form.list.setCurrentRow(row) return True return False def redraw(self, filt, focus=None): self.filt = filt self.focus = focus self.names = [n for n in self.origNames if self._matches(n, filt)] l = self.form.list l.clear() l.addItems(self.names) if focus in self.names: idx = self.names.index(focus) else: idx = 0 l.setCurrentRow(idx) l.scrollToItem(l.item(idx), QAbstractItemView.PositionAtCenter) def _matches(self, name, filt): name = name.lower() filt = filt.lower() if not filt: return True for word in filt.split(" "): if word not in name: return False return True def onReset(self): # model updated? if self.nameFunc: self.origNames = self.nameFunc() self.redraw(self.filt, self.focus) def accept(self): saveGeom(self, self.geomKey) remHook('reset', self.onReset) row = self.form.list.currentRow() if row < 0: showInfo(_("Please select something.")) return self.name = self.names[self.form.list.currentRow()] QDialog.accept(self) def reject(self): saveGeom(self, self.geomKey) remHook('reset', self.onReset) if not self.cancel: return self.accept() QDialog.reject(self) def onAddDeck(self): row = self.form.list.currentRow() if row < 0: default = self.form.filter.text() else: default = self.names[self.form.list.currentRow()] n = getOnlyText(_("New deck name:"), default=default) if n: self.mw.col.decks.id(n) self.name = n # make sure we clean up reset hook when manually exiting remHook('reset', self.onReset) QDialog.accept(self) anki-2.1.0+dfsg~b36/aqt/sync.py000066400000000000000000000407211323611211500161760ustar00rootroot00000000000000# Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import time import traceback import gc from aqt.qt import * import aqt from anki import Collection from anki.sync import Syncer, RemoteServer, FullSyncer, MediaSyncer, \ RemoteMediaServer from anki.hooks import addHook, remHook from aqt.utils import tooltip, askUserDialog, showWarning, showText, showInfo # Sync manager ###################################################################### class SyncManager(QObject): def __init__(self, mw, pm): QObject.__init__(self, mw) self.mw = mw self.pm = pm def sync(self): if not self.pm.profile['syncKey']: auth = self._getUserPass() if not auth: return self.pm.profile['syncUser'] = auth[0] self._sync(auth) else: self._sync() def _sync(self, auth=None): # to avoid gui widgets being garbage collected in the worker thread, # run gc in advance self._didFullUp = False self._didError = False gc.collect() # create the thread, setup signals and start running t = self.thread = SyncThread( self.pm.collectionPath(), self.pm.profile['syncKey'], auth=auth, media=self.pm.profile['syncMedia']) t.event.connect(self.onEvent) self.label = _("Connecting...") prog = self.mw.progress.start(immediate=True, label=self.label) self.sentBytes = self.recvBytes = 0 self._updateLabel() self.thread.start() while not self.thread.isFinished(): if prog.wantCancel: self.thread.flagAbort() # make sure we don't display 'upload success' msg self._didFullUp = False # abort may take a while self.mw.progress.update(_("Stopping...")) self.mw.app.processEvents() self.thread.wait(100) self.mw.progress.finish() if self.thread.syncMsg: showText(self.thread.syncMsg) if self.thread.uname: self.pm.profile['syncUser'] = self.thread.uname def delayedInfo(): if self._didFullUp and not self._didError: showInfo(_("""\ Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose \ to download the collection you have just uploaded from this computer. \ After doing so, future reviews and added cards will be merged \ automatically.""")) self.mw.progress.timer(1000, delayedInfo, False) def _updateLabel(self): self.mw.progress.update(label="%s\n%s" % ( self.label, _("%(a)0.1fkB up, %(b)0.1fkB down") % dict( a=self.sentBytes / 1024, b=self.recvBytes / 1024))) def onEvent(self, evt, *args): pu = self.mw.progress.update if evt == "badAuth": tooltip( _("AnkiWeb ID or password was incorrect; please try again."), parent=self.mw) # blank the key so we prompt user again self.pm.profile['syncKey'] = None self.pm.save() elif evt == "corrupt": pass elif evt == "newKey": self.pm.profile['syncKey'] = args[0] self.pm.save() elif evt == "offline": tooltip(_("Syncing failed; internet offline.")) elif evt == "upbad": self._didFullUp = False self._checkFailed() elif evt == "sync": m = None; t = args[0] if t == "login": m = _("Syncing...") elif t == "upload": self._didFullUp = True m = _("Uploading to AnkiWeb...") elif t == "download": m = _("Downloading from AnkiWeb...") elif t == "sanity": m = _("Checking...") elif t == "findMedia": m = _("Checking media...") elif t == "upgradeRequired": showText(_("""\ Please visit AnkiWeb, upgrade your deck, then try again.""")) if m: self.label = m self._updateLabel() elif evt == "syncMsg": self.label = args[0] self._updateLabel() elif evt == "error": self._didError = True showText(_("Syncing failed:\n%s")% self._rewriteError(args[0])) elif evt == "clockOff": self._clockOff() elif evt == "checkFailed": self._checkFailed() elif evt == "mediaSanity": showWarning(_("""\ A problem occurred while syncing media. Please use Tools>Check Media, then \ sync again to correct the issue.""")) elif evt == "noChanges": pass elif evt == "fullSync": self._confirmFullSync() elif evt == "send": # posted events not guaranteed to arrive in order self.sentBytes = max(self.sentBytes, int(args[0])) self._updateLabel() elif evt == "recv": self.recvBytes = max(self.recvBytes, int(args[0])) self._updateLabel() def _rewriteError(self, err): if "Errno 61" in err: return _("""\ Couldn't connect to AnkiWeb. Please check your network connection \ and try again.""") elif "timed out" in err or "10060" in err: return _("""\ The connection to AnkiWeb timed out. Please check your network \ connection and try again.""") elif "code: 500" in err: return _("""\ AnkiWeb encountered an error. Please try again in a few minutes, and if \ the problem persists, please file a bug report.""") elif "code: 501" in err: return _("""\ Please upgrade to the latest version of Anki.""") # 502 is technically due to the server restarting, but we reuse the # error message elif "code: 502" in err: return _("AnkiWeb is under maintenance. Please try again in a few minutes.") elif "code: 503" in err: return _("""\ AnkiWeb is too busy at the moment. Please try again in a few minutes.""") elif "code: 504" in err: return _("504 gateway timeout error received. Please try temporarily disabling your antivirus.") elif "code: 409" in err: return _("Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.") elif "10061" in err or "10013" in err or "10053" in err: return _( "Antivirus or firewall software is preventing Anki from connecting to the internet.") elif "10054" in err or "Broken pipe" in err: return _("Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.") elif "Unable to find the server" in err: return _( "Server not found. Either your connection is down, or antivirus/firewall " "software is blocking Anki from connecting to the internet.") elif "code: 407" in err: return _("Proxy authentication required.") elif "code: 413" in err: return _("Your collection or a media file is too large to sync.") elif "EOF occurred in violation of protocol" in err: return _("Error establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.") + " (eof)" elif "certificate verify failed" in err: return _("Error establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.") + " (invalid cert)" return err def _getUserPass(self): d = QDialog(self.mw) d.setWindowTitle("Anki") d.setWindowModality(Qt.WindowModal) vbox = QVBoxLayout() l = QLabel(_("""\

Account Required

A free account is required to keep your collection synchronized. Please \ sign up for an account, then \ enter your details below.""") % "https://ankiweb.net/account/login") l.setOpenExternalLinks(True) l.setWordWrap(True) vbox.addWidget(l) vbox.addSpacing(20) g = QGridLayout() l1 = QLabel(_("AnkiWeb ID:")) g.addWidget(l1, 0, 0) user = QLineEdit() g.addWidget(user, 0, 1) l2 = QLabel(_("Password:")) g.addWidget(l2, 1, 0) passwd = QLineEdit() passwd.setEchoMode(QLineEdit.Password) g.addWidget(passwd, 1, 1) vbox.addLayout(g) bb = QDialogButtonBox(QDialogButtonBox.Ok|QDialogButtonBox.Cancel) bb.button(QDialogButtonBox.Ok).setAutoDefault(True) bb.accepted.connect(d.accept) bb.rejected.connect(d.reject) vbox.addWidget(bb) d.setLayout(vbox) d.show() accepted = d.exec_() u = user.text() p = passwd.text() if not accepted or not u or not p: return return (u, p) def _confirmFullSync(self): if self.thread.localIsEmpty: diag = askUserDialog( _("Local collection has no cards. Download from AnkiWeb?"), [_("Download from AnkiWeb"), _("Cancel")]) diag.setDefault(1) else: diag = askUserDialog(_("""\ Your decks here and on AnkiWeb differ in such a way that they can't \ be merged together, so it's necessary to overwrite the decks on one \ side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, \ and any changes you have made on your computer since the last sync will \ be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and \ any changes you have made on AnkiWeb or your other devices since the \ last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged \ automatically."""), [_("Upload to AnkiWeb"), _("Download from AnkiWeb"), _("Cancel")]) diag.setDefault(2) ret = diag.run() if ret == _("Upload to AnkiWeb"): self.thread.fullSyncChoice = "upload" elif ret == _("Download from AnkiWeb"): self.thread.fullSyncChoice = "download" else: self.thread.fullSyncChoice = "cancel" def _clockOff(self): showWarning(_("""\ Syncing requires the clock on your computer to be set correctly. Please \ fix the clock and try again.""")) def _checkFailed(self): showWarning(_("""\ Your collection is in an inconsistent state. Please run Tools>\ Check Database, then sync again.""")) def badUserPass(self): aqt.preferences.Preferences(self, self.pm.profile).dialog.tabWidget.\ setCurrentIndex(1) # Sync thread ###################################################################### class SyncThread(QThread): event = pyqtSignal(str, str) def __init__(self, path, hkey, auth=None, media=True): QThread.__init__(self) self.path = path self.hkey = hkey self.auth = auth self.media = media self._abort = 0 # 1=flagged, 2=aborting def flagAbort(self): self._abort = 1 def run(self): # init this first so an early crash doesn't cause an error # in the main thread self.syncMsg = "" self.uname = "" try: self.col = Collection(self.path, log=True) except: self.fireEvent("corrupt") return self.server = RemoteServer(self.hkey) self.client = Syncer(self.col, self.server) self.sentTotal = 0 self.recvTotal = 0 def syncEvent(type): self.fireEvent("sync", type) def syncMsg(msg): self.fireEvent("syncMsg", msg) def sendEvent(bytes): if not self._abort: self.sentTotal += bytes self.fireEvent("send", str(self.sentTotal)) elif self._abort == 1: self._abort = 2 raise Exception("sync cancelled") def recvEvent(bytes): if not self._abort: self.recvTotal += bytes self.fireEvent("recv", str(self.recvTotal)) elif self._abort == 1: self._abort = 2 raise Exception("sync cancelled") addHook("sync", syncEvent) addHook("syncMsg", syncMsg) addHook("httpSend", sendEvent) addHook("httpRecv", recvEvent) # run sync and catch any errors try: self._sync() except: err = traceback.format_exc() self.fireEvent("error", err) finally: # don't bump mod time unless we explicitly save self.col.close(save=False) remHook("sync", syncEvent) remHook("syncMsg", syncMsg) remHook("httpSend", sendEvent) remHook("httpRecv", recvEvent) def _abortingSync(self): try: return self.client.sync() except Exception as e: if "sync cancelled" in str(e): self.server.abort() raise else: raise def _sync(self): if self.auth: # need to authenticate and obtain host key self.hkey = self.server.hostKey(*self.auth) if not self.hkey: # provided details were invalid return self.fireEvent("badAuth") else: # write new details and tell calling thread to save self.fireEvent("newKey", self.hkey) # run sync and check state try: ret = self._abortingSync() except Exception as e: log = traceback.format_exc() err = repr(str(e)) if ("Unable to find the server" in err or "Errno 2" in err or "getaddrinfo" in err): self.fireEvent("offline") elif "sync cancelled" in err: pass else: self.fireEvent("error", log) return if ret == "badAuth": return self.fireEvent("badAuth") elif ret == "clockOff": return self.fireEvent("clockOff") elif ret == "basicCheckFailed" or ret == "sanityCheckFailed": return self.fireEvent("checkFailed") # full sync? if ret == "fullSync": return self._fullSync() # save and note success state if ret == "noChanges": self.fireEvent("noChanges") elif ret == "success": self.fireEvent("success") elif ret == "serverAbort": pass else: self.fireEvent("error", "Unknown sync return code.") self.syncMsg = self.client.syncMsg self.uname = self.client.uname # then move on to media sync self._syncMedia() def _fullSync(self): # tell the calling thread we need a decision on sync direction, and # wait for a reply self.fullSyncChoice = False self.localIsEmpty = self.col.isEmpty() self.fireEvent("fullSync") while not self.fullSyncChoice: time.sleep(0.1) f = self.fullSyncChoice if f == "cancel": return self.client = FullSyncer(self.col, self.hkey, self.server.client) try: if f == "upload": if not self.client.upload(): self.fireEvent("upbad") else: self.client.download() except Exception as e: if "sync cancelled" in str(e): return raise # reopen db and move on to media sync self.col.reopen() self._syncMedia() def _syncMedia(self): if not self.media: return self.server = RemoteMediaServer(self.col, self.hkey, self.server.client) self.client = MediaSyncer(self.col, self.server) try: ret = self.client.sync() except Exception as e: if "sync cancelled" in str(e): return raise if ret == "noChanges": self.fireEvent("noMediaChanges") elif ret == "sanityCheckFailed" or ret == "corruptMediaDB": self.fireEvent("mediaSanity") else: self.fireEvent("mediaSuccess") def fireEvent(self, cmd, arg=""): self.event.emit(cmd, arg) anki-2.1.0+dfsg~b36/aqt/tagedit.py000066400000000000000000000076121323611211500166450ustar00rootroot00000000000000# Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * import re class TagEdit(QLineEdit): lostFocus = pyqtSignal() # 0 = tags, 1 = decks def __init__(self, parent, type=0): QLineEdit.__init__(self, parent) self.col = None self.model = QStringListModel() self.type = type if type == 0: self.completer = TagCompleter(self.model, parent, self) else: self.completer = QCompleter(self.model, parent) self.completer.setCompletionMode(QCompleter.PopupCompletion) self.completer.setCaseSensitivity(Qt.CaseInsensitive) self.setCompleter(self.completer) def setCol(self, col): "Set the current col, updating list of available tags." self.col = col if self.type == 0: l = sorted(self.col.tags.all()) else: l = sorted(self.col.decks.allNames()) self.model.setStringList(l) def focusInEvent(self, evt): QLineEdit.focusInEvent(self, evt) self.showCompleter() def keyPressEvent(self, evt): if evt.key() in (Qt.Key_Up, Qt.Key_Down): # show completer on arrow key up/down if not self.completer.popup().isVisible(): self.showCompleter() return if (evt.key() == Qt.Key_Tab and evt.modifiers() & Qt.ControlModifier): # select next completion if not self.completer.popup().isVisible(): self.showCompleter() index = self.completer.currentIndex() self.completer.popup().setCurrentIndex(index) cur_row = index.row() if not self.completer.setCurrentRow(cur_row + 1): self.completer.setCurrentRow(0) return if evt.key() in (Qt.Key_Enter, Qt.Key_Return): # apply first completion if no suggestion selected selected_row = self.completer.popup().currentIndex().row() if selected_row == -1: self.completer.setCurrentRow(0) index = self.completer.currentIndex() self.completer.popup().setCurrentIndex(index) self.hideCompleter() QWidget.keyPressEvent(self, evt) return QLineEdit.keyPressEvent(self, evt) if not evt.text(): # if it's a modifier, don't show return if evt.key() not in ( Qt.Key_Enter, Qt.Key_Return, Qt.Key_Escape, Qt.Key_Space, Qt.Key_Tab, Qt.Key_Backspace, Qt.Key_Delete): self.showCompleter() def showCompleter(self): self.completer.setCompletionPrefix(self.text()) self.completer.complete() def focusOutEvent(self, evt): QLineEdit.focusOutEvent(self, evt) self.lostFocus.emit() self.completer.popup().hide() def hideCompleter(self): self.completer.popup().hide() class TagCompleter(QCompleter): def __init__(self, model, parent, edit, *args): QCompleter.__init__(self, model, parent) self.tags = [] self.edit = edit self.cursor = None def splitPath(self, tags): stripped_tags = tags.strip() stripped_tags = re.sub(" +", " ", stripped_tags) self.tags = self.edit.col.tags.split(stripped_tags) self.tags.append("") p = self.edit.cursorPosition() if tags.endswith(" "): self.cursor = len(self.tags) - 1 else: self.cursor = stripped_tags.count(" ", 0, p) return [self.tags[self.cursor]] def pathFromIndex(self, idx): if self.cursor is None: return self.edit.text() ret = QCompleter.pathFromIndex(self, idx) self.tags[self.cursor] = ret try: self.tags.remove("") except ValueError: pass return " ".join(self.tags) + " "anki-2.1.0+dfsg~b36/aqt/taglimit.py000066400000000000000000000073141323611211500170350ustar00rootroot00000000000000# Copyright: Damien Elmes # License: GNU GPL, version 3 or later; http://www.gnu.org/copyleft/gpl.html import aqt from aqt.qt import * from aqt.utils import saveGeom, restoreGeom class TagLimit(QDialog): def __init__(self, mw, parent): QDialog.__init__(self, parent, Qt.Window) self.mw = mw self.parent = parent self.deck = self.parent.deck self.dialog = aqt.forms.taglimit.Ui_Dialog() self.dialog.setupUi(self) s = QShortcut(QKeySequence("ctrl+d"), self.dialog.activeList, context=Qt.WidgetShortcut) s.activated.connect(self.dialog.activeList.clearSelection) s = QShortcut(QKeySequence("ctrl+d"), self.dialog.inactiveList, context=Qt.WidgetShortcut) s.activated.connect(self.dialog.inactiveList.clearSelection) self.rebuildTagList() restoreGeom(self, "tagLimit") self.exec_() def rebuildTagList(self): usertags = self.mw.col.tags.byDeck(self.deck['id'], True) yes = self.deck.get("activeTags", []) no = self.deck.get("inactiveTags", []) yesHash = {} noHash = {} for y in yes: yesHash[y] = True for n in no: noHash[n] = True groupedTags = [] usertags.sort() groupedTags.append(usertags) self.tags = [] for tags in groupedTags: for t in tags: self.tags.append(t) item = QListWidgetItem(t.replace("_", " ")) self.dialog.activeList.addItem(item) if t in yesHash: mode = QItemSelectionModel.Select self.dialog.activeCheck.setChecked(True) else: mode = QItemSelectionModel.Deselect idx = self.dialog.activeList.indexFromItem(item) self.dialog.activeList.selectionModel().select(idx, mode) # inactive item = QListWidgetItem(t.replace("_", " ")) self.dialog.inactiveList.addItem(item) if t in noHash: mode = QItemSelectionModel.Select else: mode = QItemSelectionModel.Deselect idx = self.dialog.inactiveList.indexFromItem(item) self.dialog.inactiveList.selectionModel().select(idx, mode) def reject(self): self.tags = "" QDialog.reject(self) def accept(self): self.hide() n = 0 # gather yes/no tags yes = [] no = [] for c in range(self.dialog.activeList.count()): # active if self.dialog.activeCheck.isChecked(): item = self.dialog.activeList.item(c) idx = self.dialog.activeList.indexFromItem(item) if self.dialog.activeList.selectionModel().isSelected(idx): yes.append(self.tags[c]) # inactive item = self.dialog.inactiveList.item(c) idx = self.dialog.inactiveList.indexFromItem(item) if self.dialog.inactiveList.selectionModel().isSelected(idx): no.append(self.tags[c]) # save in the deck for future invocations self.deck['activeTags'] = yes self.deck['inactiveTags'] = no self.mw.col.decks.save(self.deck) # build query string self.tags = "" if yes: arr = [] for req in yes: arr.append("tag:'%s'" % req) self.tags += "(" + " or ".join(arr) + ")" if no: arr = [] for req in no: arr.append("-tag:'%s'" % req) self.tags += " " + " ".join(arr) saveGeom(self, "tagLimit") QDialog.accept(self) anki-2.1.0+dfsg~b36/aqt/toolbar.py000066400000000000000000000057771323611211500167000ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * class Toolbar: def __init__(self, mw, web): self.mw = mw self.web = web self.link_handlers = { "decks": self._deckLinkHandler, "study": self._studyLinkHandler, "add": self._addLinkHandler, "browse": self._browseLinkHandler, "stats": self._statsLinkHandler, "sync": self._syncLinkHandler, } self.web.setFixedHeight(30) def draw(self): self.web.onBridgeCmd = self._linkHandler self.web.stdHtml(self._body % self._centerLinks(), css=["toolbar.css"]) self.web.adjustHeightToFit() # Available links ###################################################################### def _centerLinks(self): links = [ ["decks", _("Decks"), _("Shortcut key: %s") % "D"], ["add", _("Add"), _("Shortcut key: %s") % "A"], ["browse", _("Browse"), _("Shortcut key: %s") % "B"], ["stats", _("Stats"), _("Shortcut key: %s") % "Shift+S"], ["sync", _("Sync"), _("Shortcut key: %s") % "Y"], ] return self._linkHTML(links) def _linkHTML(self, links): buf = "" for ln, name, title in links: buf += ''' %s''' % ( title, ln, name) return buf # Link handling ###################################################################### def _linkHandler(self, link): if link in self.link_handlers: self.link_handlers[link]() return False def _deckLinkHandler(self): self.mw.moveToState("deckBrowser") def _studyLinkHandler(self): # if overview already shown, switch to review if self.mw.state == "overview": self.mw.col.startTimebox() self.mw.moveToState("review") else: self.mw.onOverview() def _addLinkHandler(self): self.mw.onAddCard() def _browseLinkHandler(self): self.mw.onBrowse() def _statsLinkHandler(self): self.mw.onStats() def _syncLinkHandler(self): self.mw.onSync() # HTML & CSS ###################################################################### _body = """
""" # Bottom bar ###################################################################### class BottomBar(Toolbar): _centerBody = """
""" def draw(self, buf): self.web.onBridgeCmd = self._linkHandler self.web.stdHtml( self._centerBody % buf, css=["toolbar.css", "toolbar-bottom.css"]) self.web.adjustHeightToFit() anki-2.1.0+dfsg~b36/aqt/update.py000066400000000000000000000042051323611211500165010ustar00rootroot00000000000000# Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import time import requests from aqt.qt import * import aqt from aqt.utils import openLink from anki.utils import json, platDesc from aqt.utils import showText class LatestVersionFinder(QThread): newVerAvail = pyqtSignal(str) newMsg = pyqtSignal(dict) clockIsOff = pyqtSignal(float) def __init__(self, main): QThread.__init__(self) self.main = main self.config = main.pm.meta def _data(self): d = {"ver": aqt.appVersion, "os": platDesc(), "id": self.config['id'], "lm": self.config['lastMsg'], "crt": self.config['created']} return d def run(self): if not self.config['updates']: return d = self._data() d['proto'] = 1 try: r = requests.post(aqt.appUpdate, data=d) r.raise_for_status() resp = r.json() except: # behind proxy, corrupt message, etc print("update check failed") return if resp['msg']: self.newMsg.emit(resp) if resp['ver']: self.newVerAvail.emit(resp['ver']) diff = resp['time'] - time.time() if abs(diff) > 300: self.clockIsOff.emit(diff) def askAndUpdate(mw, ver): baseStr = ( _('''

Anki Updated

Anki %s has been released.

''') % ver) msg = QMessageBox(mw) msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No) msg.setIcon(QMessageBox.Information) msg.setText(baseStr + _("Would you like to download it now?")) button = QPushButton(_("Ignore this update")) msg.addButton(button, QMessageBox.RejectRole) msg.setDefaultButton(QMessageBox.Yes) ret = msg.exec_() if msg.clickedButton() == button: # ignore this update mw.pm.meta['suppressUpdate'] = ver elif ret == QMessageBox.Yes: openLink(aqt.appWebsite) def showMessages(mw, data): showText(data['msg'], parent=mw, type="html") mw.pm.meta['lastMsg'] = data['msgId'] anki-2.1.0+dfsg~b36/aqt/utils.py000066400000000000000000000361021323611211500163600ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * import re, os, sys, urllib.request, urllib.parse, urllib.error, subprocess import aqt from anki.sound import stripSounds from anki.utils import isWin, isMac, invalidFilename from contextlib import contextmanager @contextmanager def noBundledLibs(): oldlpath = os.environ.pop("LD_LIBRARY_PATH", None) yield if oldlpath is not None: os.environ["LD_LIBRARY_PATH"] = oldlpath def openHelp(section): link = aqt.appHelpSite if section: link += "#%s" % section openLink(link) def openLink(link): tooltip(_("Loading..."), period=1000) with noBundledLibs(): QDesktopServices.openUrl(QUrl(link)) def showWarning(text, parent=None, help="", title="Anki"): "Show a small warning with an OK button." return showInfo(text, parent, help, "warning", title=title) def showCritical(text, parent=None, help="", title="Anki"): "Show a small critical error with an OK button." return showInfo(text, parent, help, "critical", title=title) def showInfo(text, parent=False, help="", type="info", title="Anki"): "Show a small info window with an OK button." if parent is False: parent = aqt.mw.app.activeWindow() or aqt.mw if type == "warning": icon = QMessageBox.Warning elif type == "critical": icon = QMessageBox.Critical else: icon = QMessageBox.Information mb = QMessageBox(parent) mb.setText(text) mb.setIcon(icon) mb.setWindowModality(Qt.WindowModal) mb.setWindowTitle(title) b = mb.addButton(QMessageBox.Ok) b.setDefault(True) if help: b = mb.addButton(QMessageBox.Help) b.clicked.connect(lambda: openHelp(help)) b.setAutoDefault(False) return mb.exec_() def showText(txt, parent=None, type="text", run=True, geomKey=None, \ minWidth=500, minHeight=400, title="Anki"): if not parent: parent = aqt.mw.app.activeWindow() or aqt.mw diag = QDialog(parent) diag.setWindowTitle(title) layout = QVBoxLayout(diag) diag.setLayout(layout) text = QTextBrowser() text.setOpenExternalLinks(True) if type == "text": text.setPlainText(txt) else: text.setHtml(txt) layout.addWidget(text) box = QDialogButtonBox(QDialogButtonBox.Close) layout.addWidget(box) def onReject(): if geomKey: saveGeom(diag, geomKey) QDialog.reject(diag) box.rejected.connect(onReject) def onFinish(): if geomKey: saveGeom(diag, geomKey) box.accepted.connect(onFinish) diag.setMinimumHeight(minHeight) diag.setMinimumWidth(minWidth) if geomKey: restoreGeom(diag, geomKey) if run: diag.exec_() else: return diag, box def askUser(text, parent=None, help="", defaultno=False, msgfunc=None, \ title="Anki"): "Show a yes/no question. Return true if yes." if not parent: parent = aqt.mw.app.activeWindow() if not msgfunc: msgfunc = QMessageBox.question sb = QMessageBox.Yes | QMessageBox.No if help: sb |= QMessageBox.Help while 1: if defaultno: default = QMessageBox.No else: default = QMessageBox.Yes r = msgfunc(parent, title, text, sb, default) if r == QMessageBox.Help: openHelp(help) else: break return r == QMessageBox.Yes class ButtonedDialog(QMessageBox): def __init__(self, text, buttons, parent=None, help="", title="Anki"): QDialog.__init__(self, parent) self.buttons = [] self.setWindowTitle(title) self.help = help self.setIcon(QMessageBox.Warning) self.setText(text) # v = QVBoxLayout() # v.addWidget(QLabel(text)) # box = QDialogButtonBox() # v.addWidget(box) for b in buttons: self.buttons.append( self.addButton(b, QMessageBox.AcceptRole)) if help: self.addButton(_("Help"), QMessageBox.HelpRole) buttons.append(_("Help")) #self.setLayout(v) def run(self): self.exec_() but = self.clickedButton().text() if but == "Help": # FIXME stop dialog closing? openHelp(self.help) txt = self.clickedButton().text() # work around KDE 'helpfully' adding accelerators to button text of Qt apps return txt.replace("&", "") def setDefault(self, idx): self.setDefaultButton(self.buttons[idx]) def askUserDialog(text, buttons, parent=None, help="", title="Anki"): if not parent: parent = aqt.mw diag = ButtonedDialog(text, buttons, parent, help, title=title) return diag class GetTextDialog(QDialog): def __init__(self, parent, question, help=None, edit=None, default="", \ title="Anki", minWidth=400): QDialog.__init__(self, parent) self.setWindowTitle(title) self.question = question self.help = help self.qlabel = QLabel(question) self.setMinimumWidth(minWidth) v = QVBoxLayout() v.addWidget(self.qlabel) if not edit: edit = QLineEdit() self.l = edit if default: self.l.setText(default) self.l.selectAll() v.addWidget(self.l) buts = QDialogButtonBox.Ok | QDialogButtonBox.Cancel if help: buts |= QDialogButtonBox.Help b = QDialogButtonBox(buts) v.addWidget(b) self.setLayout(v) b.button(QDialogButtonBox.Ok).clicked.connect(self.accept) b.button(QDialogButtonBox.Cancel).clicked.connect(self.reject) if help: b.button(QDialogButtonBox.Help).clicked.connect(self.helpRequested) def accept(self): return QDialog.accept(self) def reject(self): return QDialog.reject(self) def helpRequested(self): openHelp(self.help) def getText(prompt, parent=None, help=None, edit=None, default="", title="Anki", geomKey=None, **kwargs): if not parent: parent = aqt.mw.app.activeWindow() or aqt.mw d = GetTextDialog(parent, prompt, help=help, edit=edit, default=default, title=title, **kwargs) d.setWindowModality(Qt.WindowModal) if geomKey: restoreGeom(d, geomKey) ret = d.exec_() if geomKey and ret: saveGeom(d, geomKey) return (str(d.l.text()), ret) def getOnlyText(*args, **kwargs): (s, r) = getText(*args, **kwargs) if r: return s else: return "" # fixme: these utilities could be combined into a single base class def chooseList(prompt, choices, startrow=0, parent=None): if not parent: parent = aqt.mw.app.activeWindow() d = QDialog(parent) d.setWindowModality(Qt.WindowModal) l = QVBoxLayout() d.setLayout(l) t = QLabel(prompt) l.addWidget(t) c = QListWidget() c.addItems(choices) c.setCurrentRow(startrow) l.addWidget(c) bb = QDialogButtonBox(QDialogButtonBox.Ok) bb.accepted.connect(d.accept) l.addWidget(bb) d.exec_() return c.currentRow() def getTag(parent, deck, question, tags="user", **kwargs): from aqt.tagedit import TagEdit te = TagEdit(parent) te.setCol(deck) ret = getText(question, parent, edit=te, geomKey='getTag', **kwargs) te.hideCompleter() return ret # File handling ###################################################################### def getFile(parent, title, cb, filter="*.*", dir=None, key=None): "Ask the user for a file." assert not dir or not key if not dir: dirkey = key+"Directory" dir = aqt.mw.pm.profile.get(dirkey, "") else: dirkey = None d = QFileDialog(parent) d.setFileMode(QFileDialog.ExistingFile) if os.path.exists(dir): d.setDirectory(dir) d.setWindowTitle(title) d.setNameFilter(filter) ret = [] def accept(): file = str(list(d.selectedFiles())[0]) if dirkey: dir = os.path.dirname(file) aqt.mw.pm.profile[dirkey] = dir if cb: cb(file) ret.append(file) d.accepted.connect(accept) d.exec_() return ret and ret[0] def getSaveFile(parent, title, dir_description, key, ext, fname=None): """Ask the user for a file to save. Use DIR_DESCRIPTION as config variable. The file dialog will default to open with FNAME.""" config_key = dir_description + 'Directory' defaultPath = QStandardPaths.writableLocation(QStandardPaths.DocumentsLocation) base = aqt.mw.pm.profile.get(config_key, defaultPath) path = os.path.join(base, fname) file = QFileDialog.getSaveFileName( parent, title, path, "{0} (*{1})".format(key, ext), options=QFileDialog.DontConfirmOverwrite)[0] if file: # add extension if not file.lower().endswith(ext): file += ext # save new default dir = os.path.dirname(file) aqt.mw.pm.profile[config_key] = dir # check if it exists if os.path.exists(file): if not askUser( _("This file exists. Are you sure you want to overwrite it?"), parent): return None return file def saveGeom(widget, key): key += "Geom" aqt.mw.pm.profile[key] = widget.saveGeometry() def restoreGeom(widget, key, offset=None, adjustSize=False): key += "Geom" if aqt.mw.pm.profile.get(key): widget.restoreGeometry(aqt.mw.pm.profile[key]) if isMac and offset: if qtminor > 6: # bug in osx toolkit s = widget.size() widget.resize(s.width(), s.height()+offset*2) else: if adjustSize: widget.adjustSize() def saveState(widget, key): key += "State" aqt.mw.pm.profile[key] = widget.saveState() def restoreState(widget, key): key += "State" if aqt.mw.pm.profile.get(key): widget.restoreState(aqt.mw.pm.profile[key]) def saveSplitter(widget, key): key += "Splitter" aqt.mw.pm.profile[key] = widget.saveState() def restoreSplitter(widget, key): key += "Splitter" if aqt.mw.pm.profile.get(key): widget.restoreState(aqt.mw.pm.profile[key]) def saveHeader(widget, key): key += "Header" aqt.mw.pm.profile[key] = widget.saveState() def restoreHeader(widget, key): key += "Header" if aqt.mw.pm.profile.get(key): widget.restoreState(aqt.mw.pm.profile[key]) def mungeQA(col, txt): txt = col.media.escapeImages(txt) txt = stripSounds(txt) return txt def applyStyles(widget): p = os.path.join(aqt.mw.pm.base, "style.css") if os.path.exists(p): widget.setStyleSheet(open(p).read()) def openFolder(path): if isWin: subprocess.Popen(["explorer", "file://"+path]) else: with noBundledLibs(): QDesktopServices.openUrl(QUrl("file://" + path)) def shortcut(key): if isMac: return re.sub("(?i)ctrl", "Command", key) return key def maybeHideClose(bbox): if isMac: b = bbox.button(QDialogButtonBox.Close) if b: bbox.removeButton(b) def addCloseShortcut(widg): if not isMac: return widg._closeShortcut = QShortcut(QKeySequence("Ctrl+W"), widg) widg._closeShortcut.activated.connect(widg.reject) def downArrow(): if isWin: return "▼" # windows 10 is lacking the smaller arrow on English installs return "▾" # Tooltips ###################################################################### _tooltipTimer = None _tooltipLabel = None def tooltip(msg, period=3000, parent=None): global _tooltipTimer, _tooltipLabel class CustomLabel(QLabel): silentlyClose = True def mousePressEvent(self, evt): evt.accept() self.hide() closeTooltip() aw = parent or aqt.mw.app.activeWindow() or aqt.mw lab = CustomLabel("""\
%s
""" % msg, aw) lab.setFrameStyle(QFrame.Panel) lab.setLineWidth(2) lab.setWindowFlags(Qt.ToolTip) p = QPalette() p.setColor(QPalette.Window, QColor("#feffc4")) p.setColor(QPalette.WindowText, QColor("#000000")) lab.setPalette(p) lab.move( aw.mapToGlobal(QPoint(0, -100 + aw.height()))) lab.show() _tooltipTimer = aqt.mw.progress.timer( period, closeTooltip, False) _tooltipLabel = lab def closeTooltip(): global _tooltipLabel, _tooltipTimer if _tooltipLabel: try: _tooltipLabel.deleteLater() except: # already deleted as parent window closed pass _tooltipLabel = None if _tooltipTimer: _tooltipTimer.stop() _tooltipTimer = None # true if invalid; print warning def checkInvalidFilename(str, dirsep=True): bad = invalidFilename(str, dirsep) if bad: showWarning(_("The following character can not be used: %s") % bad) return True return False # Menus ###################################################################### class MenuList: def __init__(self): self.children = [] def addItem(self, title, func): item = MenuItem(title, func) self.children.append(item) return item def addSeparator(self): self.children.append(None) def addMenu(self, title): submenu = SubMenu(title) self.children.append(submenu) return submenu def addChild(self, child): self.children.append(child) def renderTo(self, qmenu): for child in self.children: if child is None: qmenu.addSeparator() elif isinstance(child, QAction): qmenu.addAction(child) else: child.renderTo(qmenu) def popupOver(self, widget): qmenu = QMenu() self.renderTo(qmenu) qmenu.exec_(widget.mapToGlobal(QPoint(0,0))) # Chunking ###################################################################### chunkSize = 30 def chunked(self): if len(self.children) <= self.chunkSize: return self newList = MenuList() oldItems = self.children[:] while oldItems: chunk = oldItems[:self.chunkSize] del oldItems[:self.chunkSize] label = self._chunkLabel(chunk) menu = newList.addMenu(label) menu.children = chunk return newList def _chunkLabel(self, items): start = items[0].title end = items[-1].title prefix = os.path.commonprefix([start.upper(), end.upper()]) n = len(prefix)+1 return "{}-{}".format(start[:n].upper(), end[:n].upper()) class SubMenu(MenuList): def __init__(self, title): super().__init__() self.title = title def renderTo(self, menu): submenu = menu.addMenu(self.title) super().renderTo(submenu) class MenuItem: def __init__(self, title, func): self.title = title self.func = func def renderTo(self, qmenu): a = qmenu.addAction(self.title) a.triggered.connect(self.func) anki-2.1.0+dfsg~b36/aqt/webview.py000066400000000000000000000230461323611211500166730ustar00rootroot00000000000000# Copyright: Damien Elmes # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import sys import math from anki.hooks import runHook from aqt.qt import * from aqt.utils import openLink, showWarning from anki.utils import isMac, isWin, isLin, devMode # Page for debug messages ########################################################################## class AnkiWebPage(QWebEnginePage): def __init__(self, onBridgeCmd): QWebEnginePage.__init__(self) self._onBridgeCmd = onBridgeCmd self._setupBridge() self.setBackgroundColor(Qt.transparent) def _setupBridge(self): class Bridge(QObject): @pyqtSlot(str) def cmd(self, str): self.onCmd(str) self._bridge = Bridge() self._bridge.onCmd = self._onCmd self._channel = QWebChannel(self) self._channel.registerObject("py", self._bridge) self.setWebChannel(self._channel) js = QFile(':/qtwebchannel/qwebchannel.js') assert js.open(QIODevice.ReadOnly) js = bytes(js.readAll()).decode('utf-8') script = QWebEngineScript() script.setSourceCode(js + ''' var pycmd; new QWebChannel(qt.webChannelTransport, function(channel) { pycmd = channel.objects.py.cmd; pycmd("domDone"); }); ''') script.setWorldId(QWebEngineScript.MainWorld) script.setInjectionPoint(QWebEngineScript.DocumentReady) script.setRunsOnSubFrames(False) self.profile().scripts().insert(script) def javaScriptConsoleMessage(self, lvl, msg, line, srcID): # not translated because console usually not visible, # and may only accept ascii text sys.stdout.write("JS error on line %(a)d: %(b)s" % dict(a=line, b=msg+"\n")) def acceptNavigationRequest(self, url, navType, isMainFrame): if not isMainFrame: return True from aqt import mw # ignore href=# if url.toString().startswith(mw.serverURL()): return False # load all other links in browser openLink(url) return False def _onCmd(self, str): self._onBridgeCmd(str) # Main web view ########################################################################## class AnkiWebView(QWebEngineView): def __init__(self, parent=None): QWebEngineView.__init__(self, parent=parent) self.title = "default" self._page = AnkiWebPage(self._onBridgeCmd) self._domDone = True self._pendingActions = [] self.setPage(self._page) self._page.profile().setHttpCacheType(QWebEngineProfile.NoCache) self.resetHandlers() self.allowDrops = False QShortcut(QKeySequence("Esc"), self, context=Qt.WidgetWithChildrenShortcut, activated=self.onEsc) if isMac: for key, fn in [ (QKeySequence.Copy, self.onCopy), (QKeySequence.Paste, self.onPaste), (QKeySequence.Cut, self.onCut), (QKeySequence.SelectAll, self.onSelectAll), ]: QShortcut(key, self, context=Qt.WidgetWithChildrenShortcut, activated=fn) QShortcut(QKeySequence("ctrl+shift+v"), self, context=Qt.WidgetWithChildrenShortcut, activated=self.onPaste) self.focusProxy().installEventFilter(self) def eventFilter(self, obj, evt): # disable pinch to zoom gesture if isinstance(evt, QNativeGestureEvent): return True return False def onEsc(self): w = self.parent() while w: if isinstance(w, QDialog) or isinstance(w, QMainWindow): from aqt import mw # esc in a child window closes the window if w != mw: w.close() else: # in the main window, removes focus from type in area self.parent().setFocus() break w = w.parent() def onCopy(self): self.triggerPageAction(QWebEnginePage.Copy) def onCut(self): self.triggerPageAction(QWebEnginePage.Cut) def onPaste(self): self.triggerPageAction(QWebEnginePage.Paste) def onSelectAll(self): self.triggerPageAction(QWebEnginePage.SelectAll) def contextMenuEvent(self, evt): m = QMenu(self) a = m.addAction(_("Copy")) a.triggered.connect(self.onCopy) runHook("AnkiWebView.contextMenuEvent", self, m) m.popup(QCursor.pos()) def dropEvent(self, evt): pass def setHtml(self, html): self._queueAction("setHtml", html) def _setHtml(self, html): app = QApplication.instance() oldFocus = app.focusWidget() self._domDone = False self._page.setHtml(html) # work around webengine stealing focus on setHtml() if oldFocus: oldFocus.setFocus() def zoomFactor(self): # overridden scale factor? webscale = os.environ.get("ANKI_WEBSCALE") if webscale: return float(webscale) if isMac: return 1 screen = QApplication.desktop().screen() dpi = screen.logicalDpiX() factor = dpi / 96.0 if isLin: factor = max(1, factor) return factor # compensate for qt's integer scaling on windows qtIntScale = self._getQtIntScale(screen) desiredScale = factor * qtIntScale newFactor = desiredScale / qtIntScale return max(1, newFactor) def _getQtIntScale(self, screen): # try to detect if Qt has scaled the screen # - qt will round the scale factor to a whole number, so a dpi of 125% = 1x, # and a dpi of 150% = 2x # - a screen with a normal physical dpi of 72 will have a dpi of 32 # if the scale factor has been rounded to 2x # - different screens have different physical DPIs (eg 72, 93, 102) # - until a better solution presents itself, assume a physical DPI at # or above 70 is unscaled if screen.physicalDpiX() > 70: return 1 elif screen.physicalDpiX() > 35: return 2 else: return 3 def stdHtml(self, body, css=[], js=["jquery.js"], head=""): if isWin: buttonspec = "button { font-size: 12px; font-family:'Segoe UI'; }" fontspec = 'font-size:12px;font-family:"Segoe UI";' elif isMac: family="Helvetica" fontspec = 'font-size:15px;font-family:"%s";'% \ family buttonspec = """ button { font-size: 13px; -webkit-appearance: none; background: #fff; border: 1px solid #ccc; border-radius:5px; font-family: Helvetica }""" else: buttonspec = "" family = self.font().family() fontspec = 'font-size:14px;font-family:%s;'%\ family csstxt = "\n".join([self.bundledCSS("webview.css")]+ [self.bundledCSS(fname) for fname in css]) jstxt = "\n".join([self.bundledScript("webview.js")]+ [self.bundledScript(fname) for fname in js]) from aqt import mw head = mw.baseHTML() + head + csstxt + jstxt html = """ {} {} {} """.format(self.title, self.zoomFactor(), fontspec, buttonspec, head, body) #print(html) self.setHtml(html) def webBundlePath(self, path): from aqt import mw return "http://localhost:%d/_anki/%s" % (mw.mediaServer.getPort(), path) def bundledScript(self, fname): return '' % self.webBundlePath(fname) def bundledCSS(self, fname): return '' % self.webBundlePath(fname) def eval(self, js): self.evalWithCallback(js, None) def evalWithCallback(self, js, cb): self._queueAction("eval", js, cb) def _evalWithCallback(self, js, cb): if cb: self.page().runJavaScript(js, cb) else: self.page().runJavaScript(js) def _queueAction(self, name, *args): self._pendingActions.append((name, args)) self._maybeRunActions() def _maybeRunActions(self): while self._pendingActions and self._domDone: name, args = self._pendingActions.pop(0) if name == "eval": self._evalWithCallback(*args) elif name == "setHtml": self._setHtml(*args) else: raise Exception("unknown action: {}".format(name)) def _openLinksExternally(self, url): openLink(url) def _onBridgeCmd(self, cmd): # ignore webchannel messages that arrive after underlying webview # deleted if sip.isdeleted(self): return if cmd == "domDone": self._domDone = True self._maybeRunActions() else: self.onBridgeCmd(cmd) def defaultOnBridgeCmd(self, cmd): print("unhandled bridge cmd:", cmd) def resetHandlers(self): self.onBridgeCmd = self.defaultOnBridgeCmd def adjustHeightToFit(self): self.evalWithCallback("$(document.body).height()", self._onHeight) def _onHeight(self, qvar): height = math.ceil(qvar*self.zoomFactor()) self.setFixedHeight(height) anki-2.1.0+dfsg~b36/designer/000077500000000000000000000000001323611211500156575ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/designer/about.ui000066400000000000000000000043551323611211500173370ustar00rootroot00000000000000 About 0 0 410 664 0 0 About Anki 0 0 0 0 about:blank Qt::Horizontal QDialogButtonBox::Ok AnkiWebView QWidget
aqt/webview
1
buttonBox accepted() About accept() 248 254 157 274 buttonBox rejected() About reject() 316 260 286 274
anki-2.1.0+dfsg~b36/designer/addcards.ui000066400000000000000000000050231323611211500177630ustar00rootroot00000000000000 Dialog 0 0 453 366 Add 3 12 6 12 12 6 0 0 10 Qt::Horizontal 0 10 true Qt::Horizontal QDialogButtonBox::NoButton buttonBox buttonBox rejected() Dialog reject() 301 -1 286 274 anki-2.1.0+dfsg~b36/designer/addfield.ui000066400000000000000000000071251323611211500177570ustar00rootroot00000000000000 Dialog 0 0 434 186 Add Field Front true 6 200 Field: Font: Size: Qt::Vertical 20 40 Back Add to: Qt::Vertical QDialogButtonBox::Cancel|QDialogButtonBox::Ok fields font size radioQ radioA buttonBox buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/addmodel.ui000066400000000000000000000035541323611211500177760ustar00rootroot00000000000000 Dialog 0 0 285 269 Add Note Type QAbstractItemView::NoEditTriggers true Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok buttonBox accepted() Dialog accept() 266 353 157 274 buttonBox rejected() Dialog reject() 334 353 286 274 anki-2.1.0+dfsg~b36/designer/addonconf.ui000066400000000000000000000062401323611211500201530ustar00rootroot00000000000000 Dialog Qt::ApplicationModal 0 0 631 521 Configuration 0 1 QFrame::NoFrame true 0 0 607 112 0 Qt::RichText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true true 0 3 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/addons.ui000066400000000000000000000053311323611211500174700ustar00rootroot00000000000000 Dialog Qt::ApplicationModal 0 0 577 379 Add-ons true Changes will take effect when Anki is restarted. QAbstractItemView::ContiguousSelection Get Add-ons... Check for Updates Qt::Vertical 20 40 View Add-on Page Config View Files Toggle Enabled Delete anki-2.1.0+dfsg~b36/designer/browser.ui000066400000000000000000000415641323611211500177130ustar00rootroot00000000000000 Dialog 0 0 750 493 400 400 12 12 6 12 12 4 0 Qt::Vertical 3 1 0 0 0 0 0 12 12 0 9 0 true QComboBox::NoInsert Search Preview Ctrl+Shift+P true Filter... 9 1 0 150 Qt::ActionsContextMenu Qt::ScrollBarAsNeeded QAbstractItemView::NoEditTriggers false true QAbstractItemView::SelectRows false false 20 true 0 0 1 0 0 0 0 1 50 200 0 0 750 22 &Edit &Go &Help &Cards Flag &Notes &Reschedule... Select &All Ctrl+Alt+A &Undo Ctrl+Z &Invert Selection &Find Ctrl+F N&ote Ctrl+Shift+N &Next Card Ctrl+N &Previous Card Ctrl+P &Guide F1 Change Note Type... Ctrl+Shift+M Select &Notes Find and Re&place... Ctrl+Alt+F &Cram... Fil&ter Ctrl+Shift+F Card List Ctrl+Shift+L Find &Duplicates... Reposition... Ctrl+Shift+S First Card Home Last Card End Close Ctrl+W &Info... Ctrl+Shift+I Add Tags... Ctrl+Shift+A Remove Tags... Ctrl+Shift+D Toggle Suspend Ctrl+J Delete Ctrl+Del Add... Ctrl+E Change Deck... Ctrl+D Clear Flag Ctrl+0 Red Flag Ctrl+1 Purple Flag Ctrl+2 Green Flag Ctrl+3 Blue Flag Ctrl+4 Sidebar Ctrl+Shift+R Clear Unused Tags Manage Note Types... Toggle Mark Ctrl+K actionSelectAll triggered() tableView selectAll() -1 -1 299 279 actionClose triggered() Dialog close() -1 -1 374 199 anki-2.1.0+dfsg~b36/designer/browserdisp.ui000066400000000000000000000057751323611211500205770ustar00rootroot00000000000000 Dialog 0 0 412 241 Browser Appearance Override front template: Override back template: Override font: 5 0 6 Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok qfmt afmt font fontSize buttonBox buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/browseropts.ui000066400000000000000000000070351323611211500206140ustar00rootroot00000000000000 Dialog 0 0 288 195 Browser Options <b>Font</b>: <b>Font Size</b>: 75 0 <b>Line Size</b>: Qt::Horizontal 40 20 Search within formatting (slow) Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok fontCombo fontSize lineSize fullSearch buttonBox buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/changemap.ui000066400000000000000000000037241323611211500201470ustar00rootroot00000000000000 ChangeMap 0 0 391 360 Import Target field: true Qt::Horizontal QDialogButtonBox::Ok buttonBox accepted() ChangeMap accept() 254 355 157 274 buttonBox rejected() ChangeMap reject() 322 355 286 274 fields doubleClicked(QModelIndex) ChangeMap accept() 99 123 193 5 anki-2.1.0+dfsg~b36/designer/changemodel.ui000066400000000000000000000121531323611211500204660ustar00rootroot00000000000000 Dialog 0 0 362 391 Change Note Type 10 4 Current note type: 0 0 4 New note type: 0 0 0 0 Cards 0 0 0 true 0 0 330 120 0 0 Fields 0 0 0 true 0 0 330 119 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/clayout_top.ui000066400000000000000000000042201323611211500205560ustar00rootroot00000000000000 Form 0 0 400 300 Form 3 0 12 Card Type: 10 0 Qt::Horizontal QSizePolicy::MinimumExpanding 1 20 false false Qt::AlignCenter anki-2.1.0+dfsg~b36/designer/customstudy.ui000066400000000000000000000120351323611211500206220ustar00rootroot00000000000000 Dialog 0 0 332 380 Custom Study Review ahead Review forgotten cards Increase today's new card limit Increase today's review card limit Study by card state or tag Preview new cards ... ... ... Qt::Horizontal 40 20 0 New cards only Due cards only All cards in random order (cram mode) Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok radio1 radio2 radio3 radio4 radio6 spin buttonBox buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/dconf.ui000066400000000000000000000504711323611211500173160ustar00rootroot00000000000000 Dialog 0 0 587 514 Options group: 3 0 16777215 32 Manage... Qt::ToolButtonTextBesideIcon Qt::NoArrow * { color: red } Qt::AlignCenter true 0 New Cards 12 12 % Starting ease 130 999 Order 1 1 Easy interval Graduating interval 9999 New cards/day Steps (in minutes) Bury related new cards until the next day days 0 0 days Qt::Vertical 20 40 Reviews 12 12 Easy bonus 100 1000 5 % % 0 9999 Interval modifier Maximum reviews/day Maximum interval 1 99999 days 0 0.000000000000000 999.000000000000000 1.000000000000000 100.000000000000000 Bury related reviews until the next day Qt::Vertical 20 152 Lapses 12 12 Steps (in minutes) New interval Leech threshold 0 0 lapses Leech action 1 99 Minimum interval days Suspend Card Tag Only Qt::Horizontal 40 20 % 100 5 Qt::Vertical 20 72 General 12 12 Ignore answer times longer than 30 3600 10 seconds Show answer timer Automatically play audio Always include question side when replaying audio false Qt::Vertical 20 199 Description 12 12 Description to show on study screen (current deck only): Qt::Horizontal QDialogButtonBox::Help|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults dconf confOpts tabWidget lrnSteps newOrder newPerDay lrnGradInt lrnEasyInt lrnFactor bury revPerDay easyBonus fi1 maxIvl buryRev lapSteps lapMult lapMinInt leechThreshold leechAction maxTaken showTimer autoplaySounds replayQuestion buttonBox desc buttonBox accepted() Dialog accept() 254 320 157 274 buttonBox rejected() Dialog reject() 322 320 286 274 anki-2.1.0+dfsg~b36/designer/debug.ui000066400000000000000000000027631323611211500173140ustar00rootroot00000000000000 Dialog 0 0 643 580 Debug Console 0 1 16777215 100 QPlainTextEdit::NoWrap 0 8 Courier Qt::ClickFocus true anki-2.1.0+dfsg~b36/designer/dyndconf.ui000066400000000000000000000152061323611211500200260ustar00rootroot00000000000000 Dialog 0 0 382 413 Dialog Filter Limit to Search 60 16777215 1 99999 cards selected by Filter 2 Limit to Search 60 16777215 1 99999 cards selected by Options Reschedule cards based on my answers in this deck true Enable second filter Repeat failed cards after minutes Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Help search limit order search_2 limit_2 order_2 resched previewDelay secondFilter buttonBox buttonBox accepted() Dialog accept() 254 295 157 274 buttonBox rejected() Dialog reject() 322 295 286 274 secondFilter toggled(bool) filter2group setVisible(bool) 125 265 222 155 anki-2.1.0+dfsg~b36/designer/editaddon.ui000066400000000000000000000032021323611211500201460ustar00rootroot00000000000000 Dialog 0 0 753 475 Dialog Courier 10 Pitch Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Save buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/editcurrent.ui000066400000000000000000000030751323611211500205530ustar00rootroot00000000000000 Dialog 0 0 400 300 Dialog 3 12 Qt::Horizontal QDialogButtonBox::Close buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/edithtml.ui000066400000000000000000000030111323611211500200230ustar00rootroot00000000000000 Dialog 0 0 400 300 HTML Editor false Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Help buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/exporting.ui000066400000000000000000000067511323611211500202460ustar00rootroot00000000000000 ExportDialog 0 0 295 202 Export 100 0 <b>Export format</b>: <b>Include</b>: Include scheduling information true Include media true Include tags true Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel format deck includeSched includeMedia includeTags buttonBox buttonBox accepted() ExportDialog accept() 248 254 157 274 buttonBox rejected() ExportDialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/fields.ui000066400000000000000000000122071323611211500174660ustar00rootroot00000000000000 Dialog 0 0 412 352 Fields true 0 0 50 60 Add Delete Rename Reposition Qt::Vertical 20 40 Editing Font 0 25 Reverse text direction (RTL) 5 300 Remember last input when adding Options Sort by this field in the browser Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Help fieldList fieldAdd fieldDelete fieldRename fieldPosition fontFamily fontSize sortField sticky rtl buttonBox buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/finddupes.ui000066400000000000000000000063121323611211500202010ustar00rootroot00000000000000 Dialog 0 0 531 345 Find Duplicates Optional limit: Look in field: QFrame::StyledPanel QFrame::Raised 0 0 0 0 about:blank Qt::Horizontal QDialogButtonBox::Close AnkiWebView QWidget
aqt/webview
1
fields webView buttonBox buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274
anki-2.1.0+dfsg~b36/designer/findreplace.ui000066400000000000000000000064701323611211500205010ustar00rootroot00000000000000 Dialog 0 0 367 209 Find and Replace <b>Find</b>: <b>Replace With</b>: <b>In</b>: Treat input as regular expression Ignore case true Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok find replace field ignoreCase re buttonBox buttonBox accepted() Dialog accept() 256 154 157 274 buttonBox rejected() Dialog reject() 290 154 286 274 anki-2.1.0+dfsg~b36/designer/getaddons.ui000066400000000000000000000046131323611211500201720ustar00rootroot00000000000000 Dialog 0 0 367 204 Install Add-on To browse add-ons, please click the browse button below.<br><br>When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces. true Qt::Vertical 20 40 Code: Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/icons.qrc000066400000000000000000000004471323611211500175060ustar00rootroot00000000000000 icons/anki.png icons/tag.svg icons/deck.svg icons/notetype.svg icons/heart.svg icons/collection.svg icons/media-record.png anki-2.1.0+dfsg~b36/designer/icons/000077500000000000000000000000001323611211500167725ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/designer/icons/anki.png000066400000000000000000000032701323611211500204240ustar00rootroot00000000000000PNG  IHDR szzbKGD pHYs  tIME#5 SuEIDATXåoS33; t D*RCCjX@jԥ^۫U\􂭨D*l' m&'ɱgzIbHf4>:3s,ΝcvZjk677?Zc.4h^9_khɵkL[cccmgE8F)t;9|ߧT*Q,T*Bl|||ٗj  gɤpg/wqBhgϞ}}7qԅT*%bPP(m(vra4H)q]SJ} cL"BkJnOXZriׯ3771uqJ)p"HKǍu^/rGhYQ@ cJF~ZX){ܚQ5EOcQWjgʉVJ)l~5rZBZlawq /H$ 즄֚t:vI**Q¢?Ixh4$\)%B9!lfpplEM:B'PՐR7,NđHx,B)"-b7FnGGG_t s̙`_k'ouvĉ:u veA xEfxk܀`zzz+++N7"ygꐼix!Z7D\۫ *ou]_)#r $BPɓWoB7Sg\.cK+8POlQIs|dd׻c|>`6+p;,tpmj/kR'ۺ.//@+ `\.ł.h6foU[q,GM`lu|/P ?~<*aeQ]/߻G.Ck$SSS$ < 2J%}ʃ(˲ZS.y%eUn޼Y\Ŷm< l ZfsBSc)c 8E K%9';O{IENDB`anki-2.1.0+dfsg~b36/designer/icons/collection.svg000066400000000000000000000100451323611211500216460ustar00rootroot00000000000000 anki-2.1.0+dfsg~b36/designer/icons/deck.svg000066400000000000000000000025511323611211500204240ustar00rootroot00000000000000 anki-2.1.0+dfsg~b36/designer/icons/heart.svg000066400000000000000000000020061323611211500206140ustar00rootroot00000000000000 anki-2.1.0+dfsg~b36/designer/icons/media-record.png000077700000000000000000000000001323611211500272312../../web/imgs/media-record.pngustar00rootroot00000000000000anki-2.1.0+dfsg~b36/designer/icons/notetype.svg000066400000000000000000000025251323611211500213660ustar00rootroot00000000000000 anki-2.1.0+dfsg~b36/designer/icons/tag.svg000066400000000000000000000020601323611211500202640ustar00rootroot00000000000000 anki-2.1.0+dfsg~b36/designer/importing.ui000066400000000000000000000115161323611211500202320ustar00rootroot00000000000000 ImportDialog 0 0 553 466 Import Import options Type Deck Update existing notes when first field matches Ignore lines where first field matches existing note Import even if existing note has same first field Allow HTML in fields 0 0 Field mapping 0 0 400 150 QFrame::NoFrame true 0 0 529 251 Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Help buttonBox buttonBox accepted() ImportDialog accept() 248 254 157 274 buttonBox rejected() ImportDialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/main.ui000066400000000000000000000145731323611211500171540ustar00rootroot00000000000000 MainWindow 0 0 412 301 0 0 400 0 Anki :/icons/anki.png:/icons/anki.png 1 1 true 0 0 412 22 &Help &Edit &File &Tools E&xit Ctrl+Q &Preferences... Configure interface language and options Ctrl+P QAction::PreferencesRole &About... QAction::AboutRole false &Undo Ctrl+Alt+Z Check &Media... Check the files in the media directory &Open Add-ons Folder... &Support Anki... &Browse and Install... &Check Database &Guide... F1 &Switch Profile Ctrl+Shift+P &Export... Ctrl+E &Import... Ctrl+Shift+I Study Deck... / Empty Cards... Create Filtered Deck... F Manage Note Types Ctrl+Shift+N Add-ons Ctrl+Shift+A anki-2.1.0+dfsg~b36/designer/modelopts.ui000066400000000000000000000056251323611211500202340ustar00rootroot00000000000000 Dialog Qt::ApplicationModal 0 0 374 344 0 LaTeX Create scalable images with dvisvgm Header true Footer true Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Help qtabwidget buttonBox latexHeader latexFooter buttonBox accepted() Dialog accept() 275 442 157 274 buttonBox rejected() Dialog reject() 343 442 286 274 anki-2.1.0+dfsg~b36/designer/models.ui000066400000000000000000000053461323611211500175110ustar00rootroot00000000000000 Dialog Qt::ApplicationModal 0 0 396 255 Note Types 0 6 0 0 12 Qt::Vertical QDialogButtonBox::Close|QDialogButtonBox::Help Qt::Vertical QSizePolicy::Minimum 20 6 modelsList buttonBox accepted() Dialog accept() 252 513 157 274 buttonBox rejected() Dialog reject() 320 513 286 274 anki-2.1.0+dfsg~b36/designer/preferences.ui000066400000000000000000000345721323611211500205320ustar00rootroot00000000000000 Preferences 0 0 405 455 Preferences Qt::StrongFocus 0 Basic 12 12 Interface language: 0 0 QComboBox::AdjustToMinimumContentsLengthWithIcon Show next review time above answer buttons Show remaining card count during review Paste clipboard images as PNG Show cards as white on black (night mode) Show learning cards with larger steps before reviews When adding, default to current deck Change deck depending on note type 12 Next day starts at 60 16777215 23 Learn ahead limit 60 16777215 999 mins Timebox time limit 9999 mins hours past midnight Qt::Vertical QSizePolicy::Expanding 20 20 Network 12 12 10 <b>Synchronisation</b> true true Synchronize audio and images too Automatically sync on profile open/close On next sync, force changes in one direction Deauthorize false Qt::Horizontal 40 1 Qt::Vertical 20 40 Backups 12 12 <b>Backups</b><br>Anki will create a backup of your collection each time it is closed or synchronized. true Keep 60 0 60 16777215 backups Qt::Horizontal 40 20 <a href="backups">Open backup folder</a> Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe. true Qt::Vertical 20 59 Some settings will take effect after you restart Anki. Qt::AlignCenter Qt::Horizontal QDialogButtonBox::Close|QDialogButtonBox::Help lang showEstimates showProgress pastePNG nightMode dayLearnFirst useCurrent newSpread dayOffset lrnCutoff timeLimit buttonBox numBackups syncOnProgramOpen tabWidget fullSync syncMedia syncDeauth buttonBox accepted() Preferences accept() 285 439 157 274 buttonBox rejected() Preferences reject() 332 439 286 274 anki-2.1.0+dfsg~b36/designer/preview.ui000066400000000000000000000021441323611211500177000ustar00rootroot00000000000000 Form 0 0 335 282 Form 0 Front Preview 0 Back Preview 0 anki-2.1.0+dfsg~b36/designer/profiles.ui000066400000000000000000000055251323611211500200500ustar00rootroot00000000000000 MainWindow 0 0 423 356 Profiles Open true Add Rename Delete Quit Qt::Vertical 20 40 Open Backup... false 0 0 423 22 false anki-2.1.0+dfsg~b36/designer/progress.ui000066400000000000000000000030431323611211500200620ustar00rootroot00000000000000 Dialog 0 0 310 69 Dialog 6 Qt::Vertical 0 0 Qt::AlignCenter 24 Qt::Vertical QSizePolicy::MinimumExpanding 0 0 anki-2.1.0+dfsg~b36/designer/reposition.ui000066400000000000000000000067001323611211500204140ustar00rootroot00000000000000 Dialog 0 0 272 229 Reposition New Cards Start position: -20000000 200000000 0 Step: 1 10000 Randomize order Shift position of existing cards true Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok start step randomize shift buttonBox buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/reschedule.ui000066400000000000000000000106151323611211500203440ustar00rootroot00000000000000 Dialog 0 0 325 144 Reschedule Place at end of new card queue true Place in review queue with interval between: false 20 0 0 0 ~ 9999 9999 days Qt::Horizontal 40 20 Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok asNew asRev min max buttonBox buttonBox accepted() Dialog accept() 222 144 157 157 buttonBox rejected() Dialog reject() 222 150 226 157 asRev toggled(bool) rangebox setEnabled(bool) 30 40 11 79 anki-2.1.0+dfsg~b36/designer/setgroup.ui000066400000000000000000000035731323611211500200760ustar00rootroot00000000000000 Dialog 0 0 433 143 Anki Move cards to deck: Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox buttonBox accepted() Dialog accept() 224 192 157 213 buttonBox rejected() Dialog reject() 292 198 286 213 anki-2.1.0+dfsg~b36/designer/setlang.ui000066400000000000000000000031061323611211500176530ustar00rootroot00000000000000 Dialog 0 0 400 300 Anki Interface language: Qt::Horizontal QDialogButtonBox::Ok buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/stats.ui000066400000000000000000000107411323611211500173570ustar00rootroot00000000000000 Dialog 0 0 607 556 Statistics 0 0 0 0 0 about:blank 8 6 6 6 6 Qt::Horizontal 40 20 deck true collection 1 month true 1 year deck life Qt::Horizontal QDialogButtonBox::Close AnkiWebView QWidget
aqt/webview
1
buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274
anki-2.1.0+dfsg~b36/designer/studydeck.ui000066400000000000000000000034161323611211500202210ustar00rootroot00000000000000 Dialog 0 0 400 300 Study Deck Filter: Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Help buttonBox accepted() Dialog accept() 248 254 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 anki-2.1.0+dfsg~b36/designer/taglimit.ui000066400000000000000000000057431323611211500200410ustar00rootroot00000000000000 Dialog 0 0 361 394 Selective Study Require one or more of these tags: false 0 2 QAbstractItemView::MultiSelection Select tags to exclude: true 0 2 QAbstractItemView::MultiSelection Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok buttonBox accepted() Dialog accept() 358 264 157 274 buttonBox rejected() Dialog reject() 316 260 286 274 activeCheck toggled(bool) activeList setEnabled(bool) 133 18 133 85 anki-2.1.0+dfsg~b36/designer/template.ui000066400000000000000000000116711323611211500200370ustar00rootroot00000000000000 Form 0 0 470 569 0 0 Form 0 0 0 Front Template 0 0 0 Styling 0 0 0 Qt::Vertical QSizePolicy::Preferred 1 15 Qt::Vertical 1 40 Qt::Vertical QSizePolicy::Preferred 1 10 0 10 0 Back Template 0 0 anki-2.1.0+dfsg~b36/locale/000077500000000000000000000000001323611211500153165ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/af/000077500000000000000000000000001323611211500157045ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/af/LC_MESSAGES/000077500000000000000000000000001323611211500174715ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/af/LC_MESSAGES/anki.mo000066400000000000000000001733341323611211500207630ustar00rootroot0000000000000008@ 9@D@K@"Q@t@ v@@@@8@@A!A"2A$UA$zA&A"AA4A21BdBuB"B$B$B$B $CECZCrCzCCCCCC CC DDDDD"D &D0D7D@D FDQDWD]DaD hDrD xDD DDDDDDDDE0 E a_P__]_ X`8d`````` ```a a aa $a 1a;a BaOaUa)da0aaa4a!b0bCbYbobb cc/c 6c.@cocucwczc c ccc cc ccccdd+d;dPdad hd sddNd"d ee#e:e@eGeefff %f3fBfJf]f mfxf}f ffff fffff.fFgUgng g g4ggg g1h4hDhdhsh*hh Pj^j }jj"j"j jk&k5kIkRk dk nk)|kk*lFl]l|lllll l llll<l-m 6mCmSmXm amlm}m mmm m mmmmmm nn/nIn Nn Znenyn nnnnn nn nn n nn o!o8oKo+aoo#o!ooo o o<p BpOp]_papq!3q Uqcqkqnq,qq#urkrs ss(s0s?s NsYs _s ksusss ssss t tt,5t#btVt8tEu\usu*u0uu v,vLv-ev+v8vv w ww0w#Bw0fw wwwww wwwxxx x1xMxbxjxixx x yy %y0y Ey"Syvy ~y1y yy yz z z $z1zAz`z-wzzz zzzz z z{V{t{ {{,|>|GS| |||"| }} }*}:}L}i}}}*}'}~@~6^~8~ ~!~?~;A Q _jp    0 8 E R\ m!dÀ (37FOT iw(| X+T"&+ʂ0+A>mF'*(F1o,_Iօ'Ɔ#ڇed8[C$(hr u&/M̋  nj Ҍ ތ! '/W^ck.&ݍ,4 ;FUe$"S0h$" {^o5ΐU cmu{  ”̔є֔ܔ&<AILT\ bln /;A&Hoqz@ !&4([&,3ؘ F0f"$˙&$(<&eǚ К ޚ)@Scgkotx |  ›țћ כ # 1?Pds7| М ؜̝ΝѝٝWN.P-"͞ ٟ (=zQ̠4 @ԡUtk-  ԣ  ,= F Q]f&v  ʤ+դOQh2 ħ٧ڨ_g{ǩ?C MJj ЫVګ1"ɬ' 4U@l ƭޭ !':Pcj$ĮӮ׮ ߮ !%B  "* 3 = HT guEc fpwӱ/%&7^u z !ײݲ6 %+7Jv ;6X\?,L Q_ ȵѵصߵ   " / < I V cpw ~¶Ӷ #6 < HRb=kͷ-շ  % 1 <HWi*|($иJ\YPBLJz F%lt$ ջ   $ 2= ESX(h;ͼJ*8c} ɽJbz 2Ⱦʾ$;   % ;EL T_x ƿӿZ&a  ', ERZc h v9N+Gg vD 6.'B jx;Q`#'*(1F[lu ,$p# '9>BU   /<MVj "(<OU] bn ?;{-/ : IW^ge,!Acy~?*\eu  6@Ee  )&*`<tV#%5I0&$6#?ZB $/68f  (/@Zu/}w%->M_n( C "($Kpx $. (4 9DI is#\ '18< &Fm (  -4M!60 M?cB %Oip   & ; Ef !/ 9  "''%Ouq,&0S1(42-F`M*& 0G/x.cE/&7Hm;obf w=SOT [ f t- . 85A)w/ "Z:=_3Z%#w~? 6HC    18Tl 8wVWzK>0H%ZAsiP(pZ" \)7 %i<+-.YU@.D{I? uelLxp]L6&DB\*tM y2gCJA7Zr XOF^fd tpQ =-K('^m.}hk)+2,FzvT9!&m=aG#j9b `;Ja[E91[n4|bYGy_W_q5;<4R$3N|4107:UE2$waV @?^5o8 {XXsh= l/I#/~f}Nn0xKRl*,+v/nC6ju{5[k)   d G8Et#kiALe&f 3$d!OCPTr<VY\bFJ:c'q HIo!vsx("g1%c@rS~'-QO?6"~e}B`gSRPT>m;SzU|B_qoHc`Q Ny,w3:j]]>hMuMD*W (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cards&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-08-12 19:00+0000 Last-Translator: mapache Language-Team: Afrikaans MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: af (1 van %d) (af) (aan) Dit het %d kaart. Dit het %d kaarte.%% Korrek%(a)0.1f%(b)s/dag%(a)0.1fkB op, %(b)0.1fkB af%(a)0.1fs (%(b)s)%(a)d van %(b)d nota opgedateer%(a)d van %(b)d notas opgedateer%(tot)s %(unit)s%.01f kaarte/minuut%d kaart%d kaarte%d kaart verwyder.%d kaarte verwyder.%d kaart uitgevoer.%d kaarte uitgevoer.%d kaart ingevoer.%d kaarte ingevoer.%d kaart gestudeer in%d kaarte gestudeer in%d kaart pak opgedateer.%d kaart pakke opgedateer.%d groep%d groepe%d media verandering om op te laai%d media veranderinge om op te laai%d media lêer afgelaai%d media lêers afgelaai%d nota%d notas%d nota bygevoeg%d notas bygevoeg%d nota verwyder.%d notas verwyder.%d nota uitgevoer.%d notas uitgevoer.%d nota ingevoer.%d notas ingevoer.%d nota onveranderd%d notas onveranderd%d nota opgedateer%d notas opgedateer%d hersiening%d hersienings%d geselekteer%d geselekteer%s kopie%s dag%s dae%s uur%s ure%s minuut%s minute%s minuut.%s minute.%s maand%s maande%s sekonde%s sekondes%s om te verwyder:%s jaar%s jare%sd%su%sm%sma%ss%sj&Omtrent...&Kaarte&Instop...&Wysig&Voer Uit...&Lêer&Vind&Gaan&Gids&Gids...&Hulp&Voer In...&Omkeer Seleksie&Volgende Kaart&Notas&Besigtig Byvoegings...&Voorkeure...&Vorige Kaart&Herskeduleer...&Ondersteun Anki...&Nutsprogramme&Ontdoen'%(row)s' het %(num1)d velde gehad, het %(num2)d verwag(%s korrek)(Nota verwyder)(einde)gefiltreer(leer)(nuwe)(ouer perk: %d)(kies asseblief 1 kaart)....anki2 lêers is nie ontwerp vir invoer nie. As jy probeer om te restoreer van 'n rugsteen-kopie, sien asseblief die 'Rugsteen-kopie' (Backups) afdeling van die handleiding./0d1 maand1 jaar10VM10NM3VM4VM4NM504 tussenganger onderbreking. Probeer asseblief jou anti-virus sagteware tydelik afsit:%d kaart%d kaarteMaak rugsteen lêer oopBesoek webwerf%(pct)d%% (%(x)s van %(y)s)%Y-%m-%d @ %H:%MRugsteen kopies
Anki sal rugsteen afskrifte van jou versameling maak elke keer wanneer dit toegemaak word of gesinchroniseer word.Uitvoer formaat:Vind: Karaktertipe Grootte:Karaktertipe: in :Insluitend: Lyn Grootte :Vervang met:Sinchronisasie/b Synchronisasie
Nie tans geaktiveer nie, kliek op die sync knoppie in die hoof venster om dit te aktiveer.

Rekening Vereis

'n Gratis rekening is nodig om jou versameling te sinchroniseer. Teken aan vir 'n rekening, dan vul jy jou besonderhede hieronder in.

Anki Opgedateer Anki %s is vrygestel.
Baie dankie aan al die mense wat voorstelle, foutverslae en skenkings aangestuur het.'n Kaart se gemak is die grootte van die volgende tussenpouse wanneer jy "goed" antwoord op 'n hersiening.n Gefiltreerde pak kan nie sub-pakke hê nie.'n Probleem het plaasgevind met media sinchronisasie. Gebruik asb Nutsprogramme>Ondersoek media, sinchroniseer dan weer om te korrigeer.Gestaak: %sOor AnkiVoeg byVoeg by (kortpad: Ctrl + Enter)Voeg Veld ByVoeg Media BySkep 'n Nuwe Pak (Ctrl + N)Voeg Nota Tipe ByVoeg Keersy ByVoeg Etikette ByVoeg by:Voeg by...Voeg by: %sBygevoegVandag BygevoegDuplikaat van eerste veld bygevoeg: %sWeerWeer vandagWeer Telling: %sAlle PakkeAlle VeldeAlle kaarte in lukrake volgorde (dril tipe)Alle kaarte, notas, en media vir hierdie profiel sal geskrap word. Is jy seker?Laat HTML in velde toeDaar was n probleem met toegang tot die databasis. Moontlike oorsake: - Antivirus, brandmuur, rugsteun, of sinchronisasie sagteware belemmer Anki. Probeer diaardie sagteware deaktiveer en kyk of die probleem opgelos is. - Jou hardeskyf is dalk vol. - Die Documents/Anki lêer is dalk geleë op n netwerk skyf. - Lêers in die Documents/Anki omslag mag dalk nie na toe geskryf kan word nie. - Jou harde skyf mag foutief wees. Dit is n goeie idee om Nutsprogramme>Ondersoek Databasis om te verseker jou databasis is nie korrup nie. 'n Fout het plaasgevind tydens die oopmaak van %sAnkiAnki 2,0 PakAnki kaartpak PakketAnki kon nie jou profiel vernoem nie, omdat dit nie die profiel lêer op die skyf kon vernoem nie. Maak asseblief seker dat jy permissie het om te kan skryf na Documente/Anki en dat geen ander programme jou profiel lêers tans gebruik nie, en probeer weer.Anki kon nie die lyn tussen die vraag en antwoord vind nie. Stel asseblief die profielvorm met die hand om te skakel van vraag na antwoord.Anki is 'n vriendelike, intelligente gespasieerde leer stelsel. Dit is gratis en openbare bron.Anki is gelisensieer met die AGPL3 lisensie. Sien asseblief die lisensie lêer in die bron verspreiding vir meer inligting.AnkiWeb ID of die wagwoord was verkeerd probeer asseblief weer.AnkiWeb ID:AnkiWeb het 'n fout teëgekom. Probeer asseblief weer in 'n paar minute, en indien die probleem voortduur, reik assebief 'n foutverslag uit.AnkiWeb is te besig op die oomblik. Probeer asseblief weer in 'n paar minute.AnkiWeb is besig met onderhoud. Probeer asseblief weer oor 'n paar minute.AntwoordAntwoord KnoppiesAntwoordeAnti-virus of brandmuur sagteware verhoed Anki tans om aan die internet te konnekteer.Enige kaarte wat na niks verwys nie sal uitgevee word. As 'n nota geen oorblywende kaarte het nie, sal dit uitgevee word. Is jy seker jy wil voortgaan?Verskyn twee keer in die lêer: %sIs jy seker jy wil %s verwyder?Ten minste een kaart tipe word benodig.Ten minste een stap word vereis.Speel outomaties audioSinchroniseer outomaties sodra die profiel oop of toegemaak wordGemiddeldGemiddelde TydGemiddelde antwoord tydGemiddelde gemakGemiddeld vir aantal dae studeerGemiddelde pouseTerugVoorskou AgterkantAgterkant ProfielvormRugsteun afskrifteBasiesBasiese (en omgekeerde kaart)Basiese (opsioneel omgekeerde kaart)BlaaiBlaaier VoorkomsBlaaier OpsiesBouBegraweBegrawe kaartBegrawe NotaBegrawe verwante kaarte tot môreBegrawe verwante herhalings tot môreBy verstek, sal Anki die karakter tussen die velde, soos na tab, komma, ensovoorts, opspoor. As Anki die karakter verkeerdelik opspoor, kan jy dit hier insit. Gebruik \t om tab te verbeeld.KanselleerKaartKaart %dKaart 1Kaart 2Kaart IDKaart LysTipe kaartKaart TipesKaart Tipes vir %sKaart gebêreKaart opgeskort.Kaart was 'n bloedsuier.KaarteKaarte kan nie per hand geskuif word in 'n gefiltreerde kaartpak nie.Kaarte in Gewone TeksKaarte sal outomaties teruggestuur word na hul oorspronklike kaartpakke nadat jy hulle hersien het.Kaarte...MiddelVeranderVerander %s na:Verander KaartpakVerander Tipe NotaVerander Tipe Nota (Ctrl + N)Verander Nota Tipe na ...Verander kaartpak, afhangende van die nota tipeGewysigGaan &Media Na...Gaan die lêers in die media omslag naBesig om na te gaan...KiesKies KaartpakKies Tipe NotaKies EtiketteKloon: %sSluitSluit en verloor huidige insette?ClozeKode:Versameling is korrup. Sien asseblief die handleiding.DubbelpuntKommaStel koppelvlak taal en opsiesVeels geluk! Jy is vir eers klaar met hierdie kaartpak.Koppel tans...Verbinding verbreek. Of jou internet verbinding het probleme ondervind, of jy het 'n oorgrote leêr in jou media gids.Gaan voortKopieërRegte antwoorde op volwasse kaarte: %(a)d/%(b)d (%(c).1f%%)Korrekte: %(pct)0.2f%%
(%(good)d van%(tot)d)Kon nie aan AnkiWeb konnekteer nie. Gaan asseblief jou netwerkverbinding na en probeer weer.Kon nie klank opneem nie. Het jy 'lame' en 'sox' geïnstalleer?Kon nie die lêer, %s stoor nieDrilSkep KaartpakSkep 'n Gefilterde Kaartpak ...GeskepCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl + DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZKumulatieweKumulatiewe %sKumulatiewe AntwoordeKumulatiewe KaarteHuidige KaartpakHuidige nota tipe:Pasmaker StudiePasmaker studie sessieKnipDatabasis herbou en geoptimaliseer.DatumDae studeerOntmagtigOntfout konsoleKaartpakKaartpak sal ingevoer word wanneer 'n profiel oopgemaak word.KaartpakVerminderende tussenpousesDefaultVertragings tot hersienings weer getoon word.SkrapSkrap KaarteSkrap KaartpakSkrap leësSkrap NotaSkrap NotasSkrap EtiketteSkrap OngebruikteSkrap veld van %s?Skrap die '%(a)s' kaart tipe, en sy %(b)s?Skrap hierdie nota tipe en al sy kaarte?Skrap hierdie ongebruikte nota tipe?Skrap ongebruikte media.Geskrapte %d kaart met vermiste notaGeskrapte %d kaarte met vermiste notaGeskrapte %d kaart met vermiste profieelvorm.Geskrapte %d kaarte met vermiste profieelvorm.%d nota geskrap met ontbrekende nota tipe.%d geskrap met ontbrekende nota tipe.%d nota geskrap met geen kaarte.%d notas geskrap met geen kaarte.%d kaart uitgevee met verkeerde velde%d kaarte uitgevee met verkeerde veldeGeskrapVerwydering van hierdie kaartpak van die kaartpak lys sal alle oorblywende kaarte terugkeer na hul oorspronklike kaartpak.BeskrywingBeskrywing om te vertoon op studie skerm (huidige kaartpak alleenlik):DialoogAflaai vanaf AnkiWebBesig om af te laai vanaf AnkiWeb...UitstaandeUitstaande kaarte alleenlikMôre uitstaande&VerlaatGemakMaklikMaklike bonusMaklike tussenpouseWysigWysig HuidigeWysig HTMLGewysigFont wysigingLeegLeë kaarte ...Leë kaart getalle: %(c)s Velde: %(f)s Leë kaarte gevind. Hardloop asb Nutsprogramme>Leë kaarte.Maak eerste veld leeg: %sEindeGee die nuwe kaartpak aan waarin %s kaarte geplaas moet word, of los leeg:Gee 'n nuwe kaart posisie (1 ... %s ) aan:Voeg hierdie etikette by:Verwyder hierdie etikette:Aflaai fout: %sFout tydens die laaiproses: %sSekure aansluiting's fout. Dit word gewoonlik veroorsaak deur antivirus, brandmuur of VPN sagteware, selfs probleme met jou IDV.Kon nie %s uitvoer nie.Fout met uitvoer van %sUitvoerUitvoer ...%d media lêer uitgevoer%d media lêers uitgevoerEkstraFF1Field %d van die lêer is:Veld verdelingVeld naam:Veld:VeldeVelde vir %sVelde geskei deur: %sVelde ...FilterFilter:GefiltreerGefiltreerde Kaartpak %dVind &Duplikate...Vind DuplikateVind en Vervang ...Vind en vervangVoltooiEerste kaartEerste HersienningEerste ooreenstemmende veld: %s%d kaart reggestel met ongeldige eienskappe.%d kaarte reggestel met ongeldige eienskappe.AnkiDroid dek oorskryf gogga herstel.Kaart tipe herstel: %sDraai omOmslag bestaan reeds.Font:VoetskrifVir sekuriteit redes, word '%s' nie toegelaat op kaarte nie. Jy kan dit steeds gebruik deur die opdrag in 'n ander pakket te plaas, en die invoer van die pakket in die LaTeX-kopskrif te plaas.VoorspellingVorm%(a)s gevind oor %(b)s.VoorkantVoorkant voorskouVoorkant ProfielvormAlgemeenGegenereerde lêer: %sGegenereer op %sKry GedeeldeGoedGradueerende tyssenpouseHTML WysigerMoeilikKopskrifHulpHoogste gemakGeskiedenisTuisUurlikse UiteensettingUreUre met minder as 30 hersiennings word nie aangetoon nie.As jy bygedra het, en nie op hierdie lys is nie, tree asseblief in verbinding.As jy elke dag studeer hetIgnoreer antwoord tye langer asIgnoreer gevalIgnoreer veldIgnoreer die lyne waar die eerste veld ooreenstem met bestaande notaIgnoreer hierdie weergaweInvoerLêer InvoerVoer in al het 'n bestaande nota dieselfde eerste veldInvoer het misluk. Invoer het misluk. Probleem inligting: Invoer opsiesInvoer voltooi.In die media lêer, maar nie deur enige kaarte gebruik nie:Om te verseker dat jou versameling korrek werk tussen toestelle, benodig Anki jou rekenaar se interne tyd om korrek te wees. Die interne tyd kan verkeerd wees selfs wanneer jou tyd die korrekte plaaslike tyd wys. Gaan asb na die tyd instellings op jou rekenaar en maak seker die volgende is korrek: AM/PM 'Clock drift' Dag, maand en jaar Tyd zone Daglig spaar tyd Verskil met korrekte tyd: %s.Sluit media inSluit skedulering inligting inSluit etikette inVerhoog vandag se nuwe kaart limietVerhoog vandag se nuwe kaart limiet metVerhoog vandag se hersienings kaart limietVerhoog vandag se hersienings limiet metToenemende tussentyeInstalleer ByvoegingKoppelvlak taal:Intervaltussentydse wysigertussentyeOngeldige kode.Ongeldige lêer. Herstel van rugsteun kopie.Ongeldige eienskap op kaart gevind. Gebruik asseblief Nutsprogramme>Ondersoek Databasis, en as die probleem aanhou, vra asseblief op die ondersteunings webbladOngeldige stringpatroon-uitdrukking.Dit is afgestel.Spring na etikette met Ctrl+Shift+THouLaTeXLaTeX vergelykingLaTeX wiskunde omgewing.GebrekeLaaste KaartLaaste hersienningLaaste bygevoeg 1LeerLeer vooruit beperkingLeer: %(a)s, Hersienning: %(b)s, Herleer: %(c)s, Gefiltered: %(d)sLeerBloedsuier aksieBloedsuier drumpelLinksBeperk totLaai tans...langste tussenpouseKyk in die veld:Laagste gemakBestuurBeheer Nota Tipes...Verwys na %sVerwys na EtiketVolwasseMaksimum tussenposeMaksimum hersiennings/dagMediaMinimum tussenposeMinuteMeng nuwe kaarte en hersieningsMnemosyne 2,0 Kaartpak (*.db)MeerMeeste vergissingsSkuif KaarteBeweeg kaarte na kaartpak:N&otaNaam bestaan reeds.Naam vir kaartpak:Naam:NetwerkNuutNuwe KaarteAlleenlik nuwe kaarteNuwe kaarte/dagNuwe kaartpak naam:Nuwe tussenpouseNuwe naam:Nuwe nota tipe:Nuwe opsies groep naam:Nuwe posisie (1 ... %d ):Volgende dag begin omGeen kaarte is uitstaande nie.Geen kaarte stem ooreen met die kriteria wat u verskaf het nie.Geen leë kaarte.Geen volwasse kaarte is vandag bestudeer nie.Geen ongebruikte of vermiste lêers gevind nie.NotaKaart IDTipe NotaNota TipesNota en sy %d kaart geskrap.Nota en sy %d kaarte geskrap.Nota begrawe.Nota opgeskort.Nota: Media is nie gerugsteun nie. Skep 'n rugsteun kopie van jou Anki gids om veilig te wees.Let wel: Sommige van die geskiedenis ontbreek. Vir meer inligting, kan u die leser dokumentasie sien.Notas in Gewone TeksNotas vereis ten minste een veld.Kaarte gekategoriseerNiksOKOudste eerste gesienOp volgende sinkronisasie, forseer veranderinge in een rigting.Een of meer notas is nie ingevoer nie, omdat hulle nie enige kaarte genereer nie. Dit kan gebeur wanneer jy leë velde het of wanneer jy nie nota inhoud in die teks lêer nie na die korrekte velde koreleer nie.Slegs nuwe kaarte kan herposisioneer word.Slegs een klieent het toegang tot AnkiWeb op 'n gegewe tyd. Indien 'n vorige sinchronisasie misluk het, probeer weer in 'n paar minute.Maak oopOptimaliseer...Opsionele perk:VoorkeureOpsies vir %sOpsies groep:Opsies...VolgordeVolgorde bygevoegVolgorde verwagOorsheers rugkant profielvorm:Oorheers karakter-tipe:Oorskryf voorkant profielvorm:Wagwoord:PlakPlak die knipbord beelde as PNGPauker 1.8 Les (*.pau.gz)PersentasieTydperk: %sPlaas aan die einde van die nuwe kaart ryPlaas in hersienings ry met tussentye:Voeg asseblief eers 'n ander nota tipe by.Koppel asseblief 'n mikrofoon en verseker dat ander programme nie die klank toestel gebruik nie.Wysig hierdie nota en voeg 'n paar cloze weglatings by. (%s)Maak asseblief seker dat 'n profiel oop is en Anki nie besig is nie, probeer dan weer.Installeer asseblief PyAudioMaak asseblief eers 'n profiel oop.verwyder asseblief eers die lêer %s en probeer weer.Om die taalkeuse te voltooi, moet Anki oorbegin.Hardloop asb Nutsprogramme>Leë kaarteKies 'n kaartpak.Kies kaarte van slegs een nota tipe.Kies asseblief iets.Gradeer asseblief op na die nuutste weergawe van Anki.Gebruik asseblief Lêer> Voer in - om hierdie lêer in te voer.Besoek gerus AnkiWeb, gradeer jou kaartpak op en probeer dan weer.PosisieVoorkeureVoorskouVoorskou van geselkteerde kaart (%s)Voorskou van nuwe kaarteVoorskou van nuwe kaarte bygevoeg in die laaste%d Media lêer geprosesseer%d Media lêers geprosesseerVerwerk tans...ProfieleInstaanbediener-stawing vereis.VraagWagtou onder: %dWagtou bo: %dVerlaatLukraakLukrake volgordeGraderingHerbouNeem Eie Stem OpOpname...
Tyd: %0.1fRelatiewe agterstalligheidHerleerOnthou die laaste toevoer wanneer bygevoeg wordVerwydering van hierdie kaart tipe sal maak dat een of meer notas geskrap word. Skep asseblief eers 'n nuwe kaart tipe.HernoemHernoem KaartpakHerspeel KlankHerspeel eie stemHerposisioneerHerposisioneer Nuwe KaarteHerposisioneer...Vereis een of meer van hierdie etikette:HerskedHerskeduleerHerskeduleer kaarte wat gebaseer is op my antwoorde in die kaartpakHervat NouTeenoorgestelde teks rigting (RNL)Keer terug na 'n toestand voor '%s'.HersienHersiennings TellingHersien TydHersien vooruitHersien vooruit metHersien vergete kaarte in die laasteHersien vergete kaarteHersien sukses koers vir elke uur van die dag.HersieningsRegsOmvang: %sSoekSoek binne formatering (stadig)SelekteerSeleteer &AllesSelekteer &NotasSelekteer etikette om uit te sluit:Gekose lêer was nie in UTF-8 formaat nie. Sien asb die invoer afdeling van die handleiding.Selektiewe StudieKommapuntWebbediener nie gevind nie. Jou konneksie is of af, of jou antivirus/brandmuur sagteware blokkeer Anki om die internet te gebruik.Plaas al die kaartpakke onder %s in hierdie opsie groep?Stel vir alle subkaartpakkeShift knoppie ingehou. Slaan outomatiese sinchronisasie oor.Skuif die posisie van bestaande kaarteKortpad sleutel: %sKortpad sleutel: Linker pyltjie.Kortpad sleutel: Regter pyltjie of EnterKortpad: %sWys %sWys AntwoordWys DuplikateWys antwoord tydhouerWys nuwe kaarte na hersieningWys nuwe kaarte voor hersieningWys nuwe kaarte in die orde waarin hulle bygevoeg isWys nuwe kaarte in enige volgordeToon volgende hersienning tyd bo die antwoord knoppiesWys oorblywende kaart telling tydens hersienningGrootte:Sommige verwante of kaarte wat gebêre is, is uitgestel tot 'n latere sessie.Sommige instellings sal in werking tree nadat jy Anki oorbegin.Sommige bywerkings is geignoreer omdat die nota tipe verander het:Sorteer VeldSorteer met hierdie veld in die leserSorteer van hierdie kolom word nie ondersteun nie. Kies asseblief 'n ander een.SpasieBegin posisie:Begin gemakStatistiekeStap:Stappe (in minute)Stappe moet getalle wees.Vandag GestudeerStudeerStudeer kaartpakStudeer kaartpak...Studeer NouStudeer deur kaart status of kategorieStileringStilering (gedeel tussen kaarte)Supermemo XML uitvoer (*.xml)Skort opSkort Kaart OpSkort Nota OpOpgeskorteOpgeskort+BegraweSinchroniseer klank en beelde ookSynchronisasie het misluk: %sSynchronisasie het misluk, internet van lyn af.Om te sinchroniseer vereis dat die klok op jou rekenaar korrek ingestel moet word. Stel asseblief die korrekte tyd in en probeer weer.Sinchroniseer...TabEtiket DuplikateSlegs EtiketEtiketteTeiken Kaartpak (Ctrl+D)Teiken veld:TeksTeks geskei deur tabs of kommapunte (*)Daardie kaartpak bestaan ​​reeds.Die veld naam is reeds gebruik.Daardie naam is reeds gebruik.Die verbinding met AnkiWeb het te lank geneem. Bevestig dat jou netwerkverbinding werk en probeer asseblief weer.Die verstekwaarde kan nie verwyder word nie.Die standaard kaartpak kan nie geskrap word nie.Die verdeling van die kaarte in jou kaartpak (s).Korrupte aflaai, probeer asseblief weer.Die eerste veld is leeg.Die eerste veld van die tipe nota moet ingevul word.Die volgende karakter kan nie gebruik word nie: %sDie kaart se voorkant is leeg. Hardloop asb Nutsprogramme>Leë Kaarte.Die insette wat u verskaf het, sou 'n leë vraag op al die kaarte veroorsaak.Die aantal nuwe kaarte wat jy bygevoeg hetDie aantal vrae wat jy beantwoord het.Die getal hersienings uitstaande in die toekoms.Die aantal kere wat jy elke knoppie gedruk het.Die permissies op jou stelsel se tydelike omslag is nie korrek nie, en Anki kan dit nie outomaties regstel nie. Soek asb vir 'tydelike omslag' in die Anki handleiding vir meer inligting.Die verskafde lêer is nie 'n .apkg lêer nie.Die soektog het geen resultate opgelewer nie. Wil u dit dalk hersien?Die versoekte wysiging sal 'n oplaai van jou hele databasis vereis wanneer u versameling weer gesinchroniseer word. Indien jy ander hersienings of veranderinge het op 'n ander toestel wat nog nie gesinchroniseer is nie, sal hulle verlore gaan. Gaan voort?Die tyd wat dit neem om die vrae te beantwoord.Daar is meer nuwe kaarte beskikbaar, maar die daaglikse limiet is al bereik. U kan die limiet verhoog in die opsies, maar hou asseblief in ag dat hoe meer nuwe kaarte jy byvoeg., hoe hoër sal jou kort termyn herhalings word.Daar moet ten minste een profiel wees.Hierdie kolom kan nie op gesorteer word nie, maar jy kan soek vir spesifieke kaartpakke deur op een aan die linkerkant te kliek.Hierdie lêer lyk nie soos 'n geldige .apkg lêer nie. As die lêer vanaf AnkiWeb afgelaai is, is daar 'n goeie kans dat iets fout gegaan het met die aflaai daarvan. Probeer asb weer. Indien die probeem voortduur, probeer met 'n verskillende webblaaier.Hierdie lêer bestaan. Is jy seker jy wil dit oorskryf?Hierdie gids stoor al van jou Anki data in 'n enkele plek, om rugsteun kopieë maklik te maak. Om Anki opdrag te gee om 'n ander plek te gebruik, Sien asb: %s Hierdie is 'n spesiale kaartpak om buite die normale skedule te studeer.Hierdie is 'n {{c1::voorbeeld}} van selektiewe verwydering.Dit sal jou bestaande versameling verwyder en dit vervang met die data in die lêer wat jy invoer. Is jy seker?TydGekose tyd limitOm Te HersienOm 'n cloze (selektiewe) verwydering te maak op 'n bestaande nota, moet jy dit eers na 'n cloze-tipe verander via Wysig>Verander nota tipe.Om hulle nou te sien, kliek op die Opgrawe knoppie hieronder.Om buite jou normale skedule te studeer, kliek die Studie Aanpas knoppie hieronder.VandagVandag se studie limiet is bereik, maar daar is nog kaarte wat wag om hersien te word. Vir optimale geheue, oorweeg die verhoging van die daaglikse limiet onder opsies.TotaalTotale TydTotale kaarteTotale notasBehandel teks as 'n stringpatroon-uitdrukkingTipeTipe antwoord: onbekende veld %sOnmoontlik om 'n lees-alleen lêer in te voer.OpgraweHerroepHerroep %sOnbekende lêer formaat.OngesienDateer bestaande notas op wanneer die eerste veld pas%(a)d van %(b)d bestaande notas opdateer.Laai op na AnkiwebLaai tans op na AnkiWeb...Op kaarte gebruik, maar ontbreek in media gids:Gebruiker 1Weergawe %sWag tans om redigering te voltooi.Waarskuwing, cloze weglatings gaan nie werk totdat jy bo na die cloze-tipe oorskakel nie.Wanneer jy bygevoeg, sal die kaartpak na standaard toe skuif.Hele VersamelingWil u dit nou aflaai?Jy het 'n cloze weglating nota tipe, maar het nog geen cloze weglatings gemaak nie. Gaan voort?Jy het baie kaartpakke. Sien asseblief %(a)s. %(b)sJy het nog nie jou stem opgeneem nie.Jy moet ten minste één kolom hê.JonkJonk+Besig om te leerJou veranderinge affekteer meer as een kaartpak. Indien jy net die huidige kaartpak wil verander, kies asseblief eers 'n nuwe opsie groep.Jou versameling is in n strydige toestand. Hardloop asseblief Nutsprogramme>Ondersoek Databasis, en sinchroniseer weer.Jou versameling of media lêer is te groot om te sinchroniseer.Jou versameling is suksesvol na AnkiWeb opgelaai. As jy ander toestelle gebruik, sinchroniseer hulle nou, en laai die versameling af wat jy nou net opgelaai het vanaf hierdie rekenaar. Wanneer jy dit klaar gedoen het sal verdere veranderinge automaties bygevoeg word.Die verskil tussen jou versamelinge hier en op AnkiWeb is van so n aard dat dit nie saamgesmeld kan word nie. Jy gaan een moet oorskryf met die ander. As jy aflaai kies, gaan Anki jou versameling vanaf AnkiWeb aflaai, en enige veranderinge op jou rekenaar, sedert jy laas gesynchroniseer het, gaan verlore gaan. As jy oplaai kies, gaan Anki jou versameling na AnkiWeb oplaai en enige veranderinge daar of op ander toestelle sedert jy laas gesynchroniseer het, gaan verlore wees. Sodra al jou toestelle gesynchroniseer is, sal toekomstige hersienings en kaarte automaties saamsmelt.[geen kaartpak]gerugsteundekaartekaarte van die pakkaarte geselekteer opversamelingddaekaartpakkaartpak tydlynduplikaathulpversteekureure na middernagvervalminder as 0.1 kaarte/minuutkoppel aan %s gekoppel aan Etiketteminuteminutemaandhersieningssekondesstatshierdie bladsywhele versameling~anki-2.1.0+dfsg~b36/locale/ar/000077500000000000000000000000001323611211500157205ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ar/LC_MESSAGES/000077500000000000000000000000001323611211500175055ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ar/LC_MESSAGES/anki.mo000066400000000000000000000443061323611211500207730ustar00rootroot000000000000003   "  >8P"$$&+"Ru42"$A$f$ &;Re z    % +6? Q\c{0 $ * 5@F]a Tm,o(! 4A S `k{ X '+FWmv~   R   &6<(Z5      )5<BGLQ`s      !F&m     " * / 9 E S o z      6!9!V! ^!h!8m! !!!!! !"!""'"=" B" c$p$ $ $$1% 4%?%&U%|%+%&&]&G''(])'*i*1++ ],ik--w.E/+0)11g2-3 3E3I4SQ4c4E 5SO5 5?5555566 66 (6'66^6 g6s666 666 66667"7$17V7m7777 7 7:7 )878 S8 ^8 i8 t8!8889999 9 9 9 9 99U:W:C:"B;#e;;;;;; ;<<2<L< ^<h<< =*=@=+]=== =====>z >>> >!>?? @#@ *@5@2K@ ~@9@6@H@CA^A vAAAAA AA AAAAAA B BB !B,B(KB$tB BBB*BB BCC1CHC\C cCqC xCC D'D6DSD&sDD#DD DDD E &E 3E @EKETEgEzE-EE EEEEF@FB_F@FPF 4G UG `GkGW}GG4G H +H9H'LHtH}H#H H e6DJ{P ';TZB*^~,F/g]S!2t[NI Ab|yHa 7(X4#W`qmM>8%0xC&c-dQ+hOwiKUE .o"V_p9}@L\5<=$ s)zvfk1GRn3l:r?jYu (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cards
Open backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MExport format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationA big thanks to all the people who have provided suggestions, bug reports and donations.About AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add New Deck (Ctrl+N)Add TagsAdd: %sAddedAgainAll DecksAll FieldsAnkiAnki 2.0 DeckAnki is a friendly, intelligent spaced learning system. It's free and open source.Average TimeBasicBuryBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCard ListCards...CenterChangeChange %s to:Check the files in the media directoryCloseClose and lose current input?Configure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Create DeckCreatedCtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+ZDeckDecksDeleteDelete DeckDelete TagsDialogE&xitEaseEasyEditEmpty Cards...Enter tags to add:Enter tags to delete:ExportExport...F1Field %d of file is:Field mappingFieldsFields...Find and Re&place...Find and ReplaceFirst ReviewGoodHTML EditorHardHelpIf you have contributed and are not on this list, please get in touch.Ignore this updateImportImport failed. Import optionsInclude scheduling informationInclude tagsInvalid regular expression.KeepLapsesLeftMap to %sMap to TagsMoreNetworkNothingOpenPassword:PreferencesProcessing...Recording...
Time: %0.1fRescheduleReviewReviewsRightSelect &AllShow AnswerShow new cards before reviewsShow new cards in order addedShow new cards in random orderSome settings will take effect after you restart Anki.Supermemo XML export (*.xml)SuspendSuspendedTagsThis file exists. Are you sure you want to overwrite it?Total TimeTreat input as regular expressionTypeUndo %sVersion %sWould you like to download it now?daysmapped to %smapped to TagsminsProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2018-01-08 09:27+0000 Last-Translator: mame_b Language-Team: Arabic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: ar (1 من %d) (غير مفعل) مغلق (تشغيل) فيها %d بطاقة. فيها %d بطاقة. فيها %d بطاقة. فيها %d بطاقة. فيها %d بطاقة. فيها %d بطاقة.٪% صحيح%(a)0.1f %(b)s/يوم%(a)0.1fkB up, %(b)0.1fkB منخفضة%(a)0.1fs (%(b)s)%(a)d من %(b)d ملاحظة تم تحديثها%(a)d من %(b)d ملاحظة تم تحديثها%(a)d من %(b)d ملاحظة تم تحديثها%(a)d من %(b)d ملاحظة تم تحديثها%(a)d من %(b)d ملاحظة تم تحديثها%(a)d من %(b)d ملاحظة تم تحديثها%(tot)s %(unit)s%.01f بطاقات/دقيقة%d بطاقة%d بطاقات%d بطاقات%d بطاقات%d بطاقات%d بطاقات%d بطاقة محذوفة.%d بطاقات محذوفة.%d بطاقات محذوفة.%d بطاقات محذوفة.%d بطاقات محذوفة.%d بطاقات محذوفة.%d بطاقة مصدرة.%d بطاقات مصدرة.%d بطاقات مصدرة.%d بطاقات مصدرة.%d بطاقات مصدرة.%d بطاقات مصدرة.%d بطاقة مستوردة.%d بطاقات مستوردة.%d بطاقات مستوردة.%d بطاقات مستوردة.%d بطاقات مستوردة.%d بطاقات مستوردة.%d بطاقة مدروسة في%d بطاقات مدروسة في%d بطاقات مدروسة في%d بطاقات مدروسة في%d بطاقات مدروسة في%d بطاقات مدروسة في%d رزمة محدثة.%d رزمات محدثة.%d رزمات محدثة.%d رزمات محدثة.%d رزمات محدثة.%d رزمات محدثة.%d مجموعة%d مجموعات%d مجموعات%d مجموعات%d مجموعات%d مجموعات%d تغييرات في السائط للتحميل%d تغييرات في السائط للتحميل%d تغييرات في السائط للتحميل%d تغييرات في السائط للتحميل%d تغييرات في السائط للتحميل%d تغييرات في السائط للتحميل%d من ملفات الوسائط منزلة%d من ملفات الوسائط منزلة%d من ملفات الوسائط منزلة%d من ملفات الوسائط منزلة%d من ملفات الوسائط منزلة%d من ملفات الوسائط منزلةملاحظة %d%d ملاحظات%d ملاحظات%d ملاحظات%d ملاحظات%d ملاحظات%d ملاحظة أضيفت%d ملاحظة أضيفت%d ملاحظة أضيفت%d ملاحظة أضيفت%d ملاحظة أضيفت%d ملاحظة أضيفت%d ملاحظة تم حذفها.%d ملاحظة تم حذفها.%d ملاحظات تم حذفها.%d ملاحظات تم حذفها.%d ملاحظات تم حذفها.%d ملاحظات تم حذفها.%d ملاحظة تم تصديرها.%d ملاحظة تم تصديرها.%d ملاحظات تم تصديرها.%d ملاحظات تم تصديرها.%d ملاحظات تم تصديرها.%d ملاحظات تم تصديرها.%d ملاحظة تم استيرادها.%d ملاحظة تم استيرادها.%d ملاحظات تم استيرادها.%d ملاحظات تم استيرادها.%d ملاحظات تم استيرادها.%d ملاحظات تم استيرادها.%d ملاحظة لم تغير%d ملاحظة لم تغير%d ملاحظات لم تغير%d ملاحظات لم تغير%d ملاحظات لم تغير%d ملاحظات لم تغير%d ملاحظة تم تحديثها%d ملاحظة تم تحديثها%d ملاحظات تم تحديثها%d ملاحظات تم تحديثها%d ملاحظات تم تحديثها%d ملاحظات تم تحديثها%d مذاكرة%d مذاكرة%d مذاكرات%d مذاكرات%d مذاكرات%d مذاكرات%d تم اختياره%d تم اختياره%d تم اختياره%d تم اختياره%d تم اختياره%d تم اختياره%s نسخ%s يوم%s يوميومين (%s)%s ايام%s يوما%s يوم%s ساعة%s ساعة%s ساعة%s ساعات%s ساعة%s ساعة%s دقيقة%s دقيقة%s دقيقة%s دقائق%s دقيقة%s دقيقة%s دقيقة.%s دقالئق.%s دقالئق.%s دقالئق.%s دقالئق.%s دقالئق.%s شهر%s شهور%s شهور%s شهور%s شهور%s شهور%s ثانية%s ثانية%s ثانية%s ثواني%s ثانية%s ثانية%s لخذف:%s سنة%s سنة%s سنة%s سنوات%s سنة%s سنة%sd%sh%sm%smo%ss%sy&عن&استكشف وثبّت&بطاقات&تأكّد جداول المعلمات&Cram...&تحرير&تصدير...&ملف&بحث&اذهب&تعليمات&تعليمات...&مساعدة&إستيراد...&خبر&أعكس الإختيار&البطاقة التاليةملاحظات&فتح مجلد الاضافات...&التفضيلات...&البطاقة السابقة&اعادة جدولة...&دعم آنكي...&بدّل ملف الشخص&أدوات&تراجع'%(row)s' لديه%(num1)d حفول, متوقعة %(num2)d(%s صحيح)(ملاحظة محذوفة)نهايةتصفيةدراسة(جديد)أختر بطاقة من فضلك...ملفات آنكي ليست مصممة للاستيراد. للإستعادة من نسخة احتياطية، الرجاء الاطلاع على قسم "النسخ الاحتياطي" في دليل المستخدم./0d1 شهر1 سنة10صباحا10مساء3صباحا4مساء4مساءتم تلقي خطأ 504 في gateway . الرجاء محاولة تعطيل برنامج مكافحة الفيروسات مؤقتا.:%d card%d cards%d cards%d cards%d cards%d cardsفتح مجلد النسخ الاحتياطيزر الموقع%(pct)d%% (%(x)s من %(y)s)%Y-%m-%d @ %H:%Mصيغة التصدير:بحث:حجم الخط:الخط:في:اشتملحجم السطر:استبدل مع:تزامنشكرا جزيلا لكل الاشخاص الذين زودونا بإقتراحاتهم،تقارير الاخطاء وكذلك تبرعاتهمحول آنكيإضافةأضف (طريق مختصرة: ctrl+enter)أضف نوع البطاقةاضافة مجموعة جديدة (Ctrl+N)إضافة سمات Tagsاضافة: %sاُضيفتمرة أخرىكل المجموعاتجميع الحقولآنكيمجموعة آنكي 2.0آنكي خفيف, ذكي في نظام التعليم المتباعد. وكذلك مجاني و مفتوح المصدر.معدل الوقتأساسالطلبافتراضيا؛ سيكتشف أنكي Anki الرموز بين الحقول مثل التاب tab، الفاصلة، و البقية. إذا كان كشف أنكي Anki عن هذه الرموز خاطئا؛ تستطيع إدخالها هنا استخدم \t لتمثل التاب tab.إلغاء الأمرقائمة البطاقاتكروت...وسطتعديلتغيير %s الى:فحص الملفات في مجلد الوسائطإغلاقاغلاق وخسارة المدخلات الحالية?تعديل واجهة اللغات و الخياراتتهانينا لقد انتهيت من هذه المجموعة الآنجاري الإتصال...مجموعة جديدةإنشاءCtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Zمجموعةمجموعاتحذفحذف مجموعةحذف الوسومحوار&خروجتسهيلسهلتحريرالكروت الفارغة...اختر سمات Tags لإصافتها:اختر سمات Tags لحذفها:تصديرتصدير....F1حقل %d من الملف يكون:تخطيط الحقلالحقولالحقول...بحث و استبد&ال...بحث و استبدلاول مراجعةجيدHTML محررصعبمساعدةاذا كنت مساهم في البرنامج وإسمك غير موجود في القائمة ، الرجاء اتصل بنا.تجاهل هذا التحديثاستيرادفشل الااستيراد خيارات الاستيراداشمل معلومات الجدولةاشمل السمات Tagsتعبير عادي غير صالححفظهفواتيسارخريطة إلى %sخريطة السمات Tagsالمزيدالشبكةﻻ شيءافتحكلمة السر:التفضيلاتمعالجة...يتم التسجيل...
الوقت: %0.1fاعادة جدولةمراجعةمراجعاتيميناختر ال&كلاظهر الإجابةاظهر البطاقات الجديدة قبل المراجعةاظهار البطاقات الجديدة بحسب الاضافةاظهار البطاقات الجديدة بشكل عشوائيبعض الإعدادات سوف تفعل بعد إعادة تشغيل آنكي.Supermemo XML تصدير (*.xml)تعليقموقوفالوسوم Tagsهذا الملف موجود. هل أنت متأكد أنك تريد استبداله؟الوقت الكليعامل المدخلات كأي تعبير عاديالنوعتراجع %sاﻻصدارة %sهل ترغب بتحميله الآن؟اياممخطط إلى %sمخطط إلى الوسومدقائقanki-2.1.0+dfsg~b36/locale/az/000077500000000000000000000000001323611211500157305ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/az/LC_MESSAGES/000077500000000000000000000000001323611211500175155ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/az/LC_MESSAGES/anki.mo000066400000000000000000000040771323611211500210040ustar00rootroot00000000000000+t;  '7>DJLN R\bgow|     &4J Yfovx z! (3: *  '"!) + #&%$( %%s copy%s day%s days%s hour%s hours&Edit&Export...&File&Find&Go&Help&Import...&Invert Selection&Preferences...&Tools&Undo(new)/:AddAdd MediaAgainAnkiAnswersAverageBackBasicCardsCenterDefaultDueError executing %s.ForecastFrontHoursIntervalLeftMinutesPercentagePositionRandomReviewRightProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2015-04-12 13:50+0000 Last-Translator: Emin Mastizada Language-Team: Azerbaijani MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: az %nüsxə %s%s gün%s gün%s saat%s saat&Düzəltİ&xraç Et....&Fayl&Axtar&Get&Kömək&İdxal Et...&Seçimi tərs çevir&Seçimlər...&Vasitələr&Geri al(yeni)/:Əlavə etMedia əlavə etYenəAnkiCavablarOrtalamaGeriƏsasKartlarOrtaƏsasTarixinə qədər%s icra xətası.GöndərÖnSaatAralıqSolDəqiqəFaizMövqeTəsadüfiİcmalSaǧanki-2.1.0+dfsg~b36/locale/bg/000077500000000000000000000000001323611211500157065ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/bg/LC_MESSAGES/000077500000000000000000000000001323611211500174735ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/bg/LC_MESSAGES/anki.mo000066400000000000000000002145271323611211500207650ustar00rootroot00000000000000l*8 89 9"949 69@9S98e9999"9$9$:&@:"g::4:2:;;"3;$V;${;$; ;;;<<*<;<P<g<z< <<<<<<<< <<< <<<<< = = == /=:=R=b=q====0= == = ===>>>>>>>>>>>T>%?,'?(T?}?!??f?=@ S@`@ r@ @@@@@e@>A7A B5*BX`BYB%Ck9C CCC C CC C DDD$D,D 2D$>DcD iDuD D D%DKD E"!EDE IEWEiEKFRFv"G7G GwGEUH@HHHHRHMII#I#J3JRJ(kJJ JJ JJJJ J KKK"KUP]UU]U V8!VZVaVwVVV VVVV V VV V VV V W)W0sF0t'wt*t(t1t%u,uIvZv'Jwrw#^xexx8yzCzrz_{ d{/n{M{{{| | | |!|'|} }}}/}.6}&e}}},}} }}$~9~"J~0m~$~"~{~5b  ̀؀ڀ߀ 7<DGOW ]giz *7MGaԃaN _Ka[JCS>Zk#\WU؇g.eeWb)#0Ff#Ȋ #AQi ʋ # 07M-  D+p )̍0ՍT _a fsDFgb2ʐ#!92ӑ)G Ze(#ƒ'"M5q PDFZ.k3+03J$~љ: 7D,ZB5Aԛ/Dܞ^K t' ̢ݢi=zG:7;Xsn̥ ;H1`,. +A^z/>"$*O%f=^ʨi)N  . Oj|) ޫx"b +8Gc4?7a/7Tܮ1L].xƯݯ^KiSаXU<hU@)pdz:8"s7δ  '8I Z gt}%ڵ**=*h] :! \egͷ'ܷ3"V&i&(** &64])Nb NnSq,xɽV!#4Xkm -3ܿ,' Tu!JbD6C8z.05(4^yB[]&` / "%'H&p&&2,_7 ::F.-+1:Z9w   % :+G sV%@@>&79q$|0*`[*)`9rQ(N'Qv[^$2#a+{>(9 b7m'( P]{"9> Y0d5# Zu*9 1M U`i}$&4/!d*6F!/8Q_2,B^-( %>(A-solGP  .)5 _mTIFcE}*2>RqZJ&jF$KvIk,;)VQF[quD Q+^- $ :'+bM,9H2{/Vg3!RGX!r36U3U='A9`!Bd`O9Y)B%Qh*0HEb]cOLy`z ug_ J=kp9U jx &"\V=ei8*Mc&  (^31?.}3fOIh(Bq8 PYMD(=@f{#Vw8O| g 4 oD   a l k  ^f: 1sCixOn^8|G=<;x|>  )C T_p y3 59Y?aC4c3@kgO9r{4gKEUk9i@NYv)dh%uF5a:RfV[motL!90 c6q)quGJ}nM /<AF=;g}xSzbZ$3!lx1F\pA hP7vXX!N%&/r`qZwHGWw|y?W,lB>N)_D%T~ste zvs7C(` .iSDM ~ K.ol \*SEf48x[<2 '(*,'^-O$Q ]$-;e8]+|bf"bJyHZ+& A,G"^' 1"dk1:rwiO]RpX5MT J*|</+Y=hy V0 t@#C6_uIW Im7?Vm=B -nj}RnK#U6dBc`.PEP{pUT22aj&j{_L([>\35^eLQ#;~>z:0D8sHQ Io (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.About AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?Code:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.EndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:Filtered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.FlipFolder already exists.Font:For security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byInstall Add-onInterface language:IntervalIntervalsInvalid code.Invalid file. Please restore from backup.Invalid regular expression.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLast CardLatest ReviewLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOverride font:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:Reschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.Review CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Start position:Starting easeStatisticsStep:Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)Synchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The first field is empty.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTo ReviewTo see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.When adding, default to current deckWhole CollectionWould you like to download it now?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.Your changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.[no deck]backupscardscards from the deckcollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightless than 0.1 cards/minuteminsminutesmoreviewssecondsstatsthis pagewwhole collectionProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-06-18 18:40+0000 Last-Translator: Kostenlos Language-Team: Bulgarian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: bg (1 от %d) (изключено) (включено) То съдържа %d карта. То съдържа %d карти.%% правилни%(a)0.1f %(b)s/ден%(a)0.1fсек. (%(b)s)%(a)d от %(b)d бележка обновена%(a)d от %(b)d бележки обновени%(tot)s %(unit)s%.01f карти в минута%d карта%d карти%d карта беше изтрита%d карти бяха изтрити%d карта беше експортирана.%d карти бяха експортирани.%d карта беше импортирана%d карти бяха импортирани%d карта научена за%d карти научени за%d тесте беше обновено%d тестета бяха обновени%d група%d групи%d промяна в медийните файлове за качване%d промени в медийните файлове за качване%d медиен файл беше изтеглен%d медийни файла бяха изтеглени%d бележка%d бележки%d бележка беше добавена%d бележки бяха добавени%d бележка беше изтрита.Бяха изтрити %d бележки.%d бележка беше експортирана%d бележки бяха експортирани%d бележка беше импортирана.%d бележки бяха импортирани.%d бележка не беше променена%d бележки не бяха променени%d бележка беше обновена%d бележки бяха обновени%d преговор%d преговора%d избрани%d избрани%s копиране%s ден%s дни%s час%s часа%s минута%s минути%s минута%s минути%s месец%s месеца%s секунда%s секунди%s за изтриване:%s година%s години%sd%sh%sm%s мес.%ss%sy&За програмата...&Зубрене&Редактиране&Експортиране...&Файл&Търсене&Действия&Ръководство&Ръководство...&Помощ&Импортиране...&Обръщане на избора&Следваща карта&Отваряне на папката с добавки&Настройки&Предишна картаПромяна на &разписаниетоПодпомагане на Anki&Инструменти&Отмяна'%(row)s' има %(num1)d полета, очакват се %(num2)d(%s верни)(край)(филтрирани)(в процес на научаване)(нов)(моля, изберете една карта)...Файловете с разширение .anki2 не могат се използват за импортиране; ако се опитвате да направите възстановяване от резервно копие, моля проверете секцията "Резервни копия" в ръководството./0 д1 месец1 година10 ч.22 ч.3 ч.4 ч.16 ч.Получена грешка "504 gateway timeout". Опитайте с временно изключване на антивирусната програма.:%d карта%d картиОтваряне на директорията с резервните копияПосетете уебсайта%(pct)d%% (%(x)s от %(y)s)%Y-%m-%d @ %H:%MРезервни копия
създават се всеки път, когато затворите или синхронизирате Anki.Формат за експортиране:Търсене:Големина на шрифтаШрифт:В:Включване на:Размер на линиите:Замени с:СинхронизиранеСинхронизиране

Необходим е профил

За синхронизиране на колекциите е необходим безплатен профил. Моля регистрирайте се и въведете данните си по-долу след това.

Anki беше обновен

Anki %s беше издаден.

<игнорирано><текст за търсене, натиснете Enter за отваряне на текущото тесте>Много благодарности към всички хора, които помогнаха с предложения, докладваха проблеми и допринесоха с парични дарения."Спокойствието" (Ease) на една карта е дължината на следващия интервал, когато отговорите "добро" при преговор.Филтрирано тесте не може да има под-тестета.Възникна проблем при синхронизирането на медийните файлове. Използвайте Инструменти->Проверка на медийните файлове, след това синхронизирайте отново за поправяне на проблема.Относно AnkiДобавянеДобавяне (пряк път: Ctrl+Enter)Добавяне на полеДобавяне на медийни файловеДобавяне на тесте (Ctrl + N)Добавяне на тип на бележкаДобавяне на обратната картаДобавяне на етикетиДобавяне към:Добавяне: %sДобавениДобавени днесДобавен дубликат с първо поле: %sОтновоОтново днесБрой отговори "Отново": %sВсички тестетаВсички полетаВсички карти в произволен ред (cram mode)Всички карти, бележки и медийни файлове в този профил ще бъдат изтрити. Сигурни ли сте?Разрешаване на HTML в полетата.Възникна грешка при отварянето на %sAnkiAnki 2.0 тестеAnki Deck пакетAnki не можа да преименува профила Ви, защото не можа да преименува профилната директория на диска. Моля, уверете се, че имате права да записвате в Documents/Anki и че няма други програми, използващи профилните директории; след това опитайте отново.Anki не можа да намери линията между въпроса и отговора. Моля, настройте шаблона ръчно да превключва между въпроса и отговора.Anki е приятна и интелигентно организирана система за обучение. Тя е безплатна и е с отворен код.Програмата Anki е лицензирана под лиценза AGPL 3. За повече информация вижте лицензионния файл в изходния код.AnkiWeb ID или паролата са грешни; моля, опитайте отново.AnkiWeb ID:AnkiWeb се сблъска с грешка. Моля, опитайте отново след няколко минути, и ако отново имате проблеми, моля, докладвайте за неизправност.AnkiWeb е твърде зает в момента. Моля, опитайте отново след няколко минути.AnkiWeb е в процес на поддръжка. Моля, опитайте след няколко минути.ОтговорБутони за отговорОтговориАнтивирусна програма или защитна стена забранява на anki достъпа до интернет.Всички карти, които не са прехвърлени към нова карта, ще бъдат изтрити. Бележка без останали карти се изтрива. Сигурни ли сте, че искате да продължите?Появяващи се два пъти във файла: %sСигурни ли сте, че искате да изтриете %s?Необходим е поне един тип карта.Необходима е поне една стъпка.Автоматично възпроизвеждане на звукови файловеАвтоматична синхронизаци при отваряне/затваряне на профилаСредноСредно времеСредно време на отговарянеСредно "спокойствие" (Ease)Средно за броя учебни дниСреден интервалГръбПреглед на задната частШаблон за гърбаРезервни копияОсновенОсновна (и обърната карта)Основна (+ обърната карта по избор)ПрегледИзглед на браузъраНастройки на четецаПострояванеСкриване за по-късноСкриване на бележката за по-късноЗаравяне на свързаните нови карти до следващия ден.Заравяне на свързаните карти за преглед до следващия ден.По подразбиране Anki ще разпознае символът между полетата като запетайка, табулация и т.н. Ако Anki разпознава символа погрешно, въведете го тук. Използвайте \t за да изобразите табулация.ОтказКартаКарта %dКарта 1Карта 1Идентификатор на картатаСписък с картиТип картаВидове картиТипове карти за %sКартата беше заровена.КартиКартите не можаха да бъдат ръчно преместени във филтрирано тесте.Карти в чист текст.Картите автоматично ще се върнат в първоначалното им тесте, след като ги прегледате.КартиЦентърПромянаПроменете %s на:Промяна на тестеПромяна на типа на бележкатаПромяна на типа на бележката (Ctrl + N)Промяна на типа на бележката...Промяна на тестето в зависимост от типа на бележката.ПромененоПроверка на медийните файловеПроверка на директорията с медийните файлове.Проверява се...ИзбиранеИзбор на тестеИзбор на тип за бележкатаИзбор на етикетиКлониране: %sЗатвориПри затваряне досега въведеният текст ще се загуби!Код:Колекцията е повередена. Моля, проверете в ръководството.ДвоеточиеЗапетайкаКонфигурирация на езика на интерфейса и опциитеПоздравления! Приключихте с това тесте засега.Свързване...Връзката изтече. Възникват или проблеми с интернета, или имате твърде голям файл в медийната директория.ПродължаванеКопиранеПравилни отговори на зрели карти: %(a)d/%(b)d (%(c).1f%%)Правилни: %(pct)0.2f%%
(%(good)d от %(tot)d)Не може да се установи връзка с AnkiWeb. Проверете интернет връзката си и опитайте отново.Аудиото не можа да бъде записано. Имате ли инсталирани lame и sox?Файлът %s не можа да бъде запазенСъздаване на тестеСъздаване на филтрирано тестеСъздаденаCtrl + Alt + FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl + Shift + LCtrl + Shift + MCtrl + Shift + NCtrl+Shift+PCtrl+Shift+SCtrl + WCtrl+ZНарастващоНарастващо в %sНарастващи отговориНарастващи картиТекущо тестеТекущ тип на бележката:Учене извън програматаУчене извън програматаИзрязванеБазата данни беше създадена наново и оптимизирана.ДатаУчебни дниПремахване на упълномощаванетоТестеТестето ще бъде импортирано при отваряне на нов профил.ТестетаНамаляващи интервалиПо подразбиранеВреме до следващия преговорИзтриванеИзтриване на картитеИзтриване на тестетоИзтриване на празнитеИзтриване на бележкатаИзтриване на бележкитеИзтриване на етикетиИзтриване на неизползванитеИзтриване на поле от %s?Изтриване на типа карти '%(a)s' и неговите %(b)s?Изтриване на този тип бележки и всичките карти в него?Изтриване на този неизползван тип бележки?Изтриване на неизползваните медийни файлове?Беше изтрита %d карт с липсващи бележкиБяха изтрити %d карти с липсващи бележкиБеше изтрита %d карта с липсващ шаблон.Бяха изтрити %d карти с липсващ шаблонБеше изтрита %d бележка без тип.Бяха изтрити %d бележки без тип.Беше изтрита %d бележка без картиБяха изтрити %d бележки без карти.Беше изтрита %d бележка с грешен брой полета.Бяха изтрити %d бележки с грешен брой полета.Изтрито.Изтриването на това тесте от списъка с тестета ще върне всички останали карти в първоначалното им тесте.Описание:Описание, което се показазва на екрана за ученеДиалогов прозорецИзтегляне от AnkiWebИзтегля се от AnkiWeb...НасроченоOЗа преглед утре&ИзходЛекотаЛесноБонус при отговор "Лесно"Интервал при отговор "Лесно"РедактиранеРедактиране на текущатаРедактиране на HTMLРедактираноПромяна на шрифта:ИзпразванеНомера на празните карти: %(c)s Полета: %(f)s Бяха намерени празни карти. Моля, стартирайте Инструменти->Празни картиКрайИзберете тесте за %sте нови карти, или оставете празно:Въведете нова позиция за картата (1..%s)Въведете етикети за добавяне:Въведете етикети за изтриване:Грешка при изтеглянето: %sГрешка при стартирането: %sГрешка при установяването на сигурна връзка. Това обикновено се причинява от антивирусен софтуер, VPN или Firewall, или проблеми с вашия интернет доставчик.Грешка при изпълнението на %s.Грешка при изпълнението на %sЕкспортиранеЕкспортиране...%d медиен файл беше експортиран.Бяха експортирани %d медийни файла.ДопълнителниFF1%d поле от файла е:Име на полето:Поле:ПолетаПолета за %sПолетата се разделят от: %sПолетаФилтърФилтър:Филтрирано тесте %d&Търсене на дубликатиТърсене на дубликатиТърсене и заместванеТърсене и заместванеЗавършванеПърва картаПърви преговорПърво съответстващо поле: %sПоправена %d карта с невалидни атрибути.Поправени %d карти с невалидни атрибути.ОбръщанеДиректорията вече съществува.Шрифт:От мерки за сигурност, използването на '%s' не се разрешава в картите. Вместо това може да го използвате, поставяйки командата в друг пакет, и включвайки този пакет в LaTeX header-a.ПрогнозаБяха намерени %(a)s сред %(b)sЛицева частПреглед на лицевата частШаблон на лицевата частОбщиГенериран файл: %sГенерирано на %sИзтегляне на споделени тестетаДобреHTML редакторТрудноЗаглавна частПомощНай-голяма лекотаХронологияНачалоПочасово разпределениеЧасовеЧасове с по-малко от 30 преговора не са показани.Ако учехте всеки денИгнориране на отговори, по-дълги отБез различаване главни/малки буквиИгнориране на полетоИгнориране на редове, в които първото поле съответства на съществуваща бележка.Игнориране на това обновяванеИмпортиранеИмпортиране на файлИмпортиране дори ако първото поле на съществуваща бележка е същото.Импортирането се провали. Импортирането се провали. Информация за изследване: Опции на импортиранетоИмпортирането завършиВ медийната папка, но неизползвани в нито една карта:Включване на медийните файловеВключване на сроковете от учебната програмаВключване на таговетеУвеличаване на днешния лимит за нови картиУвеличаване на днешния лимит за нови карти сУвеличаване на днешния лимит за карти за преговорУвеличаване на днешния лимит за карти за преговор сИнсталиране на приставкатаЕзик на програмата:ИнтервалИнтервалиНевалиден код.Невалиден файл. Моля, възстановете от резервно копие.Грешен регулярен израз.Прескачане към етикетите с Ctrl+Shift+TЗапазване наLaTeXLaTeX уравнениеПоследна картаНай-скорошен преговорУченеОграничение на ученето напредНаучение (нови): %(a)s, Преговорени: %(b)s, Научени отново: %(c)s, Филтрирани: %(d)sВ процес на научаванеОтлявоОграничаване доЗареждане...Най-дълъг интервалТърсене в поле:Най-ниска лекотаУправлениеУправление на типовете бележкиПревръщане в %sЗрелиМаксимално дълъг интервалМаксимум преговаряния на денМедийни файловеМинимален интервалМинутиРазбъркване на новите карти и картите за преглед.Mnemosyne 2.0 Тесте (*.db)ОщеПреместване на картитеПреместване на картите в тесте:БележкаИмето съществува.Име на тестето:Име:МрежаНовиНови картиСамо нови картиНови карти за денИме на новото тесте:Нов интервалНово име:Нов тип за бележката:Име за новата група от опции:Нова позиция (1...%d):Следващият ден започваНяма карти за преглед, все ощеНямаше карти, отговарящи на условията.Няма празни карти.Зрели карти не бяха учени днес.Не бяха намерени неизползвани или липсващи файлове.БележкаИдентификатор на бележкатаТип бележкаТипове бележкиБележката и неийната %d карта бяха изтрити.Бележката и неийните %d карти бяха изтрити.Бележката беше заровена.Внимание: медийните файлове нямат резервни копия. Създавайте периодично резерни копия на директорията на Anki за по-сигурно.Внимание: част от историята липсва. За повече информация, проверете документацията на браузъра.Бележки в чист текстБележките изискват поне едно полеНищоОКПоказване на най-старите най-отпредЕднопосочно качване на промените при следващо синхронизиране.Някои бележки не бяха импортирани, защото не генерираха никакви карти. Това може да се случи, когато имате празни полета или когато не сте свързали съдържанието на текстовия файл с правилните полета.Само нови карти могат да се разместват.Само един клиент може да използва AnkiWeb по едно и също време. Ако предишното синхронизиране се е провалило, опитайте отново след няколко минути.ОтварянеОптимизиране...Опционален лимит:ОпцииОпции за %sГрупа опции:Опции...РедПрезаписване на шрифт:Парола:ПоставянеПоставяна на изображения от клипборда като PNG.Pauker 1.8 Урок (*.pau.gz)В процентиПериод: %sПоставяне в края на списъка с нови картиПоставяне за преглед в интервал между:Моля, първо добавете друг тип бележка.Моля свържете микрофон и се уверете, че другите програми не използват аудио устройството.Убедете се, че има отворен профил и че Anki не е зает, и опитайте отново.Моля, инсталирайте PyAudioМоля, първо отворете профилМоля, премахнете папката %s и опитайте отново.Рестартирайте Anki за завършване на избора на език.Моля, отворете Инструменти->Празни картиМоля, изберете тесте.Моля, избирайте карти само от един тип.Моля, изберете нещо.Моля, обновете до най-новата версия на Anki.Моля, използвайте Файл->Импортиране, за да импортирате този файл.Моля, посетете AnkiWeb, ъпгрейднете тестето и опитайте отново.ПозицияПредпочитанияПредварителен прегледПредварителен преглед на избраната карта (%s)Предварителен преглед на новите картиПреглед на новите карти, добавени през последните%d медиен файл беше обработен.%d медийни файла бяха обработени.Обработка…ПрофилиНеобходима е идентификация за проксиВъпросНа дъното на опашката: %dВ началото на опашката: %dИзходПроизволенРазбъркване на редаРейтингПрегенериранеЗаписване на собствения Ви гласЗаписване...
Време: %0.1fПовторно научениЗапомняне на последния текст при добавянеИзтриването на този тип карти ще изтрие една или повече бележки. Моля, създайте първо нов тип карти.ПреименуванеПреименуване на тестетоПовторно стартиране на аудиотоПовторно стартиране на собствения гласРазместванеРазместване на нови картиРазместване...Включване на един или повече етикети сред тези:Пренасрочване на картите според отговорите в това тестеПродължаване сегаОбърната посока на текста (RTL, отдясно наляво)Възстановено до състояние преди/към '%s'Брой прегледиПреглеждано времеПреглеждане на бъдещи картиПреглеждане на бъдещи карти сПреговор на забравените карти през последнитеПреговор на забравени картиУспешенПрегледиОтдясноОбхват: %sТърсенеТърсене във форматирането (бавно)ИзбиранеИзбери всичкиИзбор на бележкиИзбор на етикети за изключване:Избраният файл не е във формат UTF-8. Моля, проверете в ръководството секцията за импортиране.Избирателно ученеТочка и запетаяСървърът не е намерен. Или няма интернет връзка, или антивирусна програмa/firewall блокира връзката на Anki с интернет.Задаване на тази група опции за всички тестета под %s?Задаване за всички под-тестета.Клавишът Shift беше задържан. Пропускане на автоматичното синхронизиране и зареждане на приставките.Изместване на позицията на съществуващите картиБутон за бърз достъп: %sБутон за бърз достъп: стрелка налявоБутон за бърз достъп: стрелка надясно или EnterПряк път: %sПоказване на %sРазкриване на отговораПоказване на повторениятаПоказване на хронометър при отговарянеПоказване на нови карти само след преговор на старитеПоказване на нови карти преди преговора на старитеПоказване на новите карти в реда на добавяне в тестетоПоказване на новите карти в разбъркан редПоказване на следващото време за преговор над бутоните за отговорПоказване на броя оставащи карти по време на прегледРазмер:Някои свързани или заровени карти са отложени за по-късно учене.Някои настройки ще влязат в сила след рестартиране на AnkiНякои обновявания бяха игнорирани поради промяна на типа на бележката:Поле за сортиранеСортиране по това поле в браузъраНе се поддържа сортиране по тази колона. Моля, изберете друга.Начална позиция:Начална лекотаСтатистикаСтъпка:Научено днесУченеНаучаване на тестетоНаучаване на тестеУчене сегаУчене според състоянието или етикетите на картитеСтиловеСтилове (споделени между картите)Supermemo XML export (*.xml)Синхронизиране също и на аудио файловете и изображениятаСинхронизирането се провали: %sСинхронизирането пропадна; няма интернет.Синхронизирането изисква правилна настройка на часовника на компютъра. Моля настройте часовника и опитайте отново.Синхронизиране...ТабулацияДублиращи се етикетиЕтикетиЦелево тесте (Ctrl+D)Целево поле:ТекстТекст, разделен с табулации или точка и запетайка (*)Това тесте вече съществуваТова име на поле е вече използвано.Това име вече съществува.Връзката с AnkiWeb изтече. Моля проверете връзката си и опитайте отново.Конфигурацията по подразбиране не може да бъде изтрита.Стандартното тесте не може да бъде изтрито.Разпределението на картите в тестетата.Първото поле е празно.Този символ не може да се използва: %sПредната част на тази карта е празна. Моля, отворете Инструменти > Празни картиВъведеният текст би генерирал празен въпрос във всички карти.Броят на новодобавените карти.Броят на въпросите, на които сте отговорили.Броят преглеждания, насрочени за по-късно.Колко пъти сте натиснали всеки бутон.Правата на системната временна (temp) директория са неправилни, а Anki не може да ги поправи автоматично. Моля потърсете "temp folder" в ръководството за повече информация.Даденият файл не е валиден .apkg файл.Даденото търсене няма резултати. Искате ли да го прегледате отново?Заявената промяна изисква пълно качване на базата данни при следващото синхронизиране. Ще бъдат загубени прегледите или промените по тестетата по всички други устройства, които не са синхронизирани все още. Продължаване?Необходимото време за отговаряне на въпросите.Има още нови карти, но дневният лимит за преглеждане е достигнат. Можете да увеличите лимита в "опции", но имайте предвид, че колкото повече нови карти се включват, толкова повече ще трябва да ги преговаряте.Трябва да има поне един профил.Не може да сортирате по тази карта, но може да изберете конкретни тестета от страничния панел отляво.Файлът не прилича на валиден .apkg файл. Ако получавате грешката при файл от AnkiWeb, вероятно изтеглянето се е провалило. Опитайте отново; ако проблемът продължава, опитайте с друг браузър.Файлът съществува. Наистина ли искате да го презапишете?Тази директория съдържа цялата Anki информация на едно място, за по-лесно създаване на резервни копия. За използване на друго място, погледнете тук: %s Това е специално тесте за учене извън стандартната програма.Това ще изтрие сегашната колекция и ще я замени с данните от импортирания файл. Сигурни ли сте?ВремеЗа прегледЗа да ги прегледате сега, изберете бутон "Изравяне" по-долу.За да учите извън нормалната програма, изберете "Учене извън програмата" по-долу.ДнесДостигнахте дневното ограничение за преговори, но има още карти за преглед. За най-добра памет обмислете увеличаване на дневния лимит в опциите.ОбщоОбщо времеОбщо картиОбщо бележкиВъзприемане на входните данни като регулярен изразНе може да се импортира от файл, достъпен само за четене.ИзравянеОтмянаОтмяна на %sНеразпознат файлов формат.НепрегледаниОбновяване на съществуващи бележки, когато първото поле пасва.%(a)d бележки бяха обновени от общо %(b)d.Качване в AnkiWebКачване в AnkiWeb...Използвани в картите, но липсващи в медийната директория:Потребител 1Версия %sИзчакване за приключване на редактирането.При добавяне, по подразбиране на се използва текущото тесте.Цялата колекцияИскате ли да го изтеглите сега?Имате много тестета. Погледнете %(a)s. %(b)sНе сте записали все още своя глас.Трябва да имате поне една колона.Промените ще повлияят на няколко тестета. За да промените само текущото тесте, създайте нова група от опции.Някой медиен файл или колекцията са твърде големи за синхронизация.Колекцията беше успешно качена в AnkiWeb. Ако използвате други устройства, ги синхронизирайте сега, и изберете сваляне на колекцията, която току-що качихте от този компютър. След това, бъдещите прегледи и добавените карти ще бъдат добавени и слети автоматично.[няма тесте]резервни копиякартикарти от тестетоколекциятадднитестецелия живот на тестетодубликатпомощскриванечасачаса след полунощпо-малко от 0.1 карти в минутамин.минутимпрегледисекундистатистикатази страницас.цялата колекцияanki-2.1.0+dfsg~b36/locale/bn/000077500000000000000000000000001323611211500157155ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/bn/LC_MESSAGES/000077500000000000000000000000001323611211500175025ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/bn/LC_MESSAGES/anki.mo000066400000000000000000000065461323611211500207740ustar00rootroot000000000000002C<H I"Tw y" " (3 EP`ov|    &/8=awy1%L r $ 1    $ A L c )z &  /  ) D S W Y [ )e & %     - = S f ;p .    # 3 I \ %*.+/#&21!,()0  - " ' $ (1 of %d) It has %d card. It has %d cards.%% Correct%d card%d cards%d card deleted.%d cards deleted.%d selected%d selected%s copy%s minute%s minutes%s second%s seconds&Edit&Export...&File&Find&Go&Help&Import...&Invert Selection&Next Card&Preferences...&Previous Card&Tools&Undo(new).../:AddAdd FieldAdd TagsAgainAll FieldsAnswersAverageBackBasicCardsCenterDefaultDueError executing %s.Error running %sExtraForecastFrontHoursIntervalLearningLeftProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2014-05-26 22:42+0000 Last-Translator: Tanay Banerjee Language-Team: Bengali MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: bn (%d এর ১) এটির %dটি কার্ড আছে এটির %dটি কার্ড আছে%%টি সঠিক%dটি কার্ড%dটি কার্ড%dটি কার্ড মুছে ফেলা হয়েছে।%dটি কার্ড মুছে ফেলা হয়েছে।%d টি নির্বাচিত%s অনুলিপি%s মিনিট%sমিনিট%s সেকেন্ড%s সেকেন্ড&সম্পাদনা&রপ্তানি...ফা&ইল&অনুসন্ধানযা&ও&সহায়িকা&আমদানি...নির্বাচন &উল্টো&পরবর্তী কার্ড&পছন্দসমূহ...পূর্ব&বর্তী কার্ড&টুলসবাতিল &করো(নতুন).../:যোগক্ষেত্র যোগ করোট্যাগ যোগ করুনআবারসবকটি ক্ষেত্রউত্তরগড়পেছনে যাওসাধারণকার্ডকেন্দ্রডিফল্টদেয়%s চালাতে সমস্যা হয়েছে।%s চালুকরণে ত্রুটিঅতিরিক্তপূর্বাভাসসম্মুখঘণ্টাব্যবধানশিক্ষাবামanki-2.1.0+dfsg~b36/locale/ca/000077500000000000000000000000001323611211500157015ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ca/LC_MESSAGES/000077500000000000000000000000001323611211500174665ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ca/LC_MESSAGES/anki.mo000066400000000000000000002337151323611211500207600ustar00rootroot00000000000000T8K K KKK"KK KKKL8LQLaLrLL"L$L$L&M"*MMM4`M2MMM"M$N$>N$cN NNNNNNNO*O=O RO`OqOuOyO}OOO OOOOOO OOOOO OO PPP )P4P;PSPcPrPPPPP0P PPP Q QQQ1QHQLQQQQQQQQQQTRXR,ZR(RR!RRf SpS SS S SSSSSe TqT7UHSU)W XX5XXYYrY%YkY ^Z jZuZyZZ Z ZZ Z ZZ ZZ['#[K[S[Z[b[ h[$t[[ [[[[ [ [%[K\b\1w\\V]":_]_ b_p___|`IaRJavab7b bwcEzc@cdddRdrd{dd#e#=eae ezef(5f^f ffsf ffff f f ffffg3g NgXgkgJrgggggghh h "h),h'Vh~h:iAiFiNiUi\i di ni yi i ii iiii3ijS(j|jjj j jjjjjj"k1k9k0kkl&l=l Ol[l blnl l l ll lll lllmm--m[mamgm nm(|m5m mmmnvn8{n5nPn7;osoo oo#ooooooo p p p#p*p3p:pApHpOpVp]p dp qp ~p p p p p p p ppp p p q q 1q>q Qq^qsqwqq q q qqq/q rr$r%,rRr Yr fr rr r r r rrHr,s(>sgssFsNsP0t>tPtu]u xu8uuuuu vv v+v1v6v ;v FvTv Yv cv pvzv vvv)v0vvw)w4-w!bwww#wwwxxxx x.xxxxx y y(y/y 6yDy \yfy+nyyy yyyyyyyz z 'z 2z?zNWz"zzz zzz{{{{{{{ {|||+|;| J|U|Z| n| y||,||| |||||.|F#}j}} } }4}}~ ~1~I~Y~y~~*~~ es "" &;J^g y? Áс$)82؂ "7V[ap <ʃ -2 ;5F|  ք $3:K_ev~ Å΅N1 7DSYa e&o  † φن*2+Ht#!ʇ < ?L]\a!0 R`hk,}#rk $4<K Ze k w5 % B MX,w#VȌ8EXՍ*0Nk,-ǎ+8!Z cow#0ȏ  /;D Ucho͐֐#7Kdsi / O\ mx "֒ ޒ1 &C Tu | ѓ-(GMRir y ˔V: JT,וG4 |"ǖ   +)=g*ߗ' 2:@@68 !?M^ ™ Йۙ  8F L W eoĚ "3 8Y!ld  4B(Gp XƜ+"K&n+0۝+ >8Fw'*(1:l,*IW'#_ɢe)8CO(Frv{ uN/ħMBH   $ 0!<^c'L"?T.[&Ϫ,& -8 ITUsɫ$ "ZAS0$!"Fi o{{^5rU}  óγгճ ڳ '>Yrƴڴ  "35   +"6Y [g%~C 0-G-u-1Ѹ+/>@Cù!Թ'''F'n+º ۺ  )<Qat  лڻ  $* 2= DPYq"Ѽ 1* \iz  ͽѽ*6,Ac!!ǿ ,{C?icW Kl#d(  %2Lbx $1   & 2 >)Lv }=[/I1" #"F_KN_ H-zCOIXa tI~~!Wy.$$#7 )?Qm~$#6 R^wW~  &1QZ k5y- *<U hv<[ KW^ er, (2 !$9F   (2!8 Zev:  13Bv )D/6tZ7!>` s~$   !(/6=D K Y g u   !-CXx/~ 3 >D Z/f" .ZL5F8$-]DMODng h% I! ?If|    1DOY.(&W(~$&% @6<>!Ac s J )19I]m c<@} ! ;Jbt} '   (1.G`%( Db@"54J6`#,0'7(_ NCU*p@$H #-QX^m D /<R hu~R#,G er  .$5Zt y ^  $27= A8N  5+ACm$.%C H VdNs s&-@DLAk1g~ >N_gw  !&: R_-g  /30.m_E`t0;'4 \ 4w  2 3 F4 {   ,  : ?+ k  6           ' 4 G '_    $ -  ( B X |q  '  F8  , )5EH !'=&W~33  9E NY#` #gA Q]= &"Gfj-'$< a mw!=,->7l(>6  CQUW?N <'IOqY!3ETchz  .>$Di| *,<L 1<P ak .#e2(67LBg.QO++{'-312@/ p 4!!"z"e>##B$$A%3&J4&|&&' ')''3(W()))))* ** ,*+9*e*%k*;*_* -+9+Q+ X+c++ +B+%+-,A,Q,7e,, , ,,",f-o-,---Q-Z4.2.!."./ /|/M/}0]d112|e5 556 66 :6G6I6N6 S6a6j6p6v6|666666 77&7B7V7q7w7~77777777cMv{>-!!HOX2=reMV QXT):UIMh]u^kaI4P&h7bcw.e^`5uoKF8q`Y*)~p -Q9Ll@_SY{Z,^3IEk CT67^8 9]=>?~g ~EkWglvOX(8A}' hNCyo_Dq*![Gkz |jP {|}n"(j B(2Mmgn 9@}Rn}5DT#SB\tP:\7/UdcL7R 0RH!xu+ {,:-O/Sm0>Vfa _n?ujol/"Y#ey?xc$t YiQt)qV2'ZiJT*+ b.y$D4gvo_wrX-tzGR N, s%EC F1 2F0$"hbDZxa<6;%&'(*eK|5#/0Ua1 3;458i@A\;\fVmGWb?1L[='JW[<fx"sG.=N3d<[H,`9U|@>JEQ +dCj&Fs$KA;ly J:.A%]pq6dw<pB]rSP&1Lm`Z#4%3~IW6NBzfpsizO)vKr  w+H (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAlways include question side when replaying audioAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuried SiblingsBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the %(num)d selected add-on?Delete the %(num)d selected add-ons?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEnable second filterEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFile version unknown, trying import anyway.FilterFilter 2Filter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax inlineMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow cards as white on black (night mode)Show new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Sound and video on cards will not function until mpv or mplayer is installed.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied %(a)s %(b)s today.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.What would you like to unbury?When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightin %s dayin %s daysin %s hourin %s hoursin %s minutein %s minutesin %s monthin %s monthsin %s secondin %s secondsin %s yearin %s yearslapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2018-01-19 09:51+0000 Last-Translator: Guillem Palau Salvà Language-Team: Catalan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: ca (1 de %d) (deshabilitat) (desactivat) (activat) Té %d targeta. Té %d targetes.%% correctes%(a)0.1f %(b)s per dia%(a)0.1fkB pujada, %(b)0.1fkB baixada%(a)0.1fs (%(b)s)%(a)d de %(b)d nota actualitzada%(a)d de %(b)d notes actualitzades%(n)d: %(name)s%(tot)s %(unit)s%.01f targetes/segon%d targeta%d targetes%d targeta eliminada.%d targetes eliminades.%d targeta exportada.%d targetes exportades.%d targeta importada.%d targetes importades.%d targeta estudiada en%d targetes estudiades en%d mall actualitzat.%d malls actualitzats.%d grup%d grups%d canvi multimèdia per pujar%d canvis multimèdia per pujar%d arxiu multimèdia descarregat%d arxius multimèdia descarregats%d nota%d notes%d nota afegida%d notes afegides%d nota eliminada.%d notes eliminades.%d nota exportada.%d notes exportades.%d nota importada.%d notes importedes.%d nota inalterada%d notes inalterades%d nota actualitzada%d notes actualitzades%d revisió%d revisions%d seleccionada%d seleccionadescòpia de %s%s dia%s dies%s hora%s hores%s minut%s minuts%s minut.%s minuts.%s mes%s mesos%s segon%s segons%s per esborrar:%s any%s anys%sd%sh%sm%smo%ss%sy&Quant a...%Navegar i instalar...&Targetes&verificar la Base de dades&Repassa...&Edita&Exporta...&Fitxer&Cerca&Vés&Manual&Manual...&Ajuda&Importa...&Info...&Inverteix la selecció&Targeta següent&Notes&Obre la carpeta de complements...&Preferències...Targeta &anteriorCanvia la &planificació&Dóna suport a Anki...&Canviar de perfil&EinesDesfés (&U)'%(row)s' amb %(num1)d camps, s'esperava %(num2)d(%s correct)(Nota esborrada)(fi)(filtrat)(aprenent)(nou)(parent limit: %d)Sisplau, selecciona una targeta…els arxius d'.anki2 no estan fets per a ser importats. Si estàs intentant restaurar una còpia de seguretat, mira a la secció "Còpies de seguretat" del manual de l'usuari./0d1 mes1 any10AM10PM3AM4AM4PMS'ha rebut un error 504, temps d'espara esgotat per l aporta d'enllaç. Sisplau, intenta desactivar temporalment el teu antivirus.:%d tarjeta%d tarjetesObre la carpeta de les còpies de seguretatVés al lloc web%(pct)d%% (%(x)s de %(y)s)%d-%m-%Y @ %H:%MCòpies de seguretat
Anki farà una còpia de seguretat de la col·lecció de l'usuari cada cop que el tanqueu o sincronitzeu.Format d'exportació :Cerca :Mida de la lletra:Lletra:A :Inclou:Mida de la línia:Substitueix per:SincronitzacióSincronització
No està activada; feu clic al botó de sincronització de la pantalla principal per activar-la.

Cal tenir un compte

Cal tenir un compte gratuït per a sincronitzar la col·lecció. Registreu un compte nou i introduïu-ne els detalls aquí.

Actualització d'Anki

Anki %s està disponible.

Error

S'ha produït un error. Sisplau inicia l'Anki mantenint presionada la tecla Mayús, la qual deshabilitarà temporalment els extensions que tens instal·lades.

Si aquest error persisteix només quan tens les extensions activades, utilitza Eines>Menú d'Extensions per deshabilitar alguna extensió i reinicia l'Anki, repetint aquest procés fins que descobreixis quina extensió en concret és la que causa el problema

Quan hagis descobert la extensió que causava el problema, sisplau reporta-ho a secció de extensions

Informació de depuració:

Error

S'ha produït un error. Sisplau utilitza Eines > Comprovar Base de dades per veure si aixó soluciona el problema.

Si el problema persisteix, sisplau informa d'aquest problema en la nostra web de suport. Sisplau, còpia i engantxa la informació més avall en el teu informe.

Els nostres agraïments per a totes les persones que han aportat suggeriments, informes d'errors i donatius.La facilitat d'una targeta és la mida del següent interval quan respons "bé" en un repàs.Un mall filtrat no pot contenir submallsS'ha produït un error al sincronitzar els arxius multimèdia. Sisplau, utilitza eines->comprovar multimèdia, i aleshores sincronitza de nou per a corregir el problema.Interromput: %sSobre l'AnkiAfegeixAfegir (drecera: ctrl+retorn)Afegueix Tipus de targetaAfegeix campAfegeix arxiu multimèdiaAfegeix mall (Ctrl+N)Afegeix tipus de notaAfegeis el dorsAfegeix etiquetesAfegeix etiquetes...Afegeix a:La extensió no te cap configuracióLa extensió no va ser descargada des de AnkiWeb.ExtensióAñadir...Afegeix: %sS'ha afegitAfegides avuiAfegueix duplicada amb el primer camp: %sDe nouDe nou avuiOblidats : %sTotes les targuetes enterradesTots els tipus de targetesTotes les pilesTots els campsTotes les targetes en ordre aleatori (mode d'estudi intensiu)S'eliminaran totes les targetes, notes i arxius multimèdia d'aquest perfil. N'esteu segur?Permet l'HTML als campsIncloure sempre la cara de la pregunta quan es torni a reproduir l'áudioUna extensió que has instalat ha fallat al carregar-se. Si els problemes persisteixen, sisplau ves a Eines>Menú d'extensions o deshabilita aquesta extensió. Mentres carregant '%(name)s' %(traceback)s S'ha produït un error al accedir a la base de dades. Possibles causes: - Un antivirus, talla-focs, o programari per sincronitzar arxius pot estar interferint amb Anki. Prova de desactivar-los i mira si el problema desapareix. - El teu disc dur està ple. - La carpeta Documents/Anki pot estar compartida a la xarxa. - Els arxius de la carpeta Documents/Anki poden no tenir permisos d'escriptura. - El teu disc dur pot tenir errors. És una bona idea executar Eines->comprovar la base de dades per tal d'assegurar que la teva col·lecció no està corrupta. S'ha produït un error al obrir %sAnkiMall Anki 2.0Paquet de la col·lecció de l'AnkiMall de targuetes d'AnkiAnki no ha pogut renombrar el teu perfil, atès que no ha pogut renombrar la carpeta del perfil en el disc. Assegura't de que tens permís d'escriptura a Documents/Anki i que no hi ha altre sprogrames accedint-hi i torna-ho a intantar.Anki no ha trobat la línia entre la pregunta i la resposta. Ajusteu la plantilla manualment per a canviar la pregunta i la resposta.L'Anki no suporta arxius en subdirectoris dins del directori collection.media.Anki és un agradable sistema intel·ligent d'aprenentatge espaiat. És lliure i de codi obert.Anki està llicenciat sota la lliçència AGPL3. Consulta l'arxiu de la lliçència en la distribució font per a més informació.Anki ha estat incapaç d'obrir l'arxiu de la col·lecció. Si els problemes persisteixen després de reiniciar el teu ordinador, sisplau usa el Obrir còpia de seguretat en el gerent de perfils. Informació de depuració: Identificador o contrasenya d'AnkiWeb incorrectes; torneu-ho a intentar.Identificador AnkiWebAnkiweb ha trobat un error. Torneu-ho a intentar d'aquí a uns minuts i si el problema es manté creeu un informe d'error.AnkiWeb està massa ocupat ara mateix. Torneu-ho a intentar d'aquí uns minuts.AnkiWeb està en menteniment. Sisplau, torna-ho a intentar en uns minuts.RespostaBotons de respostaRespostesL'antivirus o el tallafoc està impedint que Anki es connecti a internet.Qualsevol marcaTotes les targetes no assignades s'eliminaran. Si una nota no té cap targeta assignada, es perdrà. Segur que vols continuar?Ha aparegut per segona vegada: %sSegur que voleu eliminar %s?Es requereix com a mínim un tipus de tarjeta.Es requereix una passa com a mínim.Adjuntar imàtges/àudio/vídeo (F3)La sincronització simultània i les còpies de seguretat estan deshabilitades mentre es restaura. Per tal de tornar-les a habilitar, tanca el perfil o reinicia l'Anki.Reprodueix l'àudio automàticamentSincronitza automàticament en obrir o tancar un perfilMitjanaTemps promigTemps de resposta migFacilitat mitjanaMitjana dels dies estudiatsInterval promitgReversVista prèvia del reversPlantilla del reversRealitzant la còpia de seguridad...Còpies de seguretatBàsicaBàsic (i targeta invertida)Bàsic (targeta invertida opcional)Basic (tecleja la resposta)Marca blavaText en negreta (Ctrl+B)NavegaNavega (%(cur)d targeta mostrada; %(sel)s)Navega (%(cur)d targetes mostrades; %(sel)s)Aspecte del navegadorAspecte del navegador...Opcions del navegadorConstrueixEnterradesEnterrar targuetes relacionadesEnterrarEnterrar tarjetaEnterrar notaEnterrar targetes noves relacionades fins a l'endemàEnterrar repasos relacionats fins a l'endemàPer defecte, Anki detectarà el caràcter entre camps, com un tabulador, una coma o similar. Si Anki detecta malament el caràcter, podeu introduir-lo aquí. Useu \t per representar el tabulador.AnuŀlaTargetaTargeta %dTargeta 1Targeta 2ID de la targetaLlista de targetesEstat de tarjetaTipus de targetaTipus de tarjeta:Tipus de targetesTipus de targetes per %sTargeta enterrada.Fitxa suspesaLa targeta era una sangonera.TargetesLes targetes no es poden moure manualment a un mall filtrat.Targetes en text plaLes targetes tornaran automàticament a les seves piles d'origen després que les repasseu.Targetes...CentraCanviaCanvia %s a:Canviar de mallCanviar mall...Canvia tipus de notaCanvia tipus de nota (Ctrl+N)Canvia tipus de nota...Canviar de color (F8)Canviar el mall en funció del tipus de notaCanviatAquests canvis afectaran a %(cnt)d nota que està utilitzant aquest tipus de targueta.Aquests canvis afectaran a %(cnt)d notes que estan utilitzant aquest tipus de targueta.Els canvis tindran efecte quen l'Anki es reiniciïComprovar &multimèdia...Comprova si hi ha actualitzacionsComprova els fitxers de la carpeta de fitxers multimèdiaComprovant madia...S'està comprovant...TriaTriar mallTria tipus de notaEscull etiquetesElimina marcaEliminar les no utilitzadesNeteja etiquetes no utilitzadesClona: %sTancaTancar i perdre l'entrada actual?Tancant...Blanc per omplirBlanc per omplir (Ctrl+Shift+C)Codi:Colecció exportadaLa col·lecció està danyada. Si us plau veieu el manual.Dos puntsComaConfig.ConfiguracióConfigura les opcions i l'idioma de l'interfícieEnhorabona! De moment heu acabat amb aquest paquet.S'està connectant...La connexió ha expirat. Pot ser que hi hagi problemes amb la connexió a Internet o que tinguis un arxiu molt gran a la teva carpeta multimèdia.ContínuaCopiaRespostes correctes en les targetes madures: %(a)d/%(b)d (%(c).1f%%)Correcte: %(pct)0.2f%%
(%(good)d of %(tot)d)No s'ha pogut connectar a AnkiWeb. Comproveu la connexió de xarxa i torneu-ho a intentar.No s'ha pogut gravar el so. Heu instal·lat lame i sox?No s'ha pogut guardar l'arxiu: %sEstudiar de valentCrear mallCrear mall filtrat...Crea imatges rescalables amb svisvgmS'ha afegitCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+SuprCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Mayús+ACtrl+Mayús+DCtrl+Majús+FCtrl+Mayús+ICtrl+Majús+LCtrl+Majús+MCtrl+Shift+NCtrl+Majús+PCtrl+Majús+RCtrl+Shift+SCtrl+WCtrl+ZAcumulatAcumulat %sRespostes acumuladesTargetes acumuladesMall actualTipus de nota actual:Estudi personalitzatSessió d'estudi personalitzadaTallaS'ha reconstruït i optimitzat la base de dadesDataDies que heu estudiatDesautoritzaConsola de depuracióMallSuperposició de mall...S'importarà el mall tan bon punt s'obri un perfil.PilesIntervals decreixentsPer defecteRetard fins que els repassos es mostren de nou.EliminaElimina targetesEliminar el mallElimina les buidesElimina la notaElimina les notesElimina les etiquetesElimina les que no es facin servirVoleu eliminar el camp de %s?Eliminar la %(num)d extensió seleccionada?Eliminar les %(num)d extensions seleccionades?Eliminar el tipus de targeta %(a)s' i els seus %(b)s?Voleu eliminar aquest tipus de nota i totes les targetes relacionades?Voleu eliminar aquest tipus de nota que no es fa servir?Eliminar el arxius multimèdia no utilitzats?%d targeta sense nota eliminada.%d targetes sense notes eliminades.%d targeta sense plantilla eliminada.%d targetes sense plantilla eliminades.%d nota sense tipus de nota eliminada.%d notes sense tipus de nota eliminades.%d nota sense targetes eliminada.%d notes sense targetes eliminada.%d nota amb un compte de camps errònia eliminada.%d notes amb un compte de camps errònia eliminades.Eliminat.Si elimines aquest mall de la llista de malls totes les targetes restants tornaran al seu mall d'origen.DescripcióDescripció a mostrar a la pantalla d'estudi (només per al mall actual):DiàlegDescarrega des de l'AnkiWebs'ha descargat %(fname)sDescarregant des de l'AnkiWebVencimentNomés targetes programades.Programades per demà&SurtFacilitatFàcilBonus per FàcilInterval per FàcilEditaEditar "%s"Edita l'actualEdita l'HTMLEditatEditant tipus de lletraBuitTargetes buides...Números de targetes buides: %(c)s Camps: %(f)s S'han trobar targetes buides. Sisplau, executa Eines->Buida TargetesPrimer camp està buit: %sActivar el segon filtreAcabarSelecciona el mall en què voleu col·locar les %s noves targetes, o deixeu -ho en blanc:Entra la nova posició de la targeta (1...%s):Entreu les etiquetes que voleu afegir:Entreu les etiquetes que voleu suprimir:Error al descargar %(id)s: %(error)sError a la descàrrega: %sError a l'inici: %sS'ha produït un error mentre s'establia una connexió segura. Això està normalment causat per un antivirus, tallafocs, VPN o problemes amb el teu ISP.S'ha produït un error en executar %s.S'ha produït un error en executar %sExportaExporta...%d Arxiu multimèdia exportat.%d Arxius multimèdia exportats.ExtraFF1El camp %d del fitxer és:Mapejat de campNom del camp:Camp:CampsCamps per %sCamps separats per: %sCamps...Fil&trarLa versió de l'arxiu és desconeguda, intentant importar de totes formes.FiltreFiltre 2Filtrar...Filtre:FiltratMall filtrat %dCerca &duplicats...Cerca duplicatsCerca i reemplaça...Cerca i reemplaçaFinalitzaPrimera targetaPrimera revisióPrimer camp coincident: %s%d targeta amb propietats no vàlides corregida.%d targetes amb propietats no vàlides corregides.S'ha corregit un error de sobreposició de mall de AnkiDroidTipus de nota corregida: %sMarcarMarcar targetaGireuAquesta carpeta ja existeix.Tipus de lletra:Peu de pàginaPer raons de seguretat, no es permet '%s' a les targetes. Pots seguir usant-ho inserint la comanda en un paquet diferent, i important aquest paquet a la capçalera LaTeX.PronòsticFormulariS'han trobat %(a)s d'entre %(b)s.AnversPrevisualització de l'anversPlantilla de l'anversOpcions generalsS'ha generat el fitxer: %sGenerat en %s.Conseguir extensions...Piles compartidesCorrecteInterval de graduacióMarca verdaEditor HTMLDifícilHas instal·lat latex i dvipng/dvisvgm?CapçaleraAjudaFacilitat més altaHistòriaIniciDistribució horàriaHoresLes hores amb menys de 30 repassos no es mostren.Si hi heus contribuït però no sou a la llista, poseu-vos en contacte.SI haguèssis estudiat tots els dies.Ignoreu temps de resposta més llargs deIgnoreu les majúsculesIgnorar camp.Ignorar línies on el primer camp coincideixi amb una nota existent.Ignora aquesta actualitzacióImportaImporta un fitxerImportar encara que existeixi una nota amb el mateix primer campHi ha hagut un error en importar. La importació ha fallat. Informació de depuració: Opcions d'importacióImportació completa.A la carpeta de mèdia, però no usat per cap targeta.Per assegurar que la teva col·lecció funcioni correctament en ser transferida entre dispositius, Anki necessita que el rellotge intern del teu ordinador estigui ajustat correctament. El rellotge intern pot estar malament ajustat tot i que el teu sistema mostri correctament l'hora local. Si us plau, accedeix als ajustos horaris al teu ordinador i comprova el següent: - AM / PM - Desviació del rellotge - Dia, mes i any - Zona horària - Horari d'estiu Diferència amb el temps correcte: %s.Incloure multimèdiaInclou informació de planificacióInclou les etiquetesIncrementa el límit per cartes noves d'avuiIncrementa el límit per cartes noves d'avui perAugmentar el ímit de repassos per avuiAugmentar el ímit de repassos d'avui enIntervals creixentsIntalar complementIdioma de la interfaseIntervalModificació de l'intervalIntervalsCodi invàlid, o l'extensió no està disponible per a la teva versió d'Anki.Còdig no vàlid.Configuració no válida: Nom d'arxiu invàlid, sisplau renombra: %sArxiu invàlid. Sisplau, restaura des d'una còpia de seguretat.S'ha trobat alguna propietat incorrecta en les targetes. Si us plau, fes servir Eines-> Comprovar base de dades, i si el problema persisteix contacta amb el servei d'assistència a la web.L'expressió regular no és vàlida.Cerca no vàlida - Sisplau, revisa si ho has comés errors a l'escriure.S'ha suspèsText en cursiva (Ctrl+I)Saltar a etiquetes amb Ctrl+Shift+TMantéLaTeXEquació LaTeXEntorn matemàtic LaTeXLapsesÚltima targuetaÚltim repàsÚltimes afegides primerEstudiaLímit d'estudi per adalantatAprenent: %(a)s, Repasar: %(b)s, Reaprendre: %(c)s, Filtrades: %(d)sAprenentatgeAcció per sangoneresLlindar de sangoneresA l'esquerraLimita aS'està carregant...La colecció local no conté cap tarjeta. Desitgues descarregar-ne des de AnkiWeb?Interval més llarg.Buscar en el camp:Facilitat més baixaGestionaGestiona els Tipus de NotaGestiona els Tipus de Nota...Gestionar…Targuetes enterrades manualmentAssocia a %sAssocia a les etiquetesMarcar notaBloc de MathJacxMathJacx d'una líniaMaduresInterval màximRepassos màxims/diaMèdiaInterval mínimMinutsBarrejar targetes noves amb repassosMall Mnemosyne 2.0 (*.db)MésMés lapsesMoure cartesMoure les cartes al mall:Los separadores de més d'un caràcter no son vàlids. Sisplau, introdueix un únic caràcter.N&otaEl nom ja existeixNom del mall:Nom:XarxaNouNoves fitxesTargetes noves en el mall per sobre del limit d'avui: %sNomés noves cartesNoves cartes/diaNou nom del mall:Nou intervalNou nom:Nou tipus de notaNou nom de grup d'opcionsNova posició (1...%d):El següent dia comença enSense MarcaEncara no hi ha cartes pendents de revisar.No hi ha cap targeta que sadisfaci el criteri que has proporcionat.No hi ha cartes buides.Avui no has estudiat cartes madures.No s'ha trobat cap fitxer inútil o que falti.No hi ha actualitzacions disponibles.NotaID de la NotaTipus de NotaTipus de notesNota i les seves %d cartes esborrades.Notes i les seves %d cartes esborrades.Nota enterrada.Nota suspesa.Nota: no es fan còpies de seguretat dels arxius multimèdia. Si us plau, fes còpies de seguretat de la teva carpeta de Anki periòdicament per assegurar-la.Nota: falta part de la història. Per a més informació, consulta la documentació sobre l'explorador de targetes.Notes en Text PlàLes Notes requereixen almenys un camp.Notes etiquetades.ResD'acordVeure primer les més antiguesEn la propera sincronització, força els canvis en una direccióUna o més notes no s'han importat, perquè no generaven cap targeta. Això pot passar quan tens camps buits, o quan no has associat el contingut de l'arxiu de text als camps correctes.Només les cartes noves poden ser reposicionades.Només un client pot accedir a AnkiWeb alhora. Si una sincronització anterior va fallar, torna a intentar-passats uns minuts.ObreObrir una còpia de seguretat...Optimitzant....Límit opcional:OpcionsOpcions per %s.Opcions del grup:Opcions...OrdreOrdre afegitOrdre de programadesSubstitueix plantilla del revers:Substitueix font:SObreescriute la plantilla del anvers.Mall d'anki comprès/ Col·lecció (*.apkg *.colpkg *.zip)Contrasenya:EnganxaEnganxa les imatges del portapapers com a PNGLlicó de Pauker (*.pau.gz)PercentatgePeríode: %sCol·locar al final de la cua de targetes novesCol·locar en la cua de repàs amb intervals entre:Sisplau, afegeuix primer un altre tipus de nota.Sisplau, conecta el micròfon, i assegura't que altres programes no estiguin utilitzant el dispositiu de só.Sisplau, edita aquesta nota i afegueix alguns blancs per omplir. (%s)Sisplau, assegura't que hi ha un perfil obert i que Anki no està ocupat, i torna a intentar-ho.Sisplau, anomena el filtre:Sisplau intala PyAudioSisplau, obre primer un perfil.Sisplau, elimina la carpeta %s i intenti de nou.Sisplau, reinicia l'Anki per a completar el canvi d'idioma.Sisplau, executa Eines->Targetes buidesSisplau seleccionael mall.Sisplau, selecicona targetes d'un sol tipus de nota.Sisplau, selecciona alguna cosa.Sisplau, actualitza a l'última versió de l'Anki.Utilitza Arxiu->Importar per importar aquest arxiu.Sisplau, visita AnkiWeb, actualitza el teu mall i torna a intentar-ho.PosicióPreferènciesPrevisualitzacióPrevisualitzar la targueta seleccionada (%s)Previsualitzar targetes noves.Previsualitzar les targetes noces afeguides en els últimsProcessat %d axriu multimèdiaProcessats %d axrius multimèdiaS'està processant...PerfilsEs requereix autentificació del servidor intermediariMarca lilaPreguntaÚltim de la cua: %dPrimer de la cua: %dSurtAleatoriOrdre aleatòriPuntuacióReconstrueixGrabar la meva veuEnrregistrar audio (F5)S'està enregistrant...
Temps: %0.1fMarca vermellaEndarreriment relatiuReaprendreRecordar l'última entrada al afegir¿Eliminar %s de les teves cerques guardades?Eliminar tipus de targueta...Eliminar filtre actual...Eliminar etiquetes...Eliminar format (Ctrl+R)Eliminar aquest tipus de targueta suposaria la eliminació d'una o més notes. Sisplau, cra primer un nou tipus de targueta.ReanomenaCanviar el nom del tipus de targueta...Canviar el nom del mallReemplaçar la teva col·lecció per una còpia de seguretat anterior?Reprodueix sóReproduir la meva veuReposicióReposicionar tipus de tarjeta...Reposicionar noves targetesReposicionar...Es requereix una o més d'aquestes etiquetesReprogramarTorna a planificarReprogramar targetes en funció de les meves respostes en aquest mallContinua araText de dreta a esquerra (RTL)Revertir a còpia de seguretatReverteix al estat prèvi a '%s'.RevisaNúmero de revisionsTemps de repàsRepasar per adelantatRepasar per adelantat perRepasar cartes oblidades en el últimsRepassar targetes oblidadesPercentatge de repassos correctes al llarg del dia.RepasosRevisions vençudes per sobre del límit d'avui: %sA la dretaGuardarGuardar el filtre actual...Guardar PDFGuardat.Àmbit: %sCercarBuscar en elements de format (lent)SeleccionaSelecciona-ho &totSeleccionar &NotesSelecciona les etiquetes a excluir:L'arxiu seleccionat no estava en format UTF-8. Si us plau, llegeix la secció "importació" del manual.Estudi selectiuPunt i comaServidor no trobat. O bé la teva connexió està caiguda, o bé el teu antivirus/firewall està impedint que Anki es connecti a Internet.¿Assignar aquest grup d'opcions a tots els malls sota de %s?Assignar a totes les subbarallesEstablir color de primer plà (F7)La tecla Majúscula estava pressionada. Saltant sincronització automàtica i càrrega de complements.Canviar la posició de les targetes existentsTecla de drecera: %sTecla d'accés directe: fletxa esquerraTecla d'accés directe: fletxa dretaDrecera: %sMostra %sMostra la respostaMostrar ambdós caresMostra duplicatsMostrar temporitzador de respostaMostrar les targuetes com blanques sobre negre (mode nocturn)Mostra targetes noves després dels repassosMostra les targetes noves abans de les altresMostra les targetes noves pel ordre en que s'han afegitMostra les targetes noves desendreçadesMostra interval de proper repàs sobre dels botons de respostaMostra el nombre de targetes restants durant el repàsBarra lateralMida:Algunes targetes relacionades o enterrades van ser ajornades a una sessió posterior.Alguna configuració no tindrà efecte fins a reiniciar l'Anki.Algunes actualitzacions van ser ignorades perquè el tipus de nota ha canviat:Camp ordenatOrdenar segons aquest camp al navegadorNo és possible canviar l'ordre en aquesta columna. Si us plau, tria una altra.El só i vídeo a les targetes no funcionarà fins que mpv o mplayer siguin instal·lats.EspaiPosició inicial:Facilitat inicialEstadístiquesEstadístiquesPas:Pasos (en minuts)Els pasos han de ser números.S'està aturant...Estudiades %(a)s %(b)s avui.Estudiades avui.EstudiarEstudiar mallEstudiar mall...Estudiar araEstudiar segons estat o etiqueta de la targetaEstilEstil (compartit entre les targetes)Subíndex (Ctrl+=)Exporta a Supermemo XML (*.xml)Superíndex (Ctrl++)SuspènSuspendre targetaSuspendre notaSuspèsSuspesa+EnterradaSincronitzarSincronitzar també els sons i les imatgesLa sincronizació ha fallat: %sLa sincronització ha fallat; no hi ha connexió a Internet.La sincronització requereix que el rellotge del teu ordinador estigui correctament ajustat. Si us plau, ajusta el rellotge i torna-ho de nou.S'està sincronitzant...TabulacióEtiquetar duplicatsNomés etiquetarEtiquetesMall destí (Ctrl+D)Camp destí:TextText separat per tabulacions o punt i coma (*)Aquest mall ja existeix.Aquest nom de camp ja està en ús.Aquest nom ja està en ús.La connexió a AnkiWeb ha expirat. Si us plau, comprova la teva connexió de xarxa i torna-ho de nou.La configuració per defecte no pot ser eliminada.El mall per defecte no pot ser eliminat.El desglossament de les targetes en el teves baralles.La descàrrega estava corrupta. Si us plau-ho a provar.El primer camp està buit.El primer camp del tipus de nota ha de ser assignat a alguna cosa.No es pot fer servir el següent caràcter: %sL'anvers d'aquesta targeta està buit. Si us plau, executa Eines>Targetes buides.L'entrada que has realitzat produiria una pregunta buida en totes les targetes.El nombre de targetes noves que has afegit.El nombre de preguntes que has respost.El nombre de repassos programats en el futur.El nombre de vegades que has pressionat cada botó.Els permisos a la carpeta d'arxius temporals del sistema són incorrectes i Anki no pot corregir-automàticament. Si us plau, busca "temp folder" (en anglès) en el manual d'Anki per a més informació.L'arxiu proporcionat no és un arxiu .apkg valgut.La cerca sol·licitada no retorna cap targeta. Voleu revisar-la?El canvi sol·licitat farà necessària una pujada completa de la base de dades la propera vegada que sincronices la teva col·lecció. Si tens repassos o altres canvis pendents en un altre dispositiu que no hagin estat sincronitzats encara, es perdran. Voleu continuar?El temps que has trigat a respondre a les preguntes.Hi ha més targetes noves disponibles, però has arribat al límit diari. Pots augmentar el límit en les opcions, però vés en compte que com més targetes noves introdueixis, més augmentarà la teva càrrega de treball a curt termini.Deu haver-hi almenys un perfil.No e spor ordenar per aquesta columna, peró pots cercar individualment per tipus de targetes, com per exemple "targeta:1"Aquesta columna no pot ser ordenada, però pots buscar malls específics fent clic a un a l'esquerra.Aquest fitxer no sembla ser un arxiu .apkg vàlid. Si estàs obtenint aquest error amb un arxiu descarregat des AnkiWeb, és possible que els vostres recursos en qüestió. Si us plau, torna a intentar-ho, i si el problema continua, torna a intentar-ho amb un altre navegador.Aquest fitxer ja existeix. Esteu segur que el voleu sobreescriure?Aquesta carpeta emmagatzema totes les dades de Anki en una ubicació única per facilitar les còpies de seguretat. Per indicar a Anki que usi una ubicació diferent, si us plau, consulta: %s Aquest és un mall especial per estudiar fora de l'horari normal.Aquest és un {{c1 ::exemple}} de blanc per omplir.AIxó crearà %d targeta. Continuar?Aixó crearà %d targetes. Continuar?Això eliminarà la teva col·lecció actual i la reemplaçarà amb les dades de l'arxiu que estàs important. Estàs segur?TempsLímit de sessió d'estudiPer repasarPer explorar extensions, sisplau fes clic al butó més abaix.

Quan haguis trobat una extensió que t'interesi, engantza el codi aqui abaix. Pots engantzar varis codis, separats per un espai.Per crear blancs per omplir en una nota existent, primer has de canviar a un tipus de nota de blancs, mitjançant Edita> Canvia el tipus de nota.Per veure-les ara, prem el botó Desenterrar abaix.Per estudiar fora de l'horari normal, fes clic al botó inferior d'Estudi personalitzatAvuiHas arribat al límit actual de repassos, però encara hi ha targetes a l'espera de ser repassades. Per a una memorització òptima, considera augmentar el límit diari en les opcions.Commuta HabilitarCommuta MarcarCommuta SuspendreTotalTemps totalNúmero total de targetesNotes totalsTracta l'entrada com una expressió regularTipusEscriure resposta: camp desconegut %sNo és possible importar des d'un fitxer de només lectura.No s'ha pogut moure l'arxiu existent a la paparera, sisplau intenta reiniciar el seu ordinador.DesenterrarSubrallar text (Ctrl+U)DesferDesfés %sCodi de resposta inesperada: %sFormat de fitxer desconegut.No vistesActualitzar les targetes existents quan el primer camp coincideixiActualitzar els següents complementsActualitzades %(a)d de %(b)d notes existents.Pujar a AnkiWebPujant a AnkiWeb...Targetes usades, però perdudes a la carpeta de mèdia.Usuari 1Versió %sVisitar pàguina de la extensióVisualitza fitxersEsperant que finalitzis l'edició.En compte, els blancs per omplir no funcionaran tret que canviïs el tipus de nota a Blancs per omlir.Què desitgues desenterrar?En afegir, fer-ho al mall actual per defecteCol·lecció senceraVoleu baixar-ho ara?Escrit per Damien Elmes, amb pegats, traduccions, diseny i proves de:

%(cont)sTens un tipus de nota de Blancs per omplir però no has inserit cap blanc. Vols continuar?Tens molts malls. Si us plau, llegeix %(a)s. %(b)sEncara no has gravat la teva veu.Hi ha d'haver almenys una columna.JoveJoves+AprenentEls teus canvis afectaran a diversos malls. Si vols canviar únicament el mall actual, afegeix primer un nou grup d'opcions.Sembla que la teva col·lecció està corrupte. Aixó pot succeir quan l'arxiu és copiat o mogut mentre l'Anki està obert, o bé quan la col·lecció es emmegantzemada en un disc dur en línia o al núvol. Si els errors persisteixen després de reiniciar l'ordinador, sisplau obre una còpia de seguretat des del gestor de perfils.La teva col·lecció està en un estat inconsistent. Si us plau, executa Eines> Comprovar base de dades i sincronitza de nou.La teu col·lecció, o un dels teus arxius multimèdia, és massa gran per ser sincronitzada.La teva col·lecció s'ha pujat correctament a AnkiWeb. Si utilitzes altres dispositius, sincronízalos ara i tria descarregar la col·lecció que acabes de pujar des d'aquest ordinador. Després d'això, els repassos futurs i targetes afegides es combinaran automàticament.Les teves baralles aquí ia AnkiWeb difereixen de manera que no poden ser combinades, pel que és necessari sobreescriure les baralles d'un costat amb els de l'altre. Si tries descarregar, Anki descarregarà la col·lecció des AnkiWeb, i es perdrà qualsevol canvi que hagis fet al teu ordinador des de l'última sincronització. Si tries pujar, Anki pujarà la teva col·lecció a AnkiWeb, i es perdrà qualsevol canvi que hagis fet en AnkiWeb o en els teus altres dispositius des de l'última sincronització. Després que tots els dispositius s'hagin sincronitzat, els futurs repassos i les targetes afegides podran ser combinats automàticament.El teu tallafocs o antivirus esta impedint que Anki es conecti amb ell mateix. Sisplau, afegueix una excepció per a l'Anki.[sense mall]còpies de seguretattargetestargetes del malltargetes seleccionades percol·leccióddiesmallvida del mallduplicatajudaamagahoreshores passada la mitjaniten %s diaen %s diesen %s horaen %s horesrn %s minuten %s minutsen %s mesen %s mesosen %s segonen %s segonsen %s anyen %s anysoblitsmenys de 0,1 targetes/minutmapejat a %smapejat a Etiquetesmins.minutsmesrepassossegonsestadístiquesaquesta pàguinaan.tota la col·lecció~anki-2.1.0+dfsg~b36/locale/ca@valencia/000077500000000000000000000000001323611211500175045ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ca@valencia/LC_MESSAGES/000077500000000000000000000000001323611211500212715ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ca@valencia/LC_MESSAGES/anki.mo000066400000000000000000000025051323611211500225520ustar00rootroot00000000000000 | "!D"F$i$ #"77J7+  )6   It has %d card. It has %d cards.%%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d group%d groups%d note%d notes%d note added%d notes added%d selected%d selected%s copy%s day%s daysProject-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2014-08-30 11:24+0000 Last-Translator: loqu Language-Team: Catalan (Valencian) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) Té %d targeta. Té %d targetes.%S'ha esborrat %d targeta.S'han esborrades %d targetes.S'ha exportat %d targeta.S'han exportades %d targetes.S'ha importat %d targeta.S'han importades %d targetes.%d grup%d grups%d nota%d notesS'ha afegit %d notaS'han afegides %d notes%d seleccionada%d seleccionadescòpia de %s%s dia%s diesanki-2.1.0+dfsg~b36/locale/cs/000077500000000000000000000000001323611211500157235ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/cs/LC_MESSAGES/000077500000000000000000000000001323611211500175105ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/cs/LC_MESSAGES/anki.mo000066400000000000000000001751121323611211500207760ustar00rootroot00000000000000/> >>>">? ?(?;?8M????"?$?$@&(@"O@r@4@2@@@"A$>A$cA$A AAAABB#B8BOBbB wBBBBBBBB BBB BBBBB BB BC C"C:CJCYChCyCC0C CC C CCCCDDDDDDDDDDDTD E,"E(OExE!EEfE8F NF[F mF zFFFFFeF9G7G H%H58HXnHYH%!IkGI I III I II J !J-J6J>JFJ LJ$XJ}J JJ J J%JKJ&K;K"MBM GMUMgMINRNv O7O OwOESP@PPPPRPKQQ#Q# R1RPR(iRR RR RRRR R SSS S:SYS`SsSSS S S)S'SSTTTTTT T T TT UU(U:U3@UtUSUUUU U V VV8V"LVoVwV&V VV VV V VVVWW-$WRWXW(^W5W WWOXXX8]X5XPX7YUYlY qY}YY YYYYYYY Y Y Y Y Z Z Z'Z .Z 9ZGZZZ kZxZ ZZZZZ Z Z ZZ/[2[8[M[%U[{[ [ [ [ [ [ [ [[,[(\G\e\Fz\N\P]>a]P]]]] X^8d^^^^^^ ^^^_ _ __ $_ 1_;_ B_O_U_)d_0___4_!`0`C`Y`o`` aa/a 6a.@aoauawaza a aaa aa aaaabb+b;bPbab hb sbbNb"b cc#c:c@cGccddd %d3dBdJd]d mdxd}d dddd ddddd.dFeUene e e4eee e1f4fDfdfsf*ff Ph^h }hh"h"h hi&i5iIiRi di ni)|ii*jFj]j|jjjjj j jjjj<j-k 6kCkSkXk aklk}k kkk k kkkkkk ll/lIl Nl Zlelyl lllll ll ll l ll m!m8mKm+amm#m!mmm m m<n BnOn]_nano!3o Uocokono,oo#upkpq qq(q0q?q NqYq _q kquqqq qqqq r rr,5r#brVr8rEs\sss*s0ss t,tLt-et+t8tt u uu0u#Bu0fu uuuuu uuuvvv v1vMvbvjvivv v ww %w0w Ew"Swvw ~w1w ww wx x x $x1xAx`x-wxxx xxxx x xyVyty yy,z>zGSz zzz"z {{ {*{:{L{i{{{*{'{|@|6^|8| |!|?|;}A} Q} _}j}p}} }} } } }}}}~0~ 8~ E~ R~\~ m~~!~d~ (37FOT iw(| X+T"&+ʀ0+A>mF'*(F1o,_Iփ'Ƅ#څed8[C$(hr u&/M̉  NJ Ҋ ފ! '/W^ck.&݋,4 ;FUe$"S0h$" {^o5ΎU cmu{  ’̒ђ֒ܒ&<AILT\ bln [ e q,| ʕtܕQbx;DϖC5XO ޗ^R^&DؘDPbPJVO,&Ӛ6S#sțޛ  !,4< DQ a mx#Ɯ՜ @`o w ˝ϝPR YciouzWݞDߞ4$Y yR /G V`q|-? !/[Nea,r ? LV^ |̤ޤ 'G MXi z6Q)#  !-&umLתdPQE  Qd$%8#^>ܭ&@U Z gu }"- ٮ !-?7U7ůnu{ Ѱ A`Rx˱ Աޱ7-M {)IJղ ܲ 0%V_8e "0Գr @6`=zѵڵ  $+29@G N [ h u  Ķ۶*E-M{0 1O Vduո'2,CpE {cJ<CX q ½ν #, 3?-RFǾG/K jKh | ^ .;A FRn v  "?, *2; " (6 EPi|  7>T)EG ]hCz% >[!%)'O*w, 4>*Ny5&Kr{K X`r  -4Iel" 5GOU [gw   %:C~&=   "n0g74l)<0)(    "/8Lax& % -2.`]GY5$07*:e7},:K8 -Z^q!y   > V/d $8G_p0 G 8D] }'$;N U`"g M "u-5*`#e  '%@*f*:9 1W;6F'!FI  2 E(S|+ !=8Wi  /<E^m0rX%N!t.0-.J\M*! !B)d!FTh&q1=%laf }A%SgI P ^k%|$5$?AN64 -9BCb9 N *X%!teB!? ;CHQX i s~  $2 :H;x$/&9<r  ( \CXoL;VA`r]V.n=3)1nqKDRu`R/Lo xG3>Ma:7&krY1FePP#f,<{+bzOD72Ek{t ?hKz>_@|y!8 %w[TSiH5(),*J-,kF~e vj\Z?+lwsE8YQ$U ^C0 s!p["~'QO$Jn'_cP}v(5-Hbm6\dZW 9U^"W*%Tjy" HtQB:R@e X/G `iIza.^Efc0*6 Nuqx=p.#K]Mu-5oclpBSN~4<Z%UX9>S+0A#I'{}Gg2Y lD):Bwt3!mAgmjCLy bON4 IVM6]J?4Fsq7d_W i&[1}2ad8hT|h|;@=fvg (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-06-27 13:40+0000 Last-Translator: Luboš Luňák Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: (1 z %d) (zakázat) (povolit) Má %d kartu. Má %d karty. Má %d karet.%% Správně%(a)0.1f %(b)s/den%(a)0.1fs (%(b)s)%(a)d z %(b)d poznámek aktualizována%(a)d z %(b)d poznámek aktualizovány%(a)d z %(b)d poznámek aktualizováno%(tot)s %(unit)s%.01f karet za minutu%d karta%d karet%d karetvymazána %d karta.vymazáno %d karet.vymazáno %d karet.exportována %d karta.exportováno %d karet.exportováno %d karet.importována %d karta.impotováno %d karet.importováno %d karet.naučena %d kartanaučeny %d kartynaučeno %d karet%d balík aktualizován.%d balíky aktualizovány.%d balíků aktualizováno.%d skupina%d skupiny%d skupiny%d změn v médiích k uploadu%d změna v médiích k uploadu%d změny v médiích k uploadu%d souborů médií staženo%d soubor médií stažen%d soubory médií staženy%d poznámka%d poznámky%d poznámek%d poznámka přidána%d poznámek přidáno%d poznámky přidány%d poznámka smazána.%d poznámky smazány.%d poznámek smazáno.%d poznámka exportována.%d poznámky exportovány.%d poznámek exportováno.%d poznámka importována.%d poznámek importováno.%d poznámky importovány.%d poznámek nezměněno%d poznámka nezměněna%d poznámky nezměněny%d poznámka aktualizována.%d poznámek aktualizováno.%d poznámky aktualizovány.%d opakování%d opakování%d opakování%d vybrána.%d vybrány.%d vybráno.%s kopie%s den%s dny%s dní%s hodina%s hodiny%s hodin%s minuta%s minuty%s minut%s minuta.%s minuty.%s minut.%s měsíc%s měsíce%s měsíců%s sekunda%s sekundy%s sekund%s k vymazání:%s rok%s roky%s let%sdnů%shod%smin%směs%ss%sr&O Anki...&Biflovat...&Upravit&Export...&Soubor&Najít&Jdi na&Příručka&Příručka...&Nápověda&Import...&Invertovat výběr&Následující karta&Otevřít složku rozšíření...&Předvolby...&Předchozí karta&Přeplánovat...Podpořte &Anki...Nás&troje&Zpět'%(row)s' mělo %(num1)d polí, namísto očekávaných %(num2)d(%s správně)(konec)(filtrováno)(učí se)(nové)(rodičovský limit: %d)(prosím vyberte 1 kartu)....anki2 soubor není určen pro import. Pokud se snažíte o obnovu ze zálohy, viz kapitola 'Zálohy' v uživatelském manuálu./0 dní1 měsíc1 rok10:0022:003:004:0016:00504 gateway timeout error. Prosím zkuste dočasně zakázat váš antivirový program.:%d karta%d karty%d karetOtevřít složku se zálohamiNavštivte web%(pct)d%% (%(x)s z %(y)s)%Y-%m-%d v %H:%MZálohy
Anki výtváří zálohu kolekce při zavření a synchronizaci.Formát pro Export:Najít:Velikost písma:Písmo:V:Zahrnout:Velikost řádku:Nahradit:SynchronizaceSynchronizace
Neni momentálně povolena; pro zapnutí kliknětě na tlačítko "Synchronizace" v hlavním okně.

Je vyžadován účet

Pro synchronizaci vaši kolekce je vyžadován účet (dostupný zdarma). Zaregistrujte si účet a pak zadejte své údaje níže.

Anki aktualizováno

Byla vydána Anki verze %s.

Velký dík všem lidem, kteří dodávali nápady, hlásili chyby a darovali finanční prostředky.Snadnost karty je délka příštího intervalu, pokud při zkoušení odpovíte "dobře".Filtrované balíky nemohou mít podbalíky.Během synchronizace médií došlo k chybě. Prosím použijte Nástroje>Zkontrolovat média, potom proveďte synchronizaci znovu pro opravu tohoto problému.Zrušeno: %sO Anki...PřidatPřidat (zkratka: ctrl+enter)Přidat polePřidat médiaPřidat nový balík (Ctrl+N)Přidat typ poznámkyPřidat rub kartyPřidat štítkyPřidat k:Přidat: %sPřidánoDnes přidánoPřidána duplicita s prvním polem: %sZnovuDnes znovuPočet Znovu: %sVšechny balíkyVšechna poleVšechny karty v náhodném pořadí (biflovací mód)Všechny karty, poznámky a média tohoto profilu budou smazány. Jste si jistý?Povolit HTML v políchPři přístupu do databáze nastala chyba. Možné příčiny: - Antivirus, firewall, zálohovací nebo synchronizační software může kolidovat s Anki. Zkuste je vypnout, jestli problém zmizí. - Disk může být plný. - Složka Dokumenty/Anki je na síťovém úložišti. - Do souborů v Dokumenty/Anki nelze zapisovat. - Pevný disk je poškozený. Spusťte Nástroje > Zkontrolovat databázi pro opravu případných chyb v kolekci. Při otvírání %s došlo k chyběAnkiAnki 2.0 balíkBalík AnkiAnki nemohl přejmenovat Váš profil, protože nešlo přejmenovat složku profilu na disku. Oveřte si, zda máte právo pro zápis do složky Dokumenty/Anki a žádný jiný program právě nepoužívá složku Vašeho profilu a zkuste to znova.Anki nebyl schopen načíst váš starý konfigurační soubor. Upravte šablonu ručně pro přepínání otázky a odpovědi.Anki je přátelský, inteligentní systém pro opakování s prodlevami. Je zdarma a má otevřené zdrojové kódy.Anki je licencováno pod licencí AGPL3. Více informací o licenci naleznete v distribuci zdrojového kódu.Přihlašovací jméno nebo heslo byly nesprávné, zkuste to prosím znova.Uživatelské jménoNastal problém s AnkiWebem. Prosím zkuste to později a pokud problém přetrvá, nahlašte chybu.AnkiWeb je momentálně příliš vytížený. Zkuste to prosím znovu později.Provádí se údržba AnkiWeb. Zkuste to prosím znovu za pár minut.OdpověďTlačítka odpovědíOdpovědiBrána firewall nebo antivirový software brání Anki k připojení k Internetu.Karty mapované na prázný cíl budou smazány. Nezbývají-li už v poznámce žádné karty, bude poznámka ztracena. Opravdu chcete pokračovat?Duplicitní kartičky: %sJste si jist, že chcete vymazat %s?Je potřeba alespoň jeden typ karet.Je vyžadován alespoň jeden krok.Automaticky přehrát zvukAutomaticky synchronizovat při otevření a zavření profiluPrůměrPrůměrný časPrůměrný čas odpovědiPrůměrná snadnostPrůměr za studijní dnyPrůměrný intervalBackNáhled rubušabloba rubuZálohyZákladníZákladní (plus obrácená karta)Základní (plus volitelná obrácená karta)ProhlížetZobrazení v prohlížečiMožnosti prohlížečeSestavitPřeskočitPřeskočit kartuPřeskočit poznámkuPřeskočit příbuzné nové karty do příštího dnePřeskočit příbuzná opakování do příštího dneAnki implicitně detekuje znak oddělující pole, jako je tabulátor či čárka. Pokud ho Anki detekuje špatně, můžete ho vložit sem. \t představuje tabulátor.StornoKartaKarta %dKarta 1Karta 2ID kartySeznam karetTyp kartyTypy karetTypy karet pro %sKarta přeskočena.Karta odloženaKarta zařazena mezi pijavice.KartičkyKarty nemůžou být ručně převedeny do filtrovaného balíku.Karty jako prostý textPo zopakování budou karty automaticky vráceny do jejich originálního balíku.Karty...Na středZměnitZměnit %s na:Změnit balíkZměň typ poznámkyZměň typ poznámky (Ctrl+N)Změna typu poznámkyZměň balík v závislosti na typu poznámkyZměněnoZkontrolovat &médiaZkontrolovat soubory v adresáři médiíKontroluje se...ZvolitVybrat BalíkVyber typ poznámkyVyber štítkyNaklonovat: %sZavřítZavřít a zrušit momentálně vkládaná data?VynechatKód:Kolekce je poškozena. Nahlédněte prosím do manuálu.DvojtečkaČárkaNastavit jazyk a volby prostředíGratuluji! Tento balík máte pro dnešek hotov.Připojování...Spojení vypršelo. Buď je problém s vaším připojením, nebo máte ve složce s médii velmi objemný soubor.PokračovatKopírovatSprávných odpovědí u zralých karet: %(a)d/%(b)d (%(c).1f%%)Správně: %(pct)0.2f%%
(%(good)d z %(tot)d)Nepodařilo se připojit na AnkiWeb. Zkontrolujte prosím své připojení a zkuste to později.Nepodařilo se nahrát zvuk. Máte nainstalovány lame a sox?Nelze uložit soubor: %sBiflovatVytvořit balíčekVytvořit filtrovaný balík...VytvořenoCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZSouhrnněKumulativní %sKumulativní odpovědiKumulativní kartySoučasný balíkSoučasný typ poznámkyVlastní studiumVlastní studijní sezeníVyjmoutDatabáze zrekonstruována a optimalizována.DatumStudováno dníZrušit oprávněníLadící konzoleBalíkBalík bude importován při otevření profilu.BalíkySnižujícího se intervaluVýchozíProdleva, než budou opakování znova ukázány.SmazatVymazat kartyOdstranit balíkVymazat prázdnéOdstranit poznámkuOdstranit poznámkySmazat štítkyVymaž nepoužívanéVymazat pole z %s?Vymazat typ karet '%(a)s' a jeho %(b)s?Vymazat tento typ poznámky a všechny jeho karty?Vymazat tento nepoužívaný typ poznámek?Vymazat nepoužívaná média?Vymazána %d karta s chybějící poznámkou.Vymazány %d karty s chybějící poznámkou.Vymazáno %d karet s chybějící poznámkou.Vymazána %d karta s chybějící šablonou.Vymazány %d karty s chybějící šablonou.Vymazáno %d karet s chybějící šablonou.Smazána %d poznámka s chybějícím typem poznámky.Smazány %d poznámky s chybějícím typem poznámky.Smazáno %d poznámek s chybějícím typem poznámky.Vymazána %d poznámka s chybějícími kartičkami.Vymazány %d poznámky s chybějícími kartičkami.Vymazáno %d poznámek s chybějícími kartičkami.Smazána %d poznámka se špatných počtem polí.Smazány %d poznámky se špatným počtem polí.Smazáno %d poznámek se špatným počtem polí.Smazáno.Vymazáním tohoto balíku se všechny zbývající karty vrátí do jejich originálního balíku.PopisekPopis pro zobrazení na studijní obrazovce (pouze pro aktuální balík):DialogStáhnout z AnkiWebuStahuje se z AnkiWebu...Ke zkoušeníJen karty k opakováníZítra ke zkoušeníU&končitObtížnostJednoduchéBonus za jednoduchostInterval jednoduchostiUpravitUpravit tuto kartuUpravit HTMLUpravenoPísmoVyprázdnitPrázdné karty...Počet prázdných karet: %(c)s Pole: %(f)s Nalezena prázdná karta. Prosím spuťte z Nástroje>Prázdné karty.Prázdné první pole: %sKonecZadejte balík pro umístění %s nových karet, nebo nechte prázdné:Pozice nové karty (1...%s)Zadejte štítky k přidání:Zadejte štítky k odstranění:Chyba při stahování: %sChyba při spuštění: %sChyba při navázání bezpečného připojení. Toto je obvykle způsobeno antivirusem, firewall či VPN software, nebo problémy s ISP.Chyba při vykonávání %s.Chyba při běhu %sExportovatExportovat...Exportován %d soubor médiíExportovány %d soubory médiíExportováno %d souborů médiíNavícFF1Pole %d souboru je:Přiřazení políJméno pole:Pole:PolePole pro %sPole rozděleny pomocí: %sPole...FiltrovatFiltr:FiltrovánoFiltrovaný balík %dNajít &duplikáty...Najít duplikátyNajít a na&hradit...Najít a nahraditSkončitPrvní kartaPrvní opakováníPrvní pole se shodovalo: %sOpravena %d se špatnými vlasnostmi.Opraveny %d karty se špatnými vlastnostmi.Opraveno %d karet se špatnými vlastnostmi.Opravena chyba přepisu balíku AnkiDroidem.Opraven typ poznámky: %sPřeklopitAdresář již existuje.Písmo:ZápatíZ bezpečnostních důvodů není v kartách povoleno '%s'. Můžete to ale použít tak, že příkaz zadáte to jiného balíku a ten místo toho importujete do LaTeX záhlaví.PředpověďFormulářNalezeno %(a)s mezi %(b)s.FrontNáhled líceŠablona líceZákladníVygenerovaný soubor: %sVygenerováno v %sStáhnout sdílenéDobréInterval postupováníHTML editorTěžkéZáhlavíNápovědaNejvyšší jednoduchostHistorieDomůHodinové rozděleníHodinHodiny s méně než 30 opakováními nejsou zobrazeny.Pokud jste přispěli a nejste na seznamu, ozvěte se prosím.Při každodenním studiuIgnorovat odpovědi trvající déle nežIgnorovat velikost písmenIgnorovat poleIgnorovat řádky, kde první pole odpovídá existující poznámce.Ignorovat aktualizaciImportovatImportovat souborImportovat, i když existující poznámka má stejné první pole.Import selhal. Import selhal. Informace o ladění: Importovat nastaveníImport kompletníVe složce s médii, ale nepoužívané v žádných kartách:Pro zajištění správné synchonizace vaší kolekce mezi různými zařízeními je třeba nastavit vnitřní hodiny Anki. Ty mohou běžet špatně i pokud váš systém má ukazuje správně místní čas. V nastavení času vašeho systému zkontrolujte následující: - AM/PM - časový posun - den, měsíc a rok - časovou zónu - letní čas Rozdíl oproti správnému času: %s.Zahrnout médiaZachovat informace o plánováníZahrnout štítkyZvýšit dnešní limit nových karetZvýšit dnešní limit nových karet oZvýšit dnešní limit opakovaných karetZvýšit dnešní limit opakovaných karet oZvyšujícího se intervaluInstalace rozšířeníJazyk rozhraní:IntervalModifikátor intervaluIntervalyNeplatný kód.Vadný soubor. Prosím obnovte ze zálohy.U karty byly zjišteny špatné vlastnosti. Spusťte prosím Nástroje > Zkontrolovat databázi a pokud problém nastane znova, zeptejte na stránce podpory.Neplatný regulární výraz.Odložení provedeno.Skočit na štítky přes Ctrl+Shift+TZachovatLaTeXRovnice v LaTeXuMatem. proměnná LaTeXuChybPoslední kartaPoslední zkoušeníPoslední přidané nejdříveUčeníUčit se navícUčit se: %(a)s, Opakovat: %(b)s, Znovu se učit: %(c)s, Filtrováno: %(d)sUčeníAkce pro pijavicePráh pro pijaviceVlevoOmezit naNahrává se...Nejdelší intervalHledat v poli:Nejnižší jednoduchostSpravovatSpráva typů poznámekPřiřadit na %sPřiřadit ke štítkůmZraléMaximální intervalMaximum opakování na den.MédiaMinimální intervalMinutSmíchat nové karty a opakováníMnemosyne 2.0 balík (*.db)VíceNejvíce zapomínanýchPřemístit kartuPřemístit karty do balíku:Poz&námkyNázev již existuje.Jméno balíčku:Název:SíťNovéNové kartyJen nové kartyNových karet na denNázev nového balíkuNový intervalNový název:Nový typ poznámky:Nový název skupiny nastavení:Nová pozice (1...%d):Další den začíná vŽádné karty k opakování.Žádná karta neodpovídá kritériu, které jste zadali.Žádné prázdné karty.Žádné karty dnes nebyly studovány.Nenalezeny žádné nepoužívané nebo chybějící soubory.PoznámkaID poznámkyTyp poznámkyTyp poznámekPoznámka a její karta %d smazána.Poznámka a její karty %d smazány.Poznámka a její karty %d smazány.Poznámka přeskočena.Poznámka odložena.Upozornění: Média se nezálohují. Prosím vytvořte si pravidelné zálohy vašeho adresáře Anki.Poznámka: Část historie chybí. Více v dokumentaci.Poznámka jako prostý textPoznámky vyžadují alespoň jedno pole.Poznámky oštítkovány.NicOKNejstarší zobrazit nejdřívePři příští synchronizaci vynutit změny v jednom směruJedna nebo více poznámek nebylo importováno, protože z nich nevznikly žádné karty. To se stává, pokud máte prázdná pole nebo pokud jste nenamapovali obsah v textovém souboru na správná pole.Přemístěny mohou být jen nové karty.Pouze jeden klient může mít přístup do AnkiWeb v jednu chvíli. Jestliže předchozí synchronizace skončila s chybou, prosím zkuste znovu za pár minut.OtevřítOptimalizuje se...Případný limit:MožnostiMožnosti pro %sSkupina volebMožnosti...PořadíPořadí přidáníPořadí opakováníPřepsat šablonu rubuPřepsat typ písmaPřepsat šablonu líceHeslo:VložitVložit obrázek ze schránky jako PNGPauker 1.8 Lesson (*.pau.gz)ProcentaObdobí: %sVložit na konec fronty nových karetVložit do fronty na opakování s rozestupy:Nejprve prosím přidejte jiný typ poznámky.Prosím, připojte mikrofon a ujistěte se, že jiný program nepoužívá audio zařízení.Upravte prosím tuto poznámku a přidejte nějaké doplňovačky. (%s)Zajistěte, aby byl profil otevřen a aby Anki nebyl zaneprázdněn. Pak to zkuste znovu.Prosím nainstalujte PyAudioProsím nejdříve otevřete profil.Odstraňte prosím složku %s a zkuste to znova.Pro dokončení změny jazyka prosím Anki restartujte.Prosím spusťte Nástroje>Prázdné kartyProsím vyberte balík.Prosím, vyberte karty pouze od jednoho typu poznámky.Prosím proveďte výběr.Stáhněte si prosím aktuální verzi Anki.Prosím použijte Soubor>Import pro import tohoto souboru.Prosím navštivte AnkiWeb, aktualizujte váš balík a potom zkuste znovu.UmístěníPředvolbyNáhledNáhled vybrané karty (%s)Náhled nových karetNáhled nových karet přidaných nejpozdějiZpracován %d soubor médiíZpracovány %d soubory médiíZpracováno %d souborů mediíZpracovává se...ProfilyJe vyžadována proxy autorizace.OtázkaKonec fronty: %dZačátek fronty: %dUkončitNáhodněNáhodné řazeníHodnoceníZnovu sestavitNahrát vlastní zvukNahrává se...
Čas: %0.1fRelativní opožděnostZnovu učenéPři přidávání si pamatovat poslední vstupOdstranění tohoto typu poznámek způsobí, že jedna nebo více poznámek budou smazány. Nejdříve vytvořte nový typ karet.PřejmenovatPřejmenovat balíkPřehrát zvukPřehrát vlastní zvukZměnit pořadíZměnit pořadí nových karetZměnit pořadí...Vyžadujte jeden nebo více z těchto štítků:PřeplánovatPřeplánovatPřeplánování karet založené na mých odpovědích v tomto balíkuPokračovatText zprava doleva (RTL)Navráceno ke stavu před '%s'.OpakováníPočet opakováníČas opakováníOpakovat dopředuOpakovat dopředu oZopakujte karty zapomenuté v minulýchOpakovat zapomenuté kartyProcento úspěšnosti podle hodiny.Počet opakováníVpravoOblast: %sHledatHledat ve formátování (pomalé)VybratVybrat &všeVybrat poz&námkyVynechat štítky:Vybraný soubor není ve formátu UTF-8. Blíže viz manuál kapitola Import.Vlastní studiumStředníkServer nenalezen. Buď nejste připojen nebo váš antivirus/firewall blokuje programu Anki připojení do internetu.Přesunout všechny balíky pod %s do téhle skupiny?Nastav pro všechny podřízené balíčkyByla stisknuta klávesa Shift. Přeskočena automatická synchronizace a spouštění doplňků.Změnit pozici existujících karetZkratka: %sZkratka: VlevoZkratka: Vpravo nebo EnterZkratka: %sZobrazit %sZobrazit odpověďZobrazit duplikátyZobrazovat čas odpovědiZobrazit nové karty až po opakováníZobraz nové karty před opakovánímZobrazit nové karty v pořadí přidáníZobrazit nové karty v náhodném pořadíZobrazovat čas do příštího opakování nad tlačítkyZobrazovat počet zbývajících karet během opakováníVelikost:Některé příbuzné nebo přeskočené karty byly přesunuty do příštího sezení.Některá nastavení se projeví až po restartu Anki.Některé úpravy byly ignorovány, protože typ poznámky se změnil:Setřídit poleSetřídit prohlížeč dle tohoto poleTřízení dle toho sloupce není podporováno. Vyberte prosím jiný.MezeraPočáteční pozice:Úvodní jednoduchostStatistikyKrok:Kroky (v minutách)Kroky musí být v číslechDnes nastudovánoStudovatStudijní balíkyStudovat balík...Studovat teďStudovat podle stavu karty nebo štítkuStylNastavení vzhledu (sdílené mezi kartami)Supermemo XML export (*.xml)OdložitOdložit kartuOdložit poznámkuOdloženéOdložené a přeskočenéSynchronizovat i obrázky a zvukySynchronizace selhala: %sSynchronizace neúspěšná; internet v režimu off-lineSynchronizace vyžaduje, abyste měli správně nastaven čas. Přenastavte ho prosím a zkuste to znovu.Synchronizuje se...TabulátorDuplikátní štítkyJen štítekŠtítkyCílový balík (Ctrl+D)Cílové pole:TextText oddělený tabulátory nebo středníky (*)Tento balík už existuje.Takové pole už existuje.Název je již používán.Spojení s AnkiWebem vypršelo. Zkontrolujte prosím své připojení a zkuste to znova.Vychozí konfiguraci nelze odstranit.Výchozí balík nelze odstranit.Rozdělení karet na balíky.Stahování selhalo. Prosím, zkuste to znovu.První pole je prázdné.První pole typu poznámky musí být zobrazeno.Následující znak nemůže být použit: %sLíc této karty je prázdný. Prosím spusťte Nástroje>Prázdné karty.Data, která jste zadali, by způsobila prázdnou otázku na všech kartách.Počet nových karet které jste přidali.Počet správně zodpovězených.Počet opakování do příště.Kolikrát jste vybrali každou odpověď.Oprávnění pro dočasnou složku vašeho systému nejsou správně nastavená a Anki je nedokáže automaticky změnit. Více informací naleznete v Anki manuálu pod "temp folder".Toto není validní soubor .apkg.Zadaná vyhledávací kritéria neodpovídají žádným kartám. Chcete je upravit?Požadovaná změna způsobí kompletní nahrání databáze na server při příští synchronizaci Vaší sbírky. Máte-li změny nebo naplánované zkoušení na jiném zařízení, které ještě nebyly synchronizovány, budou ztraceny. Chcete pokračovat?Čas na zodpovězení.Zbývají vám další nové karty, ale byl dosažen denní limit. Můžete ho zvýšit, ale mějte na paměti, že čím víc nových karet naráz, tím víc opakování.Musí existovat alespoň jeden profil.Podle tohoto sloupce nelze seřazovat, ale můžete vyhledávat ve specifické balících jejich výbětem vlevo.Zdá se, že nejde o validní soubor .apkg. Pokud se vám tato chyba zobrazuje u souboru staženého z AnkiWeb, je možné, že nebyl stažen správně.Soubor již existuje. Opravdu ho chcete přepsat?V této složce jsou všechna Vaše Anki data na jednom místě, aby se dala jednoduše zálohovat. Chcete-li nastavit Anki na jinou složku, podívejte se sem: %s Toto je speciální balík pro studium mimo normální plán.Toto je {{c1::sample}} doplňovačka.Tímto se smaže vaše současná kolekce a nahradí se daty ze souboru, který importujete. Jste si jistý?ČasLimit pro časový boxK opakováníChcete-li přidat doplňovačku do existující poznámky, musíte její typ nejdřív změnit na Doplňovačku pomocí: Editovat->Změnit typ poznámky.Pro jejich zobrazení klikněte na tlačítko Zruš přeskočeníChcete-li studovat mimo normální plán, klikněte na tlačítko Vlastní studium.DnesByl dosažen denní limit, ale stále vám zbývají karty k opakování. Zvažte zvýšení denního limitu pro lepší zapamatování.CelkemCelkový časCelkem karetCelkem poznámekPokládat vstup za regulární výrazTypNapište odpověd: neznámé pole %sNelze importovat ze souboru s právy jen pro čtení.Zruš přeskočeníZpětZpět %sNeznámý formát souboru.NenastudovanéAktualizovat existující poznámku, když je první pole stejnéAktualizováno %(a)d z %(b)d existujících poznámek.Nahrát na AnkiWeb...Nahrává se na AnkiWeb...Použito v kartách, ale chybí ve složce s médii:Uživatel 1Verze %sČeká se na dokončení změn.Pozor, cloze karty nebudou fungovat dokud nezměníte typ na Cloze.Při přidávání standardně nastaven aktuální balíkCelá kolekceChcete ji stáhnout nyní?Máte zvolený typ poznámek cloze, žádné v poznámce nemáte. Pokračovat?Máte mnoho balíku. Více na %(a)s. %(b)sZatím jste nezaznamenali svůj hlas.Je třeba alespoň jeden sloupec.MladéMladé a novéVaše změny ovlivní vícero balíků. Pokud chcete změnit pouze současný balík, přidejte nejdřív novou skupinu nastavení.Vaše kolekce je v nekonzistentním stavu. Pro opravu spusťte Nástroje > Zkontrolovat databázi a synchronizujte.Vaše kolekce nebo média jsou příliš velké pro synchronizaci.Vaše kolekce byla úspěšně nahrána na AnkiWeb. Pokud používáte jiné zařízení, prosím synchronizujte je s AnkiWeb a vyberte volbu "Stáhnout soubor z AnkiWeb", který jste právě nahráli z tohoto počítače. Po tomto budou další změny a hodnocení sloučeny automaticky.Vaše balíčky zde a na AnkiWeb jsou rozdílné natolik, že nemohou být sloučeny, takže je nutné přepsat baličky jedné strany balíčky druhou. Jestliže zvolíte "Stáhnout z AnkiWebu", Anki stáhne kolekci z AnkiWeb a přepíše stávající. Všechny změny, které jste provedli na tomto počítači od poslední synchronizace, budou ztraceny. Pokud zvolíte "Nahrát na AnkiWeb", Anki odešle vaši stávající kolekci na AnkiWeb. Všechny změny, které jste provedli na jiných zařízeních od poslední synchronizace na toto zařízení, budou ztraceny. Po synchronizaci všech zařízení budou moci být budoucí opakování a změny synchronizovány automaticky.[žádný balík]zálohykartykarty z balíkukaret setříděných podlekolekcednídny/dníbalíkstáří balíkuduplikátnápovědaskrýthodinhodin po půlnocichybméně než 0.1 karet za minutupřiřazeno na %spřiřazeno na Štítkyminutminutměsopakovánísekundstatstato stránkatýdnůcelá sbírka~anki-2.1.0+dfsg~b36/locale/da/000077500000000000000000000000001323611211500157025ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/da/LC_MESSAGES/000077500000000000000000000000001323611211500174675ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/da/LC_MESSAGES/anki.mo000066400000000000000000001704431323611211500207570ustar00rootroot00000000000000l.P> Q>\>c>"i>> >>>8>>??"+?$N?$s?&?"??4?2*@]@n@"@$@$@$@ A>ASAkAsAAAAAA AAB BBBBB B)B2B 8BCBIBOBSB ZBdB jBuB BBBBBBBB0B 'C4C :C ECPCVCiCCCDDDD%D*D/D3D7DT;DD,D(DD!E)EfAEE EE E EEFF,FeCFF7SG GG5GXGY7H%HkH #I /I:I>I YI cImI I IIIII I$II II J J%$JKJJJJ"LL LLLMR=NvN7O ?OwKOEO@ PJPQP`PRhPP>Q#YQ#}QQQ(QR RR +R8RQRbR gR tRRRRRRRRRR R S)S'[,T[([[[F[N$\Ps\>\P]T]]]] ]8]^^^9^=^ L^Y^_^d^ i^ t^^ ^ ^^ ^^^)^0^"_8_4<_!q______m``` ````` ` ``` `a a"a)a1a:aKa_aoaaa a aaNa"b>bRbWbnbtb{b+c4c9cSc Ycgcvc~cc ccc cccc cccc d.dFBddd d d4de#e *e16ehexeee*ee gg gg"g"h $hEhZhih}hh h h)hh^iziiiiiii i ii jj<$jaj jjwjjj jjj jjj j jjkk*k0kAkIkck}k k kkk kkkkk kk kl l $l.l=lUllll+ll#l!lmm $m .m<9m vmm]mamSn!gn nnnn,nn#oko9p >pLp\pdpsp pp p pppp pppq 4q ?qJq,iq#qVq8rEJrrr*rr s,"sOs-hs+s8ss ttt3t#Et itwtttt tttttttuu4u| D| O| ]|g||||| | | || }$}!7}dY} }}}}}} } ~(~;~ U~v~X~+~"&9+`0+>FB'*(܀17,I"l'\#pe8*C(r' u/2MbW ] h t!'ʼn.&Ls,ʊ ъ܊U$Qv"S0$/"Tw }{^5dU  % 7BDI N Xbglrґבߑ  Փ # ",?AQ+Ȕ31(9Z5ʕCߕ1#U$f,4()$@eӗ '5<DKQX_f oy  ˜ ט $7 FS4\  ٙÚƚɚh̚5+75c!ۛv  ŜϜ q"<T BSeR2 ! Ġ Ѡߠ 1 ; GQ&a  3ȡLI`&tƤcDe2 AjM>KC HTUY6%U { 1թ !7Ll˪!ڪ,)2G\` g s38ĬˬҬ ڬ .B:GW %4L%^ɮϮޮ '-!3U[.a5 Ưӯdm1t5Rܰ6/f ƱͱԱ۱  $18? HUeuӲ&ز+C1L ~.ڳ ߳   ,9%K'qIմQRq8ĵKInR DͶ,B&Ho   з ݷ& A2t@!и%";Ri 4 ?JQSVo   ƺϺ ׺ , ; GTkQ5׻ "'>FN 7?[py  ƽ ̽׽޽4 >A Ⱦ;־ / 9:F!ʿ.߿!'+*0V4  $32f#6Za gu D 0 ;I\ d q{  !$6*?j  ! 3 @ JXt(1) 36jo w A|Xr ?.n 3T   2 CP hs *$ ,&82_+PD[T)$;,W28JZ cn,  ! 2> EP ht}*ugn ~ *  : Ua!{ &'(>gx #  QI Zd;2hP$   ! "B/e&02 G,EtB # H- v  4(]!b  !/*YZ  4KiV)%&"L6o7(?!@a**%)H-L52!mx<BH*<jgN_.4 $*/.Jy 5-,-Dr {'U?DS_r/+.LPYsEd, #%*3HOV\bu} !O[{4HcOG@i'ARc^{d2yLhk_V*`YJ -Bl%u$\XfSG8`^ DymzK)W B$n5qNB 8WZixn;@RA=  Ns2=tNsQF&3m8,oo{ Pf6I_R.r/g9w#10^-V0czi4TXr+<eJuD<LQU U%"7.d(H)*E},+-bpSUT ]g;jxW r4>|3]h!v&E<l P979 t=o#DFJC~IqxY p&naju:Zpbav/6?Gfek\ :*IqC? m6>T5!CSeL_@sPOg/} yw vtV'M$#H|:w1\0k~XK"%a(F!;5M?M}d"b](|jA`Y[Z+~,El[7K13hz2'.)>Q  (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:04+0000 Last-Translator: Aputsiak Niels Janussen Language-Team: Danish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: da (1 af %d) (slået fra) (slået til) Den har %d kort. Den har %d kort.%% Korrekt%(a)0.1f %(b)s/dag%(a)0.1fs (%(b)s)%(a)d af %(b)d notater opdateret%(a)d af %(b)d notater opdateret%(tot)s %(unit)s%.01f kort/minuttet%d kort%d kort%d kort blev slettet.%d kort blev slettet.%d kort blev eksporteret.%d kort blev eksporteret.%d kort blev importeret.%d kort blev importeret.%d kort blev blev studeret i%d kort blev blev studeret i%d kortsæt blev opdateret%d kortsæt blev opdateret%d gruppe%d grupper%d medieændring til overførsel%d medieændringer til overførsel%d mediefil blev hentet%d mediefiler blev hentet%d note%d noter%d note tilføjet%d noter tilføjet%d note blev slettet.%d noter blev slettet.%d note blev eksporteret.%d noter blev eksporteret.%d note importeret.%d noter importeret.%d note er uændret%d noter er uændrede%d note opdateret%d noter opdateret%d genopfrisk%d genopfriskes%d valgt%d valgte%s kopi%s dag%s dage%s time%s timer%s minut%s minutter%s minut.%s minutter.%s måned%s måneder%s sekund%s sekunder%s til sletning:%s år%s år%s dag%s time%s min%smdr%s sek%s år&Om...Ter&p...&Redigér&Eksportér...&Filer&Søg&Kør&Guide&Guide...&Hjælp&Importér...&Invertér markering&Næste kort&Åbn mappe med tilføjelser...&Indstillinger...&Forrige kort&Planlæg påny...&Støt Anki...&VærktøjerFo&rtryd'%(row)s' havde %(num1)d felter, forventede %(num2)d(%s korrekt)(slut)(filtreret)(læring)(ny)(overordnet grænse: %d)(vælg venligst 1 kort)....anki2-filer er ikke beregnet til import. Hvis du forsøger at gendanne fra en sikkerhedskopi, så se venligst sektionen 'Sikkerhedskopier' (på engelsk Backups) i brugermanualen./0d1 måned1 år1021030416Modtog 504-fejl om tidsudløb for adgangspunktet. Prøv venligst at slå din antivirus fra midlertidigt.:%d kort%d kortÅbn mappe med sikkerhedskopierBesøg websted%(pct)d%% (%(x)s af %(y)s)%Y-%m-%d @ %H:%MSikkerhedskopier
Anki vil oprette en sikkerhedskopi af din samling, hver gang programmet lukkes eller der synkroniseres.Eksportformat:Søg:Skriftstørrelse:Skrifttype:I:Inkludér:Linjestørrelse:Erstat med:SynkroniseringSynkronisering
Er ikke indstillet; klik på knappen til synkronisering i hovedvinduet for at aktivere.

Der kræves en konto

Der kræves en fri konto for at bevare din samling synkroniseret. Tilmeld dig venligst for en konto, og indtast dernæst dine detaljer nedenfor.

Anki er opdateret

Anki %s er blevet udgivet.

En stor tak til alle som er kommet med forslag, fejlrapporter og donationer bidrag.Et korts lethed er størrelsen af næste interval når du svarer "godt" ved en genopfriskning.Et filtreret kortsæt kan ikke have under-kortsætDer opstod et problem under synkronsiering af mediet. Brug venligst Værktøjer>Tjek medie, og synkronisér dernæst igen, for at korrigere dette problem.Afbrød: %sOm AnkiTilføjTilføj kort (genvej: ctrl+enter)Tilføj feltTilføj medieTilføj nyt kortsæt (Ctrl+N)Tilføj notetypeTilføj baglænsTilføj etiketterFøj til:Tilføj: %sTilføjetTilføjet i dagTilføjede dublet med første felt: %sIgenIgen i dagAntal gentagelser: %sAlle kortsætAlle felterAlle kort i tilfældig rækkefølge (terpetilstand)Alle kort, noter og medier for denne profil vil blive slettet. Er du sikker?Tillad HTML i felterneDer opstod en fejl under tilgangen til databasen. Mulige årsager: - Antivirus, firewall, sikkerhedskopiering eller software til synkronisering kan have påvirket Anki. Forsøg at slå denne type software fra, og se om problemet forsvinder. - Din disk kan være fyldt op. - Mappen Dokumenter/Anki kan være på et netværksdrev. - Filer i mappen Dokumenter/Anki kan være skrivebeskyttede. - Din harddisk kan indeholde fejl. Det er en god idé at køre Værktøjer>Tjek database, for at sikre at din samling ikke er beskadiget. Der opstod en fejl under åbning af %sAnkiAnki 2.0 KortsætAnki kortsæt-pakkeAnki kunne ikke omdøbe din profil, fordi den ikke kunne omdøbe profilmappen på disken. Sørg venligst for at du har rettigheder til at skrive til Dokumenter/Anki, samt at andre programmer ikke tilgår dine profilmapper - forsøg dernæst igen.Anki fandt ikke linjen mellem spørgsmålet og svaret. Tilpas venligst skabelonen manuelt for at bytte om på spørgsmålet og svaret.Anki er et venligt, intelligent opbygget indlæringssystem. Det er gratis og udviklet i åben kode.Anki er udgivet under AGPL3-licensen. Se venligst licensfilen i kildeudgivelsen for mere information.AnkiWeb ID eller password var forkert; prøv igen.AnkiWeb ID:AnkiWeb modtog en fejl. Prøv igen om et par minutter, og hvis problemet bliver ved, opret en fejlrapport.AnkiWeb er travl i øjeblikket. Prøv igen om et par minutter.Der foretages vedligehold på AnkiWeb. Prøv venligst igen om få minutter.SvarSvarknapperSvarAntivirus- eller firewall-software forhindrer Anki i at tilkoble sig til internettet.Alle kort der er tomme vil blive slettet. Hvis et notat ikke har nogle kort vil det blive slettet. Er du sikker på du vil fortsætte.Forekommer 2 gange i filen: %sEr du sikker på at du vil slette %s?Der kræves mindst én korttype.Mindst et skridt er nødvendigt.Afspil lyden automatiskSynkronisér automatisk når profil åbnes/lukkesGennemsnitGennemsnitstidGennemsnitlig svartidGennemsnitlig lethedGennemsnit for dage med studierGennemsnits intervalBagsideForhåndsvisning af bagsideSkabelon for bagsideSikkerhedskopierGrundlæggendeGrundlæggende (og kort baglæns)Grundlæggende (valgfrit med kort baglæns)GennemseUdseende på browserBrowserindstillingerBygBegravBegrav kortBegrav notatLæg relaterede nye kort til side indtil næste dagLæg relaterede genopfriskninger til side til næste dagSom standard vil Anki opfange tegnet mellem felter, så som en tabulator, et komma eller lign. Hvis Anki opfanger tegnet forkert, kan du indtaste det her. Brug \t til at repræsentere tabulator.AfbrydKortKort %dKort 1Kort 2Kort-IDKortlisteKorttypeKorttyperKorttyper til %sKort er begravetKort er suspenderet.Kortet var en igle.KortKort kan ikke flyttes manuelt ind i et filtreret kortsæt.Kort som ren tekstKort flyttes automatisk tilbage til deres oprindelige kortsæt, når du gennemgår dem.Kort...CentreretÆndreÆndre %s til:Ændre kortsætSkift notetypeSkift notetype (Ctrl+N)Skift notetype...Skift kortsæt afhængigt af notetypeÆndretTjek &medie...Tjek filerne i mediekatalogetKontrollerer...VælgVælg kortsætVælg notetypeVælg mærkerKlon: %sLukLuk og tab nuværende indhold?ClozeKode:Samlingen er defekt. Se manualen.KolonKommaKonfigurér grænsefladesprog og indstillingerTillykke! Du er færdig med dette kortsæt for i dag.Tilkobler...Forbindelsen blev ramt af tidsudløb. Der er enten problemer med din internetforbindelse, eller også har du en meget stor fil i din mediemappe.FortsætKopierRet svar på ældre kort: %(a)d/%(b)d (%(c).1f%%)Korrekt: %(pct)0.2f%%
(%(good)d ad %(tot)d)Kunne ikke forbindel til AnkiWeb. Check dine netværksindstillinger og prøv igen.Kunne ikke optage lyd. Har du installeret lame og sox?Kunne ikke gemme filen: %sTerpOpret kortsætOpret filtreret kortsæt ...OprettetCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Skift+FCtrl+Skift+LCtrl+Skift+MCtrl+Skift+NCtrl+Skift+PCtrl+WCtrl+ZVoksendeKumulativ %sKumulative svarKumulative kortNuværende kortsætNuværende notetype:Brugerdefineret studieBrugerdefineret studielektionKlipDatabasen er genopbygget og optimeret.DatoDage du har studeretFjern godkendelseKonsol til fejlsøgningKortsætKortsæt bliver importeret når en profil åbnes.Alle kortsætAftagende intervallerStandardForsinkelse indtil genopfriskelser vises igen.SletSlet kortSlet kortsætSlet de tommeSlet notatSlet notaterSlet etiketterSlet ubrugteSlet felt fra %s?Slet korttypen '%(a)s' og dets %(b)s?Slet denne note-type og alle dens kort?Slet denne ubrugte notetype?Slet medier som ikke anvendes?Slettede %d kort med manglende note.Slettede %d kort med manglende note.Slettede %d kort med manglende skabelon.Slettede %d kort med manglende skabelon.Slettede %d note med manglende notetype.Slettede %d noter med manglende notetype.Slettede %d note uden kort.Slettede %d noter uden kort.Slettede %d note med forkert felttal.Slette %d noter med forkerte felttal.Slettet.Sletning af dette kortsæt fra listen, vil returnere alle tilbageværende kort til deres oprindelige kortsæt.BeskrivelseBeskrivelsen som vises på studieskærmen (kun nuværende kortsæt):DialogHenter fra AnkiWebHenter fra AnkiWeb...I dagVis kun kort med overskredet tidsfristTidsfrist i morgen&AfslutSværhedsgradLetNem bonusNemt intervalRedigérRediger nuværendeRediger HTMLRedigeretRedigerende fontTomTomme kort ...Tøm kort-numre: %(c)s Felter: %(f)s Der blev fundet tomme kort. Kør venligst Værktøjer>Tomme kort.Tome første felt: %sSlutIndtast kortsæt at placere nye %s kort i, eller efterlad blank:Indtast ny kortposition (1...%s):Indtast etiketter der skal tilføjes:Indtast etiketter der skal slettesFejl under hetning: %sFejl under opstart: %sFejl under etablering af sikker forbindelse. Dette skyldes som regel antivirus, firewall eller VPN-software, eller problemer med din internetudbyder.Fejl under afvikling af %s.Fejl ved afvikling af %sEksportérEksportérEkstraFF1Felt %d i fil er:FeltopmærkningFeltnavn:Felt:FelterFelter for %sFelter separeret af: %sFelter...FiltrérFilter:FiltreretFiltreret kortsæt %dFind &dubletter...Find dubletterSøg og er&stat...Søg og erstatFærdiggørFørste kortFørste genopfriskningFørste felt matchede: %sRettede %d kort med ugyldige egenskaber.Rettede %d kort med ugyldige egenskaber.Rettede AnkiDroid-fejl ifm. kortsæt-tilsidesættelseRettede notetype: %sVendMappe findes allerede.Skrift:SidefodAf hensyn til sikkerheden, så er '%s' ikke tilladt på kort. Du kan stadig bruge det, ved at placere kommandoen i en anden pakke, og importere denne pakke i LaTeX-hovedet i stedet.PrognoseFormularFandt %(a)s på tværs af %(b)s.ForsideForhåndsvisning af forsideSkabelon for forsideGenereltOprettet fil: %sOprettet %sHent delteGodtGradueringsintervalHTML EditorHårdOverskriftHjælpLettesteHistorikStartTimevist opdeltTimerTimer med mindre end 30 genopfriskninger vises ikke.Hvis du har bidraget og ikke findes på listen så kontakt os.Hvis du studerer hver dagIgnorer svartider længere endIgnorer versalIgnorér feltIgnorér linjer hvor første felt matcher eksisterende noteSe bort fra denne opdateringImportérImporter filImportér selv om eksisterende note har samme første-feltImport mislykkedes. Import fejlede: fejlinformation: Import mulighederImport er fuldført.I medie-mappe, men ikke anvendt af nogen kort:For at sikre at din samling fungerer korrekt når der flyttes mellem enheder, så kræver Anki at dine computeres interne ure er indstillet korrekt. Det interne ur kan gå forkert, selv om dit system viser den lokale tid korrekt. Gå venligst til tidsindstillingerne på din computer og tjek følgende: - AM/PM - Forskydning af tid - Dag, måned og år - Tidszone - Sommer- og vintertid Forskellen i forhold til korrekt tid: %s.Inkluder medieInkluder planlægningsinformationInkluder etiketterForøg dagens begrænsning for nye kortForøg dagens begrænsning for nye kort medForøg grænsen for dagens kort-genopfriskningerForøg dagens grænse for genopfriskning af kort medIntervallerne øgesInstallér tilføjelseGrænsefladesprog:IntervalInterval-modifikatorIntervallerUgyldig kode.Filen er ugyldig. Gendan den fra en sikkerhedskopi.Ugyldig egenskab fundet i kort. Brug venligst Værktøjer>Tjek database, og dukker problemet op igen, så stil venligst et spørgsmål på supportstedet.Ugyldigt regulært udtryk.Det er blevet suspenderet.Spring til mærker med Ctrl+Skift+TBeholdLaTeXLaTeX-ligningMatematik-miljø for LaTeXUdfaldSidste kortSeneste genopfriskningSeneste tilføjes førstLærLær foran grænseLær: %(a)s, Genopfrisk: %(b)s, Lær påny: %(c)s, Filtrerede: %(d)sIndlæringIgle-handlingIgle-grænseværdiVenstreBegræns tilHenter...Længste intervalSe i felt:SværesteAdministrérAdministrér notetyper...Mappe til %sKnyt til TagsModenMaksimum-intervalMaksimum for genopfriskninger/dagMedieMinimalt intervalMinutterBland nye kort med kort til genopfriskningMnemosyne 2.0 kortsæt (*.db)MereFlest omgangeFlyt kortFlyt kort til kortsætN&otatNavnet eksisterer.Navn på kortsæt:Navn:NetværkNyeNye kortKun nye kortNye kort / dagNyt kortsætnavn:Nyt intervalNyt navn:Ny notattype:Ny indstillings gruppenavn:Ny position (1...%d):Næste dag start vedDer er ingen kort med udløben tidsfristIngen kort som passede til de kriterier du angav.Ingen tomme kort.Der blev ikke studeret ældre kort i dag.Der blev ikke fundet ubrugte eller manglende filer.NoteNote-IDNotattypeNotetyperNote og dets %d kort er slettet.Note og dets %d kort er slettet.Noten er begravet.Note er suspenderet.Bemærk: Medie er ikke sikkerhedskopieret. Etablér venligst en periodisk sikkerhedskopi af din Anki-mappe for at sikre dig.Bemærk: Noget at historikken mangler. For mere information, se browser documentationen.Notat i ren tekstNoter kræver mindst ét felt.Mærkede noter.IngentingO.k.Ældste set førstGennemtving ensretning af ændringer ved næste synkronisering.Én eller flere noter blev ikke importeret, fordi de ikke oprettede nogen kort. Dette kan ske når du har tomme felter, eller når du ikke har kædet indholdet i tekstfilen til de korrekte felter.Kun nye kort kan repositioneres.AnkiWeb kan kun tilgås af én klient ad gangen. Hvis en tidligere synkronisering mislykkedes, så forsøg igen om nogle få minutter.ÅbenOptimerer...Valgfri grænse:IndstillingerMuligheder for %sIndstillingsgruppeIndstillinger...RækkefølgeTilføjede rækkefølgeFristordenOverskriv skabelon til bagside:Overskriv forside:Overskriv skabelon til forside:Adgangskode:IndsætIndsæt billeder fra udklipsholder som PNGPauker 1.8-lektion (*.pau.gz)ProcentPeriode: %sPlacer i slutningen af den nye kortkøPlacer i genopfriskelse-køen med interval mellem:Tilføj venligst en anden note-type først.Tilslut en mikrofon, og forsikr dig, at andre programmer ikke bruger lydenheden.Redigér venligst denne note og tilføj nogle cloze-sletninger. (%s)Sørg venligst for at have en profil åben og at Anki ikke er aktiv, forsøg dernæst igen.Installér venligst PyAudioÅbn venligst en profil først.Fjern venligst mappen %s og forsøg igen.Kør venligst Værktøjer>Tomme kortVælg venligst et kortsæt.Udvælg venligst kun kort fra én note-type.Vælg venligst et eller andet.Opgrader venligst til den seneste version af Anki.Benyt venligst Fil>Importér for at importere denne fil.Besøg venligst AnkiWeb, opgradér dit kortsæt, og forsøg dernæst igen.PositionOpsætningForhåndsvisningForhåndsvis valgte kort (%s)Forhåndsvis nye kortForhåndsvis nye kort tilføjet i den sidsteBehandler...ProfilerDer kræves proxy-godkendelse.SpørgsmålKø nederste: %dKø top: %dAfslutTilfældigTilfældig rækkefølgeBedømmelseGenopbygOptag egen stemmeOptager...
Tid: %0.1fRelativ overskridelseGenlærHusk sidste indtastning når der tilføjesFjernelse af denne korttype ville betyde at én eller flere noter blev slettet. Opret venligst en ny korttype først.OmdøbOmdøg kortsætGenafspil lydAfspil egen stemmeRepositionerRepositioner nye kortRepositioner...Påkræv én eller flere af disse mærker:Nyt tidspunktSkemalæg igenPlanlæg kort påny baseret på mine svar i denne kortsætFortsæt nuModsat tekstretning (RTL)Gendannet til tilstand før '%s'.GennemgangGenopfrisk-tællerGenopfrisk-tidGenopfrisk før planlagtGenopfrisk før planlagt medGenopfrisk kort som er glemt i senesteGenopfrisk glemte kortGenopfrisk-succesrate per time af dagen.GenopfriskningerHøjreVirkefelt: %sSøgSøg indenfor formatering (langsom)VælgVælg &altVælg &NotaterVælg mærker som skal udelades:Den valgte vil var ikke i formatet UTF-8. Læs venligst manualens importsektion .Selektivt studieSemikolonServer blev ikke fundet. Enten er din forbindelse røget, eller også blokerer antivirus/firewall-software Anki fra at koble sig på internettet.Indstil alle kortsæt nedenfor %s til denne tilvalgsgruppe?Angiv for alle under-kortsætSkift-tasten blev holdt nede. Spring over automatisk synkronisering og indlæsning af udvidelsesmoduler.Skift position for eksisterende kortGenvej: %sGenvej: %sVis %sVis svarVis dubletterVis svartiderVis nye kort efter genopfriskningVis nye kort før genopfriskningerVis nye kort i den rækkefølge de er tilføjetVis nye kort i tilfældig rækkefølgeVis næste genopfriskningstid over svarknapperneVis tilbageværende kortantal under genopfriskningStørrelse:Nogle relaterede eller begravede kort blev udsat til en senere session.Nogle ændringer træder først i kraft efter du har genstartet Anki.Nogle opdateringer blev ignoreret, da notetypen er blevet ændret:Sorter feltSorter efter dette felt i browserenSortering i denne søjle er ikke understøttet. Vælg venligst en anden.MellemrumStartposition:Sværhedsgrad ved startStatistikTrin:Trin (i minutter)Trin skal være tal.Studeret i dagStudérStudér kortsætStudér kortsæt ...Gennemgå nuStudér kortene efter kortenes tilstand eller mærkeStilStiludformning (delt mellem kort)Supermemo XML-eksport (*.xml)SuspendérSuspender kortSuspender notatSuspenderetSuspenderet+BegravetSynkroniser lyd og billeder ogsåSynkronisering fejlede: %sSynkronisering fejlede; internettet er offline.Synkronisering kræver at uret i din computer er sat korrekt. Indstil uret og prøv igen.Synkroniserer...TabAfmærk dubletterMærkat kunMærkerMål-kortsæk (Ctrl+D)Målfelt:TekstTekst separerede af tabulatorstop eller semikolon(*)Det kortsæt findes allerede.Det feltnavn er allerede brugt.Det navn er allerede brugt.Forbindelsen til AnkiWeb fik timeout. Check dine netværksindstillinger og prøv igen.Standardkonfigurationen kan ikke fjernes.Standardkortsættet kan ikke slettes.Delingen af kort i dine kortsæt.Filoverførslen var beskadiget. Forsøg venligst igen.Det første felt er tomt.Det første felt af denne notetype skal være afbildet.Det følgende tegn kan ikke anvendes: %sForsiden af kortet er tom. Kør venligst Værktøjer>Tomme kortDet input du gav ville oprette et tom spørgsmål på alle kort.Antallet af nye kort som du har tilføjet.Antallet af spørgsmål du har svaret på.Antal af fremtidige genopfriskninger.Antal gange du har trykket på hver knap.Tilladelserne for dit systems midlertidige mappe er ikke korrekt, og Anki er ikke i stand til at rette dem automatisk. Søg venligst efter 'temp folder' i Anki-manualen for mere information.Den leverede fil er ikke en gyldig .apkg-fil.Den foretagne søgning gav ingen match med kort. Ønsker du at tilpasse den?Den ønskede ændring ville kræve et fuld upload af databasen når du synkroniserer din samling næste gang. Hvis du har genopfriskninger eller andre ændringer som venter på et andet apparat der ikke er synkroniseret endnu, mistes de. Vil du fortsætte?Tiden du har taget om at svare på spørgsmålene.Der er flere nye kort tilgængelige, men den daglige grænse er opbrugt. Du kan øge grænsen, men husk at jo flere kort du introducerer, jo flere genopfriskninger skal du foretage.Der skal mindst være én profil.Der kan ikke sorteres efter denne kolonne, men du kan søge efter specifikke kortsæt ved at klikke på én til venstre.Dette ligner ikke en gyldig .apkg-fil. Hvis du får denne fejl fra en fil, der er hentet fra AnkiWeb, så mislykkedes hentningen sandsynligvis. Forsøg venligst igen, og hvis problemet fortsat er tilstede, så kan du forsøge igen med en anden browser.Denne fil findes. Er du sikker på at du vil overskrive den?Denne mappe lagrer alle dine Anki-data på ét enkelt sted, så det er nemmere at lave sikkerhedskopier. For at fortælle Anki at der skal anvendes en anden placering, se: %s Dette er et specielt kortsæt til studier uden for den normale tidsplan.Dette er en {{c1::sample}} cloze-sletning.Dette vil slette din eksisterende samling og erstatte den med dataene i filen du importerer. Er du sikker?TidTidsboksgrænseTil genopfriskningFor at lave en cloze-sletning på en eksisterende note, så skal du først ændre den til en cloze-type, via Redigér>Skift notetype.For at se dem med det samme, så klik knappen Grav frem igen, der er nedenfor.For at studere uden for den normale plan, så tryk på knappen Brugerdefineret studie nedenfor.I dagDagens genopfrisknings-grænse er nået, men der er stadig kort der venter på at blive anmeldt. For at optimere hukommelsen bør du overveje at øge den daglige grænse.IaltTid i altKort ialtNotater ialtFortolk inddata som regulære udtrykTypeSkriv svar: ukendt felt %sKan ikke importere fra en skrivebeskyttet fil.Grav frem igenFortrydFortryd %sUkendt filformatUlæstOpdatér eksisterende noter når første felt matchesOpdaterede %(a)d af %(b)d eksisterende noter.Uploader til AnkiWebUploader til AnkiWeb...Anvendt i kort, men findes ikke i mediemappe:Bruger 1Version %sAfventer færdiggørelse af redigering.Advarsel, cloze-sletninger vil ikke fungere før du skifter typen i toppen til Cloze.Når der tilføjes, så anvend nuværende kortsæt som standardHele samlingenVil du gerne downloade den nu?Du har en notetype for cloze-sletning, men har ikke foretaget nogen cloze-sletninger. Fortsæt?Du har mange kortsæt. Se venligst %(a)s. %(b)sDu har endnu ikke optaget din stemme endnu.Du skal have mindst en søjleUngUng+LærDine ændringer vil påvirke flere kortsæt. Hvis du blot ønsker at ændre den nuværende kortsæt, så skal du først tilføje en ny tilvalgsgruppe.Din samling er i en inkonsistent tilstand. Kør venligst Værktøjer>Tjek database, og synkronisér dernæst påny.Din samling eller en mediefil er for stor til at blive synkroniseret.Overførslen af din samling til AnkiWeb blev gennemført. Hvis du bruger andre enheder, så synkronisér dem venligst nu, og vælg at hente samlingen du netop har overført fra denne maskine. Efter at have gjort dette, så vil fremtidige genopfriskninger og tilføjede kort blive flettet automatisk.Dine kortsæt her og de på AnkiWeb adskiller sig på en måde, der gør at de ikke kan flettes sammen - derfor er det nødvendigt at overskrive kortsættene på den ene side med kortsættene fra den anden. Hvis du vælger at hente, så vil Anki hente samlingen fra AnkiWeb, og enhver ændring du har foretaget på din maskine, siden sidste synkronisering til denne enhed, blive tabt. Når alle enheder er synkroniseret, så vil fremtidige genopfriskninger og tilføjede kort blive flettet automatisk.[intet kortsæt]Sikkerhedskopierkortkort fra kortsættetkort udvalgt afsamlingddagekortsætlevetid for kortsætdublethjælpskjultimertimer efter midnatomgangemindre end 0.1 kort/minuttetafbilledet til %safbilledet til MærkerminminuttermdGenopfriskningersekunderstatistikdenne sidewhele samlingen~anki-2.1.0+dfsg~b36/locale/de/000077500000000000000000000000001323611211500157065ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/de/LC_MESSAGES/000077500000000000000000000000001323611211500174735ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/de/LC_MESSAGES/anki.mo000066400000000000000000002415401323611211500207600ustar00rootroot00000000000000d8K K KKK"KK KKL&L88LqLLLL"L$L$L&#M"JMmM4M2MMM"N$9N$^N$N NNNNN OO3OJO]O rOOOOOOOO OOOOOO OOPP P PP #P.P7P IPTP[PsPPPPPPP0P Q QQ "Q -Q8Q>QQQhQlQQQQR RRRRRT#RxR,zR(RR!RSf)SS SS S SSSSTe+TT7;UHsU)W XX5YX9YYY%YkZ ~Z ZZZZ Z ZZ Z Z [ [[&['C[k[s[z[[ [$[[ [[[[ [ \%\K6\\1\\v]"Z_}_ ____`I aRjava4b7b cw"cEc@c!d(d7dR?ddde#9e#]ee ezetPt1u]:u u8uuuuv+v/v >vKvQvVv [v fvtv yv v vv vvv)v0vw4wIw4Mw!www#wwx xxxx x.xy yyy .y SGn ז" $1 9EUe)w4֗/*N'y@68' `!k?M͙! 1 ?JPVi   ƚ Ԛޚ 3Pe m z  ț!ۛd bmq (ߜ X5+"&ݝ+00J+{>F'-*U(1۟,IƠ'(#_8e8.C(F+rr u/3McX gs !ͩҩ'Lelê.ʪ&>P,h  ëU8$W|"ZS 0_$"ح ޭ{f^5U }v   2=?D I S]bgmȴ5I_dlow  z< 22GD5Ը7 7Bz<й[cA:'+8H-:! *7F[&p ͼ޼ !*2 I U amt|  ν޽+;Sd l6z о׾+%@D  ")/5<.' "1Tl, ?JYo(IPx* Pbr8; )9J!]'3 P^n ~   /*LZJ K.L{YJcLeS_= \m}-5(c "_A %? S^w#"0Shd#' .8"AdsYYQ NX^go w "F)pA  %?T&g8a!'#! :ETe|! * %CIFd  "@=S < 6Fx}: 1RYj/  ")07>EUeu  7H\w & =X_v) =oT+8/)YcuOl)Nv \hg D")C^}   /=Nah'y@[(v!/.D/ MY7i  U!w~   #2dV1  -K T^.7@ Ye  (// _io"Ceg!Y/ HTSf1/4od#,)/V/2  :D TN_+5= FH`*|  #!*PLV^r   +>Y t& 0C\ #, 0D< *";0^+2 #0 9TED'+1 4HU8  X a "w          "# F #\ 5   /    , 49 Jn 1 m AY i )/#K2oG)00a-y4T1 :H%Qw29'BV\w """2 U3c> )I * O5#6 H S5^> #= CP7`,E8 ?Ih z !(  7=uy(*Se, GCZ%(D,2;_5 [FCJ 2Sh ' A K We}   - 3 (8 a ~       !1!#C!9g!!&8" _"i"" "" ""4" "##?#s_#9#- $%;$Na$$8$4%P7%@%)% %1&6F&}&4'e''!(/I)y)+y**F+6+;-@-i-,^..v/// /J/0H1c2f2l2Z3p333 333)34% 47/4g445 "5/5@5]5s58w5$5/5666:6 q6 |6666f64>78s777[7].8?88-8 9 '9499w;I<7L<=@ KAYAjAqAAAAAAAAA AAA BB:BUBoBB BBB!B CCCC*C 3C =CICKC^CcMv{@-!#HOZ2=teMV QXT):WIOh_u^kaI6P&j7bcw0e^`7woKF8sbY*)~p /Q9Ln@_UY}\,^5IEm CT67`8 9]=>?g  ~EkWilvOX(:C}) hPCyo_Fq,![Gk| |jP {|n"(j D*4Mogn 9@}Rn}5DT#SB\tP:\71UfcL9T 0RH !xu+ {,:-O/Sm0>Vhaap?ujol/"Y%e{Axe$v [iQt+qV2'!ZiJV*+b.y&D4gvq_wrX-tzIR N."s'GC H3 2F2$"hdDZza< 6;%&'(*gM|5#/0Uc1 3;458k@A\=^fXmGYb?1L[?'JW[<fx$sG.=N3d>]J,`;U~B>JES +dEl&Fu$KA;ly L<.A%]rq6dy<pB]rSR(1Nm`Z#4%3~KW8NBzfpsizQ)xKr  w-H (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cards
Open backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAlways include question side when replaying audioAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuried SiblingsBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the %(num)d selected add-on?Delete the %(num)d selected add-ons?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEnable second filterEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFile version unknown, trying import anyway.FilterFilter 2Filter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax inlineMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckRepeat failed cards afterReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow cards as white on black (night mode)Show learning cards with larger steps before reviewsShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Sound and video on cards will not function until mpv or mplayer is installed.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied %(a)s %(b)s today.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.What would you like to unbury?When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightin %s dayin %s daysin %s hourin %s hoursin %s minutein %s minutesin %s monthin %s monthsin %s secondin %s secondsin %s yearin %s yearslapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: ankiqt_de_DE Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2018-02-02 10:32+0000 Last-Translator: Tobias Predel Language-Team: oygau MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-03 04:37+0000 X-Generator: Launchpad (build 18544) Language: de (1 von %d) (deaktiviert) (aus) (ein) Dort befindet sich %d Karte. Dort befinden sich %d Karten.%% Richtig%(a)0.1f %(b)s/Tag%(a)0.1fkB hochgeladen, %(b)0.1fkB heruntergeladen%(a)0.1fs (%(b)s)%(a)d von %(b)d Notiz aktualisiert%(a)d von %(b)d Notizen aktualisiert%(n)d: %(name)s%(tot)s %(unit)s%.01f Karten/Minute%d Karte%d Karten%d Karte wurde gelöscht.%d Karten wurden gelöscht.%d Karte wurde exportiert.%d Karten wurden exportiert.%d Karte wurde importiert.%d Karten wurden importiert.%d Karte in%d Karten in%d Stapel wurde aktualisiert.%d Stapel wurden aktualisiert.%d Gruppe%d Gruppen%d veränderte Mediendatei wird hochgeladen%d veränderte Mediendateien werden hochgeladen%d veränderte Mediendatei wird heruntergeladen%d veränderte Mediendateien werden heruntergeladen%d Notiz%d Notizen%d Notiz wurde hinzugefügt%d Notizen wurden hinzugefügt%d Notiz gelöscht%d Notizen gelöscht%d Notiz exportiert.%d Notizen exportiert.%d Notiz wurde importiert.%d Notizen wurden importiert.%d Notiz unverändert%d Notizen unverändert%d Notiz wurde aktualisiert%d Notizen wurden aktualisiert%d Wiederholung%d Wiederholungen%d ausgewählt%d ausgewähltKopie von %s%s Tag%s Tage%s Stunde%s Stunden%s Minute%s Minuten%s Minute gelernt.%s Minuten gelernt.%s Monat%s Monate%s Sekunde%s SekundenLösche %s:%s Jahr%s Jahre%sd%sh%smin%s Mo.%ss%s J.&Über …&Durchsuchen und installieren …&KartenDatenbank überprüfen&Pauken …&Bearbeiten&Export …&DateiS&uchen&Gehe zu&Anleitung&Anleitung …&Hilfe&Import …&Info …Auswahl &umkehren&Nächste Karte&NotizenErweiterungsordner &öffnen …&Einstellungen …&Vorherige Karte&Neu planen …Anki unter&stützen …Profil wech&selnE&xtras&Rückgängig'%(row)s' hat %(num1)d Felder, erwartet waren %(num2)d(%s richtig)(Notiz gelöscht)(Ende)(in Auswahlstapel)(lernen)(neu)(Grenzwert des übergeordneten Stapels: %d)(bitte 1 Karte auswählen)….anki2-Dateien sind nicht für den Import bestimmt. Wenn Daten aus einer Sicherungskopie wiederhergestellt werden sollen, dazu bitte den Abschnitt »Sicherungskopien« im Benutzerhandbuch lesen..0d1 Monat1 Jahr10 Uhr22 Uhr3 Uhr4 Uhr16 UhrFehler 504: Zeitüberschreitung. Bitte zeitweilig das Antivirenprogramm deaktivieren, um zu sehen, ob der Fehler hierdurch behoben wird.:%d Karte%d KartenSicherungsordner öffnenInternetseite besuchen%(pct)d%% (%(x)s von %(y)s)%d.%m.%Y @ %H:%MSicherungskopien
Jedes Mal, wenn Anki geöffnet oder synchronisiert wird, erstellt es eine Sicherungskopie Ihrer Sammlung.Exportformat:Suchen:Schriftgröße:Schriftart:In:Stapel:Liniengröße:Ersetzen durch:SynchronisierungSynchronisierung
Im Moment nicht aktiviert; bitte im Hauptfenster den »Synchronisieren«-Knopf klicken, um sie zu aktivieren.

Anmeldung erforderlich

Um die Sammlung zu synchronisieren ist die Anmeldung zu einem kostenfreien Nutzerkonto notwendig, Registrierung hier. Danach bitte hier Benutzernamen und Passwort eingeben.

Ein Update ist verfügbar.

Anki %s wurde veröffentlicht.

Fehler

Es ist ein Fehler aufgetreten. Bitte starten Sie Anki neu und halten Sie während des Startvorgangs die Umschalttaste gedrückt, damit Anki die installierten Addons temporär deaktiviert.

Wenn das Problem nur auftritt, wenn die Addons aktiviert sind, dann benutzen Sie bitte den Menueintrag Tools>Add-ons um das problembehaftete Addon durch selektives Deaktivieren herauszufinden.

Wenn Sie das entsprechende Add-on herausgefunden haben, dann bitten wir Sie sich mit einem entsprechenden Problembericht an den Add-on-Bereich unserer Support-Webseite zu wenden, damit der Fehler behoben werden kann.

Debuginformationen:

Fehler

Ein Fehler ist aufgetreten. Bitte benutzen Sie Tools > Datenbank überprüfen, um das Problem evtl. zu lösen.

Sollte das Problem fortbestehen, wenden Sie sich bitte mit Ihrem Problem an unsere Support-Seite. Bitte fügen Sie in diesem Fall die folgenden Informationen in den Problembericht ein.

Vielen Dank an alle Personen, die mit Vorschlägen, Fehlerberichten und Spenden beigetragen haben.Die Leichtigkeit einer Karte ist der Faktor, um den das letzte Intervall erhöht wird, wenn eine Wiederholung mit »gut« bewertet wird.Ein gefilterter Stapel kann keine Unterstapel enthalten.Die Synchronisation ist fehlgeschlagen. Um den Fehler zu beheben, bitte Extras → Medien überprüfen ausführen und dann erneut synchronisieren.Abgebrochen: %sÜber AnkiHinzufügenHinzufügen (Tastenkürzel: Strg+Eingabe)Kartentyp hinzufügen …Feld hinzufügenMedien hinzufügenNeuen Stapel hinzufügen (Strg+N)Notiztyp hinzufügenGegenrichtung hinzufügenSchlagworte hinzufügenSchlagwörter hinzufügen …Hinzufügen zu:Das Add-on besitzt keine Konfiguration.Das Add-on wurde nicht von AnkiWeb heruntergeladen.ErweiterungenHinzufügen …Hinzufügen: %sHinzugefügtHeute hinzugefügtDoppeltes zu %s hinzugefügtNochmalHeute fehlgeschlagenFalsch: %sAlle zurückgestellten KartenAlle KartentypenAlle StapelAlle FelderAlle Karten in zufälliger Reihenfolge (Pauken)Alle Karten, Notizen und Medien dieses Profils werden gelöscht. Fortfahren?HTML in Feldern zulassenImmer die Frageseite bei wiederholtem Abspielen von Audiodateien beifügenEine der installierten Erweiterungen konnte nicht geladen werden. Wenn das Problem weiter besteht, bitte über den Menüpunkt Extras → Erweiterungen die Erweiterungen deaktivieren oder deinstallieren Beim Laden von '%(name)s': %(traceback)s Beim Zugriff auf die Datenbank ist ein Fehler aufgetreten. Mögliche Gründe: - Antivirus-, Firewall-, Sicherung- oder Synchronisationsprogramme hindern Anki an einer erfolgreichen Verbindung. Bitte derartige Programme abschalten und testen, ob das Problem weiterhin besteht. - Ihre Festplatte ist voll. - Der Dokumente-/Anki-Ordner liegt auf einem Netzlaufwerk. - Dateien in Ihrem Dokumente-/Anki-Ordner sind schreibgeschützt. - Ihre Festplatte ist fehlerhaft. Sie sollten sicherstellen, dass Ihre Datenbank nicht beschädigt ist. Wählen Sie dazu Extras → Datenbank überprüfen. Beim Öffnen von %s ist ein Fehler aufgetretenAnkiAnki 2.0-StapelAnki-SammlungspaketAnki-KartenpaketAnki konnte Ihr Profil nicht umbenennen, weil es den Profilordner nicht umbenennen konnte. Bitte stellen Sie sicher, dass sie Schreibberechtigung auf Dokumente/Anki haben und kein anderes Programm auf Ihren Profilordner zugreift und versuchen Sie es dann erneut.Anki konnte die Trennlinie zwischen Frage und Antwort nicht finden. Bitte die Vorlage von Hand anpassen, um Frage und Antwort zu vertauschen.Anki unterstützt keine Dateien in Verzeichnissen unterhalb des collection.media-Ordners.Anki ist ein freundliches, intelligentes Karteikarten-Lernsystem. Es ist kostenlos und Open Source.Anki ist lizenziert unter der AGPL3 Lizenz. Bitte lesen Sie für weitere Informationen die Lizenz-Datei im Quellordner der Distribution.Anki konnte die Datei Ihrer Samlung nicht öffnen. Sollte das Problem nach einem Neustart Ihres Computers weiterhin bestehen, bitten wir Sie darum, die Wiederherstellungsmöglichkeit im Profilmanager zu nutzen. Die AnkiWeb-Kennung oder das Passwort waren falsch; bitte nochmal versuchen.AnkiWeb-Kennung:AnkiWeb hat einen Fehler festgestellt. Bitte in ein paar Minuten noch einmal versuchen; falls das Problem weiter besteht, bitte einen Fehlerbericht senden.AnkiWeb ist im Moment zu beschäftigt. Bitte in ein paar Minuten nochmal versuchen.AnkiWeb wird gerade gewartet. Bitte später erneut versuchen.AntwortAntwortknopfAntwortenEin Antiviren- oder Firewall-Programm verhindert, dass Anki auf das Internet zugreifen kann.beliebige MarkierungAlle leeren Karten werden gelöscht. Sind sämtliche Karten einer Notiz gelöscht, wird diese ebenfalls entfernt. Fortfahren?Doppelt vorhanden in Datei: %s%s wirklich löschen?Mindestens ein Kartentyp muss vorhanden sein.Mindestens ein Schritt ist erforderlich.Bilder/Audio/Video anfügen (F3)Die automatische Synchronisation und Sicherung wurde bei der Wiederherstellung deaktiviert. Um sie wieder zu aktivieren, müssen Sie das Profil schließen oder Anki neu starten.Audiodateien automatisch abspielenBeim Öffnen/Schließen eines Profils automatisch synchronisierenDurchschnittDurchschnittliche ZeitDurchschnittliche AntwortzeitDurchschnittliche LeichtigkeitDurchschnitt an LerntagenMittleres IntervallRückseiteVorschau für RückseiteVorlage für RückseiteSicherung wird erstellt …SicherungskopienEinfachEinfach (beide Richtungen)Einfach (eine oder zwei Richtungen)Einfach (Antwort eintippen)blaue MarkierungFett ausgezeichneter Text (Strg+B)KartenübersichtKartenübersicht (%(cur)d Karte angezeigt; %(sel)s)Kartenübersicht (%(cur)d Karten angezeigt; %(sel)s)Darstellung in der KartenübersichtDarstellung in der Kartenübersicht …BrowsereinstellungenErstellenBegrabenZurückgestellte GeschwisterkartenZurückstellenKarte zurückstellenNotiz zurückstellenVerwandte neue Karten nicht am selben Tag lernen, sondern bis zum Folgetag zurückstellenVerwandte Karten nicht am selben Tag wiederholen, sondern bis zum Folgetag zurückstellenFür gewöhnlich wird Anki das Trennzeichen zwischen zwei Feldern, z.B. ein Komma, Tabulator oder Ähnliches, erkennen. Sollte Anki das Trennzeichen nicht korrekt erkennen, bitte hier eingeben. Für ein Tabulatorzeichen bitte folgendes verwenden: \t.AbbrechenKarteKarte %dKarte 1Karte 2KartenkennungKartenübersichtKartenstatusKartentypKartentyp:KartentypenKartentypen für %sKarte zurückgestellt.Karte wurde ausgesetzt.Karte war eine Lernbremse.KartenKarten können nicht manuell in einen Auswahlstapel verschoben werden.Karten als Plain TextGelernte Karten kehren automatisch in ihren Heimatstapel zurück.Karten …ZentriertÄndernÄndere %s in:VerschiebenStapel wechseln …Notiztyp ändernNotiztyp ändern (Strg+N)Notiztyp ändern …Farbe ändern (F8)Stapel abhängig vom Notiztyp zuweisenKarteninfo geändertDie nachstehenden Änderungen werden %(cnt)d Notiz betreffen, die diesen Kartentyp verwendet.Die nachstehenden Änderungen werden %(cnt)d Notizen betreffen, die diesen Kartentyp verwenden.Änderungen werden nach einem Neustart von Anki wirksam.&Medien überprüfen …Auf Aktualisierungen überprüfenÜberprüfe die Dateien im MedienordnerMediendateien werden überprüft...Überprüfung läuft …AuswählenStapel wählenNotiztyp wählenSchlagworte auswählenMarkierungen entfernenUnbenutzte entfernenUnbenutzte Schlagwörter löschenKlone: %sSchließenSchließen und aktuelle Eingabe verwerfen?Schließen …LückentextLückentext (Strg+Umschalt+C)Code:Sammlung wurde exportiert.Die Sammlung ist beschädigt. Bitte das Benutzerhandbuch konsultieren.DoppelpunktKommaKonfigurationKonfigurationMenüsprache und Optionen anpassenHerzlichen Glückwunsch! Dieser Stapel ist für jetzt geschafft.Verbindungsaufbau …Zeitüberschreitung beim Verbindungsaufbau. Entweder treten bei der Internetverbindung Probleme auf oder es befindet sich eine sehr große Datei im Medienordner.FortsetzenKopierenRichtige Antworten bei alten Karten: %(a)d/%(b)d (%(c).1f%%)Korrekt: %(pct)0.2f%%
(%(good)d von %(tot)d)Es konnte keine Verbindung zu AnkiWeb aufgebaut werden. Bitte die Netzwerkverbindung überprüfen und nochmal versuchen.Tonaufnahme fehlgeschlagen. Sind Lame und Sox installiert?Konnte Datei nicht speichern: %sPaukenStapel erstellenAuswahlstapel erstellen …Skalierbare Vektorgrafiken mit dvisvgm erzeugenErstelltStrg+0Strg+1Strg+2Strg+3Strg+4Strg+Alt+AStrg+Alt+FStrg+Alt+ZStrg+DStrg+EntfStrg+EStrg+FStrg+JStrg+KStrg+NStrg+PStrg+QStrg+Umschalt+AStrg+Umschalt+DStrg+Umschalt+FStrg+Umschalt+IStrg+Umschalt+LStrg+Umschalt+MStrg+Umschalt+NStrg+Umschalt+PStrg+Umschalt+RStrg+Umschalt+SStrg+WStrg+ZKumulativ%s insgesamtAntworten insgesamtWiederholungen insgesamtAktueller StapelAktueller Notiztyp:Benutzerdefiniertes LernenBenutzerdefinierte SitzungAusschneidenDatenbank neu generiert und optimiert.DatumLerntageLegitimation aufhebenFehlerkonsoleStapelStapel überschreiben …Der Stapel wird importiert, sobald ein Profil geöffnet wird.StapelIntervall (absteigend)StandardZeit, bis Karten erneut angezeigt werden.LöschenKarten löschenStapel löschenLeere Karten entfernenNotiz löschenNotizen löschenSchlagworte löschenNicht genutzte Medien löschenFeld aus %s entfernen?Möchten Sie das %(num)d ausgewählte Add-On löschen?Möchten Sie die %(num)d ausgewählten Add-Ons löschen?Kartentyp '%(a)s' und seine %(b)s löschen?Diesen Notiztyp und alle seine Karten wirklich löschen?Dieser Notiztyp wird nicht verwendet. Löschen?Unbenutzte Medien löschen?%d Karte ohne zugehörige Notiz wurde gelöscht.%d Karten ohne zugehörige Notiz wurden gelöscht.%d Karte ohne Vorlage wurde gelöscht.%d Karten ohne Vorlage wurden gelöscht.%d Notiz ohne zugeordneten Notiztyp wurde gelöscht.%d Notizen ohne zugeordneten Notiztyp wurden gelöscht.%d Notiz ohne Karten wurde gelöscht.%d Notizen ohne Karten wurden gelöscht.%d Notiz mit falscher Anzahl von Feldern wurde gelöscht.%d Notizen mit falscher Anzahl von Feldern wurden gelöscht.Gelöscht.Wenn dieser Stapel entfernt wird, werden alle verbleibenden Karten wieder ihrem Heimatstapel zugeführt.BeschreibungBeschreibung auf dem Lernbildschirm (nur für ausgewählten Stapel):DialogVon AnkiWeb herunterladen%(fname)s heruntergeladen.Von AnkiWeb herunterladen …FälligNur fällige KartenMorgen fällig&BeendenLeichtigkeitEinfachLeichtigkeitsbonusIntervall für einfache KartenBearbeiten"%s" bearbeitenAngezeigte Karte bearbeitenHTML eingebenNotiz verändertSchrift bearbeitenLeerenLeere Karten …Leere Karten: Nr. %(c)s Felder: %(f)s Leere Karten gefunden. Bitte Extras → Leere Karten ausführen.Erstes Feld ist leer: %sZweiten Filter aktivierenEndeName des Stapel, in dem neue %s-Karten hinzugefügt werden sollen (Feld kann frei bleiben):Neue Kartenposition eingeben (1 … %s):Folgende Schlagworte hinzufügen:Folgende Schlagworte löschen:Fehler beim Herunterladen von %(id)s: %(error)sFehler beim Herunterladen: %sFehler beim Start: %sEs konnte keine sichere Verbindung hergestellt werden. Dies liegt in der Regel an einem Antivirus-, Firewall- oder VPN-Programm oder ist auf Verbindungsprobleme mit dem Internetprovider zurückzuführen.Fehler beim Ausführen von %s.Fehler beim Ausführen von %sExportierenExportieren …%d exportierte Mediendatei%d exportierte MediendateienExtraFF1Feld %d der Datei ist:FeldzuordnungFeldname:Feld:FelderFelder für %sFeldtrenner: %sFelder …Fil&terDie Dateiversion ist unbekannt. Es wird trotzdem versucht, den Import durchzuführen.FilterFilter 2Filter …Filter:AuswahlstapelAuswahlstapel %d&Doppelte suchen …Doppelte suchenSuchen und &Ersetzen …Suchen und ErsetzenFertigErste KarteErstmals wiederholtErstes Feld stimmt überein mit: %sUngültige Eigenschaften bei %d Karte korrigiert.Ungültige Eigenschaften bei %d Karten korrigiert.Der AnkiDroid-deck-override-Fehler wurde behoben.Notiztyp korrigiert: %sMarkierungMarkierenSeiten vertauschenDer Ordner existiert bereits.Schrift:FußzeileAus Sicherheitsgründen kann »%s« auf den Karten nicht benutzt werden. Wenn der Befehl trotzdem verwendet werden soll, bitte in einem anderen Paket definieren und dieses in der LaTeX-Präambel importieren.PrognoseFormular%(a)s in %(b)s gefunden.VorderseiteVorschau für VorderseiteVorlage für VorderseiteAllgemeinErzeugte Datei: %sZeit: %sErweiterungen erhalten …Stapel herunterladenGutIntervall für Aufstieggrüne MarkierungHTML-EditorSchwerHaben Sie LaTeX und dvipng/dvisvgm installiert?KopfzeileHilfeGrößte LeichtigkeitVerlaufPos1Gedächtnisleistung nach TageszeitStundenUhrzeiten mit weniger als 30 Wiederholungen werden nicht angezeigt.Wer auch immer etwas beigetragen hat und nicht in dieser Liste erwähnt wird möge sich bitte melden!Wenn jeden Tag gelernt würdeIgnoriere Antwortzeiten überGroß-/Kleinschreibung ignorierenFeld ignorierenZeilen ignorieren, wenn das erste Feld mit einer bereits vorhandenen Notiz übereinstimmtDieses Update ignorierenImportierenDatei importierenAuch dann importieren, wenn es eine vorhandene Karte mit demselben ersten Feld gibtImport fehlgeschlagen. Import fehlgeschlagen. Die Fehlermeldung lautet: Einstellungen importierenImport abgeschlossen.Im Medienordner, aber von keiner Karte benutzt:Um die Sammlung fehlerfrei zwischen verschiedenen Geräten auszutauschen, müssen Datum und Uhrzeit des Rechners korrekt eingestellt sein. Dazu genügt es nicht, wenn die korrekte Uhrzeit angezeigt wird. Bitte die Datums- und Uhrzeiteinstellungen außerdem überprüfen auf: - Tag, Monat, Jahr, - Zeitzone sowie - Sommerzeit/Winterzeit. Differenz zur Ortszeit: %s.Einschließlich MedienZeitabstände ebenfalls exportierenSchlagworte einschließenHeutigen Grenzwert für neue Karten erhöhenHeutigen Grenzwert für neue Karten erhöhen umHeutigen Grenzwert für Wiederholungen erhöhenHeutigen Grenzwert für Wiederholungen erhöhen umIntervall (ansteigend)Erweiterung installierenSprache der Benutzeroberfläche:IntervallIntervallfaktorIntervalleUngültiger Code, oder Add-on ist für Ihre Version von Anki nicht verfügbar.Ungültiger Code.Ungültige Konfiguration: Ungültiger Dateiname, bitte umbenennen: %sUngültige Datei. Bitte eine Sicherungskopie öffnen.Karten mit ungültigen Eigenschaften gefunden. Bitte Extras → Datenbank prüfen ausführen. Sollte das Problem weiterhin bestehen, bitte den Entwicklern melden.Ungültiger regulärer Ausdruck.Ungültiger Suchbegriff - bitte überprüfen Sie ihn nach Tippfehlern.Karte wurde ausgesetzt.Kursiv ausgezeichneter TextSchlagworte mit Strg+Umschalt+T bearbeitenBehaltenLaTeXLaTeX-FormelLaTeX-MathematikumgebungFehlschlägeLetzte KarteLetzte PrüfungErstelldatum (neuste zuerst)LernenGrenzwert für vorzeitiges LernenNeu: %(a)s, wiederholt: %(b)s, erneut gelernt: %(c)s, ausgewählte Karten: %(d)sLernenAktion für LernbremsenGrenzwert für LernbremsenLinksBeschränken aufDaten werden geladen …Die lokale Sammlung enthält keine Karten. Möchten Sie sie von AnkiWeb herunterladen?Längstes IntervallIn folgendem Feld suchen:Niedrigste LeichtigkeitVerwaltenNotiztypen verwaltenNotiztypen verwalten …Verwalten …Manuell zurückgestellte Karten%s zuordnenSchlagworte zuordnenNotiz kennzeichnenAbgesetzes MathJax-ElementInzeiliges MathJax-ElementAlte KartenHöchstintervallMax. Wiederholungen/TagMedienMindestintervallMinutenNeue Karten und Wiederholungen mischenMnemosyne 2.0-Stapel (*.db)MehrFehlerzahl (häufigste zuerst)Karten verschiebenKarten verschieben nach:Ein aus mehreren Zeichen zusammengesetzter Separator zum Trennen von Datenfeldern wird nicht unterstützt. Bitte geben Sie nur ein Zeichen als Separator ein.N&otizName existiert.Stapelname:Name:NetzwerkNeuNeue KartenÜber heutigen Grenzwert hinaus neu zu lernende Karten im Stapel: %sNur neue KartenNeue Karten/TagNeuer Stapelname:Neues IntervallNeuer Name:Neuer Notiztyp:Name der neuen Optionengruppe:Neue Position (1 … %d):Neuer Tag beginntkeine MarkierungEs sind noch keine Karten fällig.Keine Karten stimmen mit den Kriterien überein.Keine leeren Karten.Heute wurden keine alten Karten wiederholt.Keine unbenutzten oder fehlenden Dateien gefunden.Keine Updates verfügbar.NotizNotizkennungNotiztypNotiztypen:Notiz und %d zugehörige Karte gelöscht.Notiz und %d zugehörige Karten gelöscht.Notiz zurückgestellt.Notiz ausgesetzt.Achtung: Von Medien wird keine Sicherungskopie erstellt. Bitte sicherheitshalber regelmäßig Kopien des Anki-Ordners erstellen.Achtung: Ein Teil des Verlaufs kann nicht angezeigt werden. Für weitere Informationen bitte die Browser-Dokumentation konsultieren.Notizen mit unformatiertem TextNotizen benötigen mindestens ein Feld.Schlagworte hinzugefügt.KeineOKerstem Lerntag (älteste zuerst)Bei der nächsten Synchronisation Änderungen in eine Richtung erzwingenEine oder mehrere Notizen wurden nicht importiert, da aus ihnen keine Karten erzeugt werden können. Dies kann geschehen, wenn einige Felder leer sind oder der Inhalt der Textdatei nicht korrekt den Feldern zugeordnet worden ist.Die Position kann nur für neue Karten geändert werden.Mehrere Geräte können nicht gleichzeitig auf AnkiWeb zugreifen. Ist die Synchronisation fehlgeschlagen, bitte es es in einigen Minuten erneut versuchen.&ÖffnenSicherung öffnen …Optimierung wird durchgeführt …Grenzwert (optional):OptionenOptionen für %sOptionengruppe:Einstellungen …ReihenfolgeErstelldatum (älteste zuerst)FälligkeitVorlage für Rückseite festlegen:Schriftart festlegen:Vorlage für Vorderseite festlegen:Gepackte Anki-Stapel/Sammlung (*.apkg *.colpkg *.zip)Passwort:EinfügenBilder aus der Zwischenablage als PNG einfügenPauker 1.8 Lektion (*.pau.gz)Prozentualer AnteilZeitraum: %sAm Ende der Warteschlange für neue Karten einfügenIn die Warteschlange für Wiederholungen einfügen mit Intervall zwischen:Bitte zunächst einen neuen Notiztyp hinzufügen.Bitte ein Mikrofon anschließen und sicherstellen, dass andere Programme nicht auf das Audiogerät zugreifen.Bitte diese Notiz bearbeiten und die Lückentexte einfügen. (%s)Bitte vergewissern, dass ein Profil geöffnet und Anki nicht beschäftigt ist, und noch einmal versuchen.Bitte geben Sie Ihrem Filter einen Namen:Bitte PyAudio installieren.Bitte zunächst ein Profil öffnen.Bitte den Ordner %s löschen und erneut versuchen.Bitte starten sie Anki neu um die Änderung der Sprache abzuschließen.Bitte Extras → Leere Karten ausführen.Bitte einen Stapel wählen.Bitte nur Karten desselben Notiztyps auswählen.Bitte etwas auswählen.Bitte die neueste Version von Anki verwenden.Bitte diese Datei mit Datei>Importieren importieren.Bitte AnkiWeb besuchen und dort die Stapel aktualisieren, bevor synchronisiert wird.PositionEinstellungenVorschauVorschau für ausgewählte Karte (%s)Vorschau neuer KartenVorschau neuer Karten, hinzugefügt in den letzten%d verarbeitete Mediendatei%d verarbeitete MediendateienVerarbeitung läuft …ProfileProxy-Server verlangt Authentifizierungviolette MarkierungFrageEnde der Warteschlange: %dAnfang der Warteschlange: %dBeendenZufallZufällige ReihenfolgeWertungNeu erstellenEigene Stimme aufzeichnenAudio aufnehmen (F5)Aufnahme läuft …
Zeit: %0.1frote MarkierungÜberfällig relativ zum IntervallErneut lernenBeim Hinzufügen zuletzt eingegebenen Text behaltenMöchten Sie %s von Ihren gespeicherten Suchmustern entfernen?Kartentyp entfernen …Aktuellen Filter entfernen …Schlagwörter entfernen …Formatierung entfernen (Strg+R)Wenn dieser Kartentyp entfernt wird, würden dadurch eine oder mehrere Notizen gelöscht. Bitte zunächst einen neuen Kartentyp erstellen.UmbenennenKartentyp umbenennen …Stapel umbenennenErfolglos gelernte Karten wiederholen nachMöchten Sie Ihre Sammlung mit einer zuvor erstellen Sicherheitskopie ersetzen?Erneut abspielenAufnahme abspielenPosition ändernPosition des Kartentyps ändern …Position neuer Karten ändernPosition ändern …Nur Karten mit einem oder mehreren dieser Schlagworte:Neu planenNeu planenAntworten in diesem Stapel beeinflussen KartenplanungJetzt fortfahrenTextrichtung umkehrenZum in der Sicherungskopie gespeicherten Zustand zurückkehren»%s« rückgängig gemacht.WiederholenAnzahl der WiederholungenDauerVorauslernenVorauslernen umKarten wiederholen, die vergessen wurden in den letztenVergessene Karten wiederholenErfolgsrate für Wiederholungen nach UhrzeitWiederholungenÜber heutigen Grenzwert hinaus zu wiederholende Karten im Stapel: %sRechtsSpeichernAktuellen Filter speichern …Als PDF speichernGespeichert.Stapel: %sSucheMit Formatierung suchen (langsam)Zeige&Alles auswählen&Notizen auswählenAuszuschließende Schlagworte auswählenDie gewählte Datei war nicht im UTF-8-Format. Für weitere Hinweise bitte den Abschnitt »Import« in der Bedienungsanleitung beachten.LernauswahlSemikolonServer nicht gefunden. Entweder ist die Verbindung unterbrochen oder ein Antivirus-/Firewall-Programm blockiert Ankis Verbindung zum Internet.Allen Teilstapeln von %s diese Optionengruppe zuweisen?Allen Teilstapeln zuweisenVordergrundfarbe festlegen (F7)Die Umschalttaste wurde gedrückt gehalten. Automatische Synchronisation wird übersprungen, Erweiterungen nicht geladen.Position existierender Karten verändernTastenkürzel: %sTastenkürzel: LinkspfeilTastenkürzel: Rechtspfeil oder EingabetasteTastenkürzel: %s%s zeigenAntwort zeigenBeide Seiten zeigenDoppelte anzeigenAntwortzeit anzeigenKarten mit weißem Text auf schwarzem Hintergrund anzeigen (Nachtmodus)Lernkarten mit größeren Lernstufen vor Wiederholungskarten zeigenZeige neue Karten nach WiederholungenZeige neue Karten vor den WiederholungenZeige neue Karten in der Reihenfolge, in der sie hinzugefügt wurdenZeige neue Karten in zufälliger ReihenfolgeZeit für nächste Wiederholung über Antwortknopf anzeigenZähler für verbleibende Karten beim Lernen anzeigenSeitenleisteGröße:Einige Karten wurden zurückgestellt. Sie werden in einer späteren Sitzung wieder gezeigt.Einige Einstellungen werden erst nach einem Neustart von Anki wirksam.Einige Notizen wurden nicht aktualisiert, da ihr Notiztyp geändert wurde:SortierfeldIn der Kartenübersicht nach diesem Feld sortierenNach dieser Spalte kann nicht sortiert werden. Bitte eine andere Spalte auswählen.Multimedia-Karteikarten können nur dann vollständig genutzt werden, wenn die entsprechende Abspielsoftware mpv oder mplayer auf Ihrem Computer installiert ist.LeerzeichenAnfangsposition:Anfängliche LeichtigkeitStatistikStatistikenSchrittweite:Lernstufen (in Minuten)Bitte Zahlen eingeben.Wird angehalten …%(a)s %(b)s heute gelernt.Heute gesehenLernenStapel lernenStapel lernen …Jetzt lernenKarten mit bestimmtem Status oder SchlagworteStilStil (für alle Karten dieses Notiztyps)Tiefgestellter Text (Strg+=)Supermemo XML-Export (*.xml)Hochgestellter Text (Strg++)AussetzenKarte aussetzenNotiz aussetzenAusgesetztAusgesetzt+BegrabenSynchronisierenTonaufnahmen und Bilder ebenfalls synchronisierenSynchronisierung fehlgeschlagen: %sSynchronisation fehlgeschlagen: Keine Internetverbindung.Zum Synchronisieren müssen Datum und Uhrzeit des Rechners korrekt eingestellt sein. Bitte die Einstellungen korrigieren und es noch einmal versuchen.Synchronisation wird durchgeführt …TabulatorDoppelte verschlagwortenNur verschlagwortenSchlagworteZielstapel (Strg+D)Zielfeld:TextDurch Absatzmarken oder Semikola getrennter Text (*)Dieser Stapel existiert bereits.Dieser Feldname ist schon vergeben.Dieser Name ist schon vergeben.Zeitüberschreitung bei der Verbindung mit AnkiWeb. Bitte die Netzwerkverbindung überprüfen und erneut versuchen.Die Standardeinstellungen können nicht gelöscht werden.Das Standarddeck kann nicht gelöscht werden.Aufteilung der Karten in den Stapeln.Die heruntergeladene Datei war fehlerhaft. Bitte versuchen Sie es noch einmal.Das erste Feld ist leer.Das erste Feld des Notiztyps muss auf Karten erscheinen.Das folgende Zeichen kann nicht verwendet werden: %sDie Vorderseite dieser Karte ist leer. Bitte Extras → Leere Karten ausführen.Diese Eingabe würde nur Karten mit leerer Vorderseite erzeugen.Die Anzahl der neu hinzugefügten Karten.Anzahl der beantworteten Fragen.Anzahl der in Zukunft anfallenden Wiederholungen.Wie häufig welche Antwortmöglichkeit gewählt wurde.Die Zugangsberechtigung zu Ihrem temporären Ordner ist nicht korrekt eingestellt. Anki kann diesen Fehler nicht automatisch korrigieren. Im Abschnitt 'Permissions of Temp Folder' des Handbuches sind Instruktionen, wie der Fehler bei Windows 7 beheben werden kann.Die ausgewählte Datei ist keine valide .apkg-Datei.Es wurden keine Karten gefunden, die zu dieser Auswahl passen. Sollen die Kriterien geändert werden?Die beabsichtigten Änderungen werden es erforderlich machen, bei der nächsten Synchronisation erforderlich die gesamte Sammlung neu hochzuladen. Falls auf einem anderen Gerät Änderungen vorgenommen wurden, die noch nicht synchronisiert worden sind, gehen diese verloren. Trotzdem fortfahren?Bis zur Beantwortung der Frage vergangene Zeit.Weitere neue Karten sind verfügbar, aber das Tageslimit ist erreicht. Der Grenzwert kann in den Einstellungen erhöht werden, aber bitte daran denken, dass die Anzahl kurzfristiger Wiederholungen umso größer wird, je mehr neue Karten eingesetzt werden.Mindestens ein Profil muss erstellt werden.Diese Spalte kann nicht nach einem bestimmten Kriterium sortiert werden, aber Sie können beispielsweise mit 'card:1' nach jenem individuellen Kartentyp suchen.Diese Spalte kann nicht sortiert werden, aber nach bestimmten Stapeln kann gesucht werden, indem links auf einen Stapel geklickt wird.Diese Datei ist wahrscheinlich keine gültige .apkg-Datei. Wenn dieser Fehler bei einer Datei auftritt, die von AnkiWeb heruntergeladen wurde, ist das Herunterladen höchstwahrscheinlich fehlgeschlagen. Bitte erneut herunterladen; falls das Problem weiterhin besteht, bitte mit einem anderen Browser versuchen.Diese Datei ist bereits vorhanden. Wirklich überschreiben?Dieser Ordner enthält alle Anki-Daten an einem Ort, um Aktualisierungen zu erleichtern. Wenn die Daten an einem anderen Ort gespeichert werden sollen, bitte folgendes lesen: %s Dies ist ein besonderer Stapel, dafür angelegt, Karten außerhalb des gewöhnlichen Zeitplans zu lernen.Ein {{c1::Beispiel}} für einen Lückentext.Dieser Vorgang wird %d Karte erstellen. Möchten Sie fortfahren?Dieser Vorgang wird %d Karten erstellen. Möchten Sie fortfahren?Hierdurch wird die gesamte derzeitige Sammlung gelöscht und durch die importierte Datei ersetzt. Trotzdem fortfahren?ZeitZeitbegrenzung für SitzungenWiederholenUm die Sammlung der verfügbaren Erweiterungen aufzurufen, klicken Sie bitte auf den entsprechenden Button unten.

Wenn Sie eine Erweiterung gefunden haben, die Sie installieren möchten, dann geben Sie bitte ihren entsprechenden Code unten ein. Sie können auch mehrere Codes mit Leerzeichen voneinander getrennt einfügen.Um einen Lückentext zu einer bereits vorhandenen Notiz hinzuzufügen, muss dieser erst der Notiztyp Lückentext zugewiesen werden. Hierzu bitte auswählen: Bearbeiten>Notiztyp ändern.Um sie jetzt anzuzeigen, bitte unten anklicken: Zurückstellen aufheben.Um außerhalb des regulären Lehrplans zu lernen, bitte unten Benutzerdefiniertes Lernen anklicken.HeuteDer Grenzwert für die heutigen Wiederholungen ist erreicht, weitere Karten warten jedoch noch darauf, wiederholt zu werden. Um die Gedächtnisleistung optimal zu nutzen, bitte die Erhöhung des Grenzwertes in den Einstellungen erwägen.Umschaltung aktiviertKennzeichnung an-/ausschaltenKarte(n) ein-/aussetzenGesamtGesamtzeitKarten insgesamtNotizen insgesamtEingabe als regulären Ausdruck behandelnTypAntwort eingeben: Unbekanntes Feld %sImport nicht möglich: Die Datei ist schreibgeschützt.Die vorhandene Datei konnte nicht in den Papierkorb verschoben werden - bitte ziehen Sie einen Neustart Ihres Computers in Erwägung.Zurückstellen aufhebenText unterstreichen (Strg+U)RückgängigRückgängig: %sUnerwarteter Antwortcode: %sUnbekannter Dateityp.NeuNotizen mit übereinstimmendem erstem Feld aktualisierenDie folgenden Add-ons aktualisieren?Es wurden %(a)d von %(b)d Notizen aktualisiert.Zu AnkiWeb hochladenZu AnkiWeb wird hochgeladen …In einigen Karten benutzt, aber nicht im Medienordner:Benutzer 1Version %sWebseite des Add-ons aufrufenDateien anschauenWarte auf Ende der Bearbeitung.Achtung! Lückentext wird nur korrekt angezeigt, wenn oben als Notiztyp »Lückentext« gewählt wird.Was möchten Sie nicht weiter zurückgestellt haben?Beim Hinzufügen aktuellen Stapel als Standard festlegenGesamte SammlungJetzt herunterladen?Geschrieben von Damien Elmes, mit Patches, Übersetzungen, Tests und Design von:

%(cont)s'Lückentext' als Notiztyp gewählt, aber keinen Lückentext eingegeben. Trotzdem fortfahren?Es wurden sehr viele Stapel angelegt. Bitte lesen: %(a)s. %(b)sStimme noch nicht aufgezeichnetMindestens eine Spalte muss angezeigt werden.Junge KartenJunge KartenDie Änderungen betreffen mehrere Stapel. Soll nur der aktuelle Stapel angepasst werden, bitte zunächst eine neue Optionengruppe erstellen.Die Datei Ihrer Sammlung scheint fehlerhaft zu sein. Zu diesem Zustand kann es kommen, wenn die Datei während einer laufenden Sitzung des Programms kopiert oder verschoben wird, oder wenn die Sammlung auf einem Netzlaufwerk oder Cloudspeicher gespeichert wird. Sollte das Problem nach einem Neustart des Computers weiterhin bestehen, bitten wir Sie, eine automatisch erstellte Sicherungskopie über die Profileinstellungen einzuspielen.Die Sammlung ist in einem widersprüchlichen Zustand. Bitte Extras → Datenbank überprüfen ausführen und dann erneut synchronisieren.Die Sammlung oder eine Mediendatei ist zu groß für die Synchronisation.Die Sammlung wurde erfolgreich nach AnkiWeb hochgeladen. Bei Verwendung weiterer Geräte bitte jetzt synchronisieren, und dabei die Sammlung, die gerade jetzt von diesem Rechners hochgeladen wurde haben, herunterladen. Künftige Abfragen und neu hinzugefügte Karten werden danach automatisch zusammengeführt.Der Stapel hier und auf AnkiWeb unterscheiden sich in einer solchen Weise, dass sie nicht zusammengeführt werden können. Es ist daher notwendig, die Stapel auf einer Seite mit den Stapeln auf der anderen Seite zu überschreiben. Wenn jetzt »Herunterladen« ausgewählt wird, wird Anki die Stapel von AnkiWeb herunterladen, und alle Änderungen, die seit der letzten Synchronisation auf diesem Rechner gemacht wurden, gehen verloren. Wenn Sie »Hochladen« auswählen, wird Anki Ihre Stapel nach AnkiWeb hochladen, und alle Änderungen, die Sie im AnkiWeb oder Ihren anderen Geräten seit der letzten Synchronisation gemacht haben, gehen verloren. Nachdem die Stapel auf allen Geräten synchron sind, werden zukünftige Rezensionen und neu hinzugefügte Karten automatisch zusammengeführt.Ihre Firewall oder Ihr Antivirusprogramm verhindert, dass Anki eine Verbindung zu sich selbst aufbauen kann. Bitte fügen Sie eine entsprechende Ausnahme für Anki hinzu.[kein Stapel]SicherungskopienKartenKarten aus dem StapelKarten, ausgewählt nachSammlungdTageStapelLebensdauer des StapelsdoppeltHilfeAusblendenStundenStunden nach Mitternachtin %s Tagin %s Tagenin %s Stundein %s Stundenin %s Minutein %s Minutenin %s Monatin %s Monatenin %s Sekundein %s Sekundenin %s Jahrin %s JahrenFehlschlägeWeniger, als 0,1 Karten/Minuteabgebildet auf %sabgebildet auf SchlagworteMin.MinutenMoWiederholungenSekundenStatistikdiese Seitewkomplette Sammlung~anki-2.1.0+dfsg~b36/locale/el/000077500000000000000000000000001323611211500157165ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/el/LC_MESSAGES/000077500000000000000000000000001323611211500175035ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/el/LC_MESSAGES/anki.mo000066400000000000000000001034461323611211500207720ustar00rootroot00000000000000 Q % !%,%3%"9%\% ^%h%{%8%%%%"%$&$C&&h&"&&&&"&$'$;'$`' '''''''('(:( O(](n(r(v(z((( ((( ((((( (( (( (()")1)@)Q)X)0^) )) ) ))))O*Q*T*\*c*h*m*q*u*y*,{*(**!*+f*++ ++ + +++,,e,,7, ,,5,X-%v- --- - -- - - ...#. ).$5.Z. `.l. |. .K.."./ /(/:/R/70 I0EU0@0000R0M1#h1#111(12 2&2 :2G2`2q2 v2 222222223 3333%3,3 33 =3 G3R3d3t33z33S344&4 -4 ;4G4X4r4"44&4 44 44 5 55$5B5H5-N5|55(555 5555706h6 666 6666666 6 6 6 777 "7 -7;7N7 _7l7 77777 7 77/78 858=8 D8 Q8 ]8 j8 v8 8 88(88>899 B9N9U9k99999 99 9 99 99999::.:G:[:l: s:}:::: ::: :: ::::;;+; <;G;^;d;k;t;y;;;; ;;;;;;;; ; < <<.< =<J<j<y<< < <<< < <<<< <<= = =,=4= 9=D= J=W=]=e= i=s= ==== = ===>>> > >> > >>>?"?)? 0?=?E?K?R? Y? g?q? y??? ???? ?? ? ? @ @@4@Q@ Y@ f@ s@ }@@!@ @@@@ @@A A>A"YA|A*A1A'A#B8?BxB ~BBBB BB"B$BCC C$C&C+C 0C:C?CECYCmCCCCCCCCCCCdEsEE3EE EEE|FFFFOF? GG`GWG[H\H+zHWH]HQ\IUIcJ[hJ3J1J*K@K^KtKKK7KLL:L>LBLFLKLOLSLfLLL LL L LLLM&MAM5\MM"M M MN$NG6N~N NNNNNNOO O PPPP$P*P0P92P<lPAP%PQ)Q#R%R3:R"nRRR%R-RS7SZ9SSSSVTnU}UU3UU#U5"V.XV%V!VVVV!WP6WWW$W WWX)XLX,Y1Y$KY0pYZjT[#[[\]! ]B]mW]5]S]MO^<^2^f _ t__*_$_6_,`K`T`l`%` `;`J`>a#Sa#wa aaa a a a ab$b|| ||' }1} J}U}h}$w}}}!})} ~~ 2~<~9[~~ ~~"~~=0$n#D.AQp€ހ &35Ui6[/RQNԂa#Q{׃ S`̈́:H$ m*z Å ԅ) .7=f ֆ$<"SJi%*kYT9n4H\nC?d"V]Kx,v 6#E'r-F 6QxYIoG K&'(8*<+@j`gC)^ $msEf )L@_sLG9VT.^\R3pfQtAIM[$X} `]2 !D ~aB0F[SWh. 1cy ?=vD57k; q(e=&b8|Ulu4:a3P%pO/m/5jZ- BoytlcZe>H>1|wz;P{}r7MW,udg0Nh!~{+zi#A2UqNOw_Xb:JR (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A filtered deck cannot have subdecks.About AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuryBury NoteCancelCardCard %dCard 1Card 2Card ListCard TypeCard TypesCard Types for %sCard suspended.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...CopyCorrect: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete this note type and all its cards?Delete this unused note type?Deleted %d note with no cards.Deleted %d notes with no cards.Deleted.DescriptionDialogDownload from AnkiWebDownloading from AnkiWeb...DueE&xitEaseEasyEasy bonusEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...EndEnter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFind DuplicatesFind and Re&place...Find and ReplaceFirst CardFolder already exists.Font:FooterForecastFormFrontFront TemplateGeneralGoodHTML EditorHardHeaderHelpHistoryHoursIf you studied every dayIgnore answer times longer thanIgnore caseImportImport FileImport failed. Import optionsInclude tagsIncrease today's new card limitInstall Add-onInterface language:IntervalIntervalsInvalid code.LaTeXLaTeX equationLast CardLatest ReviewLearnLearningLeftLoading...ManageManage Note Types...Map to %sMap to TagsMinutesMoreMove CardsN&oteName exists.Name:NetworkNewNew CardsNew deck name:New name:New note type:Next day starts atNoteNote TypeNote TypesNothingOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.OpenOptionsOptions for %sOptions...Password:PastePercentagePeriod: %sPlease install PyAudioPlease open a profile first.PositionRandomReviewReview CountReviewsRightSearchSelectSelect &NotesSemicolonShow %sShow AnswerShow DuplicatesSize:StatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing...TabTag OnlyTagsTarget field:TextThat deck already exists.That field name is already used.That name is already used.The default deck can't be deleted.The first field is empty.The number of questions you have answered.The number of times you have pressed each button.The time taken to answer the questions.There must be at least one profile.This file exists. Are you sure you want to overwrite it?TotalTotal TimeUndoUndo %sUnseenVersion %sWhole CollectionWould you like to download it now?You haven't recorded your voice yet.cardscards selected bycollectionddaysdeckdeck lifehelphourshours past midnightmapped to %smapped to Tagsminsminutesmoreviewssecondsstatswwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:04+0000 Last-Translator: glavkos Language-Team: ell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: el (1 από %d) (κλειστό) (ανοιχτό) Έχει %d κάρτα. Έχει %d κάρτες.%% Σωστό%(a)0.1f %(b)s/ημέρα%(a)0.1fs (%(b)s)%(a)d από %(b)d σημείωση ενημερώθηκε%(a)d από %(b)d σημειώσεις ενημερώθηκαν%(tot)s %(unit)s%.01f κάρτες/λεπτό%d κάρτα%d κάρτες%d κάρτα διαγράφτηκε.%d κάρτες διαγράφτηκαν.%d κάρτα εξήχθη.%d κάρτες εξήχθησαν.%d κάρτα εισάχθηκε.%d κάρτες εισάχθηκαν.%d κάρτα μελετήθηκε στο%d κάρτες μελετήθηκαν στο%d τράπουλα ενημερώθηκε.%d τράπουλες ενημερώθηκαν.%d ομάδα%d ομάδες%d σημείωση%d σημειώσεις%d σημείωση προστέθηκε%d σημειώσεις προστέθηκαν%d σημείωση διαγράφτηκε.%d σημειώσεις διαγράφτηκαν.%d σημείωση εξάχθηκε.%d σημειώσεις εξήχθησαν.%d σημείωση εισήχθηκε.%d σημειώσεις εισήχθησαν.%d σημείωση χωρίς μεταβολή%d σημειώσεις χωρίς μεταβολή%d σημείωση ενημερώθηκε%d σημειώσεις ενημερώθηκαν%d αναθεώρηση%d αναθεωρήσεις%d επιλέχθηκε%d επιλέχθηκαν%s αντίγραφο%s ημέρα%s ημέρες%s ώρα%s ώρες%s λεπτό%s λεπτά%s λεπτό%s λεπτά%s μήνας%s μήνες%s δευτερόλεπτο%s δευτερόλεπτα%s για διαγραφή:%s χρόνο%s χρόνια%sd%sh%sm%smo%ss%sy&Σχετικά...&Ξεψάχνισμα...&Επεξεργασία&Εξαγωγή...&Αρχείο&Αναζήτηση&Προς&Οδηγός&Οδηγός...&Βοήθεια&Εισαγωγή...&Αντιστροφή επιλογής&Επόμενη Κάρτα& Άνοιγμα φακέλου πρόσθετων...&Προτιμήσεις...&Προηγούμενη Κάρτα&Επανασχεδιάστε...&Υποστήξη του Anki...&Εργαλεία&Αναίρεση'%(row)s' είχε %(num1)d πεδία, αναμένωντας %(num2)d(%s σωστά)(τέλος)(φιλτραρίστηκε)(μάθηση)(νέο)...τα αρχεία .anki2 δεν έχουν σχεδιαστεί για εισαγωγή. Αν προσπαθείς να κάνεις επαναφορά από backup, παρακαλούμε να δεις την ενότητα "Backups" του εγχειριδίου του χρήστη./0d1 μήνας1 έτος10ΠΜ10ΜΜ3ΠΜ4ΠΜ4ΜΜ:%d κάρτα%d κάρτεςΆνοιγμα φακέλλου backupΕπισκεφτείτε τον ιστοχώρο%(pct)d%% (%(x)s από %(y)s)%Y-%m-%d @ %H:%MΑντίγραφα
Το Anki θα δημιουργήσει ένα αντίγραφο ασφαλείας της συλλογής σου κάθε φορά που κλείνει ή συγχρονίζεται.Εξαγωγή φορμάτ:Βρείτε:Μέγεθος Γραμματοσειράς:Γραμματοσειρά:Εντός:Συμπερίληψη:Μέγεθος Γραμμής: Αντικαταστείστε με :Συγχρονισμός<

Το Anki αναβαθμίστηκε

Κυκλοφόρησε το Anki %s.

<αγνοήθηκε><πληκτρολογήστε εδώ για αναζήτηση. Πατήστε enter για προβολή της τρέχουσας τράπουλας>Ένα μεγάλο ευχαριστώ σε όλους τους ανθρώπους που παρείχαν προτάσεις, αναφορές σφαλμάτων και δωρεές.Μια φιλτραρισμένη τράπουλα δεν μπορεί να έχει υποτράπουλες.Σχετικά με το AnkiΠρόσθηκηΠροσθήκη (συντόμευση: ctrl+enter)Προσθήκη πεδίουΠροσθήκη πολυμέσωνΠροσθήκη νέας τράπουλας (Ctrl+N)Προσθήκη Τύπου ΣημείωσηςΠροσθήκη αναστροφήςΠροσθήκη ετικετώνΠροσθήκη στο:Προσθέστε: %sΠροστέθηκεΠροστέθηκε σήμεραΠροστέθηκε διπλοεγγραφή με το πρώτο πεδίο:%sΞανάΞανά σήμεραΕπανακαταμέτρηση: %sΌλες οι τράπουλεςΌλα τα πεδίαΌλες οι κάρτες, σημειώσεις, και αρχεία πολυμέσων γι΄αυτό το προφίλ θα διαγραφούν. Είστε σίγουρος;Επιτρέψτε HTML στα πεδίαΠροέκυψε σφάλμα κατά το άνοιγμα του/της %sAnkiAnki 2.0 ΤράπουλαAnki Πακέτο ΤράπουλαςΤο Anki δεν μπόρεσε να βρει τη γραμμή ανάμεσα στην ερώτηση και την απάντηση. Παρακαλούμε προσαρμόστε το πρότυπο χειροκίνητα για εναλλαγή μεταξύ ερώτησης και απάντησης.Anki είναι ένα φιλικό, έξυπνο και σε τμήματα σύστημα εκμάθησης. Είναι ελεύθερο και ανοιχτού κώδικα.AnkiWeb ID ή το password ήταν λανθασμένο. Παρακαλώ δοκιμάστε ξανά.Αναγνωριστικό AnkiWeb:Το AnkiWeb είναι πολύ απασχολημένο αυτή τη στιγμή. Παρακαλούμε δοκιμάστε πάλι σε μερικά λεπτά.Το AnkiWeb είναι υπό συντήρηση. Παρακαλούμε προσπαθήστε πάλι σε λίγα λεπτά.ΑπάντησηΚουμπιά ΑπαντήσηςΑπαντήσειςΛογισμικό antivirus ή firewall εμποδίζει το Anki να συνδεθεί στο Internet.Εμφανίζεται δις στο αρχείο: %sΕίστε βέβαιος ότι επιθυμείτε να διαγράψετε %s;Τουλάχιστον ένας τύπος κάρτας απαιτείται.Τουλάχιστον ένα βήμα απαιτείται.Αυτόματη ενεργοποίηση ήχουΑυτόματος συγχρονισμός του προφίλ στο άνοιγμα/κλείσιμοΜέσοςΜέσος χρόνοςΜέσος χρόνος απάντησηςΜέσος όρος ευκολίαςΜέσος όρος για ημέρες μελέτηςΜέσο ενδιάμεσο διάστημαΠίσωΠροβολή ΠίσωΠρότυπο πίσωΑντίγραφα ΑσφαλείαςΒασικόΒασική (και αντεστραμμένη κάρτα)Βασική (κατ'επιλογή αντεστραμμένη κάρτα)ΕξερεύνησηΕμφάνιση περιηγητήΕπιλογές περιηγητήΜπέριΣημείωση μπέριΑκύρωσηΚάρταΚάρτα %dΚάρτα 1Κάρτα 2Κατάλογος ΚάρταςΤύπος κάρταςΤύποι καρτώνΤύποι καρτών για %sΑναστολή κάρτας.ΚάρτεςΟι κάρτες δεν μπορούν να μετακίνηθουν χειροκίνητα σε μια φιλτραρισμένη τράπουλα.Κάρτες σε απλό κείμενοΟι κάρτες θα επιστραφούν αυτόματα στις αρχικές τους τράπουλες αφού τις επιθεωρήσεις.Κάρτες...ΚεντράρισμαΑλλαγήΑλλαγή %s σε:Αλλαγή τράπουλαςΑλλαγή Τύπου ΣημείωσηςΑλλαγή τύπου σημείωσης (Ctrl+N)Αλλαγή Τύπου Σημείωσης...Αλλαγή τράπουλας ανάλογα με τον τύπο σημείωσηςΤροποποιήθηκεΈλεγχος αρχείων στον κατάλογο mediaΈλεγχος...ΕπιλογήΕπιλογή ΤράπουλαςΕπιλογή Τύπου ΣημείωσηςΕπιλογή ΕτικετώνΚλώνος: %sΚλείσιμοΚλείσιμο και απώλεια παρούσας εισροής;ΚλείσιμοΚωδικός:Η συλλογή είναι κατεστραμμένη. Παρακαλούμε δείτε το manual.Άνω κάτω τελείαΚόμμαΟρισμός γλώσσας διεπαφής και επιλογώνΣυγχαρητηρία! Ολοκληρώσατε αυτή την τράπουλα για την ώρα.Γίνεται σύνδεση…ΑντιγραφήΣωστό: %(pct)0.2f%%
(%(good)d από %(tot)d)Δεν μπορέσα να ηχογραφήσετε ήχο. Έχετε εγκαταστήσει το lame και το sox;Δεν μπόρεσα να αποθηκεύσω το αρχείο: %sΔημιουργία τράπουλαςΔημιουργία Φιλτραρισμένης Τράπουλας...ΔημιουργήθηκεCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCtrl+ZΑθροιστικόΑθροιστικό %sΣυγκεντρωτικές ερωτήσειςΣυγκεντρωτικές κάρτες.Τρέχουσα τράπουλαΤρέχων τύπος σημείωσης:Προσαρμογή μελέτηςΠροσαγμογή μελέτης συνεδρίαςΑποκοπήΗ βάση δεδομένων ξαναδημιουργήθηκε και βελτιώθηκε.ΗμερομηνίαΗμέρες μελέτηςΚονσόλα ΑποσφαλμάτωσηςΤράπουλαΗ Τράπουλα θα εισαχθεί μόλις δημιουργηθεί ένα προφίλ.ΤράπουλεςΦθίνοντα διαστήματαΠροεπιλογήΔιαγραφήΔιαγραφή καρτώνΔιαγραφή ΤράπουλαςΔιαγραφή κενούΔιαγραφή ΣημείωσηςΔιαγραφή ΣημειώσεωνΔιαγραφή ετικετώνΔιαγραφή ΑχρησιμοποίητωνΔιαγραφή πεδίου από %s;Διαγραφή αυτού του τύπου σημείωσης και όλων των καρτών τους;Διαγραφή αυτού του μη χρησιμοποιημένου τύπου σημείωσης;Διαγεγραμμένη %d σημείωση χωρίς κάρτες.Διαγεγραμμένες %d σημείωσεις χωρίς κάρτες.ΔιαγράφτηκεΠεριγραφήΠλαίσιο διαλόγουΛήψη από το AnkiWebΛήψη από το AnkiWeb...ΛόγωΈ&ξοδοςΕυκολίαΕύκολοΕύκολο bonusΕπεξεργασίαΕπεξεργασία τρέχοντοςΕπεξεργασία HTMLΕπεξεργάστηκεΕπεξεργασία ΓραμματοσειράςΚενόΚενές Κάρτες...ΤέλοςΕισαγωγή ετικετών για προσθήκη:Εισαγωγή ετικετών για διαγραφή:Σφάλμα κατά τη λήψη:%sΣφάλμα κατά την έναρξη: %sΣφάλμα κατά την εκτέλεση του %s.Σφάλμα κατά την εκτέλεση του %sΕξαγωγήΕξαγωγή...ΠρόσθετοFF1Πεδίο %d αυτού του αρχείου:Όνομα πεδίου:Πεδίο:ΠεδίαΠεδία για %sΠεδία χωρισμένα με:%sΠεδία...ΦιλτράρισμαΦιλτράρισμα:ΦιλτραρισμένοΕύρεση ΔιπλώνΕύρεση και ΑνικατάστασηΒρείτε και ΑντικαταστήστεΠρώτη ΚάρταΟ φάκελος υπάρχει ήδη.ΓραμματοσειράΥποσέλιδοΠρόγνωσηΦόρμαΜπροστάΠρότυπο ΓραμματοσειράςΓενικάΚαλώςΕπεξεργαστής HTMLΔύσκολοΕπικεφαλίδαΒοήθειαΙστορικόΏρεςΑν μελετούσες κάθε μέραΑγνόησε απαντήσεις μεγαλύτερες απόΑγνόησε την πτώσηΕισαγωγήΕισαγωγή ΑρχείουΑποτυχία εισαγωγής Επιλογές εισαγωγήςΣυμπερίληψη ετικετώνΑυξήση του σημερινού ορίου νέων καρτώνΕγκατάσταση ΠρόσθετουΓλώσσα Διεπαφής:Διάστημα ανανέωσηςΔιαστήματαΜη έγκυρος κώδικας.LatexΕξίσωση LaTeXΤελευταία ΚάρταΤελευταία ΑναθεώρησηΜάθετεΕκμάθησηΑριστεράΦόρτωση...ΔιαχείρισηΔιαχείριση Τύπων ΣημειώσεωνΧάρτης στο %sΧάρτης σε ΕτικέτεςΛεπτάΠερισσότεραΜετακίνηση ΚαρτώνΣ&ημείωσηΤο Όνομα υπάρχειΌνομα:ΔίκτυοΝέοΝέες ΚάρτεςΝέο όνομα τράπουλαςΝέο όνομα:Τύποι ΣημείωσηςΗ επόμενη μέρα αρχίζει στιςΣημείωσηΤύπος σημείωσηςΤύποι ΣημειώσεωνΤίποτεΜια ή περισσότερες σημειώσεις δεν έχουν εισαχθεί, επειδή δεν δημιούργησαν κάποια κάρτα. Αυτό μπορεί να συμβεί όταν έχετε κενά πεδία ή όταν δεν έχετε καθορίσει στο περιεχόμενο του αρχείου κειμένου τα σωστά πεδία.ΆνοιγμαΕπιλογέςΕπιλογές για %sΕπιλογές...Κωδικός:ΕπικόλλησηΠοσοστόΠερίοδος: %sΠαρακαλώ εγκατέστησε το PyAudioΠαρακαλώ ανοίξτε πρώτα ένα προφίλΤοποθεσίαΤυχαίαΕπιθεώρησηΕπισκόπηση μετρήσεωνΕπιθεωρήσειςΔεξιάΑναζήτησηΕπιλογήΕπιλογή &σημειώσειςΆνω τελείαΠροβολή%sΠροβολή απάντησηςΠροβολή διπλοεγγραφήςΜέγεθος:ΣτατιστικάΒήμα:Βήματα (σε λεπτά)Βήματα πρέπει να είναι αριθμοί.Μελέτη σήμεραΜελέτηΜελέτη τράπουλαςΜελέτη τράπουλας...Μελέτησε τώραΜορφοποίησηΜορφοποίηση (κοινή μεταξύ καρτών)εξαγωγή Supermemo XML (*.xml)ΑναστολήΑναστολή κάρταςΑναστολή σημείωσηςΣε αναστολήΣυγχρονισμός ήχου και εικόνων επίσηςΟ συγχρονισμός απέτυχε: %sΟ συχρονισμός απέτυχε. Είστε εκτός σύνδεσης.Συγχρονισμός...TabΕτικέτα μόνοΕτικέτεςΣτόχος πεδίου:ΚείμενοΑυτή η τράπουλα υπάρχει ήδη.Αυτό το όνομα αρχείου έχει ήδη χρησιμοποιηθεί.Το όνομα χρησιμοποιείται ήδη.Η προεπιλεγμένη τράπουλα δεν μπορεί να διαγραφεί.Το πρώτο πεδίο είναι κενό.Ο αριθμός των ερωτήσεων που έχετε απαντήσει.Ο αριθμός που έχετε πατήσει το κάθε κουμπί.Ο χρόνος που πήρατε για να απαντήσετε στις ερωτήσεις.Θα πρέπει να υπάρχει τουλάχιστον ένα προφίλ.Το αρχείο υπάρχει. Είσαι σίγουρος ότι θέλεις να το αντικαταστήσεις;ΣύνολοΣυνολικός χρόνοςΑναίρεσηΑναίρεση %sΜη ανοιγμέναΈκδοση %sΠλήρης συλλογήΘα θέλατε να το κατεβάσετε τώρα;Δεν έχετε ηχογραφήσει τη φωνή σας ακόμακάρτεςκάρτες επελεγμένες απόσυλλογήdημέρεςτράπουλαζωή της τράπουλαςβοήθειαώρεςώρες μετά τα μεσάνυχτασε αντιστοιχία προς %sσε αντιστοιχία προς Ετικέτεςλεπτάλεπτάmoαναθεωρήσειςδευτερόλεπταστατιστικάwσύνολο συλλογής~anki-2.1.0+dfsg~b36/locale/en_GB/000077500000000000000000000000001323611211500162705ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/en_GB/LC_MESSAGES/000077500000000000000000000000001323611211500200555ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/en_GB/LC_MESSAGES/anki.mo000066400000000000000000002206241323611211500213420ustar00rootroot00000000000000d8K K KKK"KK KKL&L88LqLLLL"L$L$L&#M"JMmM4M2MMM"N$9N$^N$N NNNNN OO3OJO]O rOOOOOOOO OOOOOO OOPP P PP #P.P7P IPTP[PsPPPPPPP0P Q QQ "Q -Q8Q>QQQhQlQQQQR RRRRRT#RxR,zR(RR!RSf)SS SS S SSSSTe+TT7;UHsU)W XX5YX9YYY%YkZ ~Z ZZZZ Z ZZ Z Z [ [[&['C[k[s[z[[ [$[[ [[[[ [ \%\K6\\1\\v]"Z_}_ ____`I aRjava4b7b cw"cEc@c!d(d7dR?ddde#9e#]ee ezetPt1u]:u u8uuuuv+v/v >vKvQvVv [v fvtv yv v vv vvv)v0vw4wIw4Mw!www#wwx xxxx x.xy yyy .y SGn ז" $1 9EUe)w4֗/*N'y@68' `!k?M͙! 1 ?JPVi   ƚ Ԛޚ 3Pe m z  ț!ۛd bmq (ߜ X5+"&ݝ+00J+{>F'-*U(1۟,IƠ'(#_8e8.C(F+rr u/3McX gs !ͩҩ'Lelê.ʪ&>P,h  ëU8$W|"ZS 0_$"ح ޭ{f^5U }v   2=?D I S]bgmȴ5I_dlow  h s" η88HYl"}$$Ÿ&"44G2|"ݹ$$%$J oźԺ$ 9GX\`dim q{ ûɻϻӻ ڻ  ":JYhy0 ǼԼ /3ýƽνսڽ߽T@,B(o!پgY o| ȿݿeZ7E<) 5fYf%s Z fqu   'GOV^ d$p  %K^1sR"4W \jvIRDv7 wEt@Rlu##7[ zz(/X `m  - HReJl  )&'Px4;@HOV ^ h s }  3S"v "+30&7 IU \h y    -'U[a h(v5 gp8u5P75m #  $-4;BIPW ^ k x   +8 KXmq / %&L S ` l y H, (8aFNP*>{P ] r8~ '-2 7 BP U _ lv })0%4)!^#~ . $+ 2@ Xb+j   # .;NS"    '7 FQV j u, .Ff 4 1EUu* ao "" "7FZc u? $) 423RW]l| < ). 75Bx     07H\bs{ N. 4APV^ b&l  '/+Eq#! < <I]Ya!- O]eh,z#pk "2:I Xc i u5 # @ KV,u#V8EV*0Li,-+8X amu#0  -9B Safm}#5Ibqi /7 gt  " 1 6A^ o -1(9bhm   VU eo,4GO "  &6F)X4*/'Z>68 ?!J?lM  )/5H _k    /D L Y fp 'd GRVens (  X +y " & +  05 +f > F ' *@ (k 1  , I  ' #_#e8C(Fr] u/MNC R^m s ~ !'QU\ty.&.@,X  U($Gl"}ZS0O$" {V^r5U}f   " - / 4  9  C M R W ] q      ! !%!9!O!T!\!_!g!o! u!!!!cMv{@-!#HOZ2=teMV QXT):WIOh_u^kaI6P&j7bcw0e^`7woKF8sbY*)~p /Q9Ln@_UY}\,^5IEm CT67`8 9]=>?g  ~EkWilvOX(:C}) hPCyo_Fq,![Gk| |jP {|n"(j D*4Mogn 9@}Rn}5DT#SB\tP:\71UfcL9T 0RH !xu+ {,:-O/Sm0>Vhaap?ujol/"Y%e{Axe$v [iQt+qV2'!ZiJV*+b.y&D4gvq_wrX-tzIR N."s'GC H3 2F2$"hdDZza< 6;%&'(*gM|5#/0Uc1 3;458k@A\=^fXmGYb?1L[?'JW[<fx$sG.=N3d>]J,`;U~B>JES +dEl&Fu$KA;ly L<.A%]rq6dy<pB]rSR(1Nm`Z#4%3~KW8NBzfpsizQ)xKr  w-H (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAlways include question side when replaying audioAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuried SiblingsBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the %(num)d selected add-on?Delete the %(num)d selected add-ons?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEnable second filterEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFile version unknown, trying import anyway.FilterFilter 2Filter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax inlineMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckRepeat failed cards afterReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow cards as white on black (night mode)Show learning cards with larger steps before reviewsShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Sound and video on cards will not function until mpv or mplayer is installed.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied %(a)s %(b)s today.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.What would you like to unbury?When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightin %s dayin %s daysin %s hourin %s hoursin %s minutein %s minutesin %s monthin %s monthsin %s secondin %s secondsin %s yearin %s yearslapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2018-01-22 20:37+0000 Last-Translator: Andi Chandler Language-Team: English (United Kingdom) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) Language: (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you are trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection every time it is closed or synchronised.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronisation
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronised. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeat until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports, translations and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while synching media. Please use Tools>Check Media, then synchronise again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAlways include question side when replaying audioAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronisation software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licenced under the AGPL3 licence. Please see the licence file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuried SiblingsBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CentreChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimised.DateDays studiedDeauthoriseDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the %(num)d selected add-on?Delete the %(num)d selected add-ons?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogueDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEnable second filterEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFile version unknown, trying import anyway.FilterFilter 2Filter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database and, if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockin-line MathJaxMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the contents of the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimising...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomise orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckRepeat failed cards afterReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:RescheduleRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow cards as white on black (night mode)Show learning cards with larger steps before reviewsShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed for a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Sound and video on cards will not function until mpv or mplayer is installed.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied %(a)s %(b)s today.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronise audio and images tooSyncing failed: %sSyncing failed; no internet connection.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name has already been used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronise your collection. If you have reviews or other changes waiting on another device that haven't been synchronised here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to rubbish bin. Please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.What would you like to unbury?When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightin %s dayin %s daysin %s hourin %s hoursin %s minutein %s minutesin %s monthin %s monthsin %s secondin %s secondsin %s yearin %s yearslapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~anki-2.1.0+dfsg~b36/locale/eo/000077500000000000000000000000001323611211500157215ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/eo/LC_MESSAGES/000077500000000000000000000000001323611211500175065ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/eo/LC_MESSAGES/anki.mo000066400000000000000000001360221323611211500207710ustar00rootroot00000000000000)7 78 8"848 68@88S888"8$8$8&9"B9e9x99$9 99::!:0:A:V:m:: :::::::: ::: ::::; ;; ;#; 5;@;X;h;w;;;;0; ;; ; ;;<<.<2<<<<<<<<<<<,<(=A=!`==f=> >$> 6> C>N>^>p>>e>?7? ??5@X7@Y@ @ @AA A *A4A JA XAdAmAuA}A AA AA A A%AKA8B"MBpB uBBBRC7lC CwCE(DnDuDDRDDbE#}E#EEE(E&F .F;F OF\FuFF F FFFFFFFGGG "G ,G6GGGGH HH H &H 0H;H MHZHjH|H3HSH III !I /I;ILIfI"zIII&I II II J J"J(JFJLJ-RJJJ(J5J JJK5KP=K7KKK KKL LL L'L.L5LOO]P ^P8jPPPPP PPPP P QQ Q (Q2Q 9QFQLQ)[QQQ4Q!QQ RR5RNRbRsR zRRRRR R RRR RR RS SSS,S@SPSeS vS SSSSSSgTpTuTT TTTTT TTT U UUU U+U3U8UIU.OUF~UUU U4 V?VRV YV1eVVVVV*V W#W BWOW"oW"W WWWWXX )X 3X)AXkXXXXXXX X XXXY<YOY XYeYuYzY YYY YYY Y YYYZZZ/Z7ZQZkZ pZ |ZZZ ZZZZZ Z ZZ Z [ [[4[K[+^[[![[ [ [<[ \ \]0\a\\!]&].]@]#^,^ 1^?^O^W^f^ u^^ ^ ^^^^ ^^^ _ '_ 2_=_,\_#_V_8`E=`````,`a-0a+^a8aa aa#a bb%bDbMb ^blbqbxbbbbbbbibVc ]c icvc cc c"cc c1c d(d Ed Rd ^dkd{dd-ddd ddde %e 1e?eWe ge,qee ee eeff0fNflf*f'ff6f g!&g?Hggg g gggg gg g h hh&hEhbh jh wh h hh!hdh IiTiXiaifi {ii(ii iiX j+fj"j&jj0jF'k*nk(k1kIk>l'.mVm#Bn8fnnC/orsooo oup/~pMppqq q q q!qqq'r9r@rErMrbr.ir&rrr,rs s(s$Gsls"}s0s$s"st t +t5t=tCt Ut`tbtgtltqtwtttttttttt ttttu v v v0vwwwO%wuww3w7w5x5;x?qxxx/x3y79yqyyyyyyyy z"z9zJzOzTzYz_zdziz qz}z zzzz z zz zz z%z {&{ 5{A{W{]{@f{ {{ { {{{{||||||||||||/|8}&R}!y}}i}~ 4~B~W~ f~q~~~~r~;9 'I:Biǀ 1>GN n|ց 8J Y-fX'->Si׃EAzMbk {O~ՅT&t"چ5 %/> Q"_ Ňʇ! 1 9CTd!( . 9 CM ^ i s~҉=ىR jt{Ҋ 1-_nu ' 4&/%41Z 4P݌<.k  ͍ԍۍ   +29 AL_o0 "1*\e |+ȏ؏ '2C8v'#אIREKE *l4 A  # +8AJQa  ̓1*F/%vؔ- 6 BLN!Qs   ȕҕ ە,H ` lx U ^h  ͗ڗ # 6A GS+YS٘#9#]y:͙&ߙ3*^v*.՚*./^r  ›3ћ2; AOm vC̜#< T _ kx  ՝ &2F!Npמݞ  $6O _jy11:? HORsԠXH"ڡ)  # /9>M'\' ţϣ!֣  !,-.Z'Q:S>"/ϥ+D3X>H˦%2A tħۧ "@#H^l˨Ө   ''2Zb>j 'ީ)!K%f !Ҫ٪ (93m$ѫ#"$+)P%z3/Ԭ3 @(M:vʭ ۭ. 6B R\b!  ʮ$ծ4pJ ɯͯ 2B\{\)*)Gq/>&&%2LDIJ+ ɴ5 ?~rx {8TJJ O Z h#u$$ø  6(3_7  &+ R_7~$$ۺ $18NVX^flrƻλѻٻ  |NAfTiv}E <INz&^|b_ 9_G !d-JB8DtMaVbu1Pe3QhM-Ir))=mD~vy[PZe=qRy$<hH\F[,z]*?`p;(50V2'"a#$F C\u3Jg1Gr<.@>7l RssT-ig4fEq[t*0/WZ:tM470 ^sw ?l ZrO?2H6L`:j\uS=,)#5XBb!+LI.SUEU!l"k}#$%J&~ 8&kKa59n(2WokDep,%*6XY%Y"4w/m;CQ`x}dW ]+SB;mn] 8z:o/y 'YGp(HAo~RN3  +jcc@{7TKU@C^Q.{1>9'jxOfLXPh6A| K_ g{V>vnF  Owxicqd (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d note%d notes%d note added%d notes added%d note imported.%d notes imported.%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...ContinueCopyCorrect: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFirst CardFirst ReviewFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid regular expression.It has been suspended.KeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards matched the criteria you provided.No empty cards.No unused or missing files found.NoteNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.NothingOldest seen firstOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Review CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selective StudySemicolonSet all decks below %s to this option group?Set for all subdecksShift position of existing cardsShortcut key: %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some settings will take effect after you restart Anki.Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The first field is empty.The first field of the note type must be mapped.The input you have provided would make an empty question on all cards.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.When adding, default to current deckWhole CollectionWould you like to download it now?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+Learn[no deck]backupscardscards selected bycollectionddaysdeckhelphourshours past midnightlapsesmapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-09-26 15:21+0000 Last-Translator: Paul H Language-Team: Esperanto MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: eo (1 el %d) (elŝaltite) (enŝaltite) Ĝi enhavas %d karton. Ĝi enhavas %d kartojn.%% Ĝusta%(a)0.1f %(b)s/tago%(a)d el %(b)d noto estas ĝisdatigita%(a)d el %(b)d notoj estas ĝisdatigitaj%(tot)s %(unit)s%d karto%d kartoj%d karto estas forigita.%d kartoj estas forigitaj.%d karto estas eksportita.%d kartoj estas eksportitaj.%d karto estas importita.%d kartoj estas importitaj.%d karto estis lernata en%d kartoj estis lernataj en%d kartaro estas ĝisdatigita.%d kartaroj estas ĝisdatigitaj.%d grupo%d grupoj%d noto%d notoj%d noto estas aldonita%d notoj estas aldonitaj%d noto estas importita.%d notoj estas importitaj.%d noto estas ĝisdatigita%d notoj estas ĝisdatigitaj%d ripeto%d ripetoj%d elektita%d elektitaj%s kopio%s tago%s tagoj%s horo%s horoj%s minuto%s minutoj%s minuto.%s minutoj.%s monato%s monatoj%s sekundo%s sekundoj%s estas forigenda(j):%s jaro%s jaroj%s t%s h%s m%s mo%s s%s j&Pri...&Studegi...&Redakti&Eksporti...&Dosiero&Trovi&Ek&Gvidlibro&Gvidlibro...&Helpo&Importi...&Inversigi elekton&Sekva karto&Malfermi dosierujon de aldonaĵoj...&Preferoj...&Antaŭa karto&Replani...&Subteni Anki’on…&Iloj&Malfari'%(row)s' havis %(num1)d kampojn, anstataŭ la atendita %(num2)d(%s ĝusta)(fino)(filtrita)(lernado)(nova)(limigo de patraj kartaroj: %d)(bonvole elektu unu karton)....anki2 dosieroj ne estas planitaj al importo. Se vi ŝatus restaŭri el sekurkopio, bonvolu vidi la ĉapitron “Backups” (Sekurkopioj) en la gvidlibro./0 t1 monato1 jaro10 atm10 ptm3 atm4 atm4 ptm:%d karto%d kartojMalfermi la sekurkopian dosierujonViziti la retpaĝaron%(pct)d%% (%(x)s el %(y)s)%H:%M, %d-%m-%YSekurkopioj
Anki kreos sekurkopion de via kolekto ĉiutempe ĝi estas fermata aŭ sinkronigata.Eksportoformato:Trovi:Tipara Grado:Tiparo:En:Inkluzive:Grandeco de linio:Anstataŭigi per:SinkronigoSinkronigo
Nuntemple ne enabligita; klaku la Sinkronigo-butonon en la ĉefa fenestro por enabligi ĝin.

Konto necesas

Senkosta konto necesas por teni vian kolekton sinkronigita. Bonvolu ensaluti por konto, poste entajpu viajn indikojn malsupre.

Anki ĝisdatigita

Anki %s estas eldonita.

Dankegon al ĉiuj kiuj donis sugestojn, cimraportojn kaj donacojn.La facileco de iu karto estas la longeco de la sekva intertempo dum vi respondas "Bona" je ripeto.Nuligita: %sPri AnkiAldoniAldoni (fulmoklavo: Ctrl+Enter)Aldoni kamponAldoni aŭdvidaĵonAldoni novan kartaron (Ctrl+N)Aldoni nototiponAldoni malan direktonAldoni etikedojnAldoni al:Aldoni: %sAldonitaAldonita hodiaŭDenoveHodiaŭaj Denove markitajDenove-nombro: %sĈiuj kartarojĈiuj kampojĈiuj kartoj laŭ hazarda ordo (rapida studo)Ĉiuj kartoj, notoj, kaj aŭdvidaĵoj al ĉi tiu profilo estos forigitaj. Ĉu vi certas?Permesi HTML-on en kampojOkazis eraro dum malfermo de %sAnkioAnki 2.0 kartaroPakaĵa Anki-kartaroAnki ne trovis la dividon inter la demando kaj la respondo. Bonvolu permane adapti la ŝablonon por ŝanĝi demandon kaj respondon.Ankio estas amikeca, inteligenta interspaca lernsistemo. Ĝi estas senkosta kaj la kodo estas malfermita.AnkiWeb-identeco aŭ -pasvorto estis malĝusta; bonvolu provi denove.AnkiWeb-identeco:Eraro okazis ĉe AnkiWeb. Bonvolu provi denove post kelkaj minutoj, kaj se la problemo daŭros, bonvolu sendi cimraporton.AnkiWeb estas nuntempe tro okupata. Bonvolu provi denove post kelkaj minutoj.RespondoRespondobutonojRespondojKontraŭvirusilo aŭ fajroŝirmilo malebligas, ke Anki konektu al la interreto.Ĉiuj kartoj mapitaj al nenio estos forigitaj. Se noto ne havas restantajn kartojn, ĝi perdiĝos. Ĉu vi vere volas daŭrigi?Troviĝis duoble en dosiero: %sĈu vi certas ke vi volas forigi %s-n?Bezoniĝas almenaŭ unu kartotipo.Almenaŭ unu paŝo necesas.Aŭtomate ludi sononAŭtomate sinkronigi je fermo aŭ malfermo de profiloMeznombroAveraĝa tempoMeza respondotempoMeza facilecoMeza tempo al tagoj kiam vi studisMeza intertempoReenDorso-antaŭmontroDorso-ŝablonoSekurkopiojBazaBaza (en ambaŭ direktoj)Baza (en unu aŭ ambaŭ direktoj)FoliumiFoliumila aspektoFoliumilo-opciojKunmetiEntombiguEntombigi kartonEntombigi notonLaŭnorme Anki detektos la signojn inter kampoj, kiel ekzemple tabulatoron, komon, ktp. Se Anki malkorekte detektas signon, vi povas enmeti ĝin ĉi tie. Uzu \t por reprezenti tabulatoron.NuligiKarto%d-a karto1-a karto2-a kartoKarto-identigilo&KartlistoKartotipoKartotipojKartotipoj al %sKarto entombigita.Karto paŭzigita.La karto estis sangosuĉanto.KartojOni ne povas permane alilokigi kartojn en filtritan kartaron.Kartoj estos aŭtomate remetitaj al siaj originalaj kartaroj post vi ripetos ilin.Kartoj...CentreŜanĝiŜanĝi %s-n al:Ŝanĝi kartaronŜanĝi nototiponŜanĝi nototipon (Ctrl+N)Ŝanĝi noto&tipon...Ŝanĝi kartaron laŭ nototipoŜanĝitaVérification du &média...Kontroli la dosierojn en la aŭdvidaĵo-dosierujoKontrolante...ElektiElekti kartaronElekti nototiponElekti etikedojnKlonado: %sFermiĈu fermi kaj perdi nunan enmetitaĵon?TrutekstoKodo:Kolekto estas difektita. Bonvolu vidi la gvidlibron.DupunktoKomoAgordi interfacan lingvon kaj opciojnGratulon! Vi finis ĉi tiun kartaron por hodiaŭ.Konektado...DaŭrigiKopiiĜusta: %(pct)0.2f%%
(%(good)d el %(tot)d)Ne povis konekti al AnkiWeb. Bonvolu kontroli vian retkonekton kaj provu denove.Ne povis registri sonon. Ĉu vi instalis lame'on kaj sox'on?Ne povis konservi dosieron: %sStudegoKrei kartaronKrei filtritan kartaron...KreitaCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCtrl+ZAkumulaAkumula %sAkumulaj respondojAkumulaj kartojAktuala kartaroAktuala nototipo:Propra lernadoKrei lernadan seanconEltondiLa datumbazo estas rekunmetita kaj optimumigita.DatoTagoj de lernadoMalrajtigiSencimiga konzoloKartaroLa kartaro importiĝos kiam profilo malfermiĝos.Kartarojmalkreskaj intertempojDefaŭltaIntertempoj ĝis ripetoj denove montriĝas.ForigiForigi kartojnForigi kartaronForigi malplenajnForigi notonForigi notojnForigi etikedojnForigi neuzitajnĈu forigi la kampon el %s?Ĉu forigi la kartotipon '%(a)s' kaj ĝiajn %(b)s?Ĉu forigi ĉi tiun nototipon kaj ĉiujn ĝiajn kartojn?Ĉu forigi ĉi tiun neuzitan nototipon?Ĉu forigi neuzatajn aŭdvidaĵojn?Forigis %d karton kies noto mankis.Forigis %d kartojn kies notoj mankis.Forigis %d karton kun mankanta ŝablono.Forigis %d kartojn kun mankanta ŝablono.%d noto sen nototipo estas forigita.%d notoj sen nototipo estas forigitaj.%d noto sen karto estas forigita.%d notoj sen karto estas forigitaj.Forigita.Forigo de ĉi tiu kartaro el la kartaro-listo remetos ĉiujn restantajn kartojn al siaj originalaj kartaroj.PriskriboPriskribo kiu montriĝu sur studekrano (nur por aktuala kartaro):DialogujoElŝuto el AnkiWebElŝutante el AnkiWeb...LimdatoEnda morgaŭ&ForlasiFacilecoFacilaFacileca premioIntertempo de facila respondoRedaktiRedakti aktualanRedakti HTML'onRedaktitaRedakta tiparoMalplenigiMalplenaj kartoj...Nombro de malplenaj kartoj: %(c)s Kampoj: %(f)s Malplena unua kampo: %sFinoEntajpu kartaron por enmeti %s novajn kartojn, aŭ lasu ĝin malplena:Entajpu novan kartopozicion (1...%s):Entajpu aldonotajn etikedojn:Entajpu forigotajn etikedojn:Eraro elŝutante: %sEraro dum lanĉo: %sEraro ruligante %s-n.Eraro lanĉante %s-nEksportiEksporti...KromaĵojFF1Kampo %d de dosiero estas:Akordigo de kampojKamponomo:Kampo:KampojKampoj por %sKampoj apartigitaj per: %sKampoj...FiltriloFiltrilo:Filtrita%d-a filtrita kartaroTrovi &duoblaĵojn...Trovi duoblaĵojnSerĉi kaj &anstataŭigi...Serĉi kaj anstataŭigi&Unua kartoUnua ripetoRenversiLa dosierujo jam ekzistas.Tiparo:PaĝopiedoPor sekureco, '%s' ne estas permesita sur kartoj. Tamen vi povas uzi ĝin se vi metas la komandon en alian pakaĵon, kaj vi importas tiun pakaĵon en la LaTex-kapon.PrognozoFormularoMi trovis %(a)s-n en %(b)s.AntaŭoFronto-antaŭmontroFronto-ŝablonoĜeneralaKreita dosiero: %sKreita je %sPartumoBonaGradiga intertempoHTML-redaktiloMalfacilaPaĝokapoHelpoPlej alta facilecoAntaŭaĵoHejmoHora disigoHorojHoroj kun malpli ol 30 ripetoj ne videblas.Bonvolu kontakti nin, se vi kontribuis, sed via nomo ne troviĝas en ĉi tiu listo.Se vi lernus ĉiutageIgnori respondotempon pli longan olIgnori uskleconIgnori liniojn kie la unua kampo laŭas ekzistantan notonIgnori ĉi tiun ĝisdatigonEnportiEnporti dosieronEnporti eĉ se ekzistanta noto havas la saman unuan kamponEnporto fiaskis. Enporto fiaskis. Sencimigaj informoj: Opcioj de enportoEnporto finiĝis.En aŭdvidaĵo-dosierujo, sed ne uzita de iu karto:Inkluzivi aŭdvidaĵojnInkluzivi lerntempajn informojnInkluzivi etikedojnKreskigi hodiaŭan limigon de novaj kartojKreskigi hodiaŭan limigon de novaj kartoj perKreskigi hodiaŭan limigon de ripetokartojKreskigi hodiaŭan limigon de ripetokartoj perkreskaj intertempojInstali aldonaĵonInterfaca lingvo:IntertempoIntertempo-modifiloIntertempojNevalida kodo.Malvalida dosiero. Bonvolu rekreu ĝin el savkopio.Nevalida regulesprimo.Ĝi estas paŭzigita.KonserviLaTeXLaTeX-formuloLaTeX matematika ĉirkaŭaĵoStumbloj&Lasta kartoPlej lasta ripetoplej laste aldonitaj unuafojeLernuAntaŭlerna limigoPor lerni: %(a)s, ripeti: %(b)s, relerni: %(c)s, filtrilaĵo: %(d)sLernadoFarendaĵo en kazo de sangosuĉantoSojlo de sangosuĉantojMaldekstraLimigi ĝisŜargante...Plej longa intertempoSerĉi en kampo:Plej malalta facilecoAdministriAgordu nototipojn...Mapi al %sMapi al etikedojMaljunaMaksimuma intertempoMaksimumaj ripetoj/tagoAŭdvidaĵoMinimuma intertempoMinutojMiksi novajn kartojn kaj ripetojnMnemosyne 2.0 kartaro (*.db)Pliplej multaj stumblojAlilokigi kartojnAlilokigi kartojn en kartaron:&NotoLa nomo jam ekzistas.Nomo de la kartaro:Nomo:RetoNovaNovaj kartojNovaj kartoj/tagoNomo de la nova kartaro:Nova intertempoNova nomo:Nova nototipo:Nomo de nova opciogrupo:Nova pozicio (1...%d):Sekva tago komencas jeNeniu karto laŭis la kriteriojn kiujn vi enigis.Neniu malplena karto.Neniu neuzata aŭ mankanta dosiero estis trovita.NotoNototipoNototipojNoto kaj ĝia %d karto estas forigita.Noto kaj ĝia %d kartoj estas forigitaj.Noto estas entombigita.La noto estas paŭzigita.Noto: aŭdvidaĵoj ne estas sekurkopiitaj. Bonvolu krei regulan sekurkopion de via Ankio-dosierujo por esti sekura.Noto: iom da historio mankas. Por pli da informoj, bonvolu vidi la foliumilo-dokumenton.Notoj en plata tekstoNotoj bezonas almenaŭ unu kampon.Nenioplej frue viditaj unuafojeUnu aŭ pli da notoj ne estas importitaj, ĉar ili ne kreis kartojn. Ĝi povas okazi kiam ĉeestas malplena kampo aŭ kiam vi ne akordigis la enhavon en la tekstodosiero al la ĝustaj kampoj.Nur novaj kartoj povas esti repoziciitaj.MalfermiOptimumigado...Malnepra limigo:OpciojOpcioj al %sOpciogrupo:Opcioj...Ordoordo de aldonoordo de endecoAnstataŭigu la dorsoflankan ŝablonon:Anstataŭigu la tiparon:Anstataŭigu la frontflankan ŝablonon:Pasvorto:AlgluiAlglui tondejajn bildojn kiel PNGLeciono de Pauker 1.8 (*.pau.gz)ElcentoPeriodo: %sMeti ĝin al la fino de vico de novaj kartojMeti ĝin en ripetovicon kun intertempo inter:Bonvolu aldoni alian nototipon antaŭe.Bonvolu konekti mikrofonon kaj certigu ke neniuj aliaj programoj uzas la sonilon.Bonvolu redakti ĉi tiun noton kaj aldoni trutekston. (%s)Bonvolu kontroli ke profilo malfermas kaj Anki ne estas okupata, tiam provu denove.Bonvolu instali PyAudio'nBonvolu malfermi profilon antaŭe.Bonvolu uzi la menueron Iloj > Malplenaj kartojBonvolu elekti kartaron.Bonvolu elekti kartojn el nur unu nototipo.Bonvolu elekti ion.Bonvolu ĝisdatigi al la plej lasta versio de Anki.Bonvolu uzi Dosiero > Importi-n por importi ĉi tiun dosieron.Bonvolu viziti AnkiWeb'on, ĝisdatigi vian kartaron, poste provi denove.PozicioPreferojAntaŭmontri novajn kartojnAntaŭmontri novajn kartojn aldonitajn en la lastaLaborante...ProfilojRajtigo de prokurilo necesas.DemandoFino de la vico: %dKomenco de la vico: %dForlasihazardeHazardigi ordonPritaksoRekunmetiRegistri sian sononRegistrado...
Tempo: %0.1fRelerniMemori lastan enigon kiam aldonanteForigo de ĉi tiu kartotipo forigus unu aŭ pli notojn. Bonvolu krei antaŭe novan kartotipon.AlinomiAlinomi kartaronReludi sononReludi sian voĉonRepoziciiRepozicii novajn kartojnRe&poziciiNepri unu aŭ pli el ĉi tiuj etikedoj:ReplaniReplaniReplani kartojn laŭ miaj respondoj donitaj en ĉi tiu kartaroDaŭrigi nunDekstre-maldekstren tekstodirekto (RTL)Nombro da ripetojTempo de ripetoRipeti antaŭeRipeti antaŭe alRipeti kartojn forgesitajn en la lasta(j)Ripeti forgesitajn kartojnSukceso-proporcio al horoj de la tagoRipetojDekstraAmplekso: %sSerĉiSerĉi ene de aranĝo (malrapida)Elekti&Elekti ĉiujnElekti ¬ojnElektu etikedojn por ekskludi:Selektiva lernadoPunktokomoĈu agordi ĉiujn kartarojn sub %s al ĉi tiu opciogrupo?Agordi al ĉiuj subkartarojŜovi pozicion de ekzistantaj kartojFulmoklavo: %sMontru la respondonMontri duoblaĵojnMontri tempomezurilon por respondojMontri novajn kartojn post ripetojMontri novajn kartojn antaŭ ripetojMontri novajn kartojn laŭ ordo de aldonoMontri novajn kartojn en hazarda ordoMontri tempon de sekva ripeto super respondobutonojMontri nombron de restantaj kartoj dum ripetadoGrando:Kelkaj agordoj efektivos nur post relanĉo de Anki.Ordiga kampoOrdigi per ĉi tiu kampo en la foliumiloOrdigado je ĉi tiu kolono ne eblas. Bonvolu elekti alian.SpacetoKomenca pozicio:Komenca facilecoStatistikojPaŝo:Paŝoj (en minutoj)Paŝoj devas esti nombroj.Hodiaŭ lernitajLernadoLernkartaro&Lernkartaro...Lernu nunStiloStilo (kunhava inter kartoj)Supermemo XML eksportaĵo (*.xml)ProkrastiPaŭzigi kartonPaŭzigi notonPaŭzigitaSinkronigi ankaŭ sonojn kaj bildojnSinkronigo malsukcesis: %sSinkronigo malsukcesis; interreto estas nekonektita.Sinkronigo necesas ke la horloĝo ĉe via komputilo estu agordita. Bonvolu agordi la horloĝon kaj provu denove.Sinkronigo...TabAldoni nur etikedonEtikedojCelkartaro (Ctrl+D)Celkampo:TekstoTeksto apartigita de tabeliloj aŭ punktokomoj (*)Tiu kartaro jam ekzistas.Tiu kamponomo jam estas uzata.Tiu nomo jam estas uzata.La konekto al AnkiWeb transtemplimiĝis. Bonvolu kontroli vian retkonekton kaj provi denove.La apriora agordo ne povas esti forigita.La apriora kartaro ne povas esti forigita.Dividiĝo de kartoj en via(j) kartaro(j).La unua kampo estas malplena.La unua kampo de la nototipo devas esti mapita.La enigo vi aldonis farus malplenan demandon sur ĉiuj kartoj.Nombro da demandoj kiujn vi respondis.Nombro de ripetoj endaj en la estonto.Nombro de fojoj kiam vi premis specifajn butonojn.La aldonita serĉo ne laŭis iun karton. Ĉu vi ŝatus revizii ĝin?La petita modifo necesos tutan alŝuton de la datumbazo kiam vi venontfoje sinkronigos vian kolekton. Se vi havas ripetojn aŭ aliaj ŝanĝojn atendantajn ĉe alia aparato kiuj ankoraŭ ne estis sinkronigitaj, ili perdiĝos. Ĉu vi ŝatus daŭrigi?Tempo vi necesis por respondi la demandojn.Ĉeestas ankoraŭ pli da kartoj, sed la taga limigo estis atingita. Vi povas kreski la limigon ĉe la opcioj, sed bonvolu teni en la kapo ke ju pli kartojn vi enkondukas, des pli ŝarĝanta via mallongdaŭra ripetado estos.Devas esti almenaŭ unu profilo.Tiu dosiero ekzistas. Ĉu vi volas anstataŭigi ĝin?Ĉi tiu dosierujo konservas ĉiujn viajn Anki-datumojn ĉe unu loko, por simple fari sekurkopiojn. Por ke Anki uzu alian lokon, bonvolu vidi: %s Ĉi tiu estas speciala kartaro por lerni krom la normala plano.Ĉi tio forigos vian ekzistantan kolekton kaj anstataŭigos ĝin per la datumoj en la dosiero kiun vi importas. Ĉu vi certas?TempoTempokadra limigoPor ripetiPor krei trutekston ĉe ekzistanta noto, unuafoje vi devas ŝanĝi ĝin al truteksto-tipo, ĉe Redakti > Ŝanĝi nototipon.Por vidi ilin nun, klaku la ĉi-suban butonon Eltombigi.Por lerni krom la normala plano, bonvolu alklaki la butonon Propra lernado malsupre.HodiaŭLa hodiaŭa ripetlimigo estas atingita, sed ankoraŭ ĉeestas ripetendaj kartoj. Por memori optimume, bonvolu pripensi la altigon de la taga limigo ĉe la opcioj.SumoSuma tempoKartoj entuteNotoj entuteTrakti enigon kiel regulan esprimonTipoEntajpu respondon: nekonata kampo %sNe povas importi el nurlega dosiero.EltombigiMalfari&Malfari %snNekonata dosierformato.NeviditaĜisdatigi ekzistantan noton kiam la unua kampo laŭasĜisdatigis %(a)d el %(b)d jam ekzistantajn notojn.Alŝuti al AnkiWebAlŝutante al AnkiWeb...Uzita sur kartoj sed mankanta el aŭdvidaĵo-dosierujo:1-a uzantoVersio %sAtendante por fino de redakto.Ĉe aldono, apriori al aktuala kartaroTuta kolektoĈu vi volas elŝuti ĝin nun?Vi havas multege da kartaroj. Bonvolu legi %(a)s. %(b)sVi ankoraŭ ne registris vian sonon.Oni devas havi almenaŭ unu kolonon.JunaJuna + lernata[neniu kartaro]sekurkopiojnkartojkartoj elektitaj laŭkolektottagojkartarohelpohorojhoroj post noktomezostumblojmapita al %smapita al Etikedojminutojminutojmoripetojsekundojstatistikojĉi tiun retpaĝonstuta kolekto~anki-2.1.0+dfsg~b36/locale/es/000077500000000000000000000000001323611211500157255ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/es/LC_MESSAGES/000077500000000000000000000000001323611211500175125ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/es/LC_MESSAGES/anki.mo000066400000000000000000002346651323611211500210110ustar00rootroot00000000000000T8K K KKK"KK KKKL8LQLaLrLL"L$L$L&M"*MMM4`M2MMM"M$N$>N$cN NNNNNNNO*O=O RO`OqOuOyO}OOO OOOOOO OOOOO OO PPP )P4P;PSPcPrPPPPP0P PPP Q QQQ1QHQLQQQQQQQQQQTRXR,ZR(RR!RRf SpS SS S SSSSSe TqT7UHSU)W XX5XXYYrY%YkY ^Z jZuZyZZ Z ZZ Z ZZ ZZ['#[K[S[Z[b[ h[$t[[ [[[[ [ [%[K\b\1w\\V]":_]_ b_p___|`IaRJavab7b bwcEzc@cdddRdrd{dd#e#=eae ezef(5f^f ffsf ffff f f ffffg3g NgXgkgJrgggggghh h "h),h'Vh~h:iAiFiNiUi\i di ni yi i ii iiii3ijS(j|jjj j jjjjjj"k1k9k0kkl&l=l Ol[l blnl l l ll lll lllmm--m[mamgm nm(|m5m mmmnvn8{n5nPn7;osoo oo#ooooooo p p p#p*p3p:pApHpOpVp]p dp qp ~p p p p p p p ppp p p q q 1q>q Qq^qsqwqq q q qqq/q rr$r%,rRr Yr fr rr r r r rrHr,s(>sgssFsNsP0t>tPtu]u xu8uuuuu vv v+v1v6v ;v FvTv Yv cv pvzv vvv)v0vvw)w4-w!bwww#wwwxxxx x.xxxxx y y(y/y 6yDy \yfy+nyyy yyyyyyyz z 'z 2z?zNWz"zzz zzz{{{{{{{ {|||+|;| J|U|Z| n| y||,||| |||||.|F#}j}} } }4}}~ ~1~I~Y~y~~*~~ es "" &;J^g y? Áс$)82؂ "7V[ap <ʃ -2 ;5F|  ք $3:K_ev~ Å΅N1 7DSYa e&o  † φن*2+Ht#!ʇ < ?L]\a!0 R`hk,}#rk $4<K Ze k w5 % B MX,w#VȌ8EXՍ*0Nk,-ǎ+8!Z cow#0ȏ  /;D Ucho͐֐#7Kdsi / O\ mx "֒ ޒ1 &C Tu | ѓ-(GMRir y ˔V: JT,וG4 |"ǖ   +)=g*ߗ' 2:@@68 !?M^ ™ Йۙ  8F L W eoĚ "3 8Y!ld  4B(Gp XƜ+"K&n+0۝+ >8Fw'*(1:l,*IW'#_ɢe)8CO(Frv{ uN/ħMBH   $ 0!<^c'L"?T.[&Ϫ,& -8 ITUsɫ$ "ZAS0$!"Fi o{{^5rU}  óγгճ ڳ '>Yrƴڴ  "35 DO^ m&y $A:J[q---1+Dp:C#'7'_'')׺  7CTezǻػܻ   %>Z box  Ǽڼ!&6F U c7mý ɽ Խ!$( 7:ɿ"!'I{a ) 8CSp&@ i |GgtJ)  4IYk %* '@ IWmA_ iM3  *@BQkD4R#vZ Yf  U@P!*,L#j";6^ 8Nm$ Yt  =5\z '9Mm:v_ )5 =G Wdt) 32 ?Tc iu  )  &<E<Z /0 '5 E6iT=&# ;F']     , 9 F S ` m z    =(Dms /4#Xa s \3J2~0$?IGYAk- j Mjs  -C J V dpx3V.Eb[f4"#$>cz0F[ dAp" 7ACJ   ", <Jag4.7MUd  #&.U]{ %$. S^dx1O%&'Lt EAT5m7%)/;2k'* 3= VOa4G]J;$ +:U"^D    Q%w   '4 HTgz ! %4_L<;Qf} # !<?|&2#  # 0T>ub&',/?M1Y2AS\m !!;  IV)\  ./, pI ; i "`  " 6 < 05 f 7z  3 0 C3  w   *  ; A!  c q z          ); Xc s&~*6 $?4F _k*  ?;!Km!*(4Cx5   & /;M#`i  @%d,~)'  %7K!^=/,,&HGo: T ;^L*F!Wh   & DRm| /&"*M cm  0!; I  6H2N*!c5F+|-<:1+lZS/G +w / 3 !7!I"`"7e##!$$o.% %;&&@'$'C (xM((( (()5R*_***++++ ++ +) ,6,(;,9d,b, - -%- .-#:-^- ~-B-)---#.3.:I. . .. .&.Q.@/>[///W/Z00z00%000 1J1~2[U334xI7 77777 8#8%8+8 08 >8I8O8W8]8x888888 9909E9a9f9n9r9z9 9 9999cMv{>-!!HOX2=reMV QXT):UIMh]u^kaI4P&h7bcw.e^`5uoKF8q`Y*)~p -Q9Ll@_SY{Z,^3IEk CT67^8 9]=>?~g ~EkWglvOX(8A}' hNCyo_Dq*![Gkz |jP {|}n"(j B(2Mmgn 9@}Rn}5DT#SB\tP:\7/UdcL7R 0RH!xu+ {,:-O/Sm0>Vfa _n?ujol/"Y#ey?xc$t YiQt)qV2'ZiJT*+ b.y$D4gvo_wrX-tzGR N, s%EC F1 2F0$"hbDZxa<6;%&'(*eK|5#/0Ua1 3;458i@A\;\fVmGWb?1L[='JW[<fx"sG.=N3d<[H,`9U|@>JEQ +dCj&Fs$KA;ly J:.A%]pq6dw<pB]rSP&1Lm`Z#4%3~IW6NBzfpsizO)vKr  w+H (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAlways include question side when replaying audioAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuried SiblingsBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the %(num)d selected add-on?Delete the %(num)d selected add-ons?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEnable second filterEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFile version unknown, trying import anyway.FilterFilter 2Filter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax inlineMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow cards as white on black (night mode)Show new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Sound and video on cards will not function until mpv or mplayer is installed.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied %(a)s %(b)s today.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.What would you like to unbury?When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightin %s dayin %s daysin %s hourin %s hoursin %s minutein %s minutesin %s monthin %s monthsin %s secondin %s secondsin %s yearin %s yearslapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: Anki 0.9.7.7 Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2018-01-19 09:52+0000 Last-Translator: Guillem Palau Salvà Language-Team: Spanish MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) X-Poedit-Country: SPAIN Language: es X-Poedit-Language: Spanish (1 de %d) (desactivado) (desactivado) (activado) Tiene %d tarjeta. Tiene %d tarjetas.%% Aciertos%(a)0.1f %(b)s/día%(a)0.1fkB subida, %(b)0.1fkB bajada%(a)0.1fs (%(b)s)%(a)d de %(b)d nota actualizada%(a)d de %(b)d notas actualizadas%(n)d: %(name)s%(tot)s %(unit)s%.01f tarjetas/minuto%d tarjeta%d tarjetas%d tarjeta eliminada.%d tarjetas eliminadas.%d tarjeta exportada.%d tarjetas exportadas.%d tarjeta importada.%d tarjetas importadas.%d tarjeta estudiada en%d tarjetas estudiadas en%d mazo actualizado.%d mazos actualizados.%d grupo%d grupos%d cambio multimedia a subir%d cambios multimedia a subir%d archivo multimedia descargado%d archivos multimedia descargados%d nota%d notas%d nota añadida%d notas añadidas%d nota eliminada.%d notas eliminadas.%d nota exportada.%d notas exportadas.%d nota importada.%d notas importadas.%d nota inalterada%d notas inalteradas%d nota actualizada%d notas actualizadas%d repaso%d repasos%d seleccionada%d seleccionadasCopia de %s%s día%s días%s hora%s horas%s minuto%s minutos%s minuto.%s minutos.%s mes%s meses%s segundo%s segundos%s a eliminar:%s año%s años%sd%sh%sm%smes(es)%ss%sy&Acerca de...&Navegar e instalar...&TarjetasVerifi&car Base de Datos&Estudiar intensivamente...&Editar&Exportar...&Archivo&Buscar&Ir&Guía&Guía...&Ayuda&Importar...&Info...&Invertir selección&Siguiente tarjeta&Notas&Abrir carpeta de complementos...&Preferencias...&Tarjeta anterior&Reprogramar...&Apoyar Anki...Cambiar Perfil&Herramientas&Deshacer'%(row)s' tenía %(num1)d campos, se esperaban %(num2)d(%s correctas)(Nota borrada)(fin)(filtrada)(aprendizaje)(nueva)(límite precursor: %d)(por favor, selecciona 1 tarjeta)…Los archivos .anki2 no están diseñados para la importación. Si estás intentando restaurar de una copia de seguridad, por favor consulta la sección 'Backups' del manual de usuario./0d1 mes1 año10AM10PM3AM4AM4PMRecibido un error 504 de tiempo de espera agotado para la puerta de enlace. Por favor, intenta desactivar temporalmente tu antivirus.:%d tarjeta%d tarjetasAbrir carpeta de copias de seguridadVisitar sitio web%(pct)d%% (%(x)s de %(y)s)%Y-%m-%d @ %H:%MCopias de seguridad
Anki creará una copia de seguridad de tu colección cada vez que sea cerrada o sincronizada.Formato de exportación:Buscar:Tamaño de la fuente:Fuente:En:Incluir:Tamaño de la línea:Reemplazar con:SincronizaciónSincronización
Actualmente no está activada; haz clic en el botón de sincronizar en la pantalla principal para activarla.

Se requiere una cuenta

Se requiere una cuenta gratuita para mantener tu colección sincronizada. Por favor, regístrate e introduce tus detalles aquí debajo.

Actualización de Anki

Anki %s está disponible.

Error

Se ha producido un error. Por favor inicia la Anki manteniendo presionadas ples teclas Mayús y la flecha hacia abajo, lo que desactivará temporalmente los extensiones que tienes instaladas.

Si este error persiste sólo cuando tienes las extensiones activadas, utiliza Herramientas > Menú de Extensiones para deshabilitar alguna extensión y reinicia el Anki, repitiendo este proceso hasta que descubras qué extensión en concreto es la que causa el problema

Cuando hayas descubierto la extensión que causaba el problema, por favor informa de esto a sección de extensiones de la nuestra web de apoyo.

Información de depuración:

Error

Se ha producido un error. Por favor utiliza Herramientas > Comprobar Base de datos para ver si esto soluciona el problema.

Si el problema persiste, por favor informa de este problema en nuestra web de apoyo . Por favor, copia y pega la información más abajo en tu informe.

Mi más sincero agradecimiento a todos los que han hecho sugerencias, informes de errores y donaciones.La facilidad de una tarjeta es el tamaño del intervalo siguiente cuando tu respuesta es "bien" en un repaso.Un mazo filtrado no puede tener submazos.Ha ocurrido un problema al sincronizar los archivos multimedia. Por favor, usa Herramientas->Comprobar multimedia, y luego sincroniza de nuevo para corregir el problema.Abortada: %sAcerca de AnkiAñadirAñadir (atajo: ctrl+enter)Añadir tipo de tarjeta...Añadir campoAñadir archivos multimediaAñadir nuevo mazo (Ctrl+N)Añadir tipo de notaAñadir reversoAñadir etiquetasAñadir etiquetas...Añadir a:La extensión no tiene configuraciónEl complemento no se descargó de AnkiWeb.ComplementosAñadir...Añadir: %sAñadidasAñadidas hoyAñadida duplicada con primer campo: %sOtra vezOlvidadas hoyTotal de otra vez: %sTotas las tarjetas enterradasTodos los tipos de tarjetaTodos los mazosTodos los camposTodas las tarjetas en orden aleatorio (modo de estudio intensivo)Todas las tarjetas, notas y archivos multimedia de este perfil se eliminarán. ¿Estás seguro?Permitir HTML en los camposIncluir siempre el lado de la pregunta cuando se vuelva a reproducir el audioUna extensión que has instalado ha fallado al cargarse. Si los problemas persisten, por favor ve a Herramientas> Menú de extensiones o deshabilita esta extensión. Mientras cargando '%(name)s': %(traceback)s Ha ocurrido un error accediendo a la base de datos. Posibles causas: - Un antivirus, cortafuegos o software para sincronizar archivos puede estar interfiriendo con Anki. Prueba a desactivarlos y mira si el problema desaparece. - Tu disco duro puede estar lleno. - La carpeta Documentos/Anki puede estar compartida en red. - Los archivos en la carpeta Documentos/Anki pueden no tener permiso de escritura. - Tu disco duro puede tener errores. Es una buena idea ejecutar Herramientas>Comprobar base de datos para asegurar que tu colección no está corrupta. Ocurrió un error al abrir %sAnkiMazo Anki 2.0Paquete de colección de AnkiPaquete de mazos AnkiAnki no ha podido renombrar tu perfil porque no ha podido renombrar la carpeta del perfil en el disco. Asegúrate de que tienes permiso para escribir en Documentos/Anki y de que no hay otros programas accediendo a tu carpeta de perfil y vuelve a intentarlo.Anki no ha podido encontrar la línea de separación entre la pregunta y la respuesta. Por favor, ajusta la plantilla manualmente para intercambiar la pregunta y la respuesta.Anki no soporta arxivos en subdirectorios dentro del directorio collection.media.Anki es un sistema de aprendizaje espaciado inteligente y fácil de usar. Es gratuito y de código abierto.Anki está licenciado bajo la licencia AGPL3. Consulta el archivo de la licencia en la distribución fuente para más información.Anki ha sido incapaz de abrir el archivo de la colección. Si los problemas persisten después de reiniciar tu ordenador, por favor usa el botón de abrir cópia de seguridad en el administrador de perfiles. Información de depuración: La ID de AnkiWeb o la contraseña son incorrectas; por favor, inténtalo de nuevo.ID de AnkiWeb:AnkiWeb ha encontrado un error. Vuelve a intentarlo en unos minutos, y si el problema persiste, por favor envía un informe de error.AnkiWeb está demasiado concurrido en estos momentos. Vuelve a intentarlo en unos minutos.AnkiWeb está en estado de mantenimiento. Por favor, vuelve a intentarlo en unos minutos.RespuestaBotones de respuestaRespuestasUn antivirus o un software cortafuegos está evitando que Anki se conecte a Internet.Cualquier MarcaLas tarjetas asignadas a nada se eliminarán. Si una nota no tiene cartas restantes, se perderán. ¿Seguro que deseas continuar?Apareció doble en el archivo: %s¿Estás seguro de que deseas eliminar %s?Se requiere como mínimo un tipo de tarjeta.Se requiere al menos un paso.Adjuntar imágenes/audio/video (F3)La sincronización simultánea y las copias de seguridad están desactivadas mientras se restaura. Con el fin de volverlas a habilitar, cierra el perfil o reinicia el Anki.Reproducir sonido automáticamenteSincronizar automáticamente al abrir/cerrar el perfilPromedioTiempo promedioTiempo de respuesta promedioFacilidad promedioPromedio en los días estudiadosIntervalo promedioReversoPrevisualización del reversoPlantilla del reversoHaciendo copia de seguridad...Copias de seguridadBásicoBásico (y tarjeta invertida)Básico (tarjeta invertida opcional)Básico (teclear la respuesta)Marca azulTexto en negrita (Ctrl+B)ExplorarNavegar (%(cur)d targeta mostrada; %(sel)s)Navegar (%(cur)d targetas mostradas; %(sel)s)Apariencia del exploradorApariencia del navegador...Opciones del exploradorConstruirEnterradosEnterrar tarjetas relacionadasEnterrarEnterrar tarjetaEnterrar notaEnterrar tarjetas nuevas relacionadas hasta el día siguienteEnterrar repasos relacionados hasta el día siguientePor defecto, Anki detectará el carácter entre campos, como una marca de tabulación, una coma o similares. Si Anki detecta el carácter incorrectamente, puedes introducirlo aquí. Usa \t para representar una marca de tabulación.CancelarTarjetaTarjeta %dTarjeta 1Tarjeta 2ID de tarjetaLista de tarjetasEstado de tarjetaTipo de tarjetaTipo de tarjeta:Tipos de tarjetaTipos de tarjeta para %sTarjeta ocultada.Tarjeta suspendida.La tarjeta era una sanguijuela.TarjetasNo se puede mover tarjetas manualmente a un mazo filtrado.Tarjetas en texto planoLas tarjetas se devolverán automáticamente a sus mazos originales una vez las hayas repasado.Tarjetas...CentrarModificarModificar %s a:Cambiar mazoCambiar mazo...Cambiar tipo de notaCambiar tipo de nota (Ctrl+N)Cambiar tipo de nota...Cambiar de color (F8)Cambiar mazo en función del tipo de notaModificadaLos cambios debajo afectarán a la nota que utiliza este tipo de tarjeta.Los cambios debajo afectarán a %(cnt)d notas que utilizan este tipo de tarjeta.Los cambios tendrán efecto cuando Anki se reinicieComprobar &multimedia...Comprobar actualizacionesComprobar los archivos en el directorio multimediaComprobando media...Comprobando…EligeElegir mazoElegir tipo de notaElige las etiquetasElimina MarcaElimina no utilizadasLimpiar tags no usadosClonar: %sCerrar¿Cerrar y perder la información actual?Cerrando...HuecoHuecos (Ctrl+Shift+C)Código:Colección exportadaLa coleccion esta corrompida. Por favor, consulta el manual.Dos puntosComaConfiguraciónConfiguraciónConfigurar idioma de la interfaz y las opciones¡Enhorabuena! Has finalizado este mazo por hoy.Conectando...La conexión ha expirado. Puede ser que haya problemas con tu conexión a Internet o que tengas un archivo muy grande en tu carpeta multimedia.SiguienteCopiarRespuestas correctas en las tarjetas maduras: %(a)d/%(b)d (%(c).1f%%)Aciertos: %(pct)0.2f%%
(%(good)d de %(tot)d)No se ha podido conectar con AnkiWeb. Por favor, comprueba tu conexión a internet y vuelve a intentarlo.No se ha podido grabar el sonido. ¿Has instalado lame y sox?No se ha podido guardar el archivo: %sEstudiar intensivamenteCrear mazoCrear mazo filtrado...Crea imágenes reescalables con svisvgmCreadaCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+SuprCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZAcumuladas%s acumuladasRespuestas acumuladasTarjetas acumuladasMazo actualTipo de nota actual:Estudio personalizadoSesión de estudio personalizadaCortarBase de datos reconstruida y optimizada.FechaDías estudiadosDesautorizarConsola de depuraciónMazoSuperposició de mazo...El mazo se importará cuando se abra un perfil.MazosIntervalos decrecientesPredeterminadoTardanza hasta que los repasos se muestren de nuevo.EliminarEliminar tarjetasEliminar mazoEliminar vacíasEliminar notaEliminar notasEliminar etiquetasEliminar no usadas¿Eliminar campo de %s?Eliminar la %(num)d extensión seleccionada?Eliminar las %(num)d extensiones seleccionadas?¿Eliminar el tipo de tarjeta '%(a)s', y sus %(b)s?¿Eliminar este tipo de nota y todas sus tarjetas?¿Eliminar este tipo de nota que no se ha usado?¿Eliminar archivos media no usados?%d tarjeta sin nota eliminada.%d tarjetas sin nota eliminadas.%d tarjeta sin plantilla eliminada.%d tarjetas sin plantilla eliminadas.%d nota con tipo de nota ausente eliminada.%d notas con tipo de nota ausente eliminadas.%d nota sin tarjetas eliminada.%d notas sin tarjetas eliminadas.%d nota con una cuenta de campos errónea eliminada.%d notas con una cuenta de campos errónea eliminadas.Eliminado.Al eliminar este mazo de la lista de mazos se devolverán todas las tarjetas restantes a su mazo original.DescripciónDescripción a mostrar en la pantalla de estudio (sólo para el mazo actual):DiálogoDescargar desde AnkiWeb%(fname)s se ha descargadoDescargando desde AnkiWeb...ProgramadasSólo tarjetas programadasProgramadas para mañanaS&alirFacilidadFácilBonus para fácilIntervalo para fácilEditarEditar "%s"Editar actualEditar HTMLEditadoEditando fuenteVacíoTarjetas vacías...Números de tarjetas vacías: %(c)s Campos: %(f)s Se han encontrado tarjetas vacías. Por favor, accede a Herramientas>Tarjetas vacías.Primer campo vacio: %sActivar el filtro secundarioFinIntroduce el mazo en el que quieras colocar las %s tarjetas nuevas, o deja el campo vacío:Introduce la nueva posición de la tarjeta (1...%s):Introduce las etiquetas a añadir:Introduce las etiquetas a eliminar:Error al descargar %(id)s: %(error)sError al descargar: %sError al iniciar: %sSe ha producido un error mientras se establecía una conexión segura. Esto está normalmente causado por un antivirus, cortafuegos, VPN o problemas con tu ISP.Error al ejecutar %s.Error al ejecutar %sExportarExportar...%d archivo multimedia exportado%d archivos multimedia exportadosExtraFF1El campo %d del archivo es:Asignar camposNombre del campo:Campo:CamposCampos para %sCampos separados por: %sCampos...Fil&trarVersión del archivo desconocida, intentando abrir de todas formas.FiltrarFiltro 2Filtrar...Filtrar:FiltradasMazo filtrado %dBuscar &duplicadas...Buscar duplicadasBuscar y re&emplazar...Buscar y reemplazarFinalizarPrimera tarjetaPrimer repasoPrimer campo coincidente: %s%d tarjeta con propiedades erróneas corregida.%d tarjetas con propiedades erróneas corregidas.Corregido el error de ignorar de mazos de AnkiDroid.Tipo de nota corregido: %sMarcaMarcar targetaInvertirLa carpeta ya existe.Fuente:Pie de páginaPor razones de seguridad, no se permite '%s' en las tarjetas. Puedes seguir usándolo insertando el comando en un paquete distinto, e importando ese paquete en la cabecera LaTeX.PronósticoFormulario%(a)s encontradas a lo largo de %(b)s.AnversoPrevisualización del anversoPlantilla del anversoGeneralArchivo generado: %sGenerado en %sConseguir complementos...Descargar mazos compartidosBienIntervalo para pasarMarca verdeEditor HTMLDifícilHa instalado latex y dvipng/dvisvgm?EncabezadoAyudaFacilidad más altaHistoriaInicioDistribución horariaHorasLas horas con menos de 30 repasos no se muestran.Si has contribuido y no estás en esta lista, por favor, contacta con nosotros.Si hubieses estudiado todos los díasIgnorar tiempos de respuesta mayores deIgnorar mayúsculasIgnorar campoIgnorar líneas donde el primer campo coincida con una nota existenteIgnorar esta actualizaciónImportarImportar archivoImportar aún cuando exista alguna nota con el mismo primer campoLa importación falló. La importación falló. Información de depuración: Importar opcionesImportación completa.En el archivo multimedia pero no incluído en tarjetas:Para asegurar que tu colección funcione correctamente al ser transferida entre dispositivos, Anki necesita que el reloj interno de tu ordenador esté ajustado correctamente. El reloj interno puede estar mal ajustado aunque tu sistema muestre correctamente la hora local. Por favor, accede a los ajustes horarios en tu ordenador y comprueba lo siguiente: - AM/PM - Desviación del reloj - Día, mes y año - Zona horaria - Horario de verano Diferencia con el tiempo correcto: %s.Incluir archivos multimediaIncluir información de programaciónIncluir etiquetasAumentar el límite de tarjetas nuevas para hoyAumentar el límite de tarjetas nuevas para hoy enAumentar el límite de repasos para hoyAumentar el límite de repasos para hoy enIntervalos crecientesInstalar complementoIdioma de la interfaz:IntervaloModificador de intervaloIntervalosCódigo inválido o la extensión no está disponible para su versión de Anki.Código inválido.Configuración no válida: Nombre de archivo inválido, por favor renombrar: %sArchivo inválido. Por favor, restáuralo desde una copia de seguridad.Se ha encontrado alguna propiedad incorrecta en las tarjetas. Por favor, usa Herramientas->Comprobar base de datos, y si el problema persiste contacta con el servicio de asistencia en la web.Expresión regular inválida.Búsqueda no válida - Por favor, revise si ha escrito todo correctamente.Ha sido suspendida.Texto en cursiva (Ctrl+I)Saltar a etiquetas con Ctrl+Mayús+TConservarLaTeXEcuación LaTeXEntorno matemático LaTeXOlvidosÚltima tarjetaÚltimo repasoÚltimas añadidas primeroAprenderLímite del estudio por adelantadoAprender: %(a)s, Repasar: %(b)s, Reaprender: %(c)s, Filtradas: %(d)sAprendiendoAcción para sanguijuelasUmbral para sanguijuelasIzquierdaLimitar aCargando...La colección local no contiene ninguna tarjeta. ¿Desea descargarlas de AnkiWeb?Intervalo más largoBuscar en el campo:Facilidad más bajaAdministrarAdministra los Tipos de NotaAdministrar tipos de nota...Gestionar…Tarjetas enterradas manualmenteAsignar a %sAsignar a etiquetasMarcar notaBloque de MathJacxMathJacx en líneaMadurasIntervalo máximoRepasos máximos/díaMultimediaIntervalo mínimoMinutosMezclar tarjetas nuevas y repasosMazo Mnemosyne 2.0 (*.db)MásMás veces olvidadasMover tarjetasMover tarjetas al mazo:Los separadores de más de un caracter no son válidos. Por favor, introduzca un solo caracter.N&otaEl nombre ya existe.Nombre para el mazo:NombreRedNuevasTarjetas nuevasTarjetas nuevas en el mazo por encima del límite de hoy: %sSólo tarjetas nuevasTarjetas nuevas/díaNombre del nuevo mazo:Intervalo para nuevasNombre nuevo:Nuevo tipo de nota:Nombre del nuevo grupo de opciones:Nueva posición (1...%d):El siguiente día empieza a lasSin MarcaAún no hay tarjetas programadas.Ninguna tarjeta coincide con los criterios que has indicado.No hay tarjetas vacías.Hoy no se estudiaron tarjetas maduras.No se han encontrado archivos perdidos o sin usar.No hay actualizaciones disponibles.NotaID de notaTipo de notaTipos de notaLa nota y su %d tarjeta se ha eliminado.La nota y sus %d tarjetas se han eliminado.La nota se ha enterrado.La nota se ha suspendido.Nota: no se hacen copias de seguridad de los archivos multimedia. Por favor, haz copias de seguridad de tu carpeta de Anki periódicamente para asegurarla.Nota: falta parte de la historia. Para más información, consulta la documentación sobre el explorador de tarjetas.Notas en texto planoLas notas requieren al menos un campo.Notas etiquetadas.NadaOKMostrar antes las más viejasForzar cambios en una dirección en la próxima sincronizaciónUna o más notas no se importaron, porque no generaban ninguna tarjeta. Esto puede ocurrir cuando tienes campos vacíos, o cuando no has asociado el contenido del archivo de texto a los campos correctos.Sólo las tarjetas nuevas se pueden reposicionar.Sólo un cliente puede acceder a AnkiWeb a la vez. Si una sincronización anterior falló, vuelve a intentarlo pasados unos minutos.AbrirAbrir copia de seguridad...Optimizando...Límite opcional:OpcionesOpciones para %sGrupo de opciones:Opciones…OrdenOrden añadidoOrden de programadasReemplazar plantilla del reverso:Reemplazar fuente:Reemplazar plantilla del anverso:Mazo de Anki comprimido/ Colección (*.apkg *.colpkg *.zip)Contraseña:PegarPegar imágenes del portapapeles como PNGLección Pauker 1.8 (*.pau.gz)PorcentajePeríodo: %sColocar al final de la cola de tarjetas nuevasColocar en cola de repaso con intervalos entre:Por favor, añade primero otro tipo de nota.Por favor, conecta un micrófono, y asegúrate de que otros programas no estén usando el dispositivo de sonido.Por favor, modifica esta nota y agrega algunos huecos. (%s)Por favor, asegúrate de que hay un perfil abierto y de que Anki no está ocupado, y vuelve a intentarlo.Por favor, de un nombre al filtro:Por favor, instala PyAudioPor favor, primero abre un perfil.Por favor elimina la carpeta %s y vuelve a intentarlo.Por favor, reinicia Anki para completar el cambio de idioma.Por favor, ejecuta Herramientas>Tarjetas vacíasSelecciona un mazo.Por favor, selecciona tarjetas de un solo tipo de nota.Por favor, selecciona algo.Por favor, actualiza a la última versión de Anki.Usa Archivo>Importar para importar este archivo.Por favor, visita AnkiWeb, actualiza tu mazo y vuelve a intentarlo.PosiciónPreferenciasPrevisualizarPrevisualizar la tarjeta seleccionada (%s)Previsualizar tarjetas nuevasPrevisualizar las tarjetas nuevas añadidas en los últimos%d archivo multimedia procesado%d archivos multimedia procesadosProcesando...PerfilesAutenticación proxy requerida.Marca lilaPreguntaÚltima de la cola: %dPrimera de la cola: %dSalirAleatorioOrden aleatorioValoraciónReconstruirGrabar mi propia vozGrabar audio (F5)Grabando...
Tiempo: %0.1fMarca rojaAtraso relativoReaprenderRecordar la última entrada al añadir¿Eliminar %s de tus búsquedas guardadas?Eliminar tipo de tarjeta...Eliminar filtro actual...Eliminar etiquetas...Eliminar formato (Ctrl+R)Eliminar este tipo de tarjeta supondría la eliminación de una o más notas. Por favor, crea primero un nuevo tipo de tarjeta.RenombrarCambiar nombre de tipo de tarjeta...Renombrar mazo¿Reemplazar tu colección con una copia de seguridad anterior?Reproducir sonidoReproducir mi propia vozReposiciónReposicionar tipo de tarjeta...Reposicionar tarjetas nuevasReposicionar...Se requiere una o más de estas etiquetas:ReprogramarReprogramarReprogramar tarjetas en función de mis respuestas en este mazoContinuar ahoraDirección inversa de texto (RTL)Revertir a respaldoRevertido a estado previo a '%s'.RepasarNúmero de repasosTiempo de repasoRepasar por adelantadoRepasar por adelantadoRepasar tarjetas olvidadas en los últimosRepasar tarjetas olvidadasPorcentaje de repasos correctos a lo largo del día.RepasosRevisiones vencidas por encima del límite de hoy: %sDerechaGuardarGuardar filtro actual...Guardar PDFGuardado.Ámbito: %sBuscarBuscar en elementos de formato (lento)SeleccionarSeleccionar &todoSeleccionar ¬asSelecciona las etiquetas a excluir:El archivo seleccionado no estaba en formato UTF-8. Por favor, lee la sección "importación" del manual.Estudio selectivoPunto y comaServidor no encontrado. O bien tu conexión está caída, o bien tu antivirus/firewall está impidiendo que Anki se conecte a Internet.¿Asignar este grupo de opciones a todos los mazos debajo de %s?Asignar a todos los submazosEstablecer color de primer plano (F7)La tecla Mayúscula estaba presionada. Saltando sincronización automática y carga de complementos.Cambiar posición de las tarjetas existentesTecla de atajo: %sTecla de acceso directo: flecha izquierdaTecla de acceso directo: flacha derechaAtajo: %sMostrar %sMostrar respuestaMostrar ambos ladosMostrar duplicadosMostrar temporizador de respuestaMostrar las tarjetas como blancas sobre negro (modo nocturno)Mostrar tarjetas nuevas después de los repasosMostrar tarjetas nuevas antes de los repasosMostrar tarjetas nuevas en el orden añadidoMostrar tarjetas nuevas aleatoriamenteMostrar intervalo de próximo repaso encima de los botones de respuestaMostrar el número de tarjetas restantes durante el repasoBarra lateralTamaño:Algunas tarjetas relacionadas o enterradas fueron aplazadas a una sesión posterior.Algunos ajustes tendrán efecto después de reiniciar Anki.Algunas actualizaciones fueron ignoradas porque el tipo de nota ha cambiado:Campo ordenadoOrdenar según este campo en el exploradorNo es posible cambiar el orden en esta columna. Por favor, elige otra.Sonido y vídeo en las tarjetas no funcionarán hasta que mpv o mplayer sean instaladosEspacioPosición de comienzo:Facilidad inicialEstadísticasEstadísticasPaso:Pasos (en minutos)Los pasos deben ser números.Deteniendo...Estudiado %(a)s %(b)s hoy.Estudiadas hoyEstudiarEstudiar mazoEstudiar mazo...Comenzar a estudiarEstudiar según estado o etiqueta de la tarjetaEstiloEstilo (compartido entre las tarjetas)Subíndice (Ctrl+=)XML exportado de Supermemo (*.xml)Superíndice (Ctrl++)SuspenderSuspender tarjetaSuspender notaSuspendidasSuspendida+OcultadaSincronizarSincronizar también los sonidos y las imágenesLa sincronización ha fallado: %sLa sincronización ha fallado; no hay conexión a Internet.La sincronización requiere que el reloj de tu ordenador esté correctamente ajustado. Por favor, ajusta el reloj e inténtalo de nuevo.Sincronizando...TabulaciónEtiquetar duplicadasSolo etiquetarEtiquetasMazo de destino (Ctrl+D)Campo de destino:TextoTexto separado por tabulaciones o punto y coma (*)Este mazo ya existeEse nombre de campo ya está siendo usado.Ese nombre ya está siendo usado.La conexión a AnkiWeb ha expirado. Por favor, comprueba tu conexión de red e inténtalo de nuevo.La configuración por defecto no puede ser eliminada.El mazo por defecto no puede ser eliminado.El desglose de las tarjetas en tu(s) mazo(s).La descarga estaba corrupta. Por favor, inténtalo de nuevo.El primer campo está vacío.El primer campo del tipo de nota debe ser asignado a algo.No se puede usar el siguiente carácter: %sEl anverso de esta tarjeta está vacío. Por favor, ejecuta Herramientas>Tarjetas vacías.La entrada que has realizado produciría una pregunta vacía en todas las tarjetas.El número de tarjetas nuevas que has añadido.El número de preguntas que has respondido.El número de repasos programados en el futuro.El número de veces que has presionado cada botón.Los permisos en la carpeta de archivos temporales de tu sistema son incorrectos y Anki no puede corregirlos automáticamente. Por favor, busca "temp folder" (en inglés) en el manual de Anki para más información.El archivo proporcionado no es un archivo .apkg valido.La búsqueda solicitada no devolvió ninguna tarjeta. ¿Deseas revisarla?El cambio solicitado hará necesaria una subida completa de la base de datos la próxima vez que sincronices tu colección. Si tienes repasos u otros cambios pendientes en otro dispositivo que no hayan sido sincronizados aún, se perderán. ¿Deseas continuar?El tiempo que has tardado en responder a las preguntas.Hay más tarjetas nuevas disponibles, pero has alcanzado el límite diario. Puedes aumentar el límite en las opciones, pero ten en cuenta que cuantas más tarjetas nuevas introduzcas, más aumentará tu carga de trabajo a corto plazo.Debe de haber al menos un perfil.No se puede ordenar por esta columna, pero si que puedes buscar individualmente por tipo de tarjeta, como por ejemplo "tarjeta:1".Esta columna no puede ser ordenada, pero puedes buscar mazos específicos haciendo clic en uno en la izquierda.Este archivo no parece ser un archivo .apkg válido. Si estás obteniendo este error con un archivo descargado desde AnkiWeb, es posible que tu descarga haya fallado. Por favor, vuelve a intentarlo, y si el problema continua, vuelve a intentarlo con otro navegador.Este archivo ya existe. ¿Seguro que deseas sobrescribirlo?Esta carpeta almacena todos tus datos de Anki en una ubicación única para facilitar las copias de seguridad. Para indicar a Anki que use una ubicación diferente, por favor, consulta: %s Este es un mazo especial para estudiar fuera del horario normal.Este es un {{c1::ejemplo}} de hueco.Se creará %d tarjeta. ¿Seguir?Se crearán %d tarjetas. ¿Seguir?Esto eliminará tu colección actual y la reemplazará con los datos del archivo que estás importando. ¿Estás seguro?TiempoLímite de sesión de estudioA repasarpara explorar extensiones, por favor haz clic en el botón más abajo.
Cuando hayas encontrado una extensión que te interese, pega el código aquí abajo. Puedes pegar varios códigos, separados por un espacio.Para crear huecos en una nota existente, primero debes cambiarla a un tipo de nota de huecos, mediante Editar>Cambiar tipo de nota.Para verlas ahora, pulsa el botón Desenterrar abajo.Para estudiar fuera del horario normal, haz clic en el botón inferior de Estudio personalizadoHoyHas alcanzado el límite actual de repasos, pero todavía hay tarjetas a la espera de ser repasadas. Para una memorización óptima, considera aumentar el límite diario en las opciones.Commuta HabilitarCommuta MarcarCommuta SuspenderTotalTiempo totalTarjetas totalesNotas totalesTratar inserción como expresión regularTipoEscribir respuesta: campo desconocido %sNo es posible importar desde un archivo de sólo lectura.No se ha podido mover el archivo existente al basurero, por favor intente reiniciar su computador.DesenterrarSubrayar texto (Ctrl+U)DeshacerDeshacer %sCódigo de respuesta inesperada: %sFormato de archivo desconocido.No vistasActualizar las tarjetas existentes cuando el primer campo coincida¿Actualizar los siguientes complementos?Actualizadas %(a)d de %(b)d notas existentes.Subir a AnkiWebSubiendo a AnkiWeb...Faltan en la carpeta multimedia, pero se usan en tarjetas:Usuario 1Versión %sVisitar página del complementoVer archivosEsperando a que finalices la edición.Cuidado, los huecos no funcionarán a menos que cambies el tipo de nota a Huecos.¿Qué deseas desenterrar?Al añadir, hacerlo en el mazo actual de manera predeterminadaColección entera¿Desea descargarlo ahora?Escrito por Damien Elmes, con parches, traducciones, pruebas y diseño por:

%(cont)sTienes un tipo de nota de huecos pero no has insertado ningún hueco. ¿Quieres continuar?Tienes muchos mazos. Por favor, lee %(a)s. %(b)sAún no has grabado tu voz.Tiene que haber al menos una columna.JóvenesJóvenes+AprendiendoTus cambios afectarán a varios mazos. Si deseas cambiar únicamente el mazo actual, añade primero un nuevo grupo de opciones.Su archivo de colección parece estar dañado. Esto puede suceder cuando el archivo se copia o se mueve mientras Anki está abierto o cuando la colección se almacena en una red o unidad en la nube. Si los problemas persisten después de reiniciar su ordenador, abra una copia de seguridad automática desde la pantalla de perfil.Tu colección está en un estado inconsistente. Por favor, ejecuta Herramientas>Comprobar base de datos y sincroniza de nuevo.Tu colección, o uno de tus archivos multimedia, es demasiado grande para ser sincronizada.Tu colección se ha subido correctamente a AnkiWeb. Si utilizas otros dispositivos, sincronízalos ahora y elige descargar la colección que acabas de subir desde este ordenador. Después de esto, los repasos futuros y tarjetas añadidas se combinarán automáticamente.Tus mazos aquí y en AnkiWeb difieren de tal manera que no pueden ser combinados, por lo que es necesario sobrescribir los mazos de un lado con los del otro. Si eliges descargar, Anki descargará la colección desde AnkiWeb, y se perderá cualquier cambio que hayas hecho en tu ordenador desde la última sincronización. Si eliges subir, Anki subirá tu colección a AnkiWeb, y se perderá cualquier cambio que hayas hecho en AnkiWeb o en tus otros dispositivos desde la última sincronización. Después de que todos los dispositivos se hayan sincronizado, los futuros repasos y las tarjetas añadidas podrán ser combinados automáticamente.Su cortafuegos o antivirus previene que Anki cree una conexión consigo mismo. Por favor añada una excepción para Anki[sin baraja]copias de respaldotarjetastarjetas del mazotarjetas seleccionadas porcolecciónddíasmazovida del mazoduplicadasayudaocultarhorashoras pasada la medianocheen %s díaen %s diasen %s horasen %s horasrn %s minutoen %s minutosen %s mesen %s mesesen %s segundoen %s segundosen %s añoen %s añosolvidosmenos de 0,1 tarjetas/minutoasignado a %sasignado a Etiquetasminsminutosmesrepasossegundosestadísticasesta páginawtoda la colección~anki-2.1.0+dfsg~b36/locale/et/000077500000000000000000000000001323611211500157265ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/et/LC_MESSAGES/000077500000000000000000000000001323611211500175135ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/et/LC_MESSAGES/anki.mo000066400000000000000000000255301323611211500207770ustar00rootroot00000000000000  " "'$J$o"3F [iz~   #*00 ant,(- CP b oz X  '2 6@V_g my   R#B([    &( ;IQX_f mz   3 DQ VbgFl 49@ E O[bgow |     76V 8 !' /":]ch|  c*m*,*":M  /ATX\`d hr   % 83 l z            / - $)!N! g!t! !!!!! !T!Q"a"q" v""""" """ ""# #m!###$##8#$ $,$A$U$ k$v$$e%k%z%%%!%%(%)% & &*&1&8&?& F&S&Z&b&v&~&&&&&!&& && &'%'-'@'O'a' e's'y'H}''''' (*(A( Y( d(o(u((((( (( ( ( (()) )!)') ,):)!I)(k)))9))** %*F1* x*$** *&*** *+2+ 6+D+40'iq#fEb<{`QANh1Zgy9 @Y6w:sd kH>)TP/$CK(8"73;MBx?nv\D F] S,2-Vm~ jI!z^%WeRU}_=|J*paLr+G.[tuXl& o5Oc (1 of %d) It has %d card. It has %d cards.%% Correct%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d deck updated.%d decks updated.%d group%d groups%d review%d reviews%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%ss%sy&About...&Cram...&Edit&File&Find&Go&Guide...&Help&Invert Selection&Next Card&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(please select 1 card).../1 month1 year10AM10PM3AM4AM4PM:%d card%d cardsOpen backup folderVisit websiteExport format:Find:Font Size:Font:In:Line Size:Replace With:SynchronisationA big thanks to all the people who have provided suggestions, bug reports and donations.Aborted: %sAbout AnkiAddAdd FieldAdd New Deck (Ctrl+N)Add TagsAdd: %sAddedAdded TodayAgainAll DecksAll FieldsAllow HTML in fieldsAnkiAnki 2.0 DeckAnki is a friendly, intelligent spaced learning system. It's free and open source.AnswerAnswersAre you sure you wish to delete %s?Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedBasicBuryBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCard ListCenterChangeChange %s to:Check the files in the media directoryCloseClose and lose current input?Configure interface language and optionsConnecting...CreatedCtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+ZDeleteDelete TagsDialogE&xitEaseEasyEditEnter tags to add:Enter tags to delete:ExportExport...F1Field %d of file is:Field mappingFieldsFind and Re&place...Find and ReplaceFirst ReviewGoodHTML EditorHardHelpIf you have contributed and are not on this list, please get in touch.Ignore this updateImportImport failed. Import optionsInclude scheduling informationInclude tagsInvalid regular expression.KeepLapsesLeftMap to %sMap to TagsMatureMoreNetworkNothingOpenPassword:PreferencesProcessing...Recording...
Time: %0.1fRescheduleReviewReviewsRightSearchSelect &AllShow AnswerShow new cards before reviewsShow new cards in order addedShow new cards in random orderSome settings will take effect after you restart Anki.Supermemo XML export (*.xml)SuspendSuspendedTagsThis file exists. Are you sure you want to overwrite it?Total TimeTreat input as regular expressionUndo %sVersion %sWould you like to download it now?Youngdaysmapped to %smapped to Tagsminsthis pagewhole collectionProject-Id-Version: ankiqt_ee_EE Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-08-23 04:01+0000 Last-Translator: tonis Language-Team: Estonian <> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: et 1 %d -st Selles on %d kaart. Selles on %d kaarti.%% Õige%.01f kaarti/minutis%d kaart%d kaarti%d kaart kustutatud.%d kaarti kustutatud.%d kaart eksporditud.%d kaarti eksporditud.%d kaart imporditud.%d kaarti imporditud.%d kaardipakk värskendatud.%d kaardipakki värskendatud.%d grupp%d gruppi%d kordus%d kordust%s (koopia)%s päev%s päeva%s tund%s tundi%s minut%s minutit%s minut.%s minutit.%s kuu%s kuud%s sekund%s sekundit%s kustutamiseks:%s aasta%s aastat%sd%sh%sm%ss%syTe&ave...&Tuubi pähe...&Muuda&Fail&Otsi&Mine&Juhend...&AbiMuuda val&ik vastupidiseks&Järgmine kaart&Eelistused...&Eelmine kaart&Ajasta uuesti...&Toeta Ankit...&Tööriistad&Võta tagasi'%(row)s' omasid %(num1)d välja, väljaarvatud %(num2)d(%s õigesti)(lõpp)(palun vali 1 kaart).../1 kuu1 aasta10.0022.0003.0004.0016.00:%d kaardi%d kaartiAva varukoopia kataloogKülasta veebilehteEkspordi formaat:Otsi:Fondi suurus:Font:Mille hulgast:Joone paksus:Asenda sellega:SünkroniseerimineSuur tänu kõigile, kes on edastanud soovitusi, vigadest teada andnud ja annetanud.Katkestatud: %sInfo Anki kohtaLisaLisa väliLisa Uus Kaardipakk (Ctrl+N)Lisa märksõnuLisa: %sLisatudLisatud tänaUuestiKõik KaardipakidKõik väljadLuba väljadel HTMLAnkiAnki 2.0 KaardipakkAnki on sõbralik, intelligentse kordamisajavahega õppimise süsteem. See on tasuta ja avatud lähtekoodiga.VastusVastusedOled kindel, et soovid kustutada %s?Mängi heli automaatseltSünkroniseeri automaatselt profiili avamisel/sulgemiselKeskmineKeskmine aegKeskmine vastuse aegKeskmine kergustaseÕpipäevade keskminePõhimudelPeata kaardi õppimineAnki tuvastab vaikimisi selle märgi,mida kasutatakse väljade vahe nagu näiteks tabulaatori, koma jne. Kui Anki tuvastab selle märgi valesti, saad selle sisestada siin. Kasuta tabulaatori jaoks kombinatsiooni: \tLoobuKaartide loendKeskelMuudaMuuda %s selleks:Kontrolli faile meedia kataloogisSulgeSulge ja kaota praegu sisestatud andmed?Seadista kasutajaliidese keel ja suvandidÜhendan...TekitatudCtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+ZKustutaKustuta märksõnadDialoog&VäljuKergusKergeMuudaSisesta lisatavad märksõnad:Sisesta kustutatavad märksõnad:EksportEkspordi...F1Selle faili %d. väli on:Väljade vastendusVäljad&Otsi ja asenda...Otsi ja asendaEsimene õppimineHeaHTML redaktorRaskeAbiKui sa oled panustanud ja Sind ei ole nimekirjas, palun võta ühendust.Eira seda uuendustImpordiImport ebaõnnestus. Importimise suvandidPane kaasa ajastamiste andmedPane kaasa märksõnadVigane regulaaravaldis.Hoia allesAjavahemikVasakLiida väljadele %sLiida märksõnadegaVanaVeelVõrkmitte midagiAvaSalasõna:EelistusedTöötlen...Lindistan...
Kestvus: %0.1fAjasta uuestiKordaKordamisedParemOtsiMärgi &kõikNäita vastustNäita uusi kaarte enne kordamistNäita uusi kaarte lisamise järjekorrasNäita uusi kaarte suvalises järjekorrasMõned sätted realiseeruvad peale Anki taaskäivitamist.Supermemo XML eksport (*.xml)PeataPeatatudMärksõnadSee fail juba olemas. Kas oled kindel, et soovid selle üle kirjutada?Aeg kokkuKohtle sisendit kui regulaaravaldistVõta tagasi %sVersioon %sKas Sa soovid selle kohe alla laadida?Noorpäevadliidetud väljadele %s-galiidetud siltidegaminsee lehekülgkogu kaardipakistikanki-2.1.0+dfsg~b36/locale/eu/000077500000000000000000000000001323611211500157275ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/eu/LC_MESSAGES/000077500000000000000000000000001323611211500175145ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/eu/LC_MESSAGES/anki.mo000066400000000000000000002015321323611211500207760ustar00rootroot00000000000000,|?2C C CCC"C D "D,D?D8QDDDD"D$D$E&,E"SEvE4E2EEF"F$BF$gF$F FFFFGG'G^L^^^8^5_PM_7___ __``%`,`3`:` A` L` W`b`i`r`y`````` ` ` ` ` ` ` ` ` a a%a,a 3a >aLa_a pa}a aaaaa a a ab/b7b=bRb%Zbb b b b b b b bb,b(#cLcjcFcNcPd>fdPdd]d ]e8ieeeeee eeff f f$f )f 3f @fJf Qf^fdf)sf0fff4f!g?gRghg~ggh-h>h Eh.Oh~hhhh h hhh hh hhi iii(i9iMi]irii i iiNi" j,j@jEj\jbjijk"k'kAk GkUkdklkk kkk kkkk kkkkk.lF0lwll l l4llm m1$mVmfmmm*mm roo oo"o"o p3pHpWpkptp p pp)ppdqqqqqqqqq q rr'r-r<?r|r rrrr rrr rrr s ss s1sEsKs\sds~ss s sss sssss st t#t 2t ?tItXtpttt+tt#t!u2u7u ?u Iu<Tu uu]ua vnv!v vvvv,vv#wkwTxYx hxvxxxx xx x xxxx yy#yAy ^y iyty,y#yVy8;zEtzzz*z0{J{g{,}{{-{+{8|V| _|k|s||#|0| |} }+}4} E}S}X}_}o}v}~}}}}}}}~i)~~ ~ ~~ ~~ ~"~ 1( Ze    -DLRW` gqx Vр( 8B,ŁG Op" ʂ ҂ނ-Ki*'ۃ@6"8Y !?  #.4G ^ jx ~ ą( 0 = JTe j!d %04CLQ ft(y ݇X+Q"}&+Lj0 +>>jF'*(C1l,\IӋ'Ì#׍ea8XC!(eFrՐHM `uj/M^d  "!.PU'sǓܓ.&9K,c U̔$"G"XS{0ϕ$"%H N{Z^֖55kUt ʚԚܚ   )38=CWlsśțЛ؛ ޛ ̝ ؝  !C3w'+מ+!/+Q}@CП#$#H'l)'ܠ" <IYi}С!)?V _ my آ-? R`i8r  ɣ ӣ !%Ǥɤ ̤פޤrg-i/"ǥ%o(Ŧ 0Je`Ƨ7 ͨ?ߨSns3 !٪0BYj ~ * ث )> FSi yI%$+PUf{w]wY6ѱ OH 7A TT_B"b'"̴29H!^!ϵֵ  $()Mwö ʶԶ7<-j,17@H Wc r  θ޸94RJ  Թ'&NWh*|ɺҺ =FY1` /(=5^.;!ɽ #*18? F Q \gnw~ ¾ Ͼ ܾ   *18 AM`p'ǿ %5+ an ,  7/L-|% ?B1Pt0[ Re] E #: X!c    + 03=Bq;%8Qk1  B`fh#k      *3I]o ^.=l!  7,>C Vdlu~ 9GH3]C (J=2CA#&Bi$ :8s"#9 Nou{ QNVl  %< Wax' &CSZ` gu !47V<  (Q3lm&:5+  8Kdx ( ".$,ScAi&'46'?g/*:?:z !B4C%Lrz # - LVs@ 8Ih4y C:X w(7 Uck q {  a\t/5^R'!, 9 JVi|,-*',5T7IA:W,: ( <IR"a   $ *K^ c nz $3~  <)Z$#^ , M"n10&C6>z$'($M6>E'f,<D:$_Fh/ 7 D~QGWpu,;,Kx}3  ;&8b;  0lM+ a/q%%j> ,: *25 <H Wajsx  ' / <I KXj0Zji)  kZ/eT    <G^-81u$%^s_m8,<*w><(Ft5,]yJu`#P #V1"eY;r%bX)g2Y ":!cUi!K,c?I6, 2$ @\L4}7`v$DG?Rr(PC46Ven~;tNsd5 3\m6'E@v= q%]W7k}bf?K+yTQU !"#-lkocQvumWDdo\ ]*Ga+-+r. bRz^sIY~ARC!9&MJ_{2l[>4}SnpZ&>@d .(_w3)L3h|M{**yp{PONH#7I'alO&9%T zB/K:n1X/Si LfCqON "g'FpW|U5=j [:|x9oHS; +x(AzhDx$E B0gt.&h'JVqF QE=[8wf`MX0a~)ABH (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Bold text (Ctrl+B)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedCheck &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?Closing...ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter 2Filter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid configuration: Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemove Card Type...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightSaveSave PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUnderline text (Ctrl+U)UndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightin %s dayin %s dayslapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2018-01-29 10:30+0000 Last-Translator: Adrián Gómez Language-Team: Basque MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: eu (%d-(e)tik 1) (desgaituta) (itzalita) (piztuta) Karta %d du. %d karta ditu.%% Zuzenak%(a)0.1f %(b)s/egun%(a)0.1fs (%(b)s)%(b)d oharretik %(a)d eguneratuta%(b)d oharretik %(a)d eguneratuta%(tot)s %(unit)s%.01f karta minutukoKarta %d%d kartaKarta %d ezabatuta.%d karta ezabatuta.Karta %d esportatuta.%d karta esportatuta.Karta %d inportatuta.%d karta inportatuta.Karta %d ikasita%d karta ikasitaSorta %d eguneratuta.%d sorta eguneratuta.Talde %d%d talde%d euskarri aldaketa kargatzeko%d euskarri aldaketak kargatzeko%d mediako fitxategi deskargatuta%d mediako fitxategi deskargatutaOhar %d%d oharOhar %d erantsita%d ohar erantsita%d nota ezabatuta%d nota ezabatuta%d ohar esportatuta%d ohar esportatutaOhar %d inportatuta.%d ohar inportatuta.%d ohar berdin%d ohar berdinOhar %d eguneratuta%d ohar eguneratutaBerrikuspen %d%d berrikuspen%d hautatuta%d hautatuta%s-ren kopiaEgun %s%s egunOrdu %s%s orduMinutu %s%s minutuMinutu %s.%s minutu.Hilabete %s%s hilabeteSegundo %s%s segundo%s ezabatzeko:Urte %s%s urte%se%so%sm%sh%ss%su&Honi buruz...&Aztertu eta Instalatu...&KartakDatu-basea &Egiaztatu&Buru-belarri ikasi...&Editatu&Esportatu...&Fitxategia&Bilatu&Joan&Gida&Gida...&Laguntza&Inportatu...&Informazioa...&Alderantzikatu hautapena&Hurrengo karta&Oharrak&Ireki gehigarrien karpeta...&Hobespenak...&Aurreko karta&Birprogramatu...&Lagundu Ankiri...Profil aldatu&Tresnak&Desegin'%(row)s' %(num1)d eremu zituzten, %(num2)d espero ziren(%s zuzenak)(Ohar ezabatuta)(bukaera)(hiragazita)(ikasten)(berria)gurasoen muga : %daukeratu karta bat mesedez....anki2 fitxategiak ez daude inportatzeko diseinatuta. Babeskopia batetik leheneratu nahian bazabiltza, begiratu erabiltzaile-eskuliburuaren 'Babeskopia' atalean./0eHilabete 1Urte 110AM10PM3AM4AM4PM504 pasabideko iraunaldi gainezkatuta errore hartuta. Zure antibirusa aldi baterako ezgaitu saiatu zaitez mesedez:karta %d%d kartaIreki babeskopien karpetaBisitatu webgunea%%%(pct)d (%(y)s-(e)tik %(x)s)%Y-%m-%d @ %H:%MBabeskopiak
Anki-k zure bildumaren babeskopia bat sortuko du ixten edo sinkronizatzen den bakoitzean.Esportatzeko formatua:Bilatu:Letra-tipoaren neurria:Letra-tipoa:Hemen:Erantsi:Lerroaren neurria:Ordezkatu honekin:SinkronizazioaSinkronizazioa
Ez dago unean gaituta; klikatu leiho nagusiko sinkronizatu botoia gaitzeko.

Kontua beharrezkoa da

Doako kontu bat eskatzen da zure bilduma sinkronizatuta mantentzeko. Mesedez Izena eman kontu bat lortzeko, ondoren sartu zure xehetasunak azpian.

Anki eguneratuta

Anki %s argitaratu da.

ez unicode testuaEskerrik asko iradokizunak, akatsen txostenak eta dohaintzak egin dituzten guztiei.Karta baten erraztasuna berrikuspen batean "ondo" erantzun arteko hurrengo denbora tartearen luzera da.iragazitako sorta batek ezin ditu azpisortak izatenArazo bat agertu da media sinkronizatzean. Mesedez erabili tresnak > Egiaztu Media eta berriro sinkronizatu arazoa konpontzeko.utzi : %sAnki-ri buruzErantsiErantsi (lasterbidea: ktrl+enter)Erantsi karta mota...Erantsi eremuaErantsi euskarriaErantsi bilduma berria (Ktrl+N)Erantsi ohar motaErantsi alderantzizkoaErantsi etiketakEtiketak erantsi...Erantsi honi:Gehigarria ez dauka konfigurazioGehigarria es da AnkiWeb-tik deskargatuta.GehigarriakErantsi...Erantsi: %sErantsitaGaur erantsitagehitu bikoiztua lehengo eremuarekin : %sBerriroGaur berriroBerriro zenbaketa: %sBilduma guztiakEremu guztiakkarta guztiak ausazko ordenanProfil honen karta, ohar eta euskarri guztiak ezabatuko dira. Ziur zaude?Onartu HTML eremuetanAkats bat gertatu zen datu-basean sartzean. Kari posibleak dira : - Antibirus , suhebaki, segurtasun kopiako programa nahas dezake Anki-rekin. mota horreko softwarea desaktibatzen saiatu eta ea honek arazoa kenduko duen egiaztatu. - Zure disko gogorra beteta dago. - Documents/Anki direktorioa sare-unitate batean dago - Documents/Anki direktorioan dauden fitxategiak irakurketarako soilik dira - Zure disko gogorrak akatsak dauzka Tresnak> Egiaztatu Datu-basea exekutatzea idea ona izango litzateke zure bilduma ustel ez dela egiaztatzeko errore bat gertatu zen %s ikeritzeanAnkiAnki 2.0 BildumaAnki Bilduma paketeaZure profilaren izena alda ez dezake Anki-k, diskoan profil direktorio alda ez dezakelako. Mesedez, egiaztatu Documents/Anki-n idazteko baimendua daukazula, eta beste programek zure profile karpetak erabiltzen ez dituztela. Berriz saiatu beranduagoAnkik ezin izan du aurkitu galdera eta erantzunaren arteko lerroa. Mesedez doitu txantiloia eskuz galdera eta erantzuna trukatzeko.Anki ikasketa tartekatuko sistema adimendun eta lagunkoia da. Askea da eta iturburu irekikoa.Anki AGPL3 lizentziatuta dago. Mesedez ikusi iturburu-distribuzioan lizenzako fitxategia informazio gehiago lortzekoAnkiWeb ID edo pasahitz okerra; mesedez saiatu berriz.AnkiWeb ID:AnkiWeb-ek akats bat aurkitu du. Mesedez saiatu berriz minutu batzuk barru, eta arazoa mantentzen bada, mesedez bidali akats-txosten bat.AnkiWeb lanpetuegi dago une honetan. Mesedez saiatu berriz minutu batzuk barru.Anki Web mantentzen ari da. minutu gutxi barruan saiatu berriro, mesedezErantzunaErantzunen botoiakErantzunakBirusen aurkakoa edo suhesi softwarea Anki Internetera konektatzea eragozten ari da.Ezertara mapatu gabeko kartak ezabatu egingo dira. Ohar bati ez bazaizkio kartak gelditzen, galdu egingo da. Ziur zaude jarraitu nahi duzula?Bitan agertu da fitxategian: %sZiur zaude %s ezabatu nahi duzula?behintzat karta mota bat beharrezkoa daGutxienez urrats bat behar da.Erantsi argazkiak/audio/bideo (F3)Automatikoki audioa joAutomatikoki sinkronizatu profila ireki/ixterakoanBatez bestekoaBatez besteko denboraErantzuteko batez besteko denboraErraztasun batezbestekoaikasitako egunaren batez bestekoabatezbesteko tarteaAtzeraAtzera aurrebistaAtzera txantiloiaBabeskpopia egiten...BabeskopiakOinarrizkoaOinarrizko (eta alderantzizko karta)Oinarrizko( aukerako alderantzizko karta)Letra lodi (Ktrl+B)ArakatuNabigatzailearen ItxuraArakatzailearen aukerakEraikilurperatuKarta lurperatuOharra lurperatuhurrengo egun arte harremanak dituzten kartak lurperatuhurrengo egun arte harremanak dituzten ikuskatzeak lurperatuLehenetsiz, Ankik eremuen artean karakterea antzemango du : Tabulazio bat, kakotx bat eta abar. Anki karakterea zuzenki detektatzen ez badu, han sar dezakezu. Erabili \t tabulazio irudikatzeko.UtziKarta%d karta1 kartabigarren kartaKartaren IDKarta zerrendaKarta egoeraKarta motaKarta mota:Karta motak%s-(r)entzako karta motaklurperatuta kartaKarta zintzilikKarta izain bat zen.KartakKartak sorta iragazitako batera ezin mugi daitezke eskuzKartak in testu xumeazuk berrikusi eta gero kartak bere jatorrizko sortetara automatikoki itzuliko diraKartak...ErdianAldatuAldatu %s :Aldatu karta-sortaAldatu ohar-motaAldatu ohar-mota (Ktrl+N)Aldatu ohar-mota...Kolore aldatu (F8)Aldatu karta-sorta nota-motaren araberaAldatutaEgiaztatu &MediaEguneraketak bilatuEgiaztatu edukien direktorioko fitxategiakMultimedia egiaztuEgiaztatzen...AukeratuAukeratu karta-sortaAukeratu nota-motaEtiketak AukeratuKlonatu: %sIrtenIrten eta uneko sarrera galdu?Ixten...hutsuneak betetzeaKodea:Bilduma oker dago. Mezedez jo ezazu eskuliburura.Bi puntuKomaKonfigKonfigurazioaKonfiguratu interfazearen hizkuntza eta aukerakZorionak! sorta hau amaitu duzu oraindikKonektatzen...Konexio epea gaindituta dago : zure internet konexioak zenbat arazo dauzka edo oso fixtategi handi bat daukazu zure euskarri direktorioanJarraituKopiatuerantzun zuzenak karta mardulentzat : %(a)d/%(b)d (%(c).1f%%)zuzen : %(pct)0.2f%%
(%(good)d of %(tot)d)Ezin izan da AnkiWeb-era konektatu. Mesedez egiaztatu zure sareko konexioa eta saiatu berriro.Ezin izan da audioa grabatu. lame eta sox instalatu dituzu?Ezin izan da fitxategia gorde: %sgogor ikasisorta sortuiragazitako sorta sortuSortutaKtrl+0Ktrl+1Ktrl+2Ktrl+3Ktrl+4Ktrl+Alt+AKtrl+Alt+FKtrl+Alt+ZKtrl+DKtrl+DelKtrl+EKtrl+FKtrl+JKtrl+KKtrl+NKtrl+PKtrl+QKtrl+Shift+AKtrl+Shift+DKtrl+Shift+FKtrl+Shift+IKtrl+Shift+LKtrl+Shift+MKtrl-Shift-NKtrl+Shift+PCtrl+Shift+RKtrl+Shift+SKtrl+WKtrl+ZMetatutaMetatuta %sErantzun MetatutakKarta MetatutakUneko karta-sortaUneko ohar-motaIkasketa itxuratutaIkasketa itxuratutako SaioEbakiDatu-basea berreraiki eta optimizatuta.DataEgun ikasitakoakBaimena kenduArazketa kontsolaSortaprofila ireki bezain laster sorta inportuta izango daKarta-sortakTarte beherakorrakLehenetsiaberrikusi arte epeak berriro erakutsiak diraEzabatuEzabatu kartakEzabatu karta-sortahutsa kenduEzabatu oharraEzabatu oharrakEzabatu etiketakEzabatu erabili gabeakzutabea kendu %s-tik'%(a)s'-ren kartako mota kendu, eta bere %(b)s?Ezabatu ohar-mota hau eta bere karta guztiak?Erabili gabeko ohar-mota hau ezabatu?ez dena erabiltzen media kendu ?oharrik gabeko %d karta kendutaoharrik gabeko %d karta kendutaeremurik gabeko %d karta kendutaeremurik gabeko %d karta kendutakohar motarrik gabeko %d karta ezabatutaohar motarrik gabeko %d karta ezabatutakkartarik gabe %d oharrakartarik gabe %d oharrakeremu zenbaketa okerrarekin %d ohar ezabatutaeremu zenbaketa okerrarekin %d ohar ezabatutaEzabatuta.Sorta zerrendatik sorta hau kentzeak geratutako karta guztiak bere jatorrizko sortetara mugituko dituDeskribapenaIkasi pantailan erakusteko deskribapena (bakarrik sorta azkenerako ):ElkarrizketaAnkiWebetik deskargatuAnkiWebetik deskargatzen ....Zor izandaBakarrik zor izanda dauden kartakBiharko zor izandaI&rtenErraztasunErrazaErraztasunako hobariaErraztasunako tarteEditatuEditatu "%s"Editatu azkenaHTML editatuEditatuaLetra-Tipoa editatzenHutsKarta hutsakKarta hutsetako zenbakiak : %(c)s Eremuak : %(f)s Karta huts aurkitutakoak. Mesedez, exekutatu Tresnak> Karta HutsakHustu lehenengo eremua: %sBukatunon %s karta berriak jarriko duen sorta sartu edo huts utzikarta berriaren lekua sartu (1.. %s):Etiketak sartu eranstekoSartu ezabatzeko etiketakBehera kargatzeko akatsa: %sAbiarazteko akatsa: %sAkats bat gertatu zen konexio segur bat jarririk.Errorea %s exekutatzean.Errorea %s martxan jartzeanEsportatuEsportatu...euskarri fitxategi esportatua %d%d euskarri fitxategi esportatuakEstraFF1filtxategiko %d eremua da :Eremutako korrespondentziaEremu izenaEremua:Eremuak%s-ko eremuak%s-(e)k banatzen dituen eremuakEremuak...IragaziaIragazki 2Iragazki...Iragazkia:IragaziaSorta iragazitakoa %dAurkitu bizkoitutakBilatu bikoiztuakAurkitu eta ordeztuBilatu eta ordeztuBukatuLehengo kartaLehen berrikuspenabat datorren lehen eremua : %sEzaugarri baliogabe dauzkan %d karta finkatutaEzaugarri baliogabe dauzkan %d karta finkatutakAnkiDroid sorta ordezteko zorria finkatuta da.ohar mota finkatuta : %salderantzikatuJadanik direktorioa existitzen daLetra-tipoa:OinaSegurtasunagatik, '%s' kartetan sartzea debekatuta dago. Alabaina, erabil dezakezu beste pakete batean kommandoa sartzerik eta gero LateX goiburukoan pakete hori inportaŧzea beharrean.IragarpenaFormaFound %(a)s across %(b)s%(b)s -en zehar %(a)s aurkitutaAurreaAurreko aurreikusteaAurreko txantxiloiaOrokorrafitxategi sortua : %s%s-(e)an sortutapartekatuta lortuOndogainditzeko tarteaHTML editoreaGogorraGoiburuaLaguntzaerraztasun handienaHistoriaDirektorio Pertsonalaordu-zatiketaOrduak30 berrikuspen baino gutxiagoko orduak ez dira erakusten.parte hartu baduzu eta zerrenda honetan ez bazaude, berria eman mesedezegunero ikasi baduzuerantzun denbora handiena bazter uzti baino lehen :Ezikusi maius./minus.Ezikusi egin eremuaridagoeneko existitzen den lehengo eremu dauzkaten kartak bazter uztiEzikusi egin eguneratze honiInportatuInportatu fitxategialehen eremu berea daukan ohar existitua bat dagoen arren, inportatzen da ?Inportatzea huts eginda inportatzea huts eginda. Arazketako informazioa : Inportatzeko aukerakinportatzea osatutaeuskarri direktorioan badago baina ez dago kartarik hori erabiltzeaGailu batetik beste batera mugitu duzun bilduma ondo dabilela egiaztatzeko, Anki-k zure ordenagiluko barne-erlojua konpontuta dagoela behar du. Barne-erlojua oker ibil daiteke, nahiz eta zure sistemak tokiko denbora zuzena erakusten duen. Mesedez, denborako kudeatzailera joan eta hori zehaztu : - AM/PM - erlojuaren joera - Egun, hilabete eta urte - ordu eremua - Udako ordutegia kendura denbora zuzenera : %sSartu euskarriaSartu antolaketako informazioaSartu etiketakGaurko karta berrietan muga handituGaurko karta berri mugako gehikuntza :gaurko kartako muga handituGaurko berrikusi mugako gehikuntza :tarteak handitikHedadura instalatuInterfazeko hizkuntzaDenbora-tarteatarte aldatzaileTarteakKode baliogabea.Baliogabe konfigurazioa: Fitxategia baliogabea. Mesedez, babeskopiatik lehengoratu.kartan ezaugarri baliogabe bat dago. Mesedez erabili Tresnak> Egiaztatu Datu-basea eta arazoak agertzen bada berriro, Anki webgunean galdetuAdierazpen erregularra baliogabea.zintzilikatuta zegoenEtzan letra (Ktrl+I)Krtl+Shift+T etiketetara joatekoGordeLaTeXLaTeX ekuazioaLatex Math inguruneaHutsegiteakKarta azkenaAzken berrikuspenalehengoan gehituta azkenaIkasimuga arte ikasiIkasitak : %(a)s, Berrikusitak : %(b)s , Berrikasitak : %(c)s, Iragazitak : %(d)sIkastenNeketsuko tratamenduaNeketsua izateko atariaEzkerraMugatu hona:Kargatzen...tarte handienabeitu eremuan :erraztasuna txikienaKudeatuohar motakoak kudeatu...lotu %s-(r)ekinEtiketeekin kidetuhelduadenbora-tarte handienaGenieneko berrikuspen/egunEuskarriaDenbora-tarte txikienaMinutuNahastu karta berriak eta berrikuspenakMnemosyne 2.0 karta-sorta (*.db)Gehiagozailenak (hutsegite zenbatzen)Txartelak lekuz aldatusortara kartak mugitu :&OharraIzena existitzen da jadanik.Sortarako izenaIzena:SareaBerriaKarta berriakSoilik karta berriakkarta berri egungoBilduma berriaren izena:Bitarte berriaIzen berria:Ohar mota berria:aukeren taldeko izen berria :leku berria (1..%d):noiz hasi da hurrengo eguna?oraindik ez dira karta behartutakeman duzun irizpidearekin bat datorren kartarik ez dagoez dago karta hutsarikGaur ikasitako kartarik ez dagoez dira fitxategi erabilezinak edo faltatzen direnak aurkituOharraohar identifikadoreaOhar-motaohar-motakoharra eta bere %d karta ezabatuta diraoharra eta bere %d kartak ezabatutak diraOhar luperatutaOhar zintzilikatutaOharra : Euskarri ez du babeskopiarik. Mesedez, zure Anki direktorioko aldizkako babeskopia sortu badaezpadaOharra : istoriko parte bat falta da. Informazio gehiago lortzeko, nabigatzaileko dokumentazio ikusi mesedezOharrak testu arrunteanoharrek eredu bat behinztat behar duteohar etiketatuakEzer ezOngizaharrenak lehenik ikusidatorren sinkronizatzean, norabide bateko aldaketak ezarriOhar bat edo gehiago ez dago inportatuta, kartarik sortzen ez duelako. Hau gerta daiteke eremu hutsik batzuk dauzkazunean edo fitxategia betetzen eremuak oker lotu dituzuneanbakarrik karta berriak berriz koka daitezkeBezero bakar batek Ankiweb-i konekta diezaoke aldi berean. Aurreko sinkronizatzea huts egin baldin badu, zenbat minutu denbora berriro saiatu mesedez.IrekiBabeskopia ireki...Optimizatzenautazko mugaAukerak%s-(r)en aukerakaukeretako profileaAukerak...Ordenaoraintsu ikusitakoak lehenikepemuga hurrenkeraatzealdeko eredu ordeztuletra tipoa ordeztuaurkiko eredua ordeztuPasahitzaItsatsiPNG legez papergainekoko irudiak erantsiPauker 1.8 ikastaroa (*.pau.gz)EhunekoaPeriodoa : %skarta berri ilarako bukaeran ipiniErrepasatzea itxaroten jarri, tarte horrekin :Mesedez, erantsi beste ohar mota bat lehenikMesedez, mikrofon bat konektatu eta beste programek ez dutela audio gailua erabiltzen egiazta ezazuMesedez, ohar hau editatu eta hustuneak betetzea egin ezazu. (%s)mesedez profil bat irekita dagoela eta anki ez dagoela lanpetuta segurta ezazu, eta gero berriro entseatumesedez PyAudio installatuMesedez, lehenik profil bat ireki ezazuMesedez direktorio %s ezaba ezazu eta berriro saiatuMesedez, berriabazi Anki hizkuntzako aldaketa osatzekoMesedez Tresnak> Karta Hutsak exekutatuMesedez, sorta bat aukera ezazuMesedez, mota bakar bateko kartak aukera itzazuMesedez zerbait aukera ezazuMesedez, azken Anki bertsioa egunera ezazuMesedez, Fitxategi>Inportatu menuz fitxategi hau inportatuAnkiWeb bisita bat eman, zure sorta gaurkotu eta berriro saiatuKokapenaHobespenakAurrebistaKarta aukeratutak (%s) aurreikusiKarta berriak aurreikusikartak ezezagunak aurreikusiEuskarri fixtategi prozesatua %dEuskarri fixtategi prozesatuak %dProzesatzen...ProfilakProxy autentifikazioa beharrezkoa da.GalderaIlarako bukaera : %dIlarako hasiera : %dIrtenAusazkoaausazko hurrenkeraebaluazioaBerreraikiBere buruari erregistratuAudio grabatu (F5)Erregistratzen...
Denbora: %0.1fepemuga gainditutari erlatiboaBerrikasiazken sarrera gorde eranstenKarta mota ezabatu...Formatu ezabatu (Ktrl+R)Karta hau ezabatuak ohar bat edo gehiago ezabatzea eragingo lukeBerrizendatuSorta berrizendatuGrabaketa berriro jarriErregistrazioa berriro jarriBerreposizionatuKarta berriak berreposizionatuBerreposizionatuEtiketaren hauetako bat edo gehiago beharrezkoa da :AtzeratutaBerreplanifikatuSorta honetan egindakoak erantzunen arabera kartak berreposizionatuorain jarraituIrakurtzeko noranzko alderantzizkoa (eskuinetik ezkerrera)aurreko egoerara '%s' itzulitaBerrikusiBerrikuspen kopuruaBerrikuspen denboraBerrikuspena aurreratuBerrikuspen aurrerakada :Azken aldian ahaztutako kartak berrikusiKarta ahaztutak berrikusieguneko orduaren arabera ongi egindako berrikuspen tasaBerrikuspenakEskuinaGordeGorde PDFGordetutahelmen : %sBilatuformatuaz bilatzen (astitsu)HautatuH&autatu dena&Oharrak Aukeratubaztertzeko etiketak hautatuFitxategi aukeratuta ez dago UTF-8 formatuan. Mesedez, gidaliburuaren inportatu-atala ikus ezazu.Hautatzeko errepasatzeaPuntu eta komaZerbitzari ez dago aurkituta. Zure konexioa ez dabil edo antibirus/suhesi programa batek Anki interneti konektatzen trabatzen du.%s azpian dauden sorta guztiei aukera multzoa ?Azpisorta guztietarako jarriShift Tekla sakatuta gelditu da. Sinkronizatze automatikoa eta gehigarriak kargatzea baztertu.existitzen diren karten kokapena aldatuTekla bizkor: %sZuzeneko azipen tekla: Ezker geziZuzeneko azipen tekla: Eskuin gezi edo EnterLaster-tekla: %sErakutsi %sErantzuna aurkeztuErakutsi bi aldeakbizkoitutak erakutsikronometroa erakutsiErakutsi karta berriak berrikuspenen ondorenErakutsi karta berriak berrikuspenen aurretikErakutsi karta berriak gehitutako ordeneanErakutsi karta berriak ausazko ordeneanbotoiaren gainean hurrengo berrikuspen eguna erakutsiBerrikuspen honetan falta diren karten kopurua erakutsiNeurria:karta lotuta edo lurperatuta batzuk beste ekitaldi bat arte gibelatu diraDoikuntza batzuk Anki berrabiarazi ondoren baliozkoak izango diraEguneratze batzuk baztertuak ziren ohar mota aldatu baita.Eremuaren arabera sailkatuNabigatzailean eremu horren arabera sailkatuZutabe honetan ordena ez dezake. Mesedez beste bat aukera.EspazioaAbiapuntuHasteko erraztasunaEstatistikakUrratsa:Urratsak (min)Urratask zenbakiak izan behar duteGelditzen...Gaur ikasitakoakIkasiSorta ikasiIkasi sorta...Orain ikasiKartaz edo etiketaz IkasiEstiloaEstiloa (karten artean partekartuta)Azpiindize (Ktrl+=)Supermemotik datorren XML(*.xml)Goi-idize (Ktrl++)EtenKarta etenOharra etenEtendaEtenda + lurperatutaSinkronizatuSoinuak eta irudiak ere sinkronizatuSinkronizatzea huts eginda: %sSinkronizatzea huts eginda, deskonetatuta baitzaudeZure ordenagailuaren erlojua ongi konponduta egon behar da sinkronizatzeko. Mesedez, erlojua konpon ezazu eta berriz entseatu.Sinkronizatzen...TabulazioaBizkoitutak etiketatuEtiketatu (*)EtiketakJomuga izanda sorta(Ktrl+D)Jomuga izanda eremua:TestuaTabulazioaz edo puntu-komaz banandutako testu fitxategia (*)Karta-sorta hori existitzen da dagoeneko.Eremu hau dagoeneko erabilituta dagoIzen hau dagoeneko erabilatuta dagoAnkiweb-ekin konexioa denbora mugara heldu da. Mesedez zure sarea miatu eta berriz saia zaitezItxura lehentsia ezin da ezabatuSorta lehentsia ezin da ezabatu.Sortearen arabera kartak banaketaDeskargatzea usteldua da. Berriro saiatu mesedez.Lehengo eremua hutsik dagoOhar motako lehenengo eremua ezin da hutsik egonEz da posible %s karakterea erabiltzeaKartako aurkia hutsik dago.Mesedez, exekutatu Tresnak> Karta HutsakZuk emandako sarrerak karta guztitan galdera bat jarriko luke.gehitu dituzun karta berrien kopuruaErantzundako galdera kopurua.Geroan zor izandako berrikuspen kopuruabotoi bakoitz sakatu duzuen aldi-kopuruaSistemaren behin-behineko direktorioaren baimenak okerrak dira, eta Anki ezin ditu automatikoki konpontzen. Mesedez, bila ezazu 'temp folder' Ankiren gidaliburuan informazio gehiago lortzeko.Emandako fixtategia ez da .apkg fitxategi baliozko batez dago bilaketa horrekin datorren kartarik. Aldatu nahi duzu?Eskatutako aldaketa datu-baseko kargatze osoa beharko du hurrengo aldian zure bilduma sinkronizatzeko. Berrikuspenak edo beste gailu batean itxoiten ari diren aldaketa batzuk baldin badituzu, eta ez dira dagoeneko sinkronizatuak, galduta egongo dira. Jarrai ?Galderei erantzuneko denboraKarta berri gehiagoa erabilgarria da, baina eguneroko muga orain heldu da. Aukeretan muga handi dezakezu, baina mesedez hau gogoratu : zenbat eta karta berri gehiago sartzen duzu, orduan eta epe motza duen berrikuspena gehiago kargatua izango da.Profila bat existitu behar du gutxienezZutabe hau ez daiteke ordena, baina ezkerrean dagoen batean klik egiten sorta bereziak bila ditzakezu.Dirudinez, fitxategia hau ez da .apkg fitxategi baliozko bat. Ankiwebtik deskargatutako fixtategi batetik lortzen baldin baduzu akats hau, agian zure deskargatzeak huts egin du. Mesedez, berriro entseatu, eta arazoak baldin badirau, beste nabigatzaile batekin berriz saia zaitez.Fitxategia existitzen da. Ziur zaude gainidatzi nahi duzula?Direktorio honek leku bakar batean Ankiren datu guztiak gordetzen ditu, babes-kopiak errazteko. Beste toki bat erabiltzeko Anki-ri esateko, mesedez ikusi : %s Hau sorta berezi bat da ohizko progamatik kanpoan ikastekoHau da {{c1::lagina}} ezabatzeaHau %d karta sortuko du. Jarraitu?Hau %d kartak sortuko du. Jarraitu?Hark zure bilduma ezabatuko du eta zuk inportatzen duzun fitxategi datuekin ordezkatuko du. Ziur zaude ?DenboraDenbora mugaBerrikustekoHustuneak betetzea existitzen den ohar batean egiteko, lehenik bere tipo aldatu behar duzu, Editatu>Aldatu ohar-mota-en bidez.Oraintxe bertan haiek ikusteko, Lurpetik jalgi botoian klik egin beheanOhiko programatik kanpoan ikasteko, Ikasketa itxuratuta botoian klik egin ezazu azpian.GaurGaurko berrikuspen muga helduta da, baina oraindik karta batzuk berrikustekozain daude. Memorizazioa hobetzeko, aukeretan eguneroko muga handitzerik ez ahaztuGuztiraDenbora guztiraKartak guztiraOharrak guztiraSarrera adierazpen erregular batentzat hartuMotaEremu ezezagunai : %sIrakurketa soilerako fitxategitik ezin da inportatuLurpetik jalgiAzpimarratu (Ktrl+U)Desegin%s deseginFitxategi-formatu ezezaguna.Ikusi gabeLehengo eremu bat datorrenean existitzen den ohar eguneratu%(b)d-tik %(a)d existitzen den oharrak eguneratutak diraKargatu AnkiWeb-eraAnkiWeb-era kargatzen...Euskarri direktorian falta den arren kartak erabilitakoa da1 erabiltzailea%s bertsioaArtxiboak ikusieditatzeari itxoin bukatzekoKontuz, zuloekin testua ez baldin baduzu bihurrarazten karta mota, zuloekin testua ez da ongi funtzionatukogehitzen denean, sorta azkena lehenetsia daBilduma osoaOrain deskargatu nahi duzu?Bete hutsuneak ariketa ohar bat izan duzu baina ez duzu bete hutsuneak ariketarik egin. Aurrera ?sorta asko dauzkazu. Mesedez ikusi %(a)s. %(b)sEz duzu zure ahotsa grabatu oraindik.Gutxienez zutabe bat izan behar duzu.GazteBerriakzure aldaketeek hainbat sorta eragingo dituzte.Uneko sorta aldatu nahi baduzu, lehenbizi aukerako talde berri bat gehitu ezazu mesedezzure bilduma ez da egoera trinkoa. Mesedez exekutatu Tresnak>Egiaztatu Datu-basea eta Sinkronizatu berrirozure bilduma edo media fitxategi bat handiegia sinkronizatzekoZure bilduma ondo kargatu zen AnkiWeb-en beste gailu erabiltzen baldin baduzu, mesedez orain sinkronizatu eta ordenagailu horretik kargatu duzun sorta deskargatu. hori egin eta gero, hurrengo berrikusketak eta karta gehitutakoak automatikoki fusionatutak izango dira.Halako moduz hemengo sortak eta Ankikoak desberdintzen dute, non ez daitezke fusiona batera ; Orduan, bestetik datozenak baten sorteek ordezkatzen dituztela beharrezkoa da. Deskargartzea aukeratzen baldin baduzu, Ankik Ankiwebetik bilduma deskargatuko du eta zuk ordenagailuan egindako aldaketa guztiak sinkronizatze azkenetik galduta egongo dira. Zerbitzarira kargatzea aukeratzen baldin baduzu, Ankik Ankiweb-era bilduma kargatuko du, eta zuk Ankiwebean edo beste gailutan egindako aldeketa guztiak sinkronizatze azkenetik galduta egongo dira. Gailu guztiak sinkronizatu ondoren geroko berrikuspenak eta karta gehituak fusionatutak automatikoki izango dira.[karta-sortarik ez]segurtasun kopiakkartaksortako kartakKartak aukeratzeko irizpidea :bildumaegegunakkarta-sortaSortko bizitzabikoiztualaguntzaEzkutatuordugauerdiaren ondoko orduakegun %s -(n)%s egunetandenbora-tarteak0,1 kart minutuko baino gutxiagolotuta %slotuta Etiketeekinminutuminutuhlberrikuspenaksegundoestatistikakorrialde hauabilduma osoa~anki-2.1.0+dfsg~b36/locale/fa/000077500000000000000000000000001323611211500157045ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/fa/LC_MESSAGES/000077500000000000000000000000001323611211500174715ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/fa/LC_MESSAGES/anki.mo000066400000000000000000002037611323611211500207610ustar00rootroot00000000000000,:::: :::8;H;Y;l;"};$;$;&;"<4<G<X<$u< <<<<<<=%=<=O= d=r======= === ===== == == >>'>7>F>U>f>m>0s> >> > >>>>>??????????T? @,@(<@e@!@@f@%A ;AHA ZA gArAAAAeA&B7B CC5%CX[CYC D D%D)D DD NDXD nD |DDDDD D$DD DD D E%EK5EE"EE EEERbFvF7,G dGwpGEG@.HoHvHHRHHcI#~I#III(I'J /JQTPTT]T HU8TUUUUUU UUUU U VV V !V+V 2V?VEV)TV0~VVV4V!V W3WIW_WxWWW WWWW W WWW W X !X+X2X:XCXTXhXxXXX X XXXXXXYYYY YYYYY ZZZ 0ZhEhUh\hdhuhhhih#i *i 6iCi Ti_i ti"ii i1i ii j3j :j Gj Sj`jpjj-jjj jjjk k &k4kVLkk kk,@lmlGl ll l m mm-m?m\mzmm*m'm n6n Gn!Rn?tnnn n nnnn o!o 'o 2o @oJoeomooo o o o oo! pd+p ppppp pp(pp q9qXTq+q"q&q#r0=r+nr>rFr* s(Ks1tsIss'tu#uev~v8uwwC>x(xrxy#y 6yu@yMyz zz z z z!zzz'{A{H{M{U{j{.q{&{{{,{| %|0|UO|$||"|S|0R}$}"}} }{}^Y~~U !)/C U`bg lv{Ђ &  &0 2>T7f ΅څ$/T q}#"!چ # / 9 ES b lz  χӇ  ( 2 > IW it/8͈-#Lp= ҉  /.L{Nj΋v%x<2ی"1I":Mgx֎'Q;Ryoy '24g}'" 4EY9v Քe;)>eʖCxژ!Su{\fؚ?Hcs9G-0u+ҝgUd(|/"1AV#_/ԟ#1<SnA JOV _ k vТ%AgQ=ͤ *"-6P: #0CtE H FS4\G٧ N 9Yk%+ک))= D Q ^ k xǪ ݪ 5Jj"C .KTT#ݬm[kԭ .$VSS;E:?L< LJ LU[ !2ޱ%#Id mx в 91pk ܳ s?|,/5)T$~ ʵյ'ص % /<.Q  ׶+%C it&ط 8'9(@in 0ݹ4J Q \i{! L :GԻ t=8Y%rV" a39:J7:J'0Dd)x^#1U>k"+.B@V&^,=GA%!: Y&f"  55@v %+ 3NV_h! *$O$o6R&OE;>#RvU2@*k{*WOTU$+F [4h.I%o x@]L$q}( 2IT|,X,WapW 9 )GGq(.BK Tu3J=% /%Fl/N%6T\&, )=O%e;+? 3@ IT'c  ;y xu4#? +9M#iNGF$6kQP EsS?#  -F erG C3T5/YH(m C=:6x/6C<#NLr0sx:M'IuEI<|QcLQ) @!Km rA-V+<w K%4^+ =dLSD9'8aA ). Xe ly  &*&%3L     SRQFZ2Ydf>V$TB E3.?K ( 5S]+dg=k/mHOJe!2 #H<%qyP3&5@[J#}D s7r;u T b]~,e*ngBss^;:k.)x17lM9a Q:O1"h!(G{A6}H$ &8oK1LC0XW*e,>08z/kljWcjZiz+uq{ mt:-n r\\[LjiU6#U[<>EB&t`C b|I@*c/90fT=EvfwpV SdrnM-Yxq\%~wUv%|=R 6LX.GNmZ~-?_'|Iy<D49"Ku4Y+Wy}a2,VI'$h_oN@J!(A  x )"5NphaC4^^]_83w?GA{ RMbvt`Xp;F7FiPQ'l`Dc)OPzog (off) (on)%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d note%d notes%d note added%d notes added%d note imported.%d notes imported.%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError executing %s.Error running %sExportExport...ExtraF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some settings will take effect after you restart Anki.Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesreviewssecondsstatsthis pagewwhole collectionProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-11-28 12:00+0000 Last-Translator: vahid Language-Team: There isn't any translation team MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) X-Poedit-Country: iran Language: fa X-Poedit-Language: Persian خاموش روشن%٪ صحیح%(a)0.1f %(b)s/روز%(a)0.1fs (%(b)s)%(a)d of %(b)dیادداشت بروز رسانی شده%(tot)s %(unit)s%.01f کارت بر دقیقه%d کارت%d کارت حذف شده.%d کارت صادر شده.%d کارت وارد شده.%d کارت مطالعه شده در%d دسته بروز شده.%d گروه%d یادداشتها%d یادداشت اضافه شده%d یادداشت وارد شده.%d یادداشت بروز شده%d مرورها%d انتخاب شده%s نسخه%s روز%s ساعت%s دقیقه%s دقیقه.%s ماه%s ثانیه%s برای حذف:%s سال%s روز%s ساعت%s دقیقه%smo%s ثانیه%sy&درباره...&یادگیری با شتاب...&ویرایش&صادرکردن...&فایل&جستجو&برو‌&راهنما&راهنما ...&کمک‌&وارد کردن...&وارونه کردن انتخاب شده ها&کارت بعدی&باز کردن پوشه‌ی افزودنی‌ها ...&تنظیمات ...&کارت قبلی&زمان بندی مجدد...&پشتیبانی از انکی ...&ابزارها&برگرداندن'%(row)s' داشت %(num1)d فیلدها, منتظر%(num2)dd(%s صحیح)(پایان)(فیلترشده)(یادگیری)(جدید)(محدوده به عنوان والدین: %d)(لطفا یک کارت انتخاب کنید)...فایلهای نسخه 2 آنکی برای وارد کردن طراحی نشده اند. اگر می خواهید آنها را از یک فایل پشتیبان بازیابی کنید، لطفا بخش پشتیبان را از راهنمای کاربران ببینید./0ر1 ماه1 سال10ق.ظ10ب.ظ3ق.ظ4ق.ظ4ب.ظحطای 504 مربوط به مدت زمان دریافت گردیده است. لطفا بطور موقت آنتی ویروس خود را غیر فعال نمایید.:%d کارتبازکردن پوشه پشتیبانبازدید از وب‌سایت%(pct)d%% (%(x)s از%(y)s)%Y-%m-%d @ %H:%Mپشتیبان‌ها
انکی هربار که بسته می‌شود یا یکپارچه‌سازی می‌شود،یک پشتیبان از مجموعه‌ی شما ایجاد خواهد کرد.فرمت صادر کردن:یافتن:سایز فونت:فونت:درون:شامل:اندازه خطوط:جایگزینی با:یکپارچه‌سازییکپارچه‌سازی
اخیراً فعال نشده است؛ برای فعال کردن آن در پنجره‌ی اصلی برروی دکمه‌ی یکپارچه‌سازی کلیک کنید.

نیازمند به حساب

برای اینکه مجموعه شما یکپارچه شود یک حساب رایگان نیاز می باشد. لطفاً برای یک حساب ثبت نام کنید، سپس جزئیاتتان را درپایین وارد نمایید.

انکی به روز رسانی شد

انکی %s منتشر شد.

<صرف نظر شده><متن غیر یونیکد><جهت جستجو اینجا تایپ کنید; برای نمایش دسته فعلی اینتر را فشار دهید>از همه کسانی که پیشنهاد، خطاهای رخ داده و هدیه ارسال می کنند کمال تشکر را داریم.یک کارت's آسان اندازه مدت بعدی است ، وقتی جواب شما در یک مرور "خوب" است.بی نتیجه: %sدرباره انکیافزودنافزودن (میانبر: کنترل+اینتر)افزودن فیلدافزودن رسانهافزودن دسته جدید (Ctrl+N)افزودن نوع یادداشتوارونه اضافه کردنافزودن برچسباضافه کردن به :افزودن: %sاضافه‌شدهامروز اضافه شدهدر اولین فیلد دوبار اضافه شده: %sدوبارهدوباره امروزشمارش مجدد: %sتمام دسته(ها)تمام فیلدهاهمه کارتها بطور تصادفی مرتب شده (درحالت یادگیری با شتاب)تمام کارتها، یادداشتها و فایهای رسانه برای این نمایه حذف خواهد شد. آیا مطمئن به انجام هستید؟اچ تی ام ال در فیلدها اجازه دارندیک خطا هنگام باز کردن رخ داده است %sانکیدسته نسخه 2 آنکیمجموعه دسته آنکیآنکی قادر به یافتن خط بین سوال و جواب نیست. لطفا بطورت دستی قالب را تنظیم نموده و سوال و جواب را مجددا ببینید.آنکی یک سیستم یادگیری هوشمند و دوستانه است. این نرم افزار مجانی و منبع باز می باشد.آنکی تحت مجوز AGPL3 می باشد. لطفا برای اطلاعات بیشتر فایل مجوز را در محل توزیع ببینید.نام کاربر و یا رمز انکی وب نادرست می‌باشد؛ لطفاً دوباره تلاش کنید.نام کاربر انکی‌وبآنکی وب با یک خطا مواجه شده است. لطفا چند دقیقه دیگر مجددا سعی نمایید و اگر مشکل همچنان وجود داشت لطفا یک فایل گزارش خطا بفرستید.آنکی وب همچنان در این لحظه مشغول است. لطفا چند دقیقه دیگر سعی نمایید.آنکی وب تحت تعمیر است. لطفا چند دقیقه دیگر مراجعه نمایید.پاسخدکمه‌های پاسخپاسخ‌هانرم افزار آنتی ویروس یا فایروال از اتصال آنکی به اینترنت جلوگیری می کند.طبق برنامه هیچ چیزی در هر کارت حذف نخواهد شد. اگر باقیمانده کارتها یک یادداشت نداشته باشند، آن از دست خواهد رفت. آیا برای ادامه مطمئن هستید؟دوبار در پرونده نشان داده شده: %sآیامطمئن هستید که می خواهید حذف کنید؟ %sحداقل یک نوع کارت لازم است.حداقل یک مرحله لازم است.پخش خودکار صدامجموعه تنظیمات باز/بسته به صورت خودکار یکپارچه سازی شوندمیانگینمیانگین زمانمیانگین زمان پاسخگوییمیانگین آسانیمیانگین روزهای مطالعه شدهمیانگین بازه زمانیعقبپیشنمایش پشتقالب پشتپشتیبان(ها)پایهپایه (و کارت وارونه)پایه (کارت انتخابی وارونه)مرورنمایش مرورگراختیارات مرورگرایجادکردناز نظر مخفی کردندفن کردن کارتیادداشت های از نظر مخفی شدهکارتهای جدید وابسته از نظر مخفی شده تا روز بعددفن کردن مرور‌های مشابه تا روز بعدیبه صورت پیش فرض، انکی کاراکتر بین فیلدها را تشخیص می دهد، مثل تب، ویرگول و غیره.اگر تشخیص انکی اشتباه بود، شما می توانید آن را در این قسمت وارد کنید. از \t به جای دکمه تب استفاده نمایید.لغوکارتکارت %dکارت 1کارت 2شماره کارتفهرست کارتنوع کارتنوع های کارتنوع کارت برای %sکارت دفن شد.کارت معلق شدهکارت یک کارت سخت بود.کارت‌هاکارتها بصورت دستی قابل انتقل به یک دسته فیلتر شده نیستند.کارتها در فرمت متن ساده(پلین تکست)کارتها بعد از مرورشان مجددا بطور خودکار به دسته اصلی خود برگردانده می شوندکارت (ها) ...مرکزتغییر دادنتغییر دادن %s به:تغییر دستهتغییر نوع یادداشتتغییر نوع یادداشت (Ctrl+N)تغییر نوع یادداش ...تغییر دسته براساس نوع یادداشتتغییر کردهبررسی و رسانه ...بررسی کردن فایل ها در شاخه رسانهدرحال بررسی ...انتخاب کندسته را انتخاب کنیدنوع یادداشت را انتخاب کنیدانتخاب برچسبمشابه: %sبستنبستن و از دست دادن اطلاعات ورودی جاری؟جاخالیکد:مجموعه خراب است. لطفاً راهنما را ببینید.دونقطهکاماپیکربندی رابط زبان و تنظیماتتبریک! شما فعلاً این دسته را تمام کردید.درحال اتصال...ادامهرونوشتپاسخ های صحیح در کارتهای دائم: %(a)d/%(b)d (%(c).1f%%)صحیح: %(pct)0.2f%%
(%(good)d از %(tot)d)اتصال به AnkiWeb ممکن نیست. لطفاً اتصال به شبکه خود را بررسی کنید و دوباره تلاش کنید.امکان ضبط کردن صدا فراهم نمی باشد. آیا sox و lame نصب شده دارید؟پرونده ذخیره نمی‌شود: %sیادگیری با شتابایجاد دستهایجاد دسته فیلتر شده ...ایجادشدهکنترل+آلت+FCtrl+Dکنترل+Eکنترل+Fکنترل+Nکنترل+Pکنترل+Qکنترل+شیفت+Fکنترل+شیفت+Lکنترل+شیفت+Mکنترل+شیفت+Pکنترل+Zمرکبیکجا %sپاسخهای یکجاکارتهای انباشتهدسته ی فعلینوع یادداشت فعلی:مطالعه سفارشیجلسه مطالعه سفارشیبرشپایگاه داده بازسازی و بهینه‌سازی شد.تاریخروزهای مطالعه شدهلغو مجوزکنسول رفع اشکالدستهوقتی یک نمایه باز شده باشد، دسته وارد خواهد شد.دسته (ها)کاهش بازه های زمانیپیش‌فرضتاوقتی که مرورها دوباره نشان داده شوند به تاخیر انداخته شود.حذف کردنحذف کارتهاحذف کردن دستهحذف خالیحذف یادداشتحذف یادداشتحذف برچسب هاحذف استفاده نشدهحذف فیلد از %s?حذف '%(a)s' نوع کارت, و آن %(b)s?این نوع یاددداشت و همه آن کارتها را حذف می کنید؟این نوع یادداشتهای بلااستفاده را حذف می کنید؟رسانه بلااستفاده را حذف می کنید؟حذف شد%d کارتهایی با یادداشت های مفقود.حذف شد %d کارتهایی با قالبهای مفقود.حذف شد %d یادداشتهایی با نوع یادداشت مفقود.حذف شد%d یادداشتهایی با هیچ کارتی.حذف شد %d یادداشتهایی با تعدای فیلد اشتباه.حذف شد.حذف کردن این دسته از لیست دسته ها همه کارتهای باقیمانده را به دسته اصلی اشان برخواهد گرداند.توضیحاتتوصیف برای نمایش در صحفه مطالعه (فقط دسته فعلی):گفتگوبارگیری از انکی وبدرحال بارگیری از انکی‌وب ...موعد مرورموعد مرور فقط کارتهاموعد مرور فرداخروجسهولتآسانامتیاز آسانیمدت آسانیویرایشوایرایش فعلیویرایش HTMLویرایش شدهویرایش فونتخالیکارتهای خالی ...تعداد کارت خالی: %(c)s فیلدها: %(f)s کارت خالی پیدا نشد. لطفا این مسیر را اجرا کنید ابزار>کارت خالی.اولین فیلد خالی: %sپایانبرای قرادادن %s کارت جدید دسته‌ای را وارد کنید، یا خالی بگذارید:موقعیت کارت جدید را وارد کنید (1...%s):برای افزودن برچسب بزنید:برای حذف کردن برچسب بزنید:خطای بارگیری: %sخطا هنگام شروع: %sاجرای %s باخطا مواجه شد.خطایی در اجرای %s استصادر کردنصادر کردن...اضافیF1فیلد%d از فایل هست:نگاشت فیلدنام فیلد:فیلد:فیلدهافیلد برای %sفیلدها جدا شده به وسیله: %sفیلدها...فیلترفیلتر:فیلتر شدهدسته فیلتر شده %dیافتن &تکراری ها...یافتن تکراری‌هایافتن و &جایگزین نمودن...یافتن و جایگزین کردنپایاناولین کارتنخستین مروربرگرداندنپوشه از قبل وجود داردفونتپاورقیبه دلیل امنیتی, '%s'اجازه انجام روی این کارتها را ندارید.شما می توایند هنوز از آن استفاده کنید بوسیله قراردادن فرمان در یک مجموعه متفاوت و وارد کردن آن مجموعه در LaTeX بجای هدر.پیش‌بینیفرمپیدا شده%(a)s سرتاسر %(b)s.روپیش‌نمایش روالگوی روعمومیفایل ایجاد شده: %sایجاد شده روی %sگرفتن به اشتراک گذاشته شدهخوببازه زمانی عمومیویرایشگر HTMLسختسرآمدراهنماخیلی آسانتاریخچهخانهتفکیک ساعت به ساعتساعاتکمتر از 30 مرور در ساعت نمایش داده نشده است.اگر شما همکاری نموده اید و نام شما در لیست موجود نمی باشد، لطفا در تماس باشید.اگر شما هر روز مطالعه نموده‌ایدنادیده گرفتن زمان های پاسخ بیشتر از ایننادیده گرفتن موردهرجا که اولین فیلد خروجی یادداشت مطابقت داشت، خط را نادیده بگیر.این به روز رسانی را نادیده بگیروارد کردنوارد کردن فایلحتی اگر همان اولین فیلد از قبل وجود داشت، وارد کن.وارد کردن شکست خورد. وارد کردن با شکست روبرو شد.اطلاعات اشکال زدایی: اختیارات وارد کردنوارد کردن کامل شد.در پوشه رسانه‌ها ولی توسط هیچ کارتی استفاده نشده است:حاوی رسانهاطلاعات زمان بندی نیز شامل شوندشامل برچسب هاافزایش تعداد کارتهای جدید امروزافزایش تعداد کارتهای جدید امروز به وسیلهافزایش تعداد کارتهای مرور امروزافزایش تعداد کارتهای مرور امروز به وسیلهافزایش بازه های زمانینصب افزونهزبان رابط کاربری:بازه زمانیتغییر دهنده بازه زمانیبازه های زمانیکد نامعتبر.فایل نامعتبر است. لطفا از فایل پشتیبان بازیابی کنید.عبارت منظم نامعتبر.این معلق شد.با کنترل+شیفت+T روی برچسب قرار بگیرنگه داشتنLaTeXمعادله فرمول نویسیتوابع ریاضی فرمول نویسیدورهای سپری شدهآخرین کارتآخرین مرورآخرین اضافه شده در ابتدا قرار بگیردیادگیریمیزان پیشرفت یادگیرییادگیری: %(a)s, مرورشده: %(b)s, بازآموزی: %(c)s, فیلترشده: %(d)sدر حال یادگیریعلامتگذاری به عنوان کارت خیلی سختآستانه علامتگذاری به عنوان خیلی سختچپمحدود بهدرحال بارگذاری...بیشترین بازه ی زمانیبیاب در فیلد :پایین ترین آسانیمدیریتمدیریت نوع یادداشت ...نقشه به %sنقشه به برچسب هادائمبیشترین بازه زمانیحداکثر مرورها/روزرسانهکمترین بازه زمانیدقیقهادغام کارت‌های جدید و مرورها"Mnemosyne 2.0 دسته (*.db)"بیشتربیشترین خطاکارتها را انتقال بدهانتقال کارت‌ها به دسته:&یادداشتنام موجود است.نام برای دسته :نام:شبکهجدیدکارت های جدیدفقط کارتهای جدیدکارت‌های جدید/روزنام دسته جدید:بازه زمانی جدیدنام جدید:نوع کارت جدید:نام گروه اختیارات جدید:موقعیت جدید (1...%d):روز دیگر شروع شود ازهنور موعد مرور هیچ کارتی نیست.هیچ کارتی با معیارهای مشروط شما مطابقت نداشت.کارت خالی وجود ندارد.هیچ کارت دائمی در مطالعه شده های امروز نبود.فایل ناکارآمد و یا خراب پیدا نشد.یادداشتنوع یادداشتنوع های یادداشتیادداشت و مال آن %d کارتهای حذف شده.یادداشت از بین رفتهیادداشت معلق شدهتوجه : از رسانه پشتیبان گرفته نشده است. لطفا متناوباً از پوشه آنکی خود پشتیان تهیه نمایید تا آن ایمن بماند.توجه : برخی از تاریخچه ها ناکارآمد هستند. لطفا برای اطلاعات بیشتر مرورگر اسناد را ببینید.یادداشت در فرمت ساده (Plain Text)یادداشتها حداقل یک فیلد لازم دارند.هیچ‌چیزخُبآخرین دیده شده در ابتدادر همگامسازی بعدی،اجباراً در یک دستور تغییر بدهیک یا بیشتر از یک یادداشت وارد نشده است. زیرا آنها هیچ کارتی ایجاد نکرده اند و این اتفاق زمانی رخ می دهد که یا شما فیلد خالی دارید و یا در فایل متن مفاد ترسیم شده ای برای تصحیح فیلد ندارید.فقط کارتهای جدید قابلیت تغییر موقعیت را دارند.باز کردندرحال بهینه‌سازی ...محدوده انتخابی :اختیاراتاختیارات برای %sگروه اختیارات:اختیارات ...چیدمانمرتب شده با توجه به اضافه شدنبراساس موعد مرور تنظیم کنلغو قالب پشت :لغو فونت :لغو قالب جلورمز:جاگذاریتصویر حافظه موقت به عنوان PNG جاگذاری شود.درصددوره: %sدر انتهای صف کارتهای جدید قرار بگیردر آخر صف کارتهای مرور قرار بگیرد با بازه زمانی بین:لطفا ابتدا یک نوع یادداشت دیگر اضافه کنید.لطفا میکروفون را متصل کنید و مطمئن شوید که سایر برنامه ها از سیستم صوتی استفاده نمی کنند.لطفا این یادداشت را ویرایش کنید و برخی جای خالی ها را اضافه نمایید. (%s)لطفا مطمئن شوید که یک نمایه باز است و آنکی مشغول نمی باشد، سپس مجددا سعی نمایید.لطفاً PyAudio را نصب کنید.لطفاً اول یک شناسه باز کنید.لطفا این مسیر را اجرا کنید: ابزار< کازتهای خالیلطفا یک دسته انتخاب کنیدلطفا کارتها را فقط از یک نوع یادداشت انتخاب کنید.لطفا چیزی را انتخاب کنیدلطفاً نرم‌افزار را به آخرین نسخه از انکی ارتقاء دهید.برای وارد کردن این فایل از این مسیر اقدام کنید: فایل< وارد کردنلطفا به سایت آنکی وب مراجعه ، دسته خود را بروز کرده و سپس مجدداً سعی نمایید.موقعیتتنظیماتپیش نمایشپیش نمایش کارتهای انتخاب شده (%s)پیش نمایش کارتهای جدیدپیش نمایش کارتهای جدید اضافه شده در آخردرحال پردازش...نمایه‌هامجوز نماینده لازم است.پرسشانتهای صف: %dبالای صف: %dخروجدرهممخلوط کردن چیدمانرتبه‌دهیبازسازیضبط صدای خوددرحال ضبط کردن ...
زمان: %0.1fبازآموزیبخاطر سپردن آخرین ورودی هنگام اضافه کردنحذف کردن این نوع کارت سبب حذف یک نوع یا بیشتر خواهد شد. لطفا ابتدا یک نوع کارت جدید بوجود بیاورید.نام‌گذاری مجددنام‌گذاری مجدد دستهپخش مجدد صوتپخش مجدد صدای خودتانتغییر موقعیتتغییر موقعیت کارتهای جدیدتغییر موقعیت ...یک یا بیشتر از یکی از این برچسب ها لازم است :زمان بندی شدزمان‌بندی کردن مجددکارتها براساس پاسخ من در این دسته زمانبندی شودالان ادامه بدهبرگرداندن جهت متن (RTL)برگشت به حالت قبلی به '%s'.مرورتعداد مرورزمان مرورپیشرفت مرورپیشرفت مرور به وسیلهمرور کارتهای فراموش شده در انتهامرور کارتهای فراموش شدهمیزان موفقیت مرور در هر ساعت از روزمرورهاراستهدف: %sجست و جوجستجو با شکلبندی (کند)انتخابانتخاب &همهانتخاب &یادداشتهاانتخاب برچسبها برای مستثنی کردن:فایل انتخاب شده در فرمت UTF-8 نبود. لطفا راهنمای بخش مربوطه را ببینید.مطالعه گزینشینقطه ویرگولسرور پیدا نشد. یا ارتباط قطع گردیده یا نرم افزار آنتی ویروس/فایروال ارتباط آنکی با اینترنت را قطع کرده است.Sآیا همه دسته های زیر را %s به عنوان اختیارات این گروه قرار می دهید؟برای همه زیر دسته ها قرار بدهکلید شیفت پایین نگه داشته شده بود. همگامسازی و بارگذاری افزونه بطور خودکار رد گردید.موقعیت کارتهای موجود را تغییر دهیدکلید میانبر: %sمیانبر: ‪%sنمایش %sنمایش پاسخنمایش تکراریهانمایش زمان سنج پاسخکارت‌های جدید بعد از مرورها نشان داده شوندکارت های جدید را قبل از مرور ها نشان بدهکارت ها را به ترتیب اضافه شدن، نشان بدهکارت ها را بدون ترتیب نشان بدهزمان مرور بعدی را در بالای دکمه پاسخ نشان بدهتعداد کارت باقیمانده در طول مرور را نشان بدهاندازه:برخی از تغییرات پس از اینکه انکی دوباره شروع شد اعمال خواهند شد.فیلد را مرتب کنبه وسیله این فیلد در مرورگر مرتب کنمرتب سازی بر اساس این ستون پشتیبانی نشده است. لطفا یکی دیگر را انتخاب کنید.فاصلهموقعیت شروع:آسان شروع کردنآمارمرحلهمراحل (به دقیقه)مراحل باید به اعداد باشد.امروز مطالعه شدهمطالعهمطالعه دستهمطالعه دسته ...اکنون مطالعه شودبه وسیله حالت یا برچسب کارت مطالعه کنیدسبکسبک(بین کارتهای به اشتراک گذاشته شده)(*.xml) XML صادر کردن ابر یادداشتمعلق کردنمعلق کردن کارتمعلق کردن نوشتهمعلق شدهتصاویر و صوت نیز یکپارچه شوندعدم موفقیت یکپارچه سازی: %sیکپارچه سازی با شکست مواجه شد؛ اینترنت خاموش است.برای یکپارچه سازی لازم است که ساعت کامپیوترتان بصورت صحیح تنظیم شود. لطفا ساعت را تنظیم کرده و مجددا سعی نمایید.درحال یکپارچه‌سازی ...زبانهفقط برچسببرچسب‌هادسته هدف (Ctrl+D)فیلد هدف:متنمتن جدا شده با زبانه یا نقطه ویرگول (*)این دسته هم‌اکنون موجود می‌باشد.نام فیلد قبلا استفاده شده است.این نام قبلاً استفاده شده.به جهت زمان بیش از حد، اتصال با آنکی وب قطع شد. لطفا اتصالات شبکه خود را بررسی کرده و مجددا سعی نمایید.تنظیمات پیش فرض قابل حذف نیست.امکان حذف دسته پیشفرض موجود نمی باشد.تقسیم کارت ها درون دسته (ها) ی شما.اولین فیلد خالی استفیلد اول نوع یادداشت باید برنامه ریزی شود.خط زیر قابل استفاده نیست: %sقسمت جلوی این کارت خالی است. لطفا این مسیر را اجرا کنید: ابزار< کارتهای خالیوارد کردن مشروط به اینکه یک پرسش خالی در همه کارتها ساخته باشید.تعداد سؤالاتی که شما پاسخ دادید.تعداد مرورهایی که درآینده باید انجام دهید.تعداد دفعاتی که شما هر دکمه را فشرده اید.جستجوی شرطی با هیچ کارتی مطابقت نداشت.هنگام یکپارچه سازی بعدی مجموعه خود، به یک بارگذاری کامل پایگاه داده نیاز خواهید داشت. اگر مرور یا تغییرات دیگری روی دستگاههای دیگر کرده اید ، هنوز یکپارچه سازی انجام نشده است .آنها از بین خواهد رفت. آیا ادامه می دهید؟زمانی که برای پاسخ به سؤالات صرف شده است.یک یا بیشتر از یک کارت جدید قابل دسترسی است اما تعداد کارتهای روزانه محدود گردیده شما می توانید تعداد کارتها را از طریق اختیارات افزایش دهید ، اما لطفا به یادداشته باشید که معرفی کارتهای جدید بیشتر حجم مرورها را در کوتاه مدت بالا می بردحداقل یک نمایه در اینجا باید باشداین ستون قابل مرتب سازی نیست، اما شما می توانید دسته های ویژه را از طریق کلیک بر روی یکی از سمت چپ جستجو کنید.این فایل به صورت یک فایل apkg معتبر نیست. اگر شما یک خطا از یک فایل بارگیری شده از سایت آنکی وب دریافت کرده اید، این اتفاق زمانی می افتد که بارگیری شما با شکست مواجه شده است. لطفا مجددا سعی کنید و اگر مشکل برطرف نشد با یک مرورگر متفاوت دیگر دوباره اقدام کنید.این فایل موجود است. آیا مطمئن هسیتد که می خواهید آن را بازنویسی کنید؟این پوشه منحصر به فرد محل ذخیره سازی کلیه اطلاعات آنکی است که پشتیان گیری را آسان می کند برای اینکه به آنکی بگویید که از یک محل دیگر استفاده کند، لطفا ببیند: %s این یک دسته ویژه برای مطالعه خارج از زمانبندی عادی است.این یک {{c1::مثال}} برای پر کردن جای خالی است.این عمل سبب حذف مجموعه موجود شما و جابجایی آن با اطلاعات فایلی که در حال وارد نمودن آن هستید خواهد شد. آیا می خواهید انجام دهید؟زمانمحدوده زمانی جعبه زمانبرای مروربرای ایجاد یک جای خالی بر روی یادداشت موجود، ابتدا از طریق این مسیر: ویرایش < تغییر نوع یادداشت ، نیاز به تغییر نوع به جای خالی دارید.برای مطالعه خارج از زمان بندی عادی بر روی دکمه مطالعه سفارشی زیر کلیک کنید.امروزمحدوده مرور امروز سر رسید شده است، اما هنوز کارتهایی وجود دارد که منتظر برای مرور هستند. برای بهینه کردن حافظه،افزایش محدوده روزانه در اختیارات را ملاحظه کنید.کلزمان کلتمام کارت‌هاتمام نوشته‌هاتلقی ورودی به عنوان یک بیان با قاعدهنوعنوع جواب: فیلد ناشناخته %sقادر به وارد کردن از یک فایل فقط خواندنی نیستید.غیر مخفیبرگرداندنبرگرداندن %sشکل‌بندی فایل ناشناخته می‌باشد.دیده‌نشدهوقتی اولین فیلد مطابقت داده شد یادداشت های موجود را بروز رسانی کن.بروز رسانی شده %(a)d of %(b)d یادداشت های موجود.بارگذاری در انکی‌وبدرحال بارگذاری در انکی‌وب ...کارتهای استفاده شده اما از پوشه رسانه مفقود گردیده :کاربر 1نسخه %sبرای ویرایش تا پایان منتظر بمانیداخطار، جای خالی تا وقتی که شما نوع را از بالا به جای خالی تغییر ندهید بطور صحیح کار نخواهد کرد.هنگام افزدون کارت جدید، دسته فعلی به عنوان پیش فرض باشدتمام مجموعهآیا میخواهید اکنون این را بارگیری نمایید؟یک نوع یادداشت با جای خالی دارید اما هیچ جای خالی ایجاد نشده است.ادامه می دهید؟تعدادی دسته دارید. لطفا ببینید %(a)s. %(b)sهنوز صدای ضبط شده تان را ندارید.حداقل باید یک ستون داشته باشید.موقتموقت+آموزشتغییرات شما بر روی چندین دسته تأثیر خواهد گذاشت. اگر می خواهید تغییرات فقط بر روی دسته فعلی تأثیر بگذارد، لطفا ابتدا یک گروه اختیارات جدید اضافه کنید.مجموعه شما در حالت متناقض می باشد. لطفا این مسیر : ابزار< بررسی پایگاه داده را اجرا کرده، سپس مجددا یکپارچه سازی کنید.اگر از هیچ دستگاه دیگری استفاده نمی کنید، لطفا الان آنها را یکپارچه سازی کنید و با انتخاب بارگیری شما مجموعه بارگذاری شده از این رایانه را خواهید داشت. بعد از انجام این عمل، در آینده مرورها و کارتهای جدید بصورت خودکار ادغام خواهند شد.دسته شما در اینجا و آنکی وب با یکدیگر فرق دارند و به همین جهت قادر به ادغام با یکدیگر نیستند. لازم است که از یک طرف دسته ها بازنویسی شوند و از طرف دیگر با همدیگر ادغام شوند. اگر بارگیری را انتخاب کنید، آنکی مجموعه را از آنکی وب بارگیری می کند و هر تغییری که شما در رایانه تان ایجاد کرده اید تا آخرین یکپارچه سازی از بین خواهد رفت. اگر بارگذاری را انتخاب کنید، آنکی مجموعه را در آنکی وب بارگذاری کرده و هر تغییری که شما در آنکی وب یا دستگاههای دیگر ایجاد کرده اید تا آخرین یکپارچه سازی بر روی این دستگاه از بین خواهد رفت.[بدون دستهپشتیبان (ها)کارتهاکارتهای دستهکارتهای منتخب به وسیلهمجموعهروزروز(ها)دستهعمر دستهراهنمامخفیساعاتساعت از نیمه شب گذشتهدوره های سپری شدهکمتر از 0.1 کارت در دقیقهبرنامه ریزی شده %sبرنامه ریزی شده برچسب هادقیقهدقایقمرورهاثانیه(ها)آماریاین صحفهه‍فتهمجموعه سالمanki-2.1.0+dfsg~b36/locale/fi/000077500000000000000000000000001323611211500157145ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/fi/LC_MESSAGES/000077500000000000000000000000001323611211500175015ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/fi/LC_MESSAGES/anki.mo000066400000000000000000001773351323611211500210000ustar00rootroot00000000000000/> >>>">? ?(?;?8M????"?$?$@&(@"O@r@4@2@@@"A$>A$cA$A AAAABB#B8BOBbB wBBBBBBBB BBB BBBBB BB BC C"C:CJCYChCyCC0C CC C CCCCDDDDDDDDDDDTD E,"E(OExE!EEfE8F NF[F mF zFFFFFeF9G7G H%H58HXnHYH%!IkGI I III I II J !J-J6J>JFJ LJ$XJ}J JJ J J%JKJ&K;K"MBM GMUMgMINRNv O7O OwOESP@PPPPRPKQQ#Q# R1RPR(iRR RR RRRR R SSS S:SYS`SsSSS S S)S'SSTTTTTT T T TT UU(U:U3@UtUSUUUU U V VV8V"LVoVwV&V VV VV V VVVWW-$WRWXW(^W5W WWOXXX8]X5XPX7YUYlY qY}YY YYYYYYY Y Y Y Y Z Z Z'Z .Z 9ZGZZZ kZxZ ZZZZZ Z Z ZZ/[2[8[M[%U[{[ [ [ [ [ [ [ [[,[(\G\e\Fz\N\P]>a]P]]]] X^8d^^^^^^ ^^^_ _ __ $_ 1_;_ B_O_U_)d_0___4_!`0`C`Y`o`` aa/a 6a.@aoauawaza a aaa aa aaaabb+b;bPbab hb sbbNb"b cc#c:c@cGccddd %d3dBdJd]d mdxd}d dddd ddddd.dFeUene e e4eee e1f4fDfdfsf*ff Ph^h }hh"h"h hi&i5iIiRi di ni)|ii*jFj]j|jjjjj j jjjj<j-k 6kCkSkXk aklk}k kkk k kkkkkk ll/lIl Nl Zlelyl lllll ll ll l ll m!m8mKm+amm#m!mmm m m<n BnOn]_nano!3o Uocokono,oo#upkpq qq(q0q?q NqYq _q kquqqq qqqq r rr,5r#brVr8rEs\sss*s0ss t,tLt-et+t8tt u uu0u#Bu0fu uuuuu uuuvvv v1vMvbvjvivv v ww %w0w Ew"Swvw ~w1w ww wx x x $x1xAx`x-wxxx xxxx x xyVyty yy,z>zGSz zzz"z {{ {*{:{L{i{{{*{'{|@|6^|8| |!|?|;}A} Q} _}j}p}} }} } } }}}}~0~ 8~ E~ R~\~ m~~!~d~ (37FOT iw(| X+T"&+ʀ0+A>mF'*(F1o,_Iփ'Ƅ#څed8[C$(hr u&/M̉  NJ Ҋ ފ! '/W^ck.&݋,4 ;FUe$"S0h$" {^o5ΎU cmu{  ’̒ђ֒ܒ&<AILT\ bln<D V,c[ĕ 1J*_""6Ж,4[J4 ۗ26/.f,P˜8Ld {ʙ%8?DKQV [ gt}  šʚ * ? MX<_  ͛ԛ|z| y*0,-]#ΝkR fr̞۞}m9* doJfРZ7,~>N^0fۢ ! 5AJ0] A ; aFi%'MRbts]F5qPcªC&jr V!.,֬"%&?L ­ݭ&A Yg"v+Ůˮܮ DBc=E LV_ hv Ͱ="BYe ɱұر ߱& 0,O|!ʲ Ҳ ? `o<v %dzI7vHŴ<̴1 F;9 ݵ  $-6=DK R_p ϶ =Ql/tŷַ)! 8IC Ҹ7/L6|7#e]uӺySͻ OrZͼNԼ #1D ]k#ս-40F?w׾E߾&%Lf!c|2  "*? S^ g q|"{20' /;!6HQdx   K MV"*V* I5 @P<_2218d7 ) ?M>`(\, #CJJi  #4E"Nq$" 0LTet    %0Ic{#,/9& `mR-Q"8;t <3 #-Qd ' !%(@Ni=i`o+J" $/2b#r:@  %"0S8m<*19IX _k~,u) 2#E-i> "%%KS kw$%  9AQ#hK |As_*0[%t/  (%G,m3=B OlULSc+tM  %,!Bdx +% *3C Yd(|#1yu$  32GgH* 17i8*FC4*x 2-%4T!r(-z+fXS(yOT o{Ce_ -' 32fv|J=:N1j #^-7 es\-&&>elv|j@^  iu& %&-Tr    ;x$/&9<r  ( \CXoL;VA`r]V.n=3)1nqKDRu`R/Lo xG3>Ma:7&krY1FePP#f,<{+bzOD72Ek{t ?hKz>_@|y!8 %w[TSiH5(),*J-,kF~e vj\Z?+lwsE8YQ$U ^C0 s!p["~'QO$Jn'_cP}v(5-Hbm6\dZW 9U^"W*%Tjy" HtQB:R@e X/G `iIza.^Efc0*6 Nuqx=p.#K]Mu-5oclpBSN~4<Z%UX9>S+0A#I'{}Gg2Y lD):Bwt3!mAgmjCLy bON4 IVM6]J?4Fsq7d_W i&[1}2ad8hT|h|;@=fvg (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: ankiqt_fi_FI Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-08-04 07:49+0000 Last-Translator: Silja Ijas Language-Team: Finnish <> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: fi (1/%d) (pois päältä) (päällä) Siinä on %d kortti. Siinä on %d korttia.%% oikein%(a)0.1f %(b)s/päivä%(a)0.1fs (%(b)s)%(a)d %(b)d:stä muistiinpanosta päivitetty.%(a)d %(b)d:stä muistiinpanosta päivitetty.%(tot)s %(unit)s%.01f korttia/minuutissa%d kortti%d korttia%d kortti poistettu.%d korttia poistettu.%d kortti tuotu.%d korttia tuotu.%d kortti tuotu.%d korttia tuotu.%d kortti opiskeltu ajassa%d korttia opiskeltu ajassa%d pakka päivitetty.%d pakkaa päivitetty.%d ryhmä%d ryhmää%d mediamuutos lähetettävissä palvelimeen%d mediamuutosta lähetettävissä palvelimeen%d media-tiedosto ladattu%d media-tiedostoa ladattu%d muistiinpano%d muistiinpanoa%d muistiinpano lisätty%d muistiinpanoa lisätty%d muistiinpano poistettu.%d muistiinpanoa poistettu.%d muistiinpano tuotu.%d muistiinpanoa tuoto.%d muistiinpano tuotu%d muistiinpanoa tuotu%d muistiinpano säilyi muuttumattomana%d muistiinpanoa säilyi muuttumattomana%d muistiinpano päivitetty%d muistiinpanoa päivitetty%d kertaus%d kertausta%d valittu%d valittua%s (kopio)%s päivä%s päivää%s tunti%s tuntia%s minuutti%s minuuttia%s minuutti.%s minuuttia.%s kuukausi%s kuukautta%s sekunti%s sekuntia%s poistettava:%s vuosi%s vuotta%s vrk%s h%s min%s kk%s s%s v&Tietoja...Op&iskele...&Muokkaa&Vie...&Tiedosto&Etsi&Siirry&Käyttöohje&Käyttöohje...&Ohje&Tuo...&Käänteinen valinta&Seuraava kortti&Avaa liitännäiskansio&Asetukset...&Edellinen kortti&Ajasta uudelleen...&Tue Ankia...T&yökalut&Kumoa'%(row)s':ssa oli %(num1)d kenttää, pitäisi olla %(num2)d(%s oikein)(loppu)(suodatettu)(opiskeltavana)(uusi)(emorajoitus: %d)(valitse 1 kortti)....anki2-tiedostoja ei ole suunniteltu tuontiin. Jos yrität palauttaa varmuuskopiota, katso käyttöohjeesta kohta "Backups"./0d1 kuukausi1 vuosi10:0022:0003:0004:0016:00504 yhdyskäytävän aikakatkaisuvirhe vastaanotettu. Kokeile poistaa virustorjuntaohjelmasi käytöstä väliaikaisesti.:%d kortin%d korttiaAvaa varmuuskopiokansioKäy verkkosivulla%(pct)d%% (%(x)s/%(y)s)%Y-%m-%d @ %H:%MVarmuuskopiot
Anki luo varmuuskopion kokoelmastasi joka kerta kun se suljetaan tai synkronoidaan.Vientimuoto:EtsiFonttikoko:Fontti:KenttäSisältää:Viivanleveys:KorvausSynkronointiSynkronointi
Synkronointi ei ole päällä. Klikkaa Synkronoi-painiketta pääikkunassa laittaaksesi sen päälle.

Käyttäjätili vaaditaan

Tarvitset ilmaisen käyttäjätilin, että voi pitää kokoelmasi synkronoituna. Perusta käyttäjätili ja syötä sitten tietosi alle.

Anki on päivitetty

Anki %s on julkaistu.

Kiitokset kaikille, jotka ovat lähettäneet ehdotuksia ja lahjoituksia sekä raportoineet virheistä!Kortin helppous on seuraavan kertausvälin pituus kun vastaat "Hyvä" kertauksessa.Suodatetussa pakassa ei voi olla alipakkoja.Median synkronoinnissa ilmeni ongelma. Valitse Työkalut>Tarkista media ja synkronoi sitten uudelleen ratkaistaksesi ongelman.Keskeytetty: %sTietoja AnkistaLisääLisää (pikanäppäinyhdistelmä: Ctrl + enter)Lisää kenttäLisää mediatiedostoLisää uusi pakka (Ctrl + N)Lisää muistiinpanotyyppiLisää kääntöpuoliLisää tunnisteitaLisää kohteeseen:Lisää: %sLisättyLisätty tänäänLisätty ensimmäisen kentän kaksoiskappale: %sUudestaanUudestaan tänäänUudelleen näyttettäväksi pyydettyjen korttien lukumäärä: %sKaikki pakatKaikki kentätKaikki kortin satunnaisessa järjestyksessä (opiskelutila)Kaikki tämän käyttäjätilin kortit, muistiinpanot ja mediatiedostot poistetaan. Oletko varma?Salli HTML kentissäTietokannan avaamisessa tapahtui virhe. Mahdolliset syyt: – Virustorjunta-, palomuuri-, varmuuskopiointi- tai synkronisointiohjelma saattaa puuttua Ankin toimintaan. Kokeile ottaa tämänkaltaiset ohjelmat pois käytöstä ja katso häviääkö ongelma. – Kovalevysi saattaa olla täynnä. – Kansio ”Tiedostot/Anki” saattaa olla verkkolevyllä. – Kansiossa ”Tiedostot/Anki” olevat tiedostot saattavat olla kirjoitussuojattuja. – Kovalevyssäsi saattaa olla virheitä. Hyvä ajatus on käynnistää ”Työkalut” > ”Tarkista tietokanta” sen varmistamiseksi, ettei kokoelmasi ole vioittunut. Kohdetta %s avattaessa tapahtui virheAnkiAnki 2.0 -pakkaAnki-pakkapakkausAnki ei voinut nimetä profiiliasi uudelleen, koska se ei voinut nimetä uudelleen levylle tallennettua profiilikansiota. Varmista, että sinulla oikeudet kansioon ”Tiedostot/Anki” eivätkä mitkään muut ohjelmat käytä profiilikansioitasi, ja yritä sitten uudelleen.Anki ei löytänyt kysymyksen ja vastauksen välistä rajaa. Mukauta mallinetta manuaalisesti vaihtaaksesi kysymyksen ja vastauksen välisen rajan.Anki on fiksu ja näppärä intervalliharjoittelun apuväline. Se on lisäksi ilmainen vapaan lähdekoodin ohjelma.Anki on lisenssoitu AGPL3-lisenssillä. Katso lisätietoja lähdejakelun lisenssitiedostosta.AnkiWeb-käyttäjätunnus tai -salasana on väärä. Yritä uudestaan.AnkiWeb-käyttäjätunnus:AnkiWebissä on virhe. Yritä uudestaan muutaman minuutin kuluttua ja jos ongelma jatkuu, lähetä virheraportti.AnkiWebissä on tällä hetkellä paljon liikennettä. Yritä uudestaan muutaman minuutin kuluttua.AnkiWebiä huolletaan. Yritä uudelleen muutaman minuutin kuluttua.VastausVastauspainikkeetVastauksetViruksentorjunta- tai palomuuriohjelma estää Ankia ottamasta yhteyttä internettiin.Kortit, joita ei ole liitetty mihinkään, poistetaan. Jos muistiinpanoon ei liity jäljelle jääviä kortteja, se katoaa. Oletko varma, että haluat jatkaa?Esiintyi kahdesti tiedostossa: %sOletko varma, että haluat poistaa kohteen %s?Vähintään yksi korttityyppi on annettava.Vaaditaan vähintään yksi vaihe.Toista äänitiedosto automaattisestiSynkronoi automaattisesti kun käyttäjätili avataan/suljetaanKeskiarvoVastausnopeusKeskimääräinen vastausaikaKeskimääräinen helppousOpiskelupäivien keskiarvoKeskimääräinen kertausväliKääntöpuoliKääntöpuolen esikatseluKääntöpuolen mallineVarmuuskopiotPerusasetuksetPerusmalli (ja käännetty kortti)Perusmalli (valinnainen käännetty kortti)SelaaSelaimen ulkoasuSelainasetuksetKokoaPiilotaPiilota korttiPiilota muistiinpanoPiilota tähän liittyvät uudet kortit seuraavaan päivään saakkaPiilota tähän liittyvät kertaukset seuraavaan päivään saakkaAnki yrittää tunnistaa erotinmerkin automaattisesti. Jos menee pieleen, voit itse syöttää erottimen tähän (pilkku, puolipiste, jne.). Tab on \tPeruutaKorttiKortti %dKortti 1Kortti 2Kortin tunnusKorttiluetteloKortin tyyppiKorttityypitKorttityypit kohteessa %sKortti piilotettu.Kortti hyllytetty.Kortti oli resurssisyöppö.KortitKortteja ei voi siirtää manuaalisesti suodatettuun pakkaan.Kortit muotoilemattomana tekstinäKortit palautetaan automaattisesti niiden alkuperäisiin pakkoihin kun olet kerrannut ne.Kortit...KeskitäMuuta%s →Vaihda pakkaaVaihda muistiinpanotyyppiäVaihda muistiinpanotyyppiä (Ctrl + N)Vaihda muistiinpanotyyppiä...Vaihda pakkaa muistiinpanotyypistä riippuenMuutettuTarkista &media...Tarkasta tiedostot mediakansiossaTarkistetaan...ValitseValitse pakkaValitse muistiinpanotyyppiValitse tunnisteetKloonaa: %sSuljeAvoinna olevan kortin tiedot katoavat. Haluatko sulkea ikkunan?AukkotehtäväKoodi:Kokoelma on vioittunut. Katso käyttöohjeista mitä tehdä.KaksoispistePilkkuKäyttöliittymän kieli ja asetuksetOnneksi olkoon! Olet käynyt tämän pakan kertaukset läpi toistaiseksi.Yhdistetään...Yhteys aikakatkaistiin. Joko internetyhteydessäsi on ongelmia tai sinulla on todella suuri tiedosto mediakansiossasi.JatkaKopioiVarmojen korttien oikeat vastaukset: %(a)d/%(b)d (%(c).1f%%)Oikein: %(pct)0.2f%%
(%(good)d/%(tot)d)Ei yhteyttä AnkiWebiin. Tarkista verkkoyhteytesi ja yritä uudestaan.Äänitys ei onnistunut. Oletko asentanut lamen ja soxin?Ei voitu tallentaa tiedostoa: %sOpiskellutLuo pakkaLuo suodatettu pakka...LuomisaikaCtrl + Alt + FCtrl + DCtrl + ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl + Shift + LCtrl + Shift + MCtrl + Shift + NCtrl + Shift + PCtrl+Shift+SCtrl + WCtrl+ZKumulatiivisetKumulatiiviset %sKumulatiiviset vastauksetKumulatiiviset kortitNykyinen pakkaNykyinen muistiinpanotyyppi:Mukautettu opiskeluMukautettu opiskeluistontoLeikkaaTietokanta on rakennettu uudelleen ja optimoituPäivämääräOpiskelupäivätPoista valtuutusVianjäljityskonsoliPakkaPakka tuodaan kun käyttäjätili avataanPakatLaskevat kertausvälitOletusarvoViivästykset, joiden jälkeen kerrattavat kortit näytetään uudestaan.PoistaPoista kortitPoista pakkaPoista tyhjätPoista muistiinpanoPoista muistiinpanotPoista tunnisteetPoista käyttämättömätHaluatko varmasti poistaa tämän kentän kohteesta %s?Poistetaanko '%(a)s'-korttityyppi ja sen %(b)s?Poistetaanko tämä muistiinpano ja kaikki sen kortit?Poistetaanko tämä käyttämätön muistiinpanotyyppi?Poistetaanko käyttämätön media?Poistettu %d kortti, josta puuttui muistiinpanot.Poistettu %d korttia, joista puuttui muistiinpanot.Poistettiin %d kortti, josta puuttui malline.Poistettiin %d korttia, joista puuttui malline.Poistettiin %d muistiinpano, josta puuttui muistiinpanotyyppi.Poistettiin %d muistiinpanoa, joista puuttui muistiinpanotyyppi.Poistettiin %d muistiinpano, jolla ei ole yhtään korttia.Poistettiin %d muistiinpanoa, joilla ei ole yhtään korttia.Poistettu %d muistiinpano, jossa on väärä kenttien määrä.Poistettu %d muistiinpanoa, joissa on väärä kenttien määrä.Poistettu.Tämän pakan poistaminen pakkalistasta palauttaa kaikki jäljellä olevat kortit niiden alkuperäisiin pakkoihin.KuvausOpiskelu-näytöllä näytettävä pakan kuvaus (koskee vain valittua pakkaa):ValintaikkunaLataa AnkiWebistäLadataan AnkiWebistä...ErääntyvätVain erääntyneet kortitErääntyy huomenna&LopetaHelppousHelppoVastauksesta "helppo" saatava bonusHelppo kertausväliMuokkaaMuokkaa nykyistäMuokkaa HTML:ääMuokattuMuokkausfonttiTyhjäTyhjät kortit...Tyhjien korttien numerot: %(c)s Kentät: %(f)s Tyhjiä kortteja löydetty. Valitse Työkalut > Tyhjät kortit.Tyhjä ensimmäinen kenttä: %sLopetusSyötä pakka, johon asetetaan uudet %s korttia tai jätä tyhjäksi:Syötä kortin uusi sijainti (1...%s):Lisättävät tunnisteet:Poistettavat tunnisteet:Virhe latauksessa: %sVirhe käynnistyksessä: %sVirhe muodostettaessa turvattua yhteyttä. Tämä johtuu yleensä virustorjunta-, palomuuri tai VPN-ohjelmistosta tai internet-palveluntarjoajastasi johtuvasta ongelmasta.Virhe suoritettaessa %s.Virhe ajettaessa %sVieVie...Tuotiin %d mediatiedostoTuotiin %d mediatiedostoaExtraFF1Tiedoston %d. kenttä on:KenttäliitoksetKentän nimi:Kenttä:KentätKentät kohteessa %sKenttien erotin: %sKentät...SuodatinSuodatin:SuodatettuSuodatettu pakka %dEtsi &kaksoiskappaleetEtsi kaksoiskappaleet&Etsi ja korvaa...Etsi ja korvaaLopetaEnsimmäinen korttiEnsimmäinen kertausEnsimmäinen kenttä täsmää: %sKorjattiin %d kortti, jossa oli virheellisiä ominaisuuksia.Korjattiin %d korttia, joissa oli virheellisiä ominaisuuksia.Korjattu AnkiDroid-pankan päälletallennusvirheKorjattu muistiinpanotyyppi: %sKäännä ympäriKansio on jo olemassaFontti:AlatunnisteTurvallisuussyistä "%s" ei ole sallittu korteissa. Voit yhä käyttää sitä sijoittamalla komennon eri pakkaukseen and tuomalla pakkauksen sitten LaTeX-ylätunnisteeseen.EnnusteLomakeLöytyi %(a)s, joissa on %(b)s.EtupuoliEtupuolen esikatseluEtupuolen mallineYleistäLuotu tiedosto: %sLuotu kohteeseen %sHanki jaettu pakkaHyväValmistujaiskertausväliHTML-muokkainVaikeaYlätunnisteOhjeSuurin helppousHistoriaAloitussivuTuntijakaumaTunnitTunteja, joiden aikana on ollut vähemmän kuin 30 kertausta, ei näytetä.Jos olet tehnyt työtä Ankin hyväksi, mutta et ole listalla, ota yhteyttä.Jos olisit opiskellut joka päiväÄlä huomioi pidempiä vastausaikoja kuinÄlä huomioi kirjasinkokoaJätä kenttä huomioimattaÄlä huomioi rivejä, joiden ensimmäinen kenttä vastaa olemassaolevaa muistiinpanoaUnohda tämä päivitysTuoTuo tiedostoTuo vaikka olemassa olevassa muistiinpanossa on sama ensimmäinen kenttäTuonti epäonnistui. Tuonti epäonnistui. Virheidenjäljitystietoa: TuontiasetuksetTuonti valmis.Mediakansiossa mutta ei käytössä yhdessäkään kortissa:Varmistaaksesi, että kokoelmasi toimii oikein laitteiden välillä siirryttäessä, Anki vaatii, että tietokoneesi sisäisen kellon täytyy olla oikeassa ajassa. Sisäinen kello voi olla väärässä vaikka järjestelmäsi näyttäisikin oikeaa paikallista aikaa. Siirry tietokoneesi aika-asetuksiin ja tarkista seuraavat asiat: - Näyttääkö 12 tunnin kello oikeaa vuorokauden aikaa (aamupäivä vai iltapäivä) - Kellon kulun oikea-aikaisuus - Päivä, kuukausi ja vuosi - Aikavyöhyke - Kesä-/talviaika Ero oikeaan aikaan on: %s.Sisältää mediatiedostojaLiitä ajastustiedotLiitä tunnisteet:Kasvata tämän päivän uusien korttien ylärajaaKasvata tämän päivän uusien korttien ylärajaaKasvata tämän päivän kerrattavien korttien ylärajaaKasvata tämän päivän kerrattavien korttien ylärajaKasvavat kertausvälitAsenna liitännäinenKäyttöliittymän kieli:KertausväliKertausvälimuokkaajaKertausvälitVirheellinen koodiViallinen tiedosto. Palauta aikaisempi versio varmuuskopiosta.Kortista löydettiin virheellinen ominaisuus. Valitse Työkalut>Tarkista tietokanta. Jos ongelma ilmenee uudelleen, pyydä apua tukisivulta.Säännöllinen lauseke on virheellinen.Se on hyllytetty.Siirry tunnisteisiin painamalla Ctrl+Shift+TPidäLaTeXLaTeX-yhtälöLaTeX matem. ympär.VirheetViimeinen korttiViimeisin kertausViimeisenä lisätty ensimmäisenäOpitutEnnalta opiskeltavien ylärajaOpitut: %(a)s, Kerratut: %(b)s, Uudelleen opitut: %(c)s, Suodatetut: %(d)sOpiskeltavatResurssisyöpön toimenpideResurssisyöpön alarajaVasenRajoitaLadataan…Pisin kertausväliEtsi kentästä:Matalin helppousHallintaHallinnoi muistiinpanotyyppejä...Liitä kenttään %sLiitä tunnisteisiinVarmatEnimmäiskertausväliKertausten enimmäismäärä/päiväMediatiedostotVähimmäiskertausväliMinuutitSekoita uudet kortit ja kertauksetMnemosyne 2.0 -pakka (*.db)LisääEniten virheitäSiirrä kortitSiirrä kortit pakkaan:Muistiinpan&oNimi on olemassa.Pakan nimi:Nimi:VerkkoUudetUudet kortitVain uudet kortitUusia kortteja/päiväUuden pakan nimi:Uusi kertausväliUusi nimi:Uusi muistiinpanotyyppi:Uusi valintaryhmän nimi:Uusi sijainti (1...%d):Uusi päivää alkaaEi vielä erääntyneitä kortteja.Yksikään kortti ei vastaa annettuja ehtojaEi tyhjiä kortteja.Yhtään varmaa korttia ei opiskeltu tänään.Käyttämättömiä tai puuttuvia tiedostoja ei löytynytMuistiinpanoMuistiinpanon tunnusMuistiinpanotyyppiMuistiinpanotyypitMuistiinpano ja sen %d kortti poistettu.Muistiinpano ja sen %d korttia poistettu.Muistiinpano piilotettu.Muistiinpano hyllytetty.Huomautus: Mediatiedostoista ei ole otettu varmuuskopiota. Ota Anki-kansiostasi säännöllisin väliajoin varmuuskopio, että tiedostosi ovat turvassa.Huomautus: osa historiasta puuttuu. Katso lisätietoja selaimen dokumentaatiosta.Muistiinpanot pelkkänä tekstinäMuistiinpanoissa täytyy olla vähintään yksi kenttä.Merkityt muistiinpanotei mitäänOKVanhin nähty ensinSeuraavassa sykronoinnissa pakota muutokset toiseen suuntaanYhtä tai useampaa muistiinpanoa ei tuotu, koska ne eivät luoneet yhtään korttia. Näin voi tapahtua kun muistiinpanossa on tyhjiä kenttiä tai kun et ole liittänyt tekstitiedoston sisältöä oikeisiin kenttiin.Vain uusien korttien sijaintia pakassa voi muuttaa.Vain yhdellä asiakasohjelmalla kerrallaan on pääsy AnkiWebiin. Jos edellinen synkronointi epäonnistui, yritä uudestaan muutaman minuutin kuluttua.AvaaOptimoidaan...Valinnainen yläraja:ValinnatValinnat kohteessa %sValintaryhmä:Valinnat...JärjestysJärjestä lisätytJärjestä erääntyvätSyrjäytä kääntöpuolen malline:Syrjäytä fontti:Syrjäytä etupuolen malline:Salasana:LiitäLiitä leikepöydän kuvat PNG-muodossaPauker 1.8 oppitunti (*.pau.gz)ProsenttiosuusAjanjakso: %sSijoita uuden korttijonon loppuunAseta kertausjonoon kertausvälillä:Lisää toinen muistiinpanotyyppi ensin.Yhdistä mikrofoni ja varmista, etteivät muut ohjelmat käytä audiolaitetta.Muokkaa tätä muistiinpanoa ja lisää aukkotehtäviä. (%s)Varmista, että käyttäjätili on auki eikä Anki ei käsittele muuta tietoa ja yritä sitten uudestaan.Asenna PyAudioAvaa ensin käyttäjätiliPoista kansio ”%s” ja yritä uudelleen.Käynnistä Anki uudelleen, niin että kielivalinnan muutos tulee voimaan.Valitse Työkalut > Tyhjät kortitValitse pakkaValitse vain yhden muistiinpanotyypin kortteja.Valitse jotain.Päivitä Ankin uusimpaan versioon.Käytä toimintoa Tiedosto>Tuo tämän tiedoston tuontiin.Käy AnkiWebissä, päivitä pakkasi ja yritä sitten uudestaan.SijaintiAsetuksetEsikatseluEsikatsele valittuja kortteja (%s)Esikatsele uusia korttejaEsikatsele uusia kortteja, jotka on lisätty viimeisenäKäsiteltiin %d mediatiedostoKäsiteltiin %d mediatiedostoaKäsitellään...KäyttäjätilitVälityspalvelimen todentaminen vaaditaan.KysymysJonon loppu: %dJonon alku: %dLopetaSatunnainenSekoita järjestysLuokitusKoosta uudelleenNauhoita oma ääniteNauhoitetaan...
Kesto: %0.1fSuhteellinen erääntyneisyysUudelleenopitutMuista viimeisin syötetty tieto lisätessäTämän korttityypin poistaminen aiheuttaa yhden tai useamman muistiinpanon poistamisen. Luo ensin uusi korttityyppi.Nimeä uudelleenNimeä pakka uudelleenToista äänitiedostoToista oma ääniteUuden sijainnin määrittäminenMääritä uusi sijainti pakassa uusille korteilleUuden sijainnin määrittäminen...Vaadi yksi tai useampi näistä tunnisteista:UudelleenajastusAjasta uudelleenAjasta kortit uudestaan perustuen vastauksiini tässä pakassaJatka nytPäinvastainen tekstinsuunta (RTL)Palautettu "%s" edeltävään tilaan.KertausKertausten lukumääräKertausaikaKertaa etukäteenKertaa ennaltaKertaa unohdetut kortit viimeiseltäKertaa unohdettuja korttejaKertausten onnistumisaste tunneittainKertauksetOikeaKohde: %sEtsiEtsi muotoiluista (hidas)ValitseValitse &kaikkiValitse &muistiinpanotValitse poissuljettavat tunnisteet:Valittu tiedosto ei ollut UTF-8-muodossa. Katso käyttöohjeen tuonti-osio.Valikoiva opiskeluPuolipistePalvelinta ei löytynyt. Joko yhteytesi on katkennut tai virustorjunta-/palomuuriohjelma estää Ankin yhteyden internetiin.Asetetaanko kaikki %s alapuoliset pakat tähän valintaryhmään?Aseta kaikille alipakoilleShift-näppäin oli painettuna. Ohitetaan automaattinen synkronointi ja liitännäisten lataus.Vaihda olemassa olevien korttien sijaintiaPikavalintanäppäin: %sPikanäppäinyhdistelmä: Vasen nuoliPikanäppäinyhdistelmä: Oikea nuoli tai EnterOikotie: %sNäytä %sNäytä vastausNäytä kaksoiskappaleetNäytä vastausaikaNäytä uudet kortit kertausten jälkeenNäytä uudet kortit ennen kertauksiaNäytä uudet kortit lisäysjärjestyksessäNäytä uudet kortit satunnaisessa järjestyksessäNäytä seuraava kertausaika vastauspainikkeiden yläpuolellaNäytä jäljellä olevien korttien lukumäärä kertauksen aikanaKoko:Joitakin kertaamiisi kortteihin liittyviä tai piilotettuja kortteja viivästettiin myöhempään istuntoon.Osa asetuksista tulee voimaan vasta Ankin uudelleenkäynnistyksen jälkeen.Jotkin päivityksistä jätettiin huomiotta, koska muistiinpanotyyppi on muuttunut:LajittelukenttäLajittele tämän kentän mukaan selaimessaLajittelu tämän sarakkeen mukaan ei ole mahdollista. Valitse toinen sarake.VälilyöntiAloitussijainti:AloitushelppousTilastotVaihe:Vaiheet (minuuteissa)Vaiheiden täytyy olla numeroita.Opiskeltu tänäänOpiskeleOpiskele pakkaaOpiskele pakkaa...Opiskele nytOpiskele kortin tilan tai tunnisteen mukaanMuotoiluMuotoilu (jaetaan korttien välillä)Supermemo XML -vienti (*.xml)HyllytäHyllytä korttiHyllytä muistiinpanoHyllytetytHyllytetyt + piilotetutSynkronoi myös äänitiedostot ja kuvatSynkronointi epäonnistui: %sSynkronointi epäonnistui, ei internet yhteyttä.Synkronointi vaatii, että tietokoneesi kello on asetettu oikeaan aikaan. Korjaa kellonaika oikeaksi ja yritä uudestaan.Synkronoidaan...SarkainLisää tunniste kaksoiskappaleisiinLiitä vain tunnisteTunnisteetKohdepakka (Ctrl + D)Kohdekenttä:TekstiSarkaimilla tai puolipisteillä eroteltu teksti (*)Pakka on jo olemassaKentän nimi on jo käytössä.Tämä nimi on jo käytössä.Yhteys AnkiWebiin katkesi. Tarkista verkkoyhteytesi ja yritä uudestaan.Oletusasetuksia ei voi poistaa.Oletuspakkaa ei voi poistaa.Korttien jakautuminen pakkaasi/pakkoihisi.Ladattu tiedosto oli viallinen. Yritä uudelleen.Ensimmäinen kenttä on tyhjä.Muistiinpanotyypin ensimmäinen kenttä on liitettävä.Seuraavaa merkkiä ei voida käyttää: %sTämän kortin etupuoli on tyhjä. Suorita Työkalut > Tyhjät kortit.Syöttämäsi tieto lisää tyhjän kysymyksen kaikkiin kortteihin.Uusien lisäämiesi korttien lukumäärä.Vastaamiesi kysymysten määrä.Tulevaisuudessa erääntyvien kertausten määrä.Kunkin painikkeen painalluskertojen määrä.Järjestelmäsi väliaikaistiedostokansion käyttöoikeudet ovat virheelliset eikä Anki saa korjattua niitä automaattisesti. Etsi lisätietoja hakusanalla "temp folder" Ankin käyttöohjeesta.Tarjottu tiedosto ei ole kelvollinen .apkg-tiedosto.Annetut hakuehdot eivät vastanneet yhtään korttia. Haluatko korjata hakuehtojasi?Pyytämäsi muutos vaatii tietokannan täyden lähetyksen AnkiWebiin kun synkronoit kokoelmasi seuraavan kerran. Jos sinulla on kertauksia tai muita muutoksia odottamassa toisessa laitteessa, jota ei ole vielä synkronoitu tänne, nämä synkronoimattomat tiedot katoavat. Haluatko jatkaa?Kysymyksiin vastaamiseen käytetty aika.Pakassa on vielä uusia kortteja, mutta päivittäinen yläraja on tullut vastaan. Voit kasvattaa ylärajaa valinnoissa, mutta pidä mielessä että mitä enemmän uusia kortteja alat opiskella sitä suuremmaksi lyhyen aikavälin kertauskuormasi tulee.On luotava vähintään yksi käyttäjätili.Et voi lajitella tämän sarekkeen mukaan, mutta voit etsiä tietystä pakasta klikkaamalla haluamaasi pakan nimeä vasemmalta.Tämä tiedosto ei vaikuta olevan kelvollinen .apkg-tiedosto. Jos saat tämän virheen AnkiWebistä ladatusta tiedostosta, voi olla, että latauksesi epännistui. Yritä uudelleen ja jos ongelma jatkuu, yritä uudelleen eri selaimella.Tiedosto on olemassa. Haluatko korvata sen?Tämä kansio sisältää kaikki Anki-tietosi yhdessä sijainnissa että varmuuskopiointi olisi helpompaa. Jos halut Ankin käyttävän eri sijaintia, katso: %s Tämä on erikoispakka, jota käytetään normaalin ajastuksen ulkopuoliseen opiskeluun.Tämä on {{c1::sample}} aukkotehtävä.Olet poistamassa olemassa olevaa kokoelmaasi ja korvaamassa sitä tuotavassa tiedostossa olevalla tiedolla. Oletko varma?AikaMääritetyn ajan ylärajaKerrattavatVoidaksesi tehdä aukkotehtävän olemassa olevasta muistiinpanosta, sinun täytyy ensin muuttaa se aukkotehtävätyypiksi: Muokkaa>Vaihda muistiinpanotyyppiäNähdäksesi ne nyt, klikkaa alla olevaa Poista piilotus -painetta.Opiskellaksesi normaalin ajastuksen ulkopuolella, klikkaa allaolevaa Mukautettu opiskelu -painiketta.TänäänTämän päivän kertausyläraja on tullut vastaan, mutta jonossa on vielä kerrattavia kortteja. Harkitse päivittäisen ylärajan nostamista valinnoissa muistamisen optimoimiseksi.YhteensäKokonaisaikaKortteja yhteensäMuistiinpanoja yhteensäTulkitse syöte säännöllisenä lausekkeenaTyyppiKirjoita vastaus: tuntematon kenttä %sVain luku -tilassa olevaa tiedostoa ei voida tuoda.Poista piilotusKumoaKumoa %sTuntematon tiedostotyyppiEi vielä nähdytPäivitä olemassa olevat muistiinpanot kun ensimmäinen kenttä täsmääPäivitettiin %(a)d/%(b)d olemassa olevista muistiinpanoista.Lähetä AnkiWebiinLähetetään AnkiWebiin...Käytetty korteissa mutta puuttuu mediakansiosta:Käyttäjä 1Versio %sOdotetaan että muokkaus valmistuu.Varoitus: aukkotehtävät eivät toimi ennen kun vaihdat tyypin ylhäältä aukkotehtäväksi.Kun lisätään, on oletuksena nykyinen pakkaKoko kokoelmaHaluatko ladata sen nyt?Sinulla on aukkotehtävätyyppi, mutta et ole tehnyt yhtään aukkotehtävää. Jatketaanko?Sinulla on useita pakkoja. Katso %(a)s. %(b)sEt ole vielä nauhoittanut ääntäsi.Pitää olla vähintään yksi sarake.NuoretNuoret + OpitutMuutoksesi vaikuttavat useisiin pakkoihin. Jos haluat muuttaa vain nykyistä pakkaa, lisää ensin uusi valintaryhmä.Kokoelmasi on epävakaassa tilassa. Valitse Työkalut > Tarkista tietokanta ja synkronoi sitten uudelleen.Kokoelmasi tai media-tiedostosi on liian suuri synkronoitavaksi.Kokoelmasi lähetettiin onnistuneesti AnkiWebiin. Jos käytät mitä tahansa muita laitteita, synkronoi ne nyt ja valitse juuri tältä koneelta lähettämäsi kokoelman lataus. Tämän jälkeen tulevat kertaukset ja lisätyt kortit yhdistetään automaattisesti.Tässä olevat pakkasi ja pakkasi AnkiWebissä eroavat toisistaan sellaisella tavalla, ettei niitä voida yhdistää, joten on välttämätöntä kirjoittaa jommat kummat pakat yli jommilla kummilla pakoilla. Jos valitset lataamisen AnkiWebistä, Anki lataa kokoelman AnkiWebistä ja kaikki mahdolliset edellisen synkronoinnin jälkeen tekemäsi muutokset katoavat. Jos valitset lähetyksen Ankiwebiin, Anki lähettää kokoelmasi AnkiWebiin ja kaikki mahdolliset muutokset, jotka olet tehnyt AnkiWebissä tai toisella laitteellasi edellisen synkronoinnin jälkeen, katoavat. Sen jälkeen kun kaikki laitteet ovat synkronoitu, tulevat kertaukset ja lisätyt kortit voidaan yhdistää automaattisesti.[ei pakkaa]varmuuskopiotakortillakorttia pakastakorttiin, jotka on valittu perusteellakokoelmapvpäiv.pakkapakan elinkaarikaksoiskappaleohjepiilotatuntiatuntia yli keskiyönvirheetvähemmän kuin 0,1 korttia/minuutissaliitetty kenttään %sliitetty tunnisteisiinminminuuttiakkkertaustasekuntiatilastottämä sivuvkokoko kokoelma~anki-2.1.0+dfsg~b36/locale/fr/000077500000000000000000000000001323611211500157255ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/fr/LC_MESSAGES/000077500000000000000000000000001323611211500175125ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/fr/LC_MESSAGES/anki.mo000066400000000000000000002335311323611211500210000ustar00rootroot00000000000000r<7I I III"II IJJ6J8HJJJJJ"J$J$K&3K"ZK}K4K2KK L"&L$IL$nL$L LLLMMM.MCMZMmM MMMMMMMM MMMMMM N NNNN #N-N 3N>NGN YNdNkNNNNNNNN0N OO,O 2O =OHONOaOxO|O P PPPP"P'P+P/PT3PP,P(PP!P!Qf9QQ QQ Q QQQR$Re;RR7KSHS)U VW5WXIWYW%Wk"X X XXXX X XX X YY "Y.Y6Y'SY{YYYY Y$YY YYY Y Z%ZK5ZZZC["']J] O]]]u]]i^I^R7_v_`7` `w`Ega@aaabR b_bhbb#c#*cNc mczc d("dKd Sd`d tdddd d d dddde e ;eEeXeJ_eeeeeee e e) f'3f[fgg#g+g2g9g Ag Kg Vg `g kgvg gggg3ggShYhbhih ph ~hhhhhh"hii0iii&ij ,j8j ?jKj \j hj sjj jjj jjjjj- k8k>kDk Kk(Yk5k kkJlSl8Xl5lPl7mPmgm lmxm#mmmmmmm m m mnnnnn%n,n3n:n An Nn [n hn un n n n n nnn n nnn oo .o;oPoToto yo o ooo/ooop% p/p 6p Cp Op \p hp up pp,p(ppqF.qNuqPq>rPTrr]r s8sQsXsnssss ssss s ss s s tt t"t(t)7t0attt4t!tuu#,uPufuuvv&v -v.7vfvlvnvqv v vvv vv vv+vw w*w2w;wLw`wpwww w wwNw"x?xSx Xxbxgx~xxx;yDyIycy iywyyyyy yyy y yy,z-z4z 9zFzNzSzdz.jzFzzz { %{42{g{z{ {1{{{{{*|=| }} ~~"5~"X~ {~~~~~~ ~?~ 9G$_)22Ǹр׀ (.<@}  5 %7 L V ` lv}ۂ N%t z &ك   +CZmu+#DŽ! #( 0 :<E ]a_!s ,#kهEJ Ygw  Ĉ܈5 :DJh ,#V 8bE*50`,ċ- +88d Ռ#0 <JS r~ ɍэ.6#Vziю;B V/b  ӏ " !1, ^i  ̐ ؐ-+Y(a Ƒ͑ V&} ,G\Gw " -: BN^nٔ*'#KS@Y68ѕ !?7w} Ŗ ܖ   " 0:U]| ɗ ֗  $!7dY ɘ͘ܘ  (; UvX+"&9+`0+ך>FB'*(ܛ17,I"l'\#p_eZ8QC(^Fr΢AF Ycu/M å ɥ ԥ !'1LYŦʦҦ.&;bt, ˧ ܧU$\"ZS0d$"ݩ {k^5U%}{  % 7BDI N XbglrҰװ߰ 8 P\ kv( )γG Rbs+)ƴ)).DsXA# 49U9'ɶ'+E%` ˷ )-15:> BPk,s  ø ̸ ָ $<L"SvѹٹB%4D JU ep 57:AFLRW\abĻ2ƻ7)1"[~~ 6Hfw̽tFEz2 \[(0(Y %"-Pn" 5;q z 8  6G*W_ 1`!R`sBU~JF 1K;),-V% /A+#=arx % * 8 FOP >(0gqy  !/ILPE -?T!m'927Rck}#' >HWu}G  4D9 ~ '1B88{`E-[)   *5 <GNU\cjq x    0>R$l34.ck @  2F!^2A'#7[[EdIbg c 4"&*DY bls"  6);`L*'3[,z'"! )!')$,Qk{ B  -5G_t%9@1r    2C]fn  , -A4[v$)!27C{<8:R<i%'*'#*Kv  B0?"W5z uJ& <FL\mt L #/H^ e pT~"; Waq .% A+Nz&^1AI Q[Tl%4'Lt90(4C2x ]Zjtz]M$\$J9~* ' <J`{9 '3=BE4s8oX%'$B-gG.! G.-v'C.  7 E .M | 0 6      8 H  Q #r        $  . M &a ,  "   1    < ' 6  E  S "a  ,   9 &F-a   - >( gGr   ## GR ft %3G"+pD(!,= LXm218%R@x: QL`R)E?  " &E^gz!# 1;N`i}/#8    E"h#j:(2c)/8 6CUzB6?JYG,6I5!J  !w "}"#=$Z$J %5T%D%%R&!Y& {&&`'C(oI( (()) )))2)*$*A5*nw***+ ++$+I,+%v+.+++?, @, N,Y,q,-,,%B-h-0|-y-k'.I.*.&/ // 9/C/a/V1M1?22r2o55 666/6 J6U6W6_6 f6t6|66666666 677 77 '7 47?7C7W7\)m;?|Oc ;bIh r*VaJ f^U,` x|+OjF" >gap2B37z;\iYK5.;R,1p"ZT5a$g +4}PmuiS{}a:_s\-Bgg/uq3t#5'789:<Q61+NbG DH!]O]=nI$Qlvqv%EqGo[x*:Z0o?Z2'FD<EjU N'(R>7lPFj/3VT"X8A'NUHY(cnBvylnH^y 1:_M?R]PI*LSkCl&MjKwrWu@#L [ dGp0~e0DWh)I ~{<p d&)%8CXkY6s)^E@ft _O9?[kT*@o(Brb= K3"e R+$,ih-L/}S09J.(k@4 2DSCnQ6 `<HWbV$ePo|!%dM8JfqJ&W7CN9`m{c.rc] A-G_ >#=&A%V Z ,-./24f1 wz#=U>AtQM !XwKx!mi^~\hX`yd4Tz6e5FLEYs[ (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFile version unknown, trying import anyway.FilterFilter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Map to %sMap to TagsMark NoteMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied %(a)s %(b)s today.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: Anki 0.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-12-28 18:01+0000 Last-Translator: Jonathan Language-Team: LMS MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n > 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) X-Poedit-Country: FRANCE Language: X-Poedit-Language: French X-Poedit-SourceCharset: utf-8 X-Poedit-Basepath: /usr/share/anki/ankiqt (1 sur %d) (désactivé) (inactif) (actif) Contient %d carte. Contient %d cartes.%% correctes%(a)0.1f %(b)s par jour%(a)0.1fkB montant, %(b)0.1fkB descendant%(a)0.1fs (%(b)s)%(a)d sur %(b)d note mise à jour.%(a)d sur %(b)d notes mises à jour.%(n)d: %(name)s%(tot)s %(unit)s%.01f cartes/minute%d carte%d cartes%d carte supprimée.%d cartes supprimées.%d carte exportée.%d cartes exportées.%d carte importée.%d cartes importées.%d carte étudiée.%d cartes étudiées.%d paquet mis à jour.%d paquets mis à jour.%d groupe%d groupesIl y a %d changement de médias à uploaderIl y a %d changements de médias à uploader%d fichier média téléchargé%d fichiers média téléchargés%d note%d notes%d note de plus%d notes de plus%d note a été supprimée%d notes ont été supprimées%d note a été exportée.%d notes ont été exportées.%d note introduite%d notes introduites%d note inchangée%d notes inchangées%d note mise à jour%d notes mises à jour%d révision%d révisions%d sélectionnées%d sélectionnéesCopie de %s%s jour%s jours%s heure%s heures%s minute%s minutes%s minute.%s minutes.%s mois%s mois%s seconde%s secondes%s à supprimer :%s an%s ans%sd%sh%sm%smo%ss%syÀ &propos...&Parcourir et installer...&Cartes&Vérifier l'intégrité la base de données&Bachoter…&Éditer&Exporter...&Fichier&Chercher&Déplacement&Aide&Manuel en ligne (en anglais)&Aide&Importer...&Info...&Inverser la sélectionCarte &suivante&Notes&Ouvrir le dossier des greffons...&Préférences...Carte &précédente&Replanifier...&Soutenir Anki...&Changer de compte&OutilsA&nnuler« %(row)s » avait %(num1)d champs au lieu des %(num2)d prévus(%s correctes)(Note effacée)(fin)(filtrée)(apprentissage)(inédite)(limite parent : %d)(veuillez sélectionner 1 carte)...Les fichiers portant l’extension .anki2 ne peuvent servir à l’import-export ; le manuel vous précise les modalités de sauvegarde./0j1 mois1 an10 h22 h3 h4 h16 hErreur 504 d'attente de passerelle reçue. Essayez de désactiver temporairement votre antivirus.:%d carte %d cartes Ouvrir le dossier des sauvegardesVisiter le site internet%(pct)d%% (%(x)s sur %(y)s)%d/%m/%Y @ %H:%MSauvegardes
Anki va créer une sauvegarde de votre collection à chaque fois qu’elle est fermée ou synchronisée.Format d’exportation :Trouver :Taille de la police :Police :dans :Inclure :Longueur de ligne :Remplacer par :SynchronisationSynchronisation
Désactivée pour le moment ; pour l’activer cliquez sur le bouton de synchronisation dans la fenêtre principale.

Compte requis

Vous devez posséder un compte pour pouvoir synchroniser votre collection. Merci de créer un compte gratuitement, puis entrez les informations de connexion ci-dessous.

Mise à jour de Anki

La version %s vient de paraître.

Erreur

 

Une erreur est survenue. Veuillez démarrer Anki avec la touche majuscule enfoncée, ce qui désactivera temporairement les greffons que vous avez installés.

 

Si le problème ne survient que lorsque les greffons sont activés, veuillez utiliser le menu Outils>Greffons afin de désactiver certains greffons. Redémarrez Anki jusqu'à ce que vous découvriez le greffons qui cause le problème.

 

Une fois ce greffon découvert, merci de signaler le problème sur la section greffons (add-on section) de notre site de support. 

Info de débogage:

Erreur

Une erreur est survenue. Veuillez utiliser Outils > Vérifier l’intégrité de la base de données... afin de voir si cela règle le problème.

Si le problème subsiste, merci de le signaler sur notre site de support. Veuillez copier et coller les informations ci-dessous dans votre signalement.

< Entrez ici votre recherche ou bien appuyez Entrée pour voir le paquet actuel entier >Un grand merci à tous ceux qui ont contribué par leurs suggestions, diagnostics, ou dons.L’indice de facilité d’une carte correspond à l’intervalle de temps (en jours) qui serait affiché au-dessus du bouton de révision « Correct ».un paquet de carte ne peut avoir de sous-paquetsUn problème est survenu pendant la synchronisation des médias. Veuillez utiliser Outils > Vérification des médias, puis synchroniser de nouveau pour corriger l'erreur.Annulé  %sÀ propos d’AnkiAjouterAjouter (raccourci :Ctrl+Entrée)Ajouter une sorte de carte...Ajouter un champAjouter des médiasAjouter un nouveau paquet (Ctrl+N)Ajouter un type de noteAjouter le versoAjouter des marqueursAjouter des marqueurs...Ajouter à :Le greffon n'est pas configuréLe greffon n'a pas été téléchargé depuis AnkiWebGreffonsAjouter…Ajouter : %sAjoutéAjouté aujourd’huiUn doublon a été ajouté avec comme premier champ : %sÀ revoirÀ nouveau aujourd’huiOublis : %sToutes les sortes de cartesTous les paquetsTous les champsToutes les cartes dans un ordre aléatoireL’intégralité des cartes, notes et médias du profile seront supprimées. Êtes-vous sûr ?Tolérer du HTML dans les champsUn greffon que vous avez installé n'a pu se charger. Si le problème persiste, allez dans le menu Outils>Greffons et désactivez ou supprimez ce greffon. Au chargement de '%(name)s': %(traceback)s Une erreur est survenue lors de l'accès à la base de données. Causes possibles : - Un logiciel antivirus, pare-feu, de sauvegarde, ou de synchronization interfère peut-être avec Anki. Essayez de désactiver ce genre de logiciels et voyez si le problème persiste. - Votre disque est peut-être plein. - Le dossier Documents/Anki est peut-être sur un disque réseau. - Anki n'a peut-être pas la possibilité d'écrire des fichiers dans le dossier Documents/Anki. - Votre disque présente peut-être des erreurs. Il serait bien de faire Outils > Vérifier l’intégrité de la base de données… pour s'assurer que la collection n'est pas corrompue. Une erreur est survenue lors de l'ouverture de %sAnkiPaquet ANKI 2.0Collection des paquets AnkiTas de paquets ANKIAnki n'a pas pu renommer votre profil car il n'a pas réussi à renommer le dossier profil sur le disque. Veuillez vous assurez que vous avez bien la permission d'écrire dans Documents/Anki et qu'aucune autre application n'est en train d'accéder à vos dossiers profils, puis réessayez.Anki n’a pas pu trouver la ligne entre la question et la réponse. Veuillez ajuster le modèle manuellement pour intervertir question et réponse.Anki n'accepte pas de fichiers dans les sous-dossiers du dossier collection.media.Anki est un logiciel de répétition espacée convivial et intelligent. Il est libre et gratuit.Anki est sous licence AGPL3. Veuillez voir le fichier licence dans la distribution source pour plus d'informations.Anki n'a pas été capable d'ouvrir votre collection. Si le problème persiste après un redémarrage de votre ordinateur, veuillez utiliser le bouton Ouvrir une Sauvegarde dans le gestionnaire de profile. Info de débogage: Votre identifiant Ankiweb ou votre mot de passe sont incorrects. Merci de réessayer.Identifiant Anki :Ankiweb a rencontré un problème, réessayez un peu plus tard et si le problème persiste, remplissez-nous un rapport de bug.Ankiweb est actuellement surchargé. Veuillez réessayer un peu plus tard.AnkiWeb est en maintenance. Veuillez réessayer dans quelques minutes.RéponseBoutons de réponseRéponsesUn logiciel antivirus ou pare-feu empêche Anki de se connecter au réseau.Tous les marqueursToute carte qui n’est reliée à rien sera supprimée. Si une note n’a plus de cartes restantes, elle sera perdue. Procéder tout de même ?Apparaît en double dans le fichier : %sÊtes-vous sûr(e) de vouloir supprimer %s ?Au moins un type de carte est requis.Au moins une étape est requise.Joindre des images/fichiers audios/vidéos (F3)La synchronisation et la sauvegarde automatiques ont été désactivées lors de la restauration. Fermer ce profil ou redémarrer Anki pour les réactiver.Jouer l’audio automatiquementSynchroniser automatiquement à l’ouverture et à la fermeture.MoyenneDurée moyenneDurée de réponse moyenneFacilité moyenneMoyenne (par jour travaillé) Intervalle moyenVersoAperçu du versoModèle du versoEn train de sauvegarder...SauvegardesBasiqueGénéralités (deux sens)Basique (carte inversée optionnelle)Basique (saisissez la réponse)Marqueur bleuGras (Ctrl-B)ParcourirParcourir (%(cur)d carte vue; %(sel)s)Parcourir (%(cur)d cartes vues; %(sel)s)Apparence du navigateurApparence du navigateur...Options de l’explorateurGénérerEnfouiEnfouirEnfouir la carteEnfouir la noteEnfouir les nouvelles cartes associées jusqu'au prochain jourEnfouir les révisions liées jusqu'au lendemainAnki sait détecter les signes de ponctuation tels les virgules ou les tabulations. Mais si la détection automatique échoue, le caractère peut être entré manuellement ici. Pour écrire une tabulation, entrez \t.AnnulerCarteCarte %dCarte 1Carte 2Identifiant carteListe des cartesÉtat de la carteType de carteType de carte:Types de cartesTypes de cartes pour %sCarte enfouie.Carte exclue.Cette carte est pénible.CartesLes cartes ne peuvent être déplacées manuellement dans un paquet filtré.Cartes avec texte en clairLes cartes reviendront à leurs paquets d’origine après révision.Cartes...CentreModifierTransformer %s en :Changer de paquetChanger de paquet...Modifier le type de noteModifier le type de note (Ctrl+N)Modifier le type de la note...Changer de couleur (F8)Changer le paquet selon le type de noteModifiéLes changements ci-bas affecteront %(cnt)d note utilisant ce type de carte.Les changements ci-bas affecteront %(cnt)d notes utilisant ce type de carte.Les changements seront effectifs au redémarrage de Anki.Vérification des &médias...Vérifier les mises à jourVérifier les fichiers dans le dossier des médiasVérification du média...Vérification...ChoisirChoisir le paquetChoisir le type de noteChoisir les marqueursSupprimer le marqueurSupprimer les inutilisésSupprimer les marqueurs inutilisésDupliquer : %sFermerFermer en perdant la saisie en cours ?Fermer...Texte à trousTexte à trous (Ctrl+Shift+C)Code :Collection exportée.Le fichier de la collection est corrompu. Il existe un manuel en ligne.Deux-pointsVirguleConfigConfigurationConfigurer les options et la langue de l’interfaceFélicitations ! Vous en avez fini avec ce paquet pour l’instant.Connexion...Temps de connexion trop long. Il est probable que votre connexion rencontre des problèmes, ou vous avez de trop gros fichiers dans votre dossier 'Média'.ContinuerCopierRéponses exactes sur les cartes matures : %(a)d/%(b)d (%(c).1f%%)Connues : %(pct)0.2f%%
(%(good)d sur %(tot)d)Impossible de se connecter à Ankiweb. Merci de vérifier votre connexion réseau et réessayez.Impossible d’enregistrer du son. Avez-vous installé lame et sox ?Le fichier %s n’a pas pu être sauvegardé.BachoterCréer un paquetCréer un paquet filtré...Créez des images ajustables avec dvisvgmCrééeCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+SupprCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Maj+ACtrl+Maj+DCtrl+Maj+FCtrl+Maj+ICtrl+Maj+LCtrl+Maj+MCtrl+Shift+NCtrl+Maj+PCtrl+Maj+RCtrl+Maj+SCtrl+WCtrl+ZCumulé%s cumuléesRéponses cumuléesCartes cumuléesPaquet actuelType de note actuelRévisions particulièresSéance de révisions particulièresCouperLa base de données est reconstruite et optimisée.DateJours travaillésSupprimer l'autorisationConsole de débogagePaquetDeck pour cette carteLe paquet sera importé quand un compte sera ouvert.PaquetsIntervalles décroissantsPar défautLe nombre de cartes en fonction de leur intervalle de révision.SupprimerSupprimer les cartesSupprimer le paquetSupprimer les cartes videsSupprimer la noteSupprimer les notesSupprimer les marqueursSupprimer les médias inutilisésRetirer le champ de %s ?Supprimer le type de carte '%(a)s', et ses %(b)s ?Supprimer ce type de note et toutes les cartes correspondantes ?Supprimer ce type de note inutilisé ?Supprimer les médias inutilisés ?Carte %d supprimée avec une note manquante.Cartes %d supprimées avec une note manquante.%d carte sans modèle supprimée.%d cartes sans modèle supprimées.Suppression d’une note dont il manquait le type.Suppression de %d notes dont il manquait le type.Suppression d’%d note sans cartes.Suppression de %d notes sans cartes.%d note avec comptage de champ erroné supprimée.%d notes avec comptage de champ erroné supprimées.Supprimé.En supprimant le paquet de la liste des paquets, ses cartes reviendront à leur paquet d’origine.DescriptionDescription du paquet sur le panneau de révision :DialogueTélécharger depuis AnkiwebTéléchargés %(fname)sTéléchargement depuis Ankiweb...DûSeulement les cartes duesPrévues pour demain&QuitterFacilitéFacileFacilité bonusIntervalle pour les cartes facilesModifierModifier "%s"Modifier la carte en coursModifier le HTMLmodifiéPolice d’écritureVideChercher des cartes vides...Numéro(s) des cartes vides : %(c)s Champs : %(f)s Cartes vides trouvées. Veuillez lancer Outils>Cartes videsPremier champ vierge : %sFinIndiquez dans quel paquet placer les %s nouvelles cartes, ou laissez vide :Entrez la position de la carte (1…%s) :Saisir le(s) marqueurs(s) à ajouter :Supprimer via les marqueurs :Erreur en téléchargeant %(id)s : %(error)sErreur durant le téléchargement : %sErreur au démarrage : %sErreur lors de l'établissement d'une connection sécurisée. Cela est généralement causé par des antivirus, pare-feux ou des logiciels VPN, ou des problèmes avec votre FAI.Problème à l’exécution de %s.Problème à l’exécution de %sExporterExporter...%d fichier exporté%d fichiers exportésExtraFF1Le champ %d du fichier est :Correspondance des champsNom du champ :Champ :ChampsChamps pour %sChamps séparés par : %sChamps...Fil&trerVersion de fichier inconnue, tentative d'importation malgré tout.AbrégerFiltrer...Sélection :FiltréPaquet filtré %dChercher un &doublon...Trouver les doublons&Chercher et remplacer...Chercher et remplacerTerminerPremière cartePremière révisionCorrespondant au premier champs : %sCorrigé %d carte invalide.Corrigé %d cartes invalides.Corrigé sur AnkiDroid : bug du dépassement du paquet de cartesCorrigé le type de note : %sMarquerMarqueur de carteRetournerLe dossier existe déjà.Police :Pied de pagePour des raisons de sécurité, on ne peut réaliser « %s » sur les cartes. Pour le faire, insérez la commande, mais dans un paquetage différent, et importez ce paquetage dans l’en-tête LaTeX.Charge de travailFormulaire%(a)s doublons parmi %(b)s.RectoAperçu du rectoModèle du rectoGénéralFichier généré : %sGénéré sur %sAcquérir des greffons...PartagesCorrectIntervalle de passeMarqueur vertVue en langage hypertexteDifficileAvez-vous installé latex et dvipng/dvisvgm?En-têteAidePlus grande facilitéHistoriqueAccueilRépartition horaireHeuresLes heures insignifiantes (révisions < 30) ne sont affichées.Si vous avez contribué mais n’apparaissez pas dans cette liste, veuillez nous contacter.Moyenne (tous jours confondus) Ignorer les temps de réponses dépassantIgnorer la casseIgnorer ce champIgnorer les cartes dont le premier champ existe déjà.Ignorer cette mise à jourImporterImporterImporter les cartes même si le premier champ existe déjà.Échec de l’importation. Échec de l’importation. Informations de débogage : Options d’importationImportation complète.Dans le dossier des média mais utilisé par aucune carte :Afin que votre collection fonctionne correctement lors des déplacements entre appareils, Anki requiert que l'horloge interne de votre ordinateur soit correcte. Cette horloge interne peut être fausse même si votre système affiche une heure valide. Veuillez aller dans les réglages de l'horloge de votre ordinateur, et vérifier : - Réglage AM/PM - Dérive de l'horloge - Jour, mois et année - Fuseau horaire - Heure d'été Différence avec l'heure correcte : %s.Inclure les médiasInclure les données de planificationInclure les marqueursAccroître le quota de cartes inéditesAccroître le quota de cartes inédites deAccroître le quota de cartes à revoirAccroître le quota de cartes à revoir deIntervalles croissantsInstaller un greffonLangue de l’interfaceIntervalleModificateur d’intervalleIntervallesCode invalide ou greffon non-disponible pour votre version d'Anki.Code invalide.Configuration invalide Nom invalide, s.v.p. renommez : %sFichier invalid. Veuillez restaurer de la sauvegarde.Propriété invalide trouvée sur la carte. Veuillez utiliser Outils > Vérifier l'intégrité de la base de données. Si le problème subsiste, veuillez demander de l'aide sur le site de support.Expression régulière invalide.Recherche invalide - s.v.p. vérifiez s'il n'y a pas des fautes de frappe.La carte a été suspendue.Texte italique (Ctrl+I)Aller aux mots-clés avec Ctrl+Shift+TConserverLaTeXÉquation LaTeXEnv. math. LaTeXEchecsDernière carteDernière révisionLes derniers ajouts d’abordApprendreRéviser en avance deApprises : %(a)s, Revues : %(b)s, Réapprises : %(c)s, Filtrées : %(d)sÀ repasserTraitement des péniblesSeuil de pénibilitéGaucheLimiter àChargement...La collection locale n'a pas de cartes. Voulez-vous en télécharger depuis AnkiWeb?Plus long intervalleRechercher dans le champs :Plus petite facilitéGérerGérer les types de noteGérer le types de notes...Gérer…Associer à %sAssocier aux marqueursMarquez la noteMatureIntervalle maximumQuota de révisions quotidiennesMédiasIntervalle minimumMinutesMélanger les cartes inédites aux révisions.Paquet MNEMOSYNE 2.0 (*.db)Autres choixLes plus difficiles (en nombre de faux pas)Déplacer les cartesDéplacer les cartes dans le paquet :Les séparateurs multi-caractères ne sont pas supportés. S.v.p. entrez un caractère unique.N&oteLe nom existe déjà.Nom du paquet :Nom :RéseauInéditesCartes inéditesLe nombre de nouvelles cartes dans le paquet dépasse la limite pour aujourd'hui: %sSeulement les nouvelles cartesNouvelles cartes par jourNouveau nom du paquet :Nouvel intervalleNouveau nom :Nouveau type de note :Nouveau nom pour le profil de réglagesNouvelle position (1...%d) :Le jour suivant démarre àAucun marqueurAucune carte n'est arrivée à échéance pour le moment.Aucune carte ne remplit les critères demandés.Aucune carte n’est vide.Aucune carte mature n'a été étudiée aujourd'hui.Pas de fichiers inutilisés ou manquants trouvés.Aucune mise-à-jour disponible.NoteIdentifiant noteType de noteTypes de noteLa note et sa carte %d ont été supprimées.La note et ses cartes %d ont été supprimées.Note enterrée.Note suspendue.Information : les médias ne sont pas restaurés. Il serait sage de sauvegarder régulièrement votre dossier Anki.Information : il manque une partie de l’historique. Consultez l’aide de l’explorateur.Notes en textePas de note sans remplir de champ !Marqueurs ajoutés.RienValiderLes plus anciennement vues d’abordA la prochaine synchronisation, forcer les changements dans une direction.Les notes n’ont pu être importées parce qu’elles ne disposaient pas de cartes. C’est la réponse habituelle lorsque des champs sont manquants, ou qu’ils ont été intervertis lors de l’élaboration du fichier.Seule les nouvelles cartes peuvent être repositionnées.Un seul client peut accéder AnkiWeb à la fois. Si une synchronisation a échoué, veuillez réessayer dans quelques minutes.OuvrirOuvrir la sauvegarde...Optimisation...Limite optionnelle :OptionsOptions pour %sProfil de réglages :Options...Ordre d’apparitionOrdre d'ajoutOrdre des échéancesRemplacer le modèle versoRemplacer la policeRemplacer le modèle rectoFichier de Paquet/Collection Anki (*.apkg *.colpkg *.zip)Mot de passe :CollerCopier les images en PNG.Pauker 1,8 leçonPourcentagePériode : %sPlacer à la fin de la file d’attente des nouvelles cartes.Placer en attente de révisions, au rythme d’un intervalle entre :Veuillez ajouter un nouveau type de note auparavant.Veuillez connecter le microphone et rassurez-vous que le dispositif audio n'est pas utilisé par un autre logiciel.Corrigez cette note et faites-en un texte à trous. (%s)Veuillez vérifier qu’un compte est ouvert, qu’Anki n'est pas occupé et réessayez.S.v.p. donnez un nom à votre filtre:Veuillez installer PyAudioVeuillez d’abord ouvrir un compte.Veuillez enlever le dossier %s et réessayer.S'il vous plait, redemarrez Anki pour finaliser le changement de langueMerci d'utiliser le menu Outils > Cartes videsVeuillez sélectionner un paquet.Veuillez ne sélectionner que des cartes qui ont un même type de note.Veuillez sélectionner au moins un élément.Merci de mettre à jour Anki.Il faut passer par Fichier > ImporterConnectez-vous sur Ankiweb, mettez à jour le paquet et réessayez.PositionPréférencesAperçuPrévisualiser les cartes sélectionnées (%s)Aperçu des cartes inéditesVoir les cartes inédites ajoutées ces derniers%d fichier média traité%d fichiers médias traitésTraitement...ComptesAuthentification Proxy demandéeMarqueur violetQuestionFin de la file d’attente : %dDébut de la file d’attente : %dQuitterAu hasardOrdre aléatoireÉvaluationReconstruireS’enregistrerEnregistrer un son (F5)Enregistrement...
Durée : %0.1fMarqueur rougeÉchéance dépassée relativeÉtudier à nouveauConserver le contenu lors de l’ajoutRetirer %s de vos recherches enregistrées ?Supprimer le type de carte...ReturSupprimer le filtre actuel...Supprimer les marqueurs...Supprimer le formatage (Ctrl-R)Supprimer cette carte impliquerait la suppression d’une ou plusieurs autres notes. Ajouter d’abord un nouveau type de note.RenommerRenommer le type de carte...Renommer le paquetRemplacer votre collection par une sauvegarde précédente ?Rejouer le sonSe réécouterRepositionnerRepositionnerRepositionner les nouvelles cartesRepositionner...Il faut au moins l’un de ces marqueurs :ReportéReplanifierReplanifier les cartes selon mes réponses dans ce paquetReprendre maintenantSens de lecture inversé (DàG)Recharger à la sauvegardeRevenu à l’état antérieur à « %s ».RévisionRévisionsTemps passéAvancer la révisionAvancer la révision deRevoir les cartes oubliées la dernière foisRevoir les cartes oubliéesTaux de révisions réussies en fonction de l’heure du jour.RévisionsRévisions requises par le deck au delà de la limite d'aujourd'hui: %sDroiteEnregistrerEnregistrer le filtre actuel...Enregistrer en PDFEnregistréPortée : %sChercherRechercher avec le formatage (lent)Sélection&Tout sélectionnerSélectionnerÔter par les marqueurs :Le fichier sélectionné n'était pas au format UTF-8. Merci de consulter la section du manuel relative à l'import de fichiers.Révision sélectivePoint-virguleServeur introuvable. Soit votre connexion est interrompue, ou votre antivirus / pare-feu logiciel empêche Anki de se connecter à Internet.Appliquer le groupe d’options à tous les paquets au dessous de %s ?Valider pour tous les sous-paquetsChoisir une couleur (F7)La touche majuscule était maintenue enfoncée. Aucune synchronisation automatique ni de chargement de greffons.Changer la position de cartes existantesRaccourci : %sRaccourci clavier: flèche gaucheRaccourci clavier: flèche droite ou EntréeRaccourci : %sAfficher %sAfficher la réponseMontrer les deux côtesAfficher les doublonsAfficher le chronomètrePlacer les cartes inédites après les révisions.Placer les cartes inédites avant les révisions.Placer les cartes inédites dans l’ordre de leur ajoutPlacer les cartes inédites au hasardAfficher la date de la prochaine révision au dessus des boutonsAfficher le nombre de cartes restantes durant la révisionBarre latéraleTaille :Des cartes associées ou enfouies ont été repoussées à une prochaine session.Certains réglages ne s’appliqueront qu’après le redémarrage d’Anki.Certaines mises à jour ont été ignorées suite au changement de type de note :Trier selon le champTrier selon ce champ dans l’explorateurLe tri sur cette colonne n’est pas permis. Choisissez-en une autre.EspacePosition de départ :Facilité initialeStatistiquesStatistiquesPas :Pas (en minutes)Les pas doivent être des nombres.Arrêt en cours...Aujourd'hui %(a)s %(b)s d'étudié(s).Étudiées aujourd’huiÉtudierÉtudier le paquetÉtudier le paquet...Étudier maintenantEtude par carte ou par étiquetteStyleStyles (partagés parmi les cartes)Indice (Ctrl+=)XML issu de SUPERMEMO (*.xml)Exposant (Ctrl++)SuspendreSuspendre la carteSuspendre la noteSuspenduSuspendu + EnterréSynchronisationSynchroniser l’audio et les images égalementLa synchronisation a échoué : %sLa synchronisation a échoué car vous êtes hors-ligne.L’horloge de votre ordinateur doit être correctement réglée pour permettre la synchronisation. Veuillez régler l’horloge et essayer à nouveauSynchronisation...TabulationMarquer les doublonsMarquer (*)MarqueursPaquet cible (Ctrl+D)Champ viséTexteFichier texte séparé par des tabulations ou des points-virgules (*)Ce paquet existe déjà.Le nom de ce champ est déjà pris.Ce nom est déjà pris.Le délai imparti à la connexion à Ankiweb est expiré. Vérifiez votre connexion réseau et réessayez.La configuration par défaut ne peut pas être supprimée.Le paquet par défaut ne peut pas être supprimé.Répartition des cartes selon leur statutTéléchargement corrompu. Veuillez réessayer.Le premier champ est videLe premier champ du type de note ne peut pas être vide.Le caractère suivant ne peut pas être utilisé : %sLe recto de cette carte est vide. Veuillez utiliser Outils>Chercher des cartes vides.Votre saisie générerait une question vide sur toutes les cartes.Le nombre de nouvelles cartes que vous avez ajoutées.La part et le nombre de révisions selon le statut de la carte.Prévision du nombre de cartes à réviser selon leur jour d’échéance et leur statut.Le choix des divers boutons en fonction de l’ancienneté de la carte.Les permissions de votre dossier temporaire système sont incorrectes, et Anki n'a pas pu les corriger par lui-même. Veuillez consulter le manuel Anki (chercher 'dossier temporaire') pour plus d'informations.Le fichier fournit n'est pas un fichier .apkg valable.Aucune carte ne correspond à cette recherche. Voulez-vous la modifier ?Une telle modification suppose de ré-envoyer la totalité de la base de données lors de la prochaine synchronisation de la collection. S’il y de plus récentes modifications à partir d’un appareil tiers, qui n’ont pu être synchronisées, celles-ci seront perdues. Continuer ?Le temps passé à répondre selon le jour et selon le statut de la carte.Il y a d’autres cartes inédites mais la limite quotidienne est atteinte. Cette limite peut-être rehaussée (dans les options), mais n’oubliez pas que plus vous introduisez des cartes inédites, plus votre charge de travail à court terme sera intense.Il faut au moins un compte !Cette colonne ne peut pas être triée, mais vous pouvez rechercher des types de carte individuels, tels que 'carte:1'.Cette colonne ne peut pas être triée, mais vous pouvez rechercher des paquets spécifiques en cliquant sur celle de gauche.Ce fichier ne semble pas être un fichier .apkg valide. Si vous obtenez cette erreur d'un fichier téléchargé depuis AnkiWeb, il se peut que votre téléchargement ait échoué. Merci de réessayer ; si le problème persiste, merci de réessayer en utilisant un autre navigateur.Ce fichier existe. Êtes-vous sûr de vouloir l’écraser ?Ce dossier contient l’ensemble de vos données Anki en un seul endroit, pour faciliter les sauvegardes. Si vous souhaitez utiliser un dossier différent, allez voir : %s Ce paquet permet de réviser indépendamment de la planification d’Anki.Il s'agit d'une suppression de {{c1::echantillon }} .Ceci créera %d carte. Procéder?Ceci créera %d cartes. Procéder?L’import de ce fichier va écraser (supprimer et remplacer) votre collection actuelle. Voulez-vous tout de même l’importer ?DuréeMontrer la progression toutes lesÀ réviserPour parcourir les greffons de cliquez sur le bouton Parcourir ci-pas.

Quand vous trouvez un greffon qui vous plaît, collez le code ci-bas. Vous pouvez coller plusieurs codes en les séparant par un espace.Pour faire d’une carte déjà existante, un texte à trous, il faut passer par « Édition > Modifier le type de la note » et choisir « Texte à trous ».Pour les voir maintenant, cliquez sur le bouton Exhumer ci-dessous.Le bouton « Révisions particulières » ci-dessous vous permet de sortir du schéma de révisions proposé.Aujourd’huiLa limite de révision a été atteinte pour aujourd'hui, mais il y a encore des cartes en attente de révision. Pour une mémorisation optimale, pensez à augmenter la limite quotidienne dans les options.Activer/DésactiverTotalDurée totaleNombre total de cartesNombre total de notesTraiter la saisie comme une expression régulièreTypeChamp inconnu %sIncapable d’importer à partir d’un fichier en lecture seule.Impossible de déplacer le fichier à la corbeille - s.v.p. réessayer après un redémarrage de l'ordinateur.exhumerSouligné (Ctrl+U)AnnulerAnnuler %sFormat inconnu.Non-vueMettre à jour la note existante lorsque le premier champs est identiqueMettre à jour les greffons suivants?%(a)d de %(b)d notes existantes mises à jour.Envoyer vers AnkiwebTéléversement vers AnkiWeb...Utilisé par des cartes mais manquant dans le dossier média :Utilisateur 1Version %sVoir la page du greffonAfficher les fichiersFinissez de modifier la carte pour continuer.Attention, le texte à trous ne fonctionnera pas tant que vous ne changez pas le type de carte en 'Texte à trous' (en haut de la fenêtre).Ajouter par défaut au paquet courantToute la collectionSouhaitez-vous la télécharger tout de suite ?Programme écrit par Damien Elmes, avec les correctifs, les traductions, les vérifications et les idées de :

%(cont)sLe type de carte est 'Texte à trous' mais vous n'avez pas choisi de mot à cacher. Continuer quand même ?Vous avez un nombre important de paquets. Merci de consulter %(a)s. %(b)sVous ne vous êtes pas encore enregistré.Vous devez avoir au moins une colonne.RécentesRécentesVotre modification aura un impact sur plusieurs paquets. Si vous souhaitez modifier uniquement le paquet sélectionné, veuillez d'abord ajouter un nouveau profil de réglages.Le fichier contenant votre collection semble être corrompu. Cela peut se produire si le fichier est copié ou déplacé alors qu'Anki est ouvert. Cela peut aussi se produire si ce fichier est stocké à distance. Si les problèmes persistent après le redémarrage de votre ordinateur, ouvrez une sauvegarde automatique à partir de l'écran de profil.Votre collection présente des contradictions. Merci d'utiliser le menu Outils > Vérifier la base de données, puis synchronisez à nouveau.Votre collection ou un fichier média est trop lourd pour être synchronisé.Votre collection a été transféré avec succès dans AnkiWeb.Vos paquets ici et sur ​​AnkiWeb diffèrent de telle sorte qu'ils ne peuvent pas être fusionnés ensemble, il est donc nécessaire de remplacer le pont d'un côté avec les platines de l'autre. Si vous choisissez de télécharger, Anki va télécharger la collection d'AnkiWeb, et tous les changements que vous avez effectués sur votre ordinateur depuis la dernière synchronisation seront perdues. Si vous choisissez d'uploader, Anki va envoyer votre collection vers AnkiWeb, et toutes les modifications que vous avez apportées sur AnkiWeb ou vos autres appareils depuis la dernière synchronisation pour ces appareils seront perdues. Après que tous les appareils soient synchronisés, les futurs révisions et les cartes ajoutées peuvent être fusionnées automatiquement.Un pare-feu ou un antivirus empêche Anki de se connecter à lui-même. S.v.p. ajoutez une exception pour Anki.(aucun paquet)sauvegardescarte(s)Les cartes du paquetscartes sélectionnées parcollectionjjour(s)paquetvie du paquetdoublonaidemasquerheuresheure(s) après minuitfaux pasmoins de 0,1 cartes/minuteassocié à %sassocié à Marqueursminute(s)minutesmorévisionssecondesstatistiquescette pagesemtoute la collection~anki-2.1.0+dfsg~b36/locale/fr_CA/000077500000000000000000000000001323611211500162705ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/fr_CA/LC_MESSAGES/000077500000000000000000000000001323611211500200555ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/fr_CA/LC_MESSAGES/anki.mo000066400000000000000000000010031323611211500213260ustar00rootroot00000000000000$,89Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-09-21 00:02+0000 Last-Translator: FULL NAME Language-Team: French (Canada) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n > 1; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) anki-2.1.0+dfsg~b36/locale/ga/000077500000000000000000000000001323611211500157055ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ga/LC_MESSAGES/000077500000000000000000000000001323611211500174725ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ga/LC_MESSAGES/anki.mo000066400000000000000000000042061323611211500207530ustar00rootroot00000000000000+t;    #)/3 :D JUet       #)- 1?FNW_ gr{     + 9=?B ISUXgoq#& )+ "'*(  $!  % (1 of %d) (off) (on)%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%sm%smo%ss%sy&About...&Edit&File&Find&Go&Guide&Guide...&Help&Next Card&Preferences...&Previous Card&Support Anki...&Tools&Undo(end)(filtered)(learning)(new)(please select 1 card).../0d1 month1 year:moreviewssecondswwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-08-12 01:35+0000 Last-Translator: Seanan Language-Team: Irish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) (1 as %d) (as) (ar siúl)%% Ceart%(a)0.1f %(b)s/lá%(a)0.1fs (%(b)s)%sm%smí%ss%sb&Maidir Le...&Eagar&Comhad&Aimsigh&Téigh&Treoir&Treoir...&CabhairAn Chéa&d Chárta Eile&Sainroghanna...An Cárta &Roimhe Seo&Cabhraigh le hAnki...&Uirlisí&Cealaigh(críoch)(Scagtha)(ag foghlaim)(nua)(roghnaigh aon chárta amháin le do thoil).../0d1 mhí1 bhliain:moléirmheasannasoicindwan cnuasach ar fad~anki-2.1.0+dfsg~b36/locale/gl/000077500000000000000000000000001323611211500157205ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/gl/LC_MESSAGES/000077500000000000000000000000001323611211500175055ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/gl/LC_MESSAGES/anki.mo000066400000000000000000001733751323611211500210040ustar00rootroot00000000000000l.P> Q>\>c>"i>> >>>8>>??"+?$N?$s?&?"??4?2*@]@n@"@$@$@$@ A>ASAkAsAAAAAA AAB BBBBB B)B2B 8BCBIBOBSB ZBdB jBuB BBBBBBBB0B 'C4C :C ECPCVCiCCCDDDD%D*D/D3D7DT;DD,D(DD!E)EfAEE EE E EEFF,FeCFF7SG GG5GXGY7H%HkH #I /I:I>I YI cImI I IIIII I$II II J J%$JKJJJJ"LL LLLMR=NvN7O ?OwKOEO@ PJPQP`PRhPP>Q#YQ#}QQQ(QR RR +R8RQRbR gR tRRRRRRRRRR R S)S'[,T[([[[F[N$\Ps\>\P]T]]]] ]8]^^^9^=^ L^Y^_^d^ i^ t^^ ^ ^^ ^^^)^0^"_8_4<_!q______m``` ````` ` ``` `a a"a)a1a:aKa_aoaaa a aaNa"b>bRbWbnbtb{b+c4c9cSc Ycgcvc~cc ccc cccc cccc d.dFBddd d d4de#e *e16ehexeee*ee gg gg"g"h $hEhZhih}hh h h)hh^iziiiiiii i ii jj<$jaj jjwjjj jjj jjj j jjkk*k0kAkIkck}k k kkk kkkkk kk kl l $l.l=lUllll+ll#l!lmm $m .m<9m vmm]mamSn!gn nnnn,nn#oko9p >pLp\pdpsp pp p pppp pppq 4q ?qJq,iq#qVq8rEJrrr*rr s,"sOs-hs+s8ss ttt3t#Et itwtttt tttttttuu4u| D| O| ]|g||||| | | || }$}!7}dY} }}}}}} } ~(~;~ U~v~X~+~"&9+`0+>FB'*(܀17,I"l'\#pe8*C(r' u/2MbW ] h t!'ʼn.&Ls,ʊ ъ܊U$Qv"S0$/"Tw }{^5dU  % 7BDI N Xbglrґבߑ  Փ " *>AP-Δ--*1X-X˕F$k#|''Ȗ'()Ak ͗  2AEIMRV Zdl t   ј$+; L Y6c șϙŚʚΚҚr֚I2K=~#!̜ 0H_B О۞Cd3q0 ;ՠ )Fe} )Ρ  '7(GapҢ  7ChܦEA˧ ~R:)2 FJP$(M)m 7ת  '? YzЫ٫$%< R _ix;5Ŭ    ".@Paz?Į^ | ί+4=/O ԰߰& . IU.Z, ı Q[@b5Zٲ34&h dzҳٳ  & 4BI P Zh} ȴ( .;R,X- ,>Tk75$,?AAW÷?g[ øiθ 8HD ˹չ 5KR bnv5F)DNH/(ǻ*"!>`"!) 2 >HJ!Mo ʽԽܽ'=R[l|g14QYn} - :#Eiq    !+2H/N8~!(H)rA6?X2o |'.1'8*`  >S"$ GQWg $H CNcy   "4I]o!w'-28GZn 2Q'l. ]L\sbh&~;!0   !B ] ~$ (/#Gck=[ iy2&)*";4^3 )65 lz#  (DU$dp !0 M[w) A !&=dk~+108 @L&R y#^- ?LA(`:+ ",:*g) D7" ZVd8E :&H?o  .6G [1i%  $)N9mt -9N _i2( W,6.,5M:m)OU" x*)/8AX*V#jl:2>0+q\ @U (*'/:W  !A- N_6u "K*1\oJ$'=DT{OS    !'/5 OYt O[{4HcOG@i'ARc^{d2yLhk_V*`YJ -Bl%u$\XfSG8`^ DymzK)W B$n5qNB 8WZixn;@RA=  Ns2=tNsQF&3m8,oo{ Pf6I_R.r/g9w#10^-V0czi4TXr+<eJuD<LQU U%"7.d(H)*E},+-bpSUT ]g;jxW r4>|3]h!v&E<l P979 t=o#DFJC~IqxY p&naju:Zpbav/6?Gfek\ :*IqC? m6>T5!CSeL_@sPOg/} yw vtV'M$#H|:w1\0k~XK"%a(F!;5M?M}d"b](|jA`Y[Z+~,El[7K13hz2'.)>Q  (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:03+0000 Last-Translator: Damien Elmes Language-Team: Galician MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) (1 de %d) (desactivado) (activado) Ten %d tarxeta. Ten %d tarxetas.%% Acertos%(a)0.1f %(b)s/día%(a)0.1fs (%(b)s)%(a)d de %(b)d nota actualizada%(a)d de %(b)d notas actualizadas%(tot)s %(unit)s%.01f cartas/minuto%d tarxeta%d tarxetas%d tarxeta eliminada.%d tarxetas eliminadas.%d tarxeta exportada.%d tarxetas exportadas.%d tarxeta importada.%d tarxetas importadas.%d tarxeta estudiada en%d tarxetas estudiadas en%d feixe actualizado.%d feixes actualizados.%d grupo%d grupos%d cambio de medios audiovisuais para subir%d cambios de medios audiovisuais para subir%d arquivo audiovisual descargado%d arquivos audiovisuais descargados%d nota%d notas%d nota engadida%d notas engadidas%d nota eliminada.%d notas eliminadas.%d nota exportada.%d notas exportadas.%d nota importada.%d notas importadas.%d nota sen cambios%d notas sen cambios%d nota actualizada%d notas actualizadas%d repaso%d repasos%d seleccionada%d seleccionadascopiar %s%s día%s días%s hora%s horas%s minuto%s minutos%s minuto.%s minutos.%s mes%s meses%s segundo%s segundos%s para eliminar:%s ano%s anos%sd%sh%sm%smo%ss%sy&Sobre...&Chapar&EditarExportar...&Ficheiro&Buscar&Ir&Guía&Guía...&AxudaImportar...&Inverter a selección&Seguinte tarxeta&Abrir o cartafol de complementos...&Preferencias...&Tarxeta anterior&Reprogramar...&Apoia o Anki...Ferramen&tas&Desfacer«%(row)s» ten %(num1)d campos, agardábanse %(num2)d(%s correctas)(fin)(filtrada)(aprendizaxe)(nova)(límite anterior: %d)(seleccione 1 tarxeta)...Os ficheiros .anki2 non foron deseñados para importalos. Se está tentando restaurar dunha copia de seguranza, vexa a sección «Copias de seguranza» do manual de usuario./0d1 mes1 ano10AM10PM3AM4AM4PMRecibiuse un erro 504 de tempo de espera esgotado para a pasarela. Tente desactivar temporalmente o seu antivirus.:%d tarxeta%d tarxetasAbrir o cartafol de copias de seguranzaVisite o sitio web%(pct)d%% (%(x)s de %(y)s)%d-%m-%Y ás %H:%MCopias de seguranza
Anki creará unha copia de seguranza da súa colección cada vez que sexa pechado ou sincronizado.Formato de exportación:Buscar:Tamaño da letra:Tipo de letra:En:Incluír:Tamaño da liña:Substituír con:SincronizaciónSincronización
Actualmente non está activada; prema no botón de sincronización na pantalla principal para activala.

Requírese unha conta

Requírese unha conta gratuíta para manter a súa colección sincronizada. Rexístrese e introduza os seus datos embaixo.

Actualización do Anki

Anki %s está dispoñíbel.

O meu máis sincero agradecemento a todos os que fixeron suxestións, informes de fallos e doazóns.A facilidade dunha tarxeta é o tamaño do intervalo seguinte cando a súa resposta é «ben» nun repaso.Unha baralla filtrada non pode ter sub-barallas.Ocorreu un erro ao sincronizar os medios audiovisuais. Por favor use Ferramentas>Comprobar Medios e tente sincronizar de novo para correxir a incidencia.Interrompido: %sSobre o AnkiEngadirEngadir (atallo: ctrl+intro)Engadir un campoEngadir ficheiros multimediaAñadir un novo feixe (Ctrl+N)Engadir un tipo de notaEngadir reversoEngadir etiquetasEngadir a:Engadir: %sEngadidaEngadidas hoxeEngadida duplicada con primeiro campo: %sDe novoDe novo hoxeConta de repeticións: %sTodos os feixesTodos os camposTodas as tarxetas ao chou (modo chapón)Van seren eliminadas todas as tarxetas, notas, e ficheiros multimedia deste perfil. Está seguro?Permitir HTML nos camposOcorreu un erro ao acceder á base de datos. Causas posíbeis: - Software Antivirus, firewall, backup, ou de sincronización pode estar a interferir con Anki. Tente inhabilitar ese software e verifique se o problema persiste. - O seu disco pode estar cheo. - A carpeta Documents/Anki pode estar nun disco de rede. - Os arquivos na carpeta Documents/Anki poden non ser escribíbeis. - O seu disco duro pode conter erros. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. produciuse un erro ao abrir %sAnkiFeixe Anki 2.0Paquete de feixes do AnkiAnki non puido renomear o teu perfil porque non puido renomear o cartafol do perfil no disco. Por favor asegúrese de que ten permisos para escribir en Documents/Anki e non hai outros programas tentando acceder aos seus cartafoles de perfil, e entón ténteo de novo.Anki non foi quen de atopar a liña de separación entre a pregunta e a resposta. Axuste o modelo manualmente para intercambiar a pregunta e a resposta.Anki é un sistema de aprendizaxe espazado intelixente e doado de usar. É de balde e de código aberto.Anki está licenciado baixo a licenza AGPL3. Consulte o ficheiro da licencia na distribución orixinal para obter máis información.O ID ou o contrasinal de AnkiWeb son incorrectos; tenteo de novo.ID de AnkiWeb:AnkiWeb atopou un erro. Tenteo de novo nuns minutos, se o problema persiste, agradecémoslle que envíe un informe de fallos.AnkiWeb está demasiado concorrido nestes momentos. Tenteo de aquí a uns minutos.AnkiWeb atopase en mantemento. Tenteo de novo nuns minutosRespostaBotóns de respostaRespostasUn antivirus ou unha devasa está evitando que Anki se conecte a Internet.Todas as tarxetas en branco serán excluídas. Se unha nota non ten tarxetas correspondentes, será desbotada. Confirma que quere continuar?Apareceu dúas veces no ficheiro: %sConfirma que quere eliminar %s?Requirese polo menos un tipo de tarxeta.Requirese polo menos un paso.Reproducir o son automaticamenteSincronizar automaticamente no perfil de apertura/pecheTermo medioTempo medioTempo medio de respostaTermo medio de facilidadeTermo medio nos días estudiadosIntervalo medioReversoVista previa do reversoModelo do reversoCopias de seguranzaBásicaBásica (e tarxeta invertida)Básica (tarxeta invertida opcional)ExaminarAparencia do navegadorOpcións do navegadorCompilaciónDescartarSoterrar cartaDescartar a notaDescarta as novas tarxetas relacionadas ata o día seguinteSoterrar as revisións relativas ata o próximo día.De xeito predeterminado, Anki detectará o carácter entre campos, como unha marca de tabulación, unha coma ou semellantes. Se o Anki detecta o carácter incorrectamente, pode introducilo aquí. Use \t para representar unha marca de tabulación.CancelarTarxetaTarxeta %dTarxeta 1Tarxeta 2ID da cartaLista de tarxetasTipo de tarxetaTipos de tarxetaTipos de tarxeta para %sCarta soterrada.Tarxeta suspendida.A tarxeta era unha samesugaTarxetasNon é posíbel mover tarxetas manualmente a un feixe filtrado.Tarxetas en texto simpleAs tarxetas devolveranse automaticamente aos seus feixes orixinais unha vez as teña repasado.Tarxetas...CentrarCambiarCambiar %s a:Cambiar un feixeCambiar o tipo de notaCambiar o tipo de nota (Ctrl+N)Cambiar o tipo de nota...Cambiar o feixe en función do tipo de notaCambiadoComprobar &MediosComprobar os ficheiros no directorio multimediaComprobando...EscollerEscoller feixeEscoller o tipo de notaEscoller as etiquetasClonar: %sPecharPechar e perder a información actual?OcoCódigo:A coleccion esta estragada. Consulte o manual.Dous puntosComaConfigurar o idioma da interface e as opciónsParabéns! Rematou este feixe polo de agora.Conectando...A conexión expirou. Ou ben a súa conexión a internet está a sofrer problemas ou ben ten un arquivo moi grande na súa carpeta de medios.ContinuarCopiarRespostas correctas en tarxetas antigas: %(a)d/%(b)d (%(c).1f%%)Acertos: %(pct)0.2f%%
(%(good)d de %(tot)d)Non foi posíbel conectar con AnkiWeb. Comprobe a súa conexión de rede e tenteo de novo.Non foi posíbel gravar o son. Instalou lame e sox?Non foi posíbel gardar o ficheiro: %sChaparCrear un feixeCrear un feixe filtrado...CreadoCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Maiús+FCtrl+Maiús+LCtrl+Maiús+MCtrl+Maiús+NCtrl+Maiús+PCtrl+WCtrl+ZAcumulado%s AcumuladosRespostas acumuladasTarxetas acumuladasFeixe actualTipo de nota actual:Estudo personalizadoSesión de estudo personalizadoCortarBase de datos reconstruida e optimizada.DataDías estudiadosDesautorizarConsola de depuraciónFeixeO feixe importarase cando se abra un perfil.FeixesIntervalos decrecentesPredeterminadoAtrasos ata que os repasos se amosen de novo.EliminarEliminar tarxetasEliminar feixeEliminar baleirasEliminar a notaEliminar as notasEliminar as etiquetasEliminar as non usadasEliminar campo de %s?Eliminar o tipo de tarxeta «%(a)s», e as súas %(b)s?Eliminar este tipo de nota e todas as súas tarxetas?Eliminar ese tipo de nota non usado?Eliminar os ficheiros multimedia non usados?Eliminada %d tarxeta sen nota.Eliminadas %d tarxetas sen nota.Eliminada %d tarxeta sen modeloEliminadas %d tarxetas sen modeloEliminada %d nota con tipo de nota ausenteEliminadas %d notas con tipo de nota ausenteEliminada %d nota sen tarxetasEliminadas %d notas sen tarxetasEliminada %d nota cunha conta de campos trabucada.Eliminadas %d notas cunha conta de campos trabucada.Eliminado.Ao eliminar este feixe da lista de feixes devolveranse todas as tarxetas restantes ao seu feixe orixinal.DescriciónDescrición para amosar na pantalla de estudo (só para o feixe actual):DiálogoDescargar desde AnkiWebDescargando desde AnkiWeb...ObrigadasSó as tarxetas obrigadasObrigadas para mañá&SaírFacilidadeFácilBonus por seren fácilIntervalo para fácilEditarEditar a actualEditar HTMLEditadaEditando o tipo de letraBaleiraTraxetas baleiras...Números das tarxetas baleiras: %(c)s Campos: %(f)s Atoparonse tarxetas baleiras. Execute Ferramentas > Traxetas baleiras.Primeiro campo baleiro: %sFinIntroduza o feixe no que quere poñer as %s tarxetas novas, ou deixeo baleiro:Introduza a nova posición da tarxeta (1...%s):Introduza as etiquetas que se engadiran:Introduza as etiquetas que se eliminarán:Produciuse un erro ao descargr: %sProduciuse un erro ao iniciar: %sErro ao establecer unha conexión segura. Isto é a miúdo causado polo antivirus, firewall, firewall, VPN ou problemas co seu ISP.Produciuse un erro ao executar %s.Produciuse un erro executando %s.ExportarExportar...AdicionalFF1O campo %d do ficheiro é:Asignación de camposNome do campo:Campo:CamposCampos para %sCampos separados por: %sCampos...FiltrarFiltro:FiltradoFeixe filtrado %d&Buscar duplicados...Buscar duplicadosBuscar e &substituírBuscar e substituírTerminarPrimeira tarxetaPrimeiro repasoO primeiro campo contendo: %sArranxouse %d carta con propiedades non válidas.Arranxáronse %d cartas con propiedades non válidas.Arranxouse un erro da sobreescritura de AnkiDroidArranxado o tipo de nota: %sVoltearXa existe o cartafolTipo de letra:RodapéPor razóns de seguranza, non se permite «%s» nas tarxetas. Podes seguir usándoo inserindo a orde nun paquete distinto, e importando ese paquete na cabeceira LaTeX.PrognósticoFormularioAtoparonse %(a)s ao longo de %(b)s.AnversoVista previa do anversoModelo do anversoXeralFicheiro xerado: %sXerado en %sObter compartidosBenIntervalo para pasarEditor de HTMLDifícilCabeceiraAxudaMais fácilHistorialInicioDistribución horariaHorasAs horas con menos de 30 repasos non se amosan.Se colaborou e non está nesta lista, contacte con nós.Se tivera estudado todos os díasIgnorar os tempos de resposta maiores deIgnorar as maiúsculasIgnorar o campoIgnorar as liñas nas que o primeiro campo coincida cunha nota existenteIgnorar esta actualizaciónImportarImportar un ficheiroImportar aínda cando exista algunha nota co mesmo primeiro campoFracasou a importación. Fracasou a importación. Información de depuración: Opcións de importaciónImportación completa.No ficheiro multimedia mais non usado en tarxetas:Para asegurarse do bo funcionamento da túa colección ao movela entre dispositovos, Anki precisa que o reloxo interno do teu ordenador esté configurado correctamente. O reloxo interno pode estar mal aínda que o sistema amose a hora local correcta. Por favor, visite os axustes de hora no seu computador e verifique o seguinte: - AM/PM - Aceleración/deceleración do reloxo - Día, mes e ano - Fuso horario - Horario de verán/inverno Diferenza coa hora correcta: %s.Incluír os ficheiros multimediaIncluír información de planificaciónIncluir etiquetasAumentar o límite de tarxetas novas para hoxeAumentar o límite de tarxetas novas para hoxe enAumentar o límite de repasos para hoxeAumentar o límite de repasos para hoxe enIncrementar os intervalosInstalar un complementoIdioma da interface:IntervaloModificador do intervaloIntervalosCódigo incorrecto.Ficheiro incorrecto. Restáureo desde unha copia de seguranza.Atopouse unha propiedade non válida nunha carta. Por favor use Ferramentas>Verificar de datos, e se o problema reaparece, por favor pregunte no sitio de soporte.Expresión regular incorrectaFoi suspendida.Ir ás etiquetas con Ctrl+Maiús+TConservarLaTeXEcuación LaTeXEntorno matemático LaTeXPeríodosÚltima tarxetaÚltima revisiónPrimeiro as últimas engadidasAprenderTempo límite para adiantar o estudoAprender: %(a)s, Repasar: %(b)s, Volver estudar: %(c)s, Filtradas: %(d)sAprendendoAcción de samesugasLimiar para samesugasEsquerdaLimitar aCargando...Intervalo máis largoBuscar no campo:Mais difícilAdministrarAdministrar os tipos de nota...Asignar a %sAsignar a etiquetasAntigasIntervalo máximoRepasos máximo/díaRecursos multimediaIntervalo mínimominutosMisturar tarxetas novas e repasosMnemosyne 2.0 Deck (*.db)MáisPeríodos maioresMover as tarxetasMover as tarxetas ao feixe:&NotaEste nome xa existe.Nome para o feixe:Nome:RedeNovasNovas tarxetasSó tarxetas novasTarxetas novas/díaNome do novo feixe:Intervalo novoNovo nome:Novo tipo de nota:Nome do novo grupo de opcións:Nova posición (1...%d):O seguinte día comeza ásNon hai tarxetas obrigadasNingunha tarxeta coincide cos criterios indicados.Non hai tarxetas baleiras.Hoxe non se estudaron tarxetas antigas.Non se atoparonficheiros perdidos ou sen usar.NotaID da notaTipo de notaTipos de notaA nota e a súa única tarxeta foi eliminada.A nota e as súas %d tarxetas foron eliminadas.Nota descartadaA nota foi suspendida.Nota: Non se fai copia de seguranza dos ficheiros multimedia. Cree periodicamente unha copia de seguranza do seu cartafol Anki para estar seguro.Nota: Perdeuse algo no historial. Para obter mais información vexa a documentación do navegador.Notas en texto simpleAs notas requiren polo menos un campo.Notas etiquetadas.NadaAceptarPrimeiro vense as máis antigasForzar cambios nunha dirección na próxima sincronizaciónUnha ou mais notas non foron importadas, porque non xeraron ningunha tarxeta. Isto pode ocorrer cando ten campos baleiros, ou cando non asociou o contido do ficheiro de texto aos campos correctos.Só é posíbel reposicionar ás tarxetas novas.So un cliente pode acceder a AnkiWeb ao mesmo tempo. Se unha sincronización previa fallou, por favor ténteo de novo nuns minutos.AbrirOptimizando...Límite opcional:OpciónsOpcións para %sGrupo de opcións:Opcións…OrdeOrde engadidoOrde das obrigadasSubstituír o modelo do reverso:Substutuir o tipo de letraSubstituír o modelo do anverso:Constrasinal:PegarPegar imaxes do portapapeis como PNGLección Pauker 1.8 (*.pau.gz)PorcentaxePeríodo: %sColocar na fin da cola de novas tarxetasColocar na cola de repaso con intervalos entre:Engada primeiro outro tipo de nota.Conecte un micrófono, e asegúrese de que outros programas non estean usando o dispositivo de son.Edite esta nota e engada algunhas eliminacións de ocos. (%s)Asegúrese de que hai un perfil aberto e de que o Anki non estea ocupado, e tenteo de novo.Instale PyAudioPrimeiro abra un perfil.Por favor elimine o cartafol %s e ténteo de novo.Execute Ferramentas >Tarxetas baleirasSeleccione un feixeSeleccione tarxetas dun só tipo de nota.Seleccione algo.Anove á última versión do Anki.Use Ficheiro > Importar para importar este ficheiro.Visite AnkiWeb, anove o seu feixe e tenteo de novo.PosiciónPreferenciasVista previaVista previa da tarxeta seleccionada (%s)Vista previa das tarxetas novasVista previa das tarxetas novas engadidas nos últimosProcesando...PerfilesRequirese a autenticación no proxyPerguntaÚltima da cola: %dPrimera da cola: %dSaírAo chouOrde ao chouCualificaciónReconstruírGravar a súa propia vozGravando...
Tempo: %0.1fRetraso relativoVolver estudarLembrar a última entrada ao engadirRetirar este tipo de tarxeta suporá a eliminación dunha ou máis notas. Cree primeiro un novo tipo de tarxeta.Cambiar o nomeCambiar o nome ao feixeReproducir sonReproducir a súa propia vozReposiciónarReposicionar tarxetas novasReposicionar...Requirese unha ou máis destas etiquetas:ReprogramarReprogramarReprogramar tarxetas en función das miñas respostas neste feixeContinuar agoraDirección inversa do texto (RTL)Revertido ao estado anterior a «%s».RepasoNúmero de repasosTempo do repasoAdiantar o repasoAdiantar o repaso porRepasar as tarxetas esquecidas nos últimosRepasar tarxetas esquecidasPorcentaxe de repasos correctos ao longo do día.RepasosDereitaÁmbito: %sBuscaBuscar en elementos de formato (lento)SeleccionarSeleccionar &todoSeleccionar ¬asSelecciona as etiquetas a excluír:O ficheiro seleccionado no está en formato UTF-8. Vexa a sección «importación» do manual.Estudio selectivoPunto e comaServidor non atopado. Ou a súa conexión está desactivada ou un antivirus/devasa está impedindo que Anki se conecte a Internet.Definir todos os feixes de embaixo %s con este grupo de opcións?Definir para fotos os feixes secundariosA tecla Maiús estaba premida. Omitindo a sincronización automática e a carga de complementos.Cambiar a posición das tarxetas existentesTecla de atallo: %sAtallo: %sAmosar %sAmosar a respostaAmosar os duplicadosAmosar o temporizador de respostasAmosar as novas tarxetas despois dos repasosAmosar as novas tarxetas antes dos repasosAmosar as novas tarxetas na orde engadidaAmosar as novas tarxetas ao chouAmosar o intervalo do próximo repaso enriba dos botóns de respostaAmosar o número de tarxetas restantes durante o repasoTamaño:Algunhas cartas relacionadas ou soterradas foron atrasadas ata unha sesión posterior.Algúns axustes terán efecto despois de reiniciar Anki.Algunhas actualizacións foron ignoradas porque o tipo de nota mudou:Campo ordeadoOrdear segundo este campo no navegadorNon é posíbel cambiar a orde por esta columna. Escolla outra.EspazoPosición inicial:Facilidade inicialEstatísticasPaso:Pasos (en minutos)Os pasos deben ser números.Estudado hoxeEstudarEstudar un feixeEstudar un feixe...Estudar agoraEstudar segundo o estado ou a etiqueta da tarxetaEstiloEstilo (compartido entre as tarxetas)Supermemo XML (*.xml)SuspenderSuspender tarxetaSuspender notaSuspendidaSuspendida+SoterradaSincronizar tamén o son e as imaxesFracasou a sincronización: %sFracasou a sincronización; non hai conexión a Internet.A sincronización require que o reloxo do computador estea correctamente axustado. Axuste o reloxo e tenteo de novo.Sincronizando...TabulaciónEtiquetas duplicadasSó as etiquetasEtiquetasFeixe de destino (Ctrl+D)Campo de destino:TextoTexto separado por tabuladores ou punto e coma (*)Este feixe xa existeEste nome de campo xa está a ser usado.Este nome xa está a ser usado.A conexión con AnkiWeb esgotou o tempo. Comprobe a conexión de rede e tenteo de novo.A configuración predeterminada non pode ser retirada.O feixe predeterminado non pode ser eliminado.División das tarxetas no(s) seu(s) feixe(s)A descarga está corrupta. Por favor ténteo de novo.O primeiro campo está baleiro.O primeiro campo do tipo de nota debe ser asignado a algo.Non se pode usar o seguinte carácter: %sO anverso desta tarxeta está baleiro. Execute Ferramentas > Tarxetas baleiras.A entrada que ven de fornecer produciría unha pregunta baleira en todas as tarxetas.O número de cartas que engadiu.O número de preguntas que ten respondido.O número de repasos obrigados no futuro.O número de veces que ten premido cada botón.Os permisos no cartafol temporal do seu sistema son incorrectos e Anki non é quen de correxilos automáticamente. Por favor busque o 'temp folder' no manual de Anki para máis información.O arquivo proporcionado non é un arquivo .apkg válido.A busca solicitada non devolveu ningunha tarxeta. Quere revisalo?O cambio solicitado fará necesario un envío completo da base de datos a próxima vez que sincronice a súa colección. Se ten repasos ou outros cambios pendentes noutro dispositivo que non teñan sido sincronizados aínda, perderanse. Quere continuar?O tempo que levou responder ás preguntas.Hai máis cartas dispoñíbeis pero o límite diario foi sobrepasado. Pode incrementar o límite nas opción, pero por favor, teña en mente que cantas máis cartas introduza, máis alta será a súa carga de traballo a curto prazo.Ten que haber polo menos un perfil.Non é posíbel ordenar por esta columna, mais pode buscar por feixes específicos premendo nun da esquerda.Este arquivo non parece ser un arquivo .apkg válido. Se está a recibir este erro dun arquivo descargado dende AnkiWeb, é probábel que a descarga fallara. Por favor ténteo de novo, e se o problema persiste, ténteo de novo cun navegador diferente.Este ficheiro xa existe. Confirma que quere sobrescribilo?Este cartafol almacena todos os seus datos nunha localización única, para facilitar as copias de seguranza. Para indicarlle ao Anki que use una localización diferente, consulte: %s Este é un feixe especial para estudar fora do horario normal.Isto é unha eliminación de oco {{c1::sample}}.Isto eliminará a súa colección actual e substituiraa cos datos do ficheiro que está a importar. Esta seguro?HoraIntervalos temporais de estudoPara repasarPara crear ocos nunha nota existente, primeiro debe cambiala a un tipo de nota de ocos, mediante Editar > Cambiar o tipo de nota.Para velas agora, prema o botón de Desenterrar a continuación.Para estudar fora do horario normal, prema nol botón Estudo personalizado e embaixo.HoxeO límite de revisión para hoxe foi acadado, pero aínda hai cartas pendentes de ser revisadas. Para unha óptima memoria, considere incrementar o límite diario nas opcións.TotalTempo totalTotal de tarxetasTotal de notasTratar a entrada como expresión regularTipoTipo de resposta: campo descoñecido %sNon é posíbel importar desde un ficheiro de só lectura.ReincorporarDesfacerDesfacer %sFormato de ficheiro descoñecido.Sen lerActualizar as tarxetas existentes cando coincida o primeiro campoActualizadas %(a)d de %(b)d notas existentes.Enviar a AnkiWebEnviando a AnkiWeb...Faltan no cartafol multimedia mais usanse en tarxetas:Usuario 1Versión %sAgardando a que remate a edición.Aviso: os ocos non funcionarán a non ser que cambie o tipo de nota a Ocos.Ao engadir, facelo no feixe predeterminadoColección enteiraQuere descargalo agora?Ten un tipo de nota de ocos mais non inseriu ningún oco. Quere continuar?Ten moitos feixes. Vexa %(a)s. %(b)sAínda non gravou a súa voz.Ten que haber polol menos unha columna.Novo/aNovo/a+AprenderOs seus cambios afectarán a varios feixes. Se quere cambiar unicamente o feixe actual, engada primeiro un novo grupo de opcións.A súa colección atopase nun estado inconsistente. Execute Ferramentas > Comprobar a base de datos, e volva a sincronizar.A súa colección ou un arquivo de medios é grande de máis para sincronizalo.A súa colección foi subida con éxito a AnkiWeb. Se usa algún outro dispositivo, por favor sincronice agora, e escolla descargar a colección que acaba de subir dende o seu ordenador. Tras isto, as futuras revisións e cartas engadidas fundiranse automaticamente.As súas barallas aquí e en AnkiWeb difiren ata tal punto que non poden ser fundidas, así que é preciso sobreescribir as barallas dun lado coas do outro. Se escolle descargar, Anki descargará a colección dende AnkiWeb e calquera cambio que fixera no seu ordenador dende a última sincronización perderase. Se escolle subir, Anki subirá a súa colección a AnkiWeb e calquera cambio que fixera en AnkiWeb ou noutro dispositivo dende a última sincronización co ordenador perderase.[sen feixe]copias de seguranzatarxetastarxetas do feixetarxetas seleccionadas porcolecciónddíasfeixevida do feixeduplicadoaxudaagocharhorashoras pasada a medianoiteperíodosmenos de 0.1 cartas/minutoasignado a %sasignado a etiquetasmins.minutosmesesrepasossegundosestatísticasesta páxinasemtoda a colección~anki-2.1.0+dfsg~b36/locale/gu/000077500000000000000000000000001323611211500157315ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/gu/LC_MESSAGES/000077500000000000000000000000001323611211500175165ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/gu/LC_MESSAGES/anki.mo000066400000000000000000000107651323611211500210060ustar00rootroot00000000000000SqL+3BSY_eio   %+ 2>EKPU[_s        & 2 7 ? J S Z a g l r }    D F c "p "      ) : !O q }         1 > ,T    ,   '4(Dm ).@o# ' :D Zd|     #!7G"Z}  &R6)9 HP#SD"M!K$/G2(O 4 :JL;0 7,Q8F C?3>N=1-*+E. '<%AIB@5%%d selected%d selected%s copy%s day%s days%s hour%s hours&Edit&File&Find&Go&Help&Preferences...&Tools&Undo(new)/:AddAdd TagsAgainAverageBackBrowseCancelCards...CenterChangeChangedChecking...CloseColonCommaConnecting...CopyCreatedCutDateDecksDeleteDescriptionDialogE&xitEasyEditEmptyEndError executing %s.Error running %sExportExport...ExtraF1Filter:Find DuplicatesFind and ReplaceFooterForecastFormFrontGeneralGoodHTML EditorHardHeaderHelpHistoryHomeHoursImportImport FileLeftMinutesPercentagePositionRandomReviewRightTextTotalTotal TimeUnseenhoursminutesProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:03+0000 Last-Translator: Damien Elmes Language-Team: Gujarati MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: gu %%d પસંદ થયેલ%s નકલ%s દિવસ%s દિવસો%s કલાક%s કલાકોસંપાદન (&E)ફાઇલ (&F)શોધો (&F)જાઓ (&G)મદદ (&H)પ્રાથમિકતાઓ (&P)...સાધનો (&T)પાછું લાવો (&U)(નવુ)/:ઉમેરવુંટેગ્સ ઉમેરોફરીસરેરાશપાછાબ્રાઉઝરદ કરોપત્તાં...કેન્દ્રબદલોબદલાયેલચકાસી રહ્યા છીએ...બંધ કરોમહાવિરામઅલ્પવિરામજોડાઈ રહ્યા છીએ...કૉપિ કરોબનાવાયેલકાપોતારીખપત્તાની થપ્પીઓડિલીટ કરોવર્ણનસંવાદ&બહાર નીકળોસહેલુંફેરફાર કરોખાલીઅંત કરો%s ચલાવવામાં ભૂલ.%s ચલાવવામાં ક્ષતિનિકાસનિકાસ કરો...વધારાનુંF1ફિલ્ટર:નકલી શોધોશોધો અને બદલોફુટરઅંદાજસ્વરૂપઆગળસામાન્યસરસHTML સંપાદકઅઘરુંહેડરમદદઇતિહાસહોમકલાકઆયાતફાઈલ આયાત કરોડાબુંમિનીટોટકાવારીજગ્યારેન્ડમઉપરછલ્લી સમજજમણુંલેખનકુલકુલ સમયજોયેલ નથીકલાકોમિનિટોanki-2.1.0+dfsg~b36/locale/he/000077500000000000000000000000001323611211500157125ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/he/LC_MESSAGES/000077500000000000000000000000001323611211500174775ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/he/LC_MESSAGES/anki.mo000066400000000000000000000347331323611211500207700ustar00rootroot00000000000000%|  #) +85n"$$&"6If~  )2 8CIOS Zdj |0 ) / :EK^uy $(,T0(fN dq  e7? wX   #/ 5 A KVR[7RHa iv w ~ &( &.5<C JW^d kw~  %: KX_g lx}F* 4 S`"   !&+ 3 = IW s~   68 o }   8  ! ! %!"0!{S!!!!!"# # ## #a#O$+g$+$+$1$3%Q%o%%%%%%%&,&F&\&`&d&h&l& p& {& & & & & & & & &&&'&'7'H'c' ~'';' '' ' ''(!(:(>(((( ( ))))#)i)))2)"))w*{*******+m$+B++^+C,W,.`,, , , ,,,,, --"-W- . .g).+. .... /!/ 0/;/D/ +060L0 `0 k01y0 0.0-0 1!1*11181?1 F1S1 Z1g1n11 111 111 112* 262J2S2k2222 222 22 22K3O3m3v33K393*4A>4E4$444455,535:5CP55 55 5 5 555)6 @6 K6X6a6*p66?6260 7EQ7777 7 7?7)828:B8 }8 8,889999, Y\CcA*[>"|rIym7.;U}aX5#8_ Bkd{DMZHqJ2 Fh(REjuLf z^$GNpe6V31@W'i`n)K%~g/O:s&S?0!]w=l49tvTbP<-o  xQ+ (1 of %d) (off) (on)%% Correct%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d note added%d notes added%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s year%s years%sd%sh%sm%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:Open backup folderVisit website%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.About AnkiAddAdd (shortcut: ctrl+enter)Add TagsAdd to:Add: %sAddedAdded TodayAgainAgain TodayAll DecksAll FieldsAnkiAnki is a friendly, intelligent spaced learning system. It's free and open source.AnkiWeb ID or password was incorrect; please try again.AnswerAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Automatically play audioAverageAverage TimeAverage answer timeAverage easeAverage intervalBackupsBasicBuryBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCard ListCenterChangeChange %s to:Check the files in the media directoryCloseClose and lose current input?Configure interface language and optionsConnecting...CreatedCtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+ZDecksDeleteDelete TagsDialogE&xitEaseEasyEditEnter tags to add:Enter tags to delete:ExportExport...F1Field %d of file is:Field mappingFieldsFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFirst ReviewFooterGeneralGoodHTML EditorHardHeaderHelpIf you have contributed and are not on this list, please get in touch.Ignore this updateImportImport failed. Import optionsIn media folder but not used by any cards:Include scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byInvalid regular expression.KeepLaTeXLeftMap to %sMap to TagsMoreNetworkNew CardsNo unused or missing files found.NothingOpenOptionsPassword:PreferencesProcessing...Recording...
Time: %0.1fRescheduleReverse text direction (RTL)ReviewReviewsRightSelect &AllSet for all subdecksShow AnswerShow new cards before reviewsShow new cards in order addedShow new cards in random orderSome settings will take effect after you restart Anki.Studied TodaySupermemo XML export (*.xml)SuspendSuspendedTagsThis file exists. Are you sure you want to overwrite it?TodayTotal TimeTreat input as regular expressionUndo %sVersion %sWould you like to download it now?Your changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.daysmapped to %smapped to TagsminsProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:03+0000 Last-Translator: Guy Eshet Language-Team: Hebrew MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: he (1 מתוך %d) כבוי פעיל%% נכון%(a)d מתוך %(b)d הערה מעודכן‏%(a)d מתוך %(b)d הערות מעודכנות‏%d קלף%d קלפים%d קלף נמחק%d קלפים נמחקו%d קלף יוצא%d קלפים יוצאו%d קלף יובא%d קלפים יובאו%d קלף נלמד ב%d קלפים נלמדו ב%d מאגר עודכן%d מאגרים עודכנו%d קבוצה%d קבוצות%d note added%d notes added%d נבחר%d נבחרועותק של %s%s יום%s ימים%s שעה%s שעות%s דקה%s דקות%s minute.%s minutes.%s חודש%s חודשים%s שניה%s שניות%s שנה%s שנים%sd%sh%sm%ss%syאודות&העמס...&עריכה&ייצוא&קובץ&חיפוש&עבור&מדריך&מדריך&עזרה&הפוך בחירה&קלף הבא&פתח תקיית תוספות&העדפות...&קלף קודם&קבע מועד חדש...&תמוך באנקי...‏&כלים&בטל'%(row)s' ישנם %(num1)d שדות, מצופים %(num2)d%s נכון(סוף)מסונןבלימוד(חדש)(מגבלת על: %d)(אנא בחר כרטיס אחד)...קבצי .anki2 לא נועדו לייבוא. אם ברצונך לשחזר קבצים מגיבוי, אנא קרא את חלק "גיבויים" במדריך למשתמש./0dחודש אחדשנה אחת10:0022:0003:0004:0016:00התקבלה שגיאת 504 gateway timeout error. אנא נסה לנטרל את ה - Antivirus שלך.:פתח תקיית גיבוילבקר באתר%Y-%m-%d @ %H:%Mגיבויים
אנקי יגבה את האוסף שלך כל פעם שהוא נפתח או מסונכרן.‏תבנית ייצוא:חפש:גודל גופן:גופן:בתוך:גודל קו:החלף עם:סנכרוןסנכרון
לא מופעל כרגע, לחץ על כפתור "סנכרן" כדי להפעיל.‏

אנקי התעדכן

אנקי %s יצא לאור.

<להתעלם>תודה גדולה לכל מי שסיפק הצעות, תיקוני באגים ותרומות.אודות אנקיהוסףהוספה (קיצור מקשים: ctrl+enter)הוסף תגיותהוסף ל:הוסף: %sנוספוהתווסף היוםשובשוב היוםכל החפיסותכל השדותאנקיאנקי היא מערכת ידידותית ואינטליגנטית ללימוד מרווח. היא חינמית ומבוססת על קוד פתוח.שם משתמש או סיסמה של AnkiWeb לא נכונים; אנא נסה/י שובתשובהתשובותתוכנת אנטיווירוס או חומת אש מונעת מאנקי להתחבר לאינטרנט.נגן אודיו באופן אוטומטיממוצעזמן מוצעזמן תשובה ממוצעקלות ממוצעתמרווח ממוצעגיבוייםבסיסיקבורכברירת מחדל, אנקי יאבחן את התו שבין השדות, לדוגמא טאב, פסיק, וכו'. באם התו אובחן לא נכון, ניתן להזין אותו כאן. הקלד \t כדי לייצג טאב.ביטולרשימת קלפיםיישר למרכזשינוישנה %s ל:בדיקת הקבצים בתיקיית המדיהסגירהסגירה תוך השלכת השינויים?הגדרת שפה ואפשרויות ממשקמתחבר...נוצרCtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Zחפיסותמחקמחק תגיותשיחיצי&אהקלותקלעריכההזן תגיות להוספה:הזן תגיות למחיקה:ייצואייצוא...‏F1שדה %d של הקובץ הינו:מיפוי שדותשדותמצא &כפולים...מצא כפוליםחפש וה&חלף...חפש והחלףסקירה ראשונהתחתיתכלליטובעורך HTMLקשהכותרתעזרהאם תרמת ממאמציך ואינך ברשימה, אנא צור קשר.התעלם מעדכון זה.יבואיבוא נכשל. אפשרויות יבואבתיקיית המדיה, אך לא בשימוש על־ידי אף קלף:כלול מידע על מועדים קבועים מראשכלול תגיותהגדל את מגבלת הכרטיסים החדשים להיוםהגדל את מגבלת הכרטיסים החדשים להיום ב-ביטוי רגולרי לא תקף.השארLaTeXשמאלמיפוי ל-%sמיפוי לתגיותעודרשתקלפים חדשיםקבצים חסרים או שאינם בשימוש לא נמצאו.כלוםפתיחהאפשרויותססמה:העדפותמבצע...מקליט...
משך: %0.1fקביעת מועד חדשיישור טקסט מימין לשמאלסקירהסקירותימיןבחר &הכלהחל עבור כל תתי-החפיסותהצג תשובההצג קלפים חדשים לפני סקירות חוזרותהצג קלפים חדשים בסדר הוספתםהצג קלפים חדשים בסדר אקראימספר הגדרות יחולו רק לאחר איתחול אנקי.נלמדו היוםיצוא Supermemo XML (*.xml)השההמושההתגיותקובץ זה קיים האם ברצונך לשכתב אותו?היוםזמן כוללהתייחס לערך המוזן כביטוי רגולריבטל %sגרסה %sהאם ברצונך להוריד עכשיו?השינויים שתבצע ישפיעו על מספר חפיסות. אם אתה מעוניין לשנות רק את החפיסה הנוכחית, אנא הוסף קבוצת אפשרויות חדשה קודם.ימיםממופה ל-%sממופה ל-תגיותדקותanki-2.1.0+dfsg~b36/locale/hr/000077500000000000000000000000001323611211500157275ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/hr/LC_MESSAGES/000077500000000000000000000000001323611211500175145ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/hr/LC_MESSAGES/anki.mo000066400000000000000000000773101323611211500210030ustar00rootroot00000000000000\e0& 1&<&C&"I&l& n&8x&&"&$&$ '&/'"V'y'''''''(( )(7( H(R([( a(l(r(x(|( (( (( ((((())) ) *)5);)N)R)))))()*;*fS** ** * *++)+>+eU++7e, ,5,X, 6-A-E- `- j-t- ----- -- - - -K-6.K.P.R.7'/ _/wk/E/R)0|0#0#1B1([1 11 1 111111 11222 2 222232(313 83 F3R3c3}3"33&3 33 34 44#4A4G4M4(S4 |44P4745 /5;5S5 [5f5m5t5{555 5 5 5 55 5555 5 66/6C6I6Q6 X6 e6 q6 ~6 6 6 66(667 7#7*7@7\7`7f7k7 p7 {77 7 77 777747!8)8<8R8h88 888 8 888 88 8 999!929F9V9k9 |9999999 999 9:: :%:*:1:6:>:FC:: :4::: ;1;C;S;s;;*; ;; ;; <<'< 9<G<c<z<<<<< <<< << <<< < =="=6=<=M= R=]= q=~=== = == = ==== >>!/>Q> V><a> >>]>a?!{??#?? ????@ @@ #@-@3@Q@,p@#@E@AA;A,QA~A-A+A8A *B 6BDBMB ^BlBqBBBBBBiBGC NC ZCgC xCCC C1C CCD DD D 'D 5D,?DlD DD DDD*D' E64E kE!vE?EEE E EF F F 7FEF KF VF dFnFvFF F F F FF!FdG |GGGG G GGXG+MH"yHHFHIHGI#7J8[JJr$KKK KKKKK.KL!L,9LfL mLxLL"L$L"LM M&M+M 0M:MNMbMxM}MMMM OOO1OOOzO bPAP>P8Q;=QJyQQ&Q#R*RARXR vRR RRRS S#S *S 4S>SFSMS US`ShS qSSS SSSSS S T TT( TITMTTTTT<T%!UGU|_UUUV V (V2VCV\VpVoVV4W WNWM.X|XXX X XXX XY YY Y+Y 3Y AY NYOXYYYnYu3Z=Z ZZG[P[\(\\'\?"]b] u]]]]]]]]]^^^ ^ ^ ^^^_7_ Q_ \_f_v__"__(_ `#`:`O` W`e` }``!`` ``#```]a4ca a aaa aaab bbb b -b :b GbTb[bjbbb b bb.bbbcc +c9cHcZclc{cc5c)c dddd2dMdTd[dcd jd udddd ddddd@d#)eMejeeeeeeee fff f'f@fIfPf Xfcfzffff fff ffg!g0gGg agkgtg%zggg ggggCg#hBhF\hhhh3hi7i Pi]iDlii+iijj+j4jJjZjvjjjjj j jjjj j k k k'k6kIk#Yk}kkkkkkkkk kll ,l 8lDlXlslll9l ll mmmmfMn&nn3noo-oCoLo[o ko wooo(o o2o&pO8pppp1pq* q4KqMq q qq qqrr+r2rBrVr&rrpr ss$s>s [ses |s s<s ss s tt %t2t Ft1Stt%t tttt@u4UuBuu'u=vDvKv^v ovzvvv vv v vvv v ww+w Aw)Nwxw4wjw8x JxVx]x sx%xx]x."y'QyyyGyFyz"{D2{w{o!|||||| ||:|/}C}5Y} } }}}}} ~0~B~J~O~U~k~|~~~~ ~~%./)(`er/k \%UF4eY@6P} DZGsmY?7[Jg~29]}o8V.f8ku-r!* pb+vx;{M*Qwhl)sw+a15 @p[yRATNq'I!2=\3CNO>j|CvOc5RPX_GFof=^S3Wl-Ed6uQ#i|JKDyjq$Tz(<Aha1H$ nxc0Z?t,&{BVX'&Wn4<`m dES#_0"LH^ iU]Lg:tMz 9B7 >,;:b "~  KI (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d note%d notes%d selected%d selected%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo(filtered)(learning)(new)(parent limit: %d)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 yearOpen backup folderVisit website%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.About AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd TagsAdd to:Add: %sAddedAdded TodayAgainAgain TodayAll DecksAll FieldsAll cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAnkiAnki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.Antivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Are you sure you wish to delete %s?At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverage TimeBackBack PreviewBack TemplateBackupsBrowseBrowser OptionsBuildBuryBury NoteBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard ListCard TypesCard Types for %sCard was a leech.CardsCards can't be manually moved into a filtered deck.Cards...ChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeClone: %sCloseClose and lose current input?Code:ColonCommaConfigure interface language and optionsConnecting...CopyCouldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+ZCurrent DeckCurrent note type:CutDateDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDefaultDeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete this note type and all its cards?Delete this unused note type?Deleted.DescriptionDialogDownload from AnkiWebDownloading from AnkiWeb...DueE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...EndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sExportExport...F1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFirst CardFolder already exists.Font:FooterFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHistoryHomeIf you have contributed and are not on this list, please get in touch.Ignore answer times longer thanIgnore caseIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:Include mediaInclude scheduling informationInclude tagsInstall Add-onInterface language:IntervalInterval modifierInvalid code.Invalid regular expression.It has been suspended.KeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLearnLearningLeech actionLimit toLoading...Look in field:ManageMap to %sMap to TagsMaximum intervalMaximum reviews/dayMediaMinimum intervalMoreMove CardsMove cards to deck:Name exists.Name:NetworkNewNew CardsNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo empty cards.No unused or missing files found.NoteNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes require at least one field.NothingOnly new cards can be repositioned.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderPassword:PastePaste clipboard images as PNGPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PreferencesProcessing...ProfilesQueue bottom: %dQueue top: %dQuitRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)ReviewReviewsSearchSelect &AllSelect &NotesSemicolonSet all decks below %s to this option group?Set for all subdecksShift position of existing cardsShortcut key: %sShow AnswerShow DuplicatesShow answer timerShow next review time above answer buttonsShow remaining card count during reviewSome settings will take effect after you restart Anki.Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStylingStyling (shared between cards)SuspendSuspend CardSuspend NoteSuspendedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...Tag OnlyTagsTarget Deck (Ctrl+D)Target field:That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The first field is empty.The input you have provided would make an empty question on all cards.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?There must be at least one profile.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTypeUndoUndo %sUnknown file format.Update existing notes when first field matchesUpload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Whole CollectionWould you like to download it now?You haven't recorded your voice yet.You must have at least one column.backupscollectiondaysdeckdeck lifehours past midnightmapped to %smapped to Tagsminssecondsstats~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:03+0000 Last-Translator: gogo Language-Team: Croatian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: hr (1 od %d) (isklj) (uklj) Ima %d karticu. Ima %d kartica. Ima %d karata.%% Točno%(a)d od %(b)d bilježaka je aktualizirana%(a)d od %(b)d bilježaka aktualizirano%(a)d od %(b)d bilježaka aktualizirano%d kartica%d kartica%d kartica%d kartica izbrisana.%d kartica izbrisano.%d kartica izbrisano.%d kartica izvezena.%d kartica izvezeno.%d kartica izvezeno.%d kartica uvezena%d kartice uvezene%d kartica uvezeno%d kartica učena u%d kartica učeno u%d kartica učeno u%d špil aktualiziran.%d špila aktualizirana.%d špilova aktualizirano.%d grupa%d grupe%d grupa%d bilješka%d bilješke%d bilješki%d odabrano%d odabrane%d odabrano%s dan%s dana%s dana%s sat%s sata%s sati%s minuta%s minute%s minuta%s minuta.%s minute.%s minuta.%s mjesec%s mjeseca%s mjeseci%s sekunda%s sekunde%s sekundi%s za obrisati:%s godina%s godine%s godina&O programu...Štrebanje...Ur&edi&Izvoz…&Datoteka&Traži&Kreni&Vodič&Vodič...&Pomoć&Uvoz…Obrn&i odabirSljedeća kartica...&Otvori mapu s dodacima...&Postavke...&Prethodna karticaPre&rasporedi...&Podrži Anki...&Alati&Poništi(filtrirano)(učenje)(novi)(ograničenje za nadređeni komplet: %d)....anki2 datoteke nisu namijene za uvoz. Ako želite vratiti sigurnosnu kopiju, pogledajte odjeljak 'Backups' u uputi za uporabu./0d1 mjesec1 godinaOtvaranje mape sa sigurnosnim kopijamaPosjeti web stranicu%Y-%m-%d @ %H:%MSigurnosne kopije
Anki će napraviti sigurnosnu kopiju vaše kolekcije svaki put kada se zatvori ili sinkronizira.Format za izvoz:Traži:Veličina slova:Font:U:Uključi:Veličina linije:Zamijeni sa:SinkronizacijaSinkronizacija
Nije uključena; za uključivanje kliknite tipku za sinkronizaciju u glavnom prozoru.

Potreban je račun

Za sinkronizaciju vaše kolekcije treba vam besplatan račun. Registrirajte račun, a zatim dolje unesite svoje podatke.

Anki ažuriran

Objavljen je Anki %s.

Puno hvala svima koji su davali prijedloge, prijavljivali greške i donirali.O programu AnkiDodajDodaj (prečac: ctrl+enter)Dodaj poljeDodaj medijeDodaj novi špil (Ctrl+N)Dodaj vrstu bilješkeDodaj oznakeDodaj u:Dodaj: %sDodanoDodano danasPonovnoPonovno danasSvi špiloviSva poljaIzbrisat će se sve kartice, bilješke i mediji ovog profila. Jeste li sigurni?Dozvoli HTML u poljimaAnkiAnki nije pronašao crtu između pitanja i odgovora. Ručno prilagodite obrazac za zamjenu pitanja i odgovora.Anki je jednostavan, inteligentan program za učenje metodom odgođenog ponavljanja. Besplatan je i ima otvoreni kod.AnkiWeb ID ili lozinka su bili pogrešni; pokušajte ponovno.AnkiWeb ID:Došlo je do greške u AnkiWebu. Pokušajte ponovno za nekoliko minuta, a ako se problem nastavi, ispunite izvještaj o programskoj pogrešci.AnkiWeb je trenutno prezaposlen. Pokušajte ponovno za nekoliko minuta.Vaš antivirusni program ili vatrozid sprječavaju Anki da se spoji na internet.Svaka kartica koja nije označena ničime će biti izbrisana. Ako bilješka nema više kartica, izgubit ćete ju. Jeste li sigurni da želite nastaviti?Jeste li sigurni da želite izbristi %s?Potreban je bar jedan korak.Automatska reprodukcija zvučnog zapisaAutomatska sinkronizacija prilikom otvaranja/zatvaranja profilaProsječno vrijemePoleđinaPregled stražnje stranePredložak stražnje straneSigurnosne kopijePregledOpcije preglednikaIzradiZakopajZakopaj bilješkuAnki će standardno otkriti znak između polja, kao što su tabulator, zarez itd. Ako Anki pogrešno prepozna znak, možete ga unijeti ovdje. Upotrijebite \t za tabulator.OtkažiKarticaKartica %dLista karticaVrste karticaVrste kartica za %sKarta je bila pijavica.KarticeKarte se ne mogu ručno premjestiti u filtrirani špil.Kartice...PromijeniPromijeni %s u:Promijeni špilPromijeni vrstu bilješkePromijeni vrstu bilješke (Ctrl+N)Promijeni vrstu bilješke...Promijeni špil ovisno o vrsti bilješkePromijenjenoProvjeri datoteke u mapi s medijimaProvjera u tijeku...OdaberiOdaberi špilOdaberi vrstu bilješkeKloniraj: %sZatvoriZatvori i poništi trenutni unos?Kôd:DvotočkaZarezPodesi jezik i mogućnosti sučeljaPovezivanje…KopirajNije uspjelo povezivanje s AnkiWebom. Provjerite svoje mrežne postavke i pokušajte ponovno.Zvuk nije snimljen. Jeste li instalirali lame i sox?Ova datoteka nije spremljena: %sStvori špilNapravi filtrirani špil...StvorenoCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+ZAktualni špilAktualna vrsta bilješke:IzrežiDatumDeautorizirajKonzola za ispravljanje grešakaŠpilŠpil neće biti uvezen dok je otvoren profil.ŠpiloviPočetna vrijednostObrišiObriši karticeObriši špilObriši prazneObriši bilješkuObriši bilješkeObriši oznakeObriši nekorišteneObrisati polje iz %s?Obrisati ovaj tip bilješke i sve pripadajuće karte?Obrisati ovaj nekorišteni tip bilješke?Obrisano.OpisDijalogPreuzmi sa AnkiWeb-aPreuzimanje s AnkiWeb-a...ObvezaI&zlazTežinaLaganoLaki bonusLaki intervalUrediUređivanje aktualnogPromijeni HTMLPromijenjenoMijenjanje fontaPraznoPrazne karte...KrajUnesite špil za spremanje novih %s karata, ili ostavite prazno:Unesi novu poziciju karte (1...%s):Unesite oznake za dodavanje:Unesite oznake za brisanje:Greška u preuzimanju: %sGreška tijekom pokretanja: %sIzveziIzvoz...F1Polje %d datoteke je:Preslikavanje poljaIme polja:Polje:PoljaPolja za %sPolja su odvojena sa: %sPolja...FilterFilter:FiltriranoŠpil %d je filtriran.Pronađi &duplikate...Pronađi duplikate&Pronađi i zamijeni...Pronađi i zamijeniPrva kartaMapa već postoji.Slovo:PodnožjeObrazacPronađeno %(a)s u %(b)s.Prednja stranaPregled prednje stranePredložak prednje straneOpćenitoPodijeliDobroInterval za prijelaz na viši stupanjHTML uređivačTeškoZaglavljePomoćPovijestNaslovnaAko ste pridonijeli a niste na ovoj listi, molimo da nam se javite.Ignoriraj vremena odgovora duža odIgnoriraj veličinu slovaIgnoriraj linije gdje se prvo polje podudara sa postojećom bilješkomZanemari ovo ažuriranjeUveziUvezi datotekuUvezi iako postojeća bilješka ima isto prvo poljeUvoz neuspješan. Uvoz nije uspio. Informacije za ispravljanje grešaka: Opcije uvozaUvoz završen.U mapi s medijskim datotekama, ali ih ne koristi niti jedna kartica:Uključi medijske datotekeUključi informacije o vremenskom rasporeduUključi oznakeInstaliraj dodatakJezik sučelja:IntervalModifikator intervalaNeispravan kod.Neispravan regularni izraz.Suspendirana je.ZadržiLaTeXLaTeX jednadžbaLaTeX math okr.PromašajiZadnja kartaUčenjeUčenjePostupak za pijaviceOgraniči naUčitavam...Traži u polju:UpravljajPreslikaj u %sPreslikaj u oznakeNajveći razmakMaksimalan broj ponavljanja po danuMedijske datotekeNajmanji razmakVišePremjesti kartePremjesti karte u špil:Naziv već postoji.Naziv:MrežaNovoNove karticeNovih karata po danuNovi naziv za špil:Novi razmakNovi naziv:Novi tip bilješke:Novi naziv grupe postavki:Novi položaj (1...%d):Idući dan počinje uNema praznih karata.Nisu pronađene nekorištene ili datoteke koje nedostaju.BilješkaVrste bilješkiBilješka i pripadajuća karta %d obrisani.Bilješka i pripadajuće karte %d obrisane.Bilješka i pripadajuće karte %d obrisane.Bilješka je zakopana.Bilješka suspendirana.Bilješka: ne postoji sigurnosna kopija medijskih datoteka. Napravite periodično sigurnosno kopiranje svoje Anki mape kako biste bili sigurni.Bilješka: Nedostaje jedan dio povijesti. Za više informacija pogledajte dokumentaciju u pregledniku.Bilješka zahtijeva barem jedno polje.NištaSamo novim karticama se može promijeniti položaj.OtvoriOptimizacija...Izborno ograničenje:PostavkePostavke za %sGrupa postavki:Postavke...RedoslijedLozinka:ZalijepiZalijepi slike iz međuspremnika kao PNGDodaj na kraj reda novih karata.Stavite u red za ponavljanje s intervalom između:Najprije dodajte novu vrstu bilješke.Uvjerite se da je profil otvoren i da Anki ne radi, a zatim pokušajte ponovno.Molimo, instalirajte PyAudioMolimo, prvo otvorite profil.Molimo, odaberite špil.Odaberite kartice iz samo jedne vrste bilježaka.Odaberite nešto.Aktualizirajte Anki. na posljednju verzijuMolimo koristite Datoteka>Uvoz za uvoz ove datoteke.Molimo posjetite AnkiWeb, nadogradite svoj špil, a zatim pokušajte ponovno.PrilagodbeObrađujem...ProfiliKraj reda: %dPočetak reda: %dIzlazNasumičan redoslijedOcjenaPonovno izgradiSnimi vlastiti glasSnimam...
Vrijeme: %0.1fZapamti zadnji unos prilikom dodavanjaUklanjanjem ove vrste kartica izbrisala bi se jedna ili više bilježaka. Najprije napravite novu vrstu kartice.PreimenujPreimenuj špilPonovno reproduciraj zvukReproducirajte vlastiti glasPremjestiPremjesti nove karticePrerasporediPrerasporediPrerasporedi kartice na temelju mojih odgovora u ovom špiluNastavi sadObrnuti smjer teksta (s desna)PonavljanjePonavljanjaPretraživanjeOd&aberi sveOdabieri &bilješkeTočka-zarezSve špilove ispod %s postavi u ovu grupu opcija?Postavi za sve pod-špilovePromijeni položaj postojećih karataKratica: %sPrikaži odgovorPrikaži duplikatePrikaži vrijeme odgovaranjaPrikaži vrijeme sljedećeg ponavljanja iznad tipki s odgovorimaPrikaži broj preostalih kartica tijekom ponavljanjaNeka podešenja će početi djelovati kada ponovno pokrenete Anki.Sortiranje poljaSortiraj prema ovom polju u preglednikuSortiranje prema ovom stupcu nije podržano. Odaberite drugo.RazmakPočetni položaj:Početna težinaStatistikeKorak:Koraka (u minutama)Koraci moraju biti brojevi.Učeno danasUčiUči špilUči špil...Uči sadStilStil (dijeli se među karticama)SuspendirajSuspendiraj karticuSuspendiraj bilješkuSuspendiranoSinkroniziraj i audio i slikovne datotekeSinkronizacija nije uspjela: %sSinkronizacija nije uspjela; nema veze s internetom.Za sinkronizaciju sat na Vašem računalu mora biti ispravno podešen. Ispravite sat i pokušajte ponovno.Sinkronizacija...Samo oznakaOznakeCiljni špil (Ctrl+D)Ciljno polje:Taj naziv za polje je već u uporabi.Taj naziv je već u uporabi.Isteklo je vrijeme za spajanje s AnkiWebom. Provjerite mrežne postavke i pokušajte ponovno.Standardna konfiguracija se ne može ukloniti.Standardni špil se ne može izbrisati.Prvo polje je prazno.Vaša ulazna informacija generirala bi prazno pitanje u svim karticama.Pretraživanje nije pronašlo niti jednu karticu. Želite li ponoviti?Izmjena koju ste zatražili zahtijevat će učitavanje cijele baze podataka prilikom sljedeće sinkronizacije Vaše kolekcije. Ako na drugom uređaju imate izmjene koje još nisu ovdje sinkronizirane, izgubit ćete ih. Želite li nastaviti?Mora postojati barem jedan profil.Ta datoteka već postoji. Jeste li sigurni da ju želite prebrisati?U ovoj mapi se na jednom mjestu čuvaju svi Vaši podaci za Anki, kako bi se olakšalo sigurnosno kopiranje. Ako želite da Anki koristi drugu lokaciju, pogledajte: %s Ovo će obrisati vaš postojeći komplet i zamijeniti ga sa podacima u datoteci koju uvozite. Jeste li sigurni?VrijemeVremensko ograničenjeZa ponavljanjeVrstaPoništiPoništi %sNepoznat format datoteke.Ažuriraj postojeće bilješke kada se prvo polje podudaraPošalji na AnkiWebŠaljem na AnkiWeb...Košisteno na karticama, ali nedostaje u mapi medija:Korisnik 1Inačica %sČekam da uređivanje završi.Cijeli kompletŽelite li ju preuzeti sada?Još niste snimili svoj glas.Morate imati barem jedan stupac.sigurnosne kopijekompletdanašpilživotni vijek špilasati iza ponoćipreslikano u %sPreslikano u Tagsminutasekundistatistike~anki-2.1.0+dfsg~b36/locale/hu/000077500000000000000000000000001323611211500157325ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/hu/LC_MESSAGES/000077500000000000000000000000001323611211500175175ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/hu/LC_MESSAGES/anki.mo000066400000000000000000002035001323611211500207760ustar00rootroot00000000000000/> >>>">? ?(?;?8M????"?$?$@&(@"O@r@4@2@@@"A$>A$cA$A AAAABB#B8BOBbB wBBBBBBBB BBB BBBBB BB BC C"C:CJCYChCyCC0C CC C CCCCDDDDDDDDDDDTD E,"E(OExE!EEfE8F NF[F mF zFFFFFeF9G7G H%H58HXnHYH%!IkGI I III I II J !J-J6J>JFJ LJ$XJ}J JJ J J%JKJ&K;K"MBM GMUMgMINRNv O7O OwOESP@PPPPRPKQQ#Q# R1RPR(iRR RR RRRR R SSS S:SYS`SsSSS S S)S'SSTTTTTT T T TT UU(U:U3@UtUSUUUU U V VV8V"LVoVwV&V VV VV V VVVWW-$WRWXW(^W5W WWOXXX8]X5XPX7YUYlY qY}YY YYYYYYY Y Y Y Y Z Z Z'Z .Z 9ZGZZZ kZxZ ZZZZZ Z Z ZZ/[2[8[M[%U[{[ [ [ [ [ [ [ [[,[(\G\e\Fz\N\P]>a]P]]]] X^8d^^^^^^ ^^^_ _ __ $_ 1_;_ B_O_U_)d_0___4_!`0`C`Y`o`` aa/a 6a.@aoauawaza a aaa aa aaaabb+b;bPbab hb sbbNb"b cc#c:c@cGccddd %d3dBdJd]d mdxd}d dddd ddddd.dFeUene e e4eee e1f4fDfdfsf*ff Ph^h }hh"h"h hi&i5iIiRi di ni)|ii*jFj]j|jjjjj j jjjj<j-k 6kCkSkXk aklk}k kkk k kkkkkk ll/lIl Nl Zlelyl lllll ll ll l ll m!m8mKm+amm#m!mmm m m<n BnOn]_nano!3o Uocokono,oo#upkpq qq(q0q?q NqYq _q kquqqq qqqq r rr,5r#brVr8rEs\sss*s0ss t,tLt-et+t8tt u uu0u#Bu0fu uuuuu uuuvvv v1vMvbvjvivv v ww %w0w Ew"Swvw ~w1w ww wx x x $x1xAx`x-wxxx xxxx x xyVyty yy,z>zGSz zzz"z {{ {*{:{L{i{{{*{'{|@|6^|8| |!|?|;}A} Q} _}j}p}} }} } } }}}}~0~ 8~ E~ R~\~ m~~!~d~ (37FOT iw(| X+T"&+ʀ0+A>mF'*(F1o,_Iփ'Ƅ#څed8[C$(hr u&/M̉  NJ Ҋ ފ! '/W^ck.&݋,4 ;FUe$"S0h$" {^o5ΎU cmu{  ’̒ђ֒ܒ&<AILT\ bln,<B1Hz|M +2/^/59.UD1̗++/:/j/+ʘ 2 ?M]m Ǚ̙ҙיޙ $ +5 =IX`q+Κ  (D6 { ""̛Ĝ֜͜|ܜY7[3%ǝ&/ܞ #8J]eu۟AJ!\lɡ._EV h)t ţ 4G Wb/s ʤ BpI+f6M ĨΩpfתQ`ǫPeV  #U-'"#J(n!F׮ '5Q:g ȯ֯$ 0<Tn 21ױ߱   *8Hbw( 8² R o|  $ѳ. EQ.j ˴ 8Ra>g 70#4 ϶ ڶ@9%o_@Ϸ09N n z ɸ ָ  $@\m , $K+w$+0BVg?G߻,'0TMMӼ[!O}ͽ S^K =Ic  ¿Ͽ"ؿ #C Vb |-b-HOL2$>$9 O\5l  +5 =GN`w c:a    -BF^ov~ YWr7 PT kxI!HA^:~(2-P7~# 3?MS$c    +LUPs  4O ep#*'/)W( % )7Mg  $:P2e=  ku0#1U>4k =H[{ % De n1{ #F/Lu|G:(&: LG=8+2IE|U  & 4&?f=5 . 7 E S]o  1* )A6Y H!'' OZn(6!9" \i n|! qi {>'!fe  (=fz&>=.U$D:)H1Hz^"43Kh ( ?K Tb t5~,)#<Ud(&<   9 C&^!2/,b,:N )\[F-)W-w%1PT2P$c 8TV$Ot  VY3 ISo5&:7 Tar 80F: )h<0m^>;$[>F+  ")=MT[` w%    %*>;x$/&9<r  ( \CXoL;VA`r]V.n=3)1nqKDRu`R/Lo xG3>Ma:7&krY1FePP#f,<{+bzOD72Ek{t ?hKz>_@|y!8 %w[TSiH5(),*J-,kF~e vj\Z?+lwsE8YQ$U ^C0 s!p["~'QO$Jn'_cP}v(5-Hbm6\dZW 9U^"W*%Tjy" HtQB:R@e X/G `iIza.^Efc0*6 Nuqx=p.#K]Mu-5oclpBSN~4<Z%UX9>S+0A#I'{}Gg2Y lD):Bwt3!mAgmjCLy bON4 IVM6]J?4Fsq7d_W i&[1}2ad8hT|h|;@=fvg (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-08-20 20:53+0000 Last-Translator: Adam Language-Team: Hungarian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: hu (%d közül 1) (ki) (be) %d kártyát tartalmaz. %d kártyát tartalmaz.%% helyes%(a)0.1f %(b)s/nap%(a)0.1fs (%(b)s)%(b)d jegyzet közül %(a)d frissítve%(b)d jegyzet közül %(a)d frissítve%(tot)s %(unit)s%.01f kártya/perc%d kártya%d kártya%d kártya törölve.%d kártya törölve.%d kártya exportálva.%d kártya exportálva.%d kártya importálva.%d kártya importálva.%d kártyát tanultál meg%d kártyát tanultál meg%d kártyacsomag frissítve.%d kártyacsomag frissítve.%d csoport%d csoportFeltöltendő %d megváltozott médiafájlFeltöltendő %d megváltozott médiafájl%d médiafájl letöltve%d médiafájl letöltve%d jegyzet%d jegyzet%d jegyzet hozzáadva%d jegyzet hozzáadva%d jegyzet törölve.%d jegyzet törölve.%d jegyzet exportálva.%d jegyzet exportálva.%d jegyzet importálva.%d jegyzet importálva.%d jegyzet változatlan%d jegyzet változatlan%d jegyzet frissítve%d jegyzet frissítve%d ismétlés%d ismétlés%d kiválasztva%d kiválasztva%s másolata%s nap%s nap%s óra%s óra%s perc%s perc%s perc alatt.%s perc alatt.%s hónap%s hónap%s mp%s mp%s törlése:%s év%s év%s n%s ó%s p%s hó%s mp%s év&Névjegy...&Magolás...Sz&erkesztés&Exportálás...&Fájl&Keresés&Ugrás&Útmutató&Útmutató...&Súgó&Importálás...Kijelölés meg&fordításaK&övetkező kártyaKiegészítők mappájának meg&nyitása...&Testreszabás...&Előző kártya&Átütemezés...Az &Anki támogatása...&Eszközök&Visszavonás'%(row)s' mezőinek száma %(num1)d, ennyinek kéne lennie: %(num2)d(%s helyes)(vége)(szűrt)(tanulás)(új)(szülőcsomag határértéke: %d)(kérlek, 1 kártyát válassz ki)...Az .anki2 fájlok nem alkalmasak importálásra. Ha biztonsági mentést szeretnél helyreállítani, kérlek, nézd meg az útmutató „Biztonsági mentés” fejezetét./0 n1 hónap1 évde. 10este 10éjjel 3éjjel 4du. 4504: átjáró-időtúllépési hiba érkezett. Kérlek, próbáld meg úgy, hogy átmenetileg kikapcsolod a vírusirtódat.:%d kártya%d kártyaBiztonsági mappa megnyitásaHonlap megtekintése%(pct)d%% (%(y)s közül %(x)s)%Y. %m. %d. @ %H.%MBiztonsági másolat
Bezáráskor és szinkronizáláskor az Anki mindig készít egy biztonsági másolatot a gyűjteményedről.Exportálás formátuma:Keresés:Betűméret:Betűtípus:Ebben:Beillesztés:Sorméret:Csere erre:SzinkronizálásSzinkronizálás
Jelenleg nem üzemel; a főablak „sync” gombjával lehet bekapcsolni.

Felhasználói fiók szükséges

A gyűjteményed szinkronizálásához ingyenes felhasználói fiókra van szükség. Kérlek, regisztrálj magadnak egyet, majd add meg az adatait.

Frissült az Anki

Megjelent az Anki %s verziója.

Hálás köszönet mindenkinek a tanácsokért, a hibajelentésekért és az adományokért!Egy kártya könnyűsége azt jelenti, hogy mekkora időköz (hány nap) lesz megjelenítve, ha ismétlés során „jó”-ként értékeled.Egy szűrt csomagnak nem lehetnek alcsomagjai.A média szinkronizálása során hiba történt. Ennek megoldásához, kérlek, válaszd az Eszközök > Média ellenőrzése menüpontot, majd végezz egy újabb szinkronizálást.Megszakítva: %sAz Anki névjegyeHozzáadásHozzáadás (gyorsbillentyű: Ctrl+Enter)Mező hozzáadásaMédia hozzáadásaÚj csomag hozzáadása (Ctrl+N)Jegyzettípus hozzáadásaEllenkező irány hozzáadásaCímke hozzáadásaHozzáadás ehhez:Hozzáadás: %sHozzáadvaMa hozzáadottakElső mezőben egyező változat hozzáadva: %sÚjraMai „újra” értékelésűek„Újra” válaszok száma: %sMinden csomagMinden mezőAz összes kártya véletlenszerű sorrendben (magolás üzemmód)Az ehhez a profilhoz tartozó összes kártya, jegyzet és médiaállomány törlődni fog. Valóban ezt akarod?HTML-formázás engedélyezése a mezőkbenHiba történt az adatbázis elérése során. Lehetséges okai: - Valamely vírusirtó, tűzfal, illetve biztonsági mentést vagy szinkronizálást végző program akadályozhatja az Anki működését. Próbálkozz ezek letiltásával, majd ellenőrizd, megszűnt-e a probléma. - Előfordulhat, hogy megtelt a merevlemez. - A Dokuments/Anki mappa esetleg hálózati meghajtón van. - A Dokuments/Anki mappában lévő fájlok talán nem írhatók. - Hiba lehet a merevlemezen. Érdemes lefuttatni az Eszközök > Adatbázis ellenőrzése funkciót, hogy meggyőződj róla, nem sérült-e a gyűjteményed. Az alábbi fájl megnyitása során hiba történt: %sAnkiAnki 2.0-ban készült csomagKötegelt Anki-kártyacsomagAz Anki nem tudta átnevezni a profilod, mert a profil mappája nem nevezhető át a merevlemezen. Kérlek, győződj meg róla, hogy van írási jogosultságod a Documents/Anki mappához, és más program nem használja a profilmappáidat, majd próbálkozz újra.Az Anki nem találja a kérdés és a válasz közti vonalat. Kérlek, módosítsd kézzel a sablont, hogy váltani lehessen kérdés-válasz között.Az Anki egy barátságos, intelligens, időzítésen alapuló oktatóprogram. Nyílt forráskódú és ingyenes.Az Anki az AGPL3 licenc alatt áll. A további tájékozódáshoz, kérlek, nézd meg a forrásdisztribúcióban szereplő licencfájlt.Az AnkiWeb-azonosító vagy -jelszó nem megfelelő: kérlek, próbálkozz újra.AnkiWeb-azonosító:Az AnkiWeb hibát észlelt. Kérlek, próbálkozz újra néhány perc múlva, és ha a probléma továbbra is fennáll, kérlek, küldj róla hibajelentést.Az AnkiWeb jelenleg elfoglalt. Kérlek, próbálkozz újra néhány perc múlva.Az AnkiWeb karbantartás alatt áll. Kérlek, próbálkozz újra néhány perc múlva.VálaszVálaszgombokVálaszokAz Anki egy vírusirtó vagy tűzfalprogram miatt nem tud csatlakozni az internethez.Minden olyan kártya törlődni fog, amely nincs hozzárendelve semmihez. Ha egy jegyzethez nem tartozik több kártya, akkor törlődik. Valóban ezt akarod?Kétszer szerepelt ebben a fájlban: %sValóban törölni akarod ezt: %s ?Legalább egy kártyatípus szükséges.Legalább egy lépés szükségesHang automatikus lejátszásaAutomatikus szinkronizálás a profil megnyitásakor és bezárásakorÁtlagosÁtlagos időÁtlagos válaszadási időÁtlagos könnyűségÁtlagos időráfordítás a tanulással töltött napokonÁtlagos időközHátlapHátlapképHátlapsablonBiztonsági mentésekAlapAlap (mindkét irányban)Alap (egyik vagy mindkét irányban)BöngészőBöngésző-megjelenésBöngészőbeállításokÖsszeállításFélretevésKártya félretevéseJegyzet félretevéseKapcsolódó új kártyák félretevése másnapigKapcsolódó ismétlések félretevése másnapigAz Anki alapértelmezés szerint felismeri a mezők közti karaktert, például a tabulátort, a vesszőt stb. Ha rosszul ismerné fel, akkor itt megadhatod. A tabulátort a \t jelöli.MégsemKártya%d. kártya1. kártya2. kártyaKártyaazonosítóKártya&listaKártyatípusKártyatípusokKártyatípusok ehhez: %sKártya félretéve.Kártya felfüggesztve.Ezt a kártyát mumusként tároltam el.KártyákA kártyákat nem lehet kézzel a szűrt csomagba tenni.Kártyák egyszerű szövegkéntA kártyák ismétlés után automatikusan visszakerülnek az eredeti csomagjukba.Kártyák...KözépMódosítás%s módosítása erre:ÁthelyezésJegyzettípus módosításaJegyzettípus módosítása (Ctrl+N)Jegyzet&típus módosítása...Csomagváltás a jegyzettípus függvényébenMódosítva&Média ellenőrzése...A médiamappában lévő fájlok ellenőrzéseEllenőrzés...KiválasztásCsomag választásaJegyzettípus kiválasztásaCímkék kiválasztásaKlónozás: %sBezárásBezárod az ablakot és veszni hagyod a beírt adatokat?Lyukas szövegKód:A gyűjtemény sérült. Kérlek, tekintsd meg az útmutatót.KettőspontVesszőFelület nyelvének és beállításainak módosításaGratulálok! Mára végeztél ezzel a csomaggal.Kapcsolódás...A kapcsolat időtúllépés miatt megszakadt. Vagy az internetkapcsolatoddal merült fel probléma, vagy pedig egy igen nagy fájl van a médiamappádban.FolytatásMásolásHelyes válaszok a veterán kártyákra: %(a)d/%(b)d (%(c).1f%%)Helyes: %(pct)0.2f%%
(%(tot)d közül %(good)d)Nem sikerült csatlakozni az AnkiWebhez. Kérlek, ellenőrizd az internetkapcsolatodat, és próbálkozz újra.Nem sikerült a hangfelvétel. Van már telepítve Lame és Sox?A fájl mentése sikertelen: %sMagolásCsomag létrehozása&Szűrt csomag létrehozása...LétrehozvaCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZKumulatívKumulatív %sVálaszok kumulatív számaKártyák kumulatív számaAktuális csomagAktuális jegyzettípus:Egyéni tanulásEgyéni tanulásmenetKivágásAdatbázis újraépítve és optimalizálva.DátumTanulással töltött napokLetiltásHibakereső konzolCsomagA kártyacsomag importálására egy profil megnyitásakor kerül majd sor.Kártyacsomagokidőközök csökkenő sorrendjébenAlapértelmezésA következő ismétlésig hátralevő időTörlésKártyák törléseKártyacsomag törléseÜresek törléseJegyzet törléseJegyzetek törléseCímke törléseNem használtak törléseTörlöd a mezőt ebből: %s?Töröljem a '%(a)s' kártyatípust és annak %(b)s tartalmát?Törlöd ezt a jegyzettípust és az összes hozzá tartozó kártyát?Törlöd ezt a nem használt jegyzettípust?Töröljem a nem használt médiaállományokat?%d jegyzet nélküli kártya törölve%d jegyzet nélküli kártya törölve%d sablon nélküli kártya törölve.%d sablon nélküli kártya törölve.%d jegyzettípus nélküli jegyzet törölve.%d jegyzettípus nélküli jegyzet törölve.%d kártya nélküli jegyzet törölve.%d kártya nélküli jegyzet törölve.%d jegyzet törölve, amelyen a mezők száma tévesen szerepelt.%d jegyzet törölve, amelyeken a mezők száma tévesen szerepelt.Törölve.Ha törlöd ezt a csomagot a kártyacsomagok listájából, akkor a fennmaradó kártyák is mind visszakerülnek az eredeti csomagjukba.LeírásA tanulási képernyőn megjelenő leírás (csak az aktuális csomagnál):PárbeszédLetöltés az AnkiWebrőlLetöltés az AnkiWebről...EsedékesCsak az esedékes kártyákHolnap esedékes&KilépésKönnyűségKönnyűKönnyű válasznál adott bónuszKönnyű válasz időközeSzerkesztésAktuális jegyzet szerkesztéseHTML szerkesztéseSzerkesztveSzerkesztési betűtípusKiürítés&Üres kártyák...Üres kártyák száma: %(c)s Mezők: %(f)s Üres kártyákat talált a program. Kérlek, futtasd az Eszközök > Üres kártyák menüpontot.Üres az első mezője: %sEndAdd meg, melyik csomagba kerüljön a %s nevű új kártya, vagy hagyd üresen:Add meg az új kártya sorrendi helyét (1–%s.):Hozzáadandó címkék:Törlendő címkék:Hiba a letöltés során: %sHiba a program indítása során: %sHiba történt a biztonságos kapcsolat létesítése során. Ezt általában vírusirtó, tűzfal, illetve VPN (virtuális magánhálózat) program okozza, vagy pedig az internetszolgáltatóddal lehet probléma.Hiba ennek végrehajtása során: %sHiba %s futtatásakorExportálásExportálás…%d médiafájl exportálva%d médiafájl exportálvaEgyéb tudnivalókFF1A fájl %d. mezője:MezőleképezésMezőnév:Mező:MezőkMezők ehhez: %sMezők határolójele: %sMezők...SzűrőSzűrés:Szűrt%d. szűrt csomag&Azonosak keresése...Azonosak keresése&Keresés és csere...Keresés és csereBefejezésEls&ő kártyaElső ismétlésAz első mező megegyezik: %s%d érvénytelen tulajdonságú kártya javítva.%d érvénytelen tulajdonságú kártya javítva.Az AnkiDroid általi csomag-felülírás hibája javítva.Javított jegyzettípus: %sÁtfordításA mappa már létezik.Betűtípus:Lábléc'%s' biztonsági okból nem megengedett a kártyákon. Úgy lehet használni, ha a parancsot egy másik csomagba teszed, és ezt a csomagot a LaTeX-fejlécbe importálod.ElőrejelzésŰrlap%(b)s közül %(a)s találat.ElőlapElőlapképElőlapsablonÁltalánosLétrehozva: %s fájl.Létrehozás ideje: %sMegosztott tartalmakJóElőrelépési időközHTML-szerkesztőNehézFejlécSúgóLegkönnyebbElőzményHomeÓránkénti lebontásÓrákAzok az órák, amikor 30-nál kevesebb ismétlés történt, nem szerepelnek az ábrán.Ha te is közreműködtél, és mégsem vagy rajta ezen a listán, kérlek, írj nekem.Ha mindennap tanulnálEnnél hosszabb válaszidő figyelmen kívül hagyása:Kis- vagy nagybetű nem számítMező figyelmen kívül hagyásaHagyja ki azokat a sorokat, ahol az első mező egyezik egy meglévő jegyzettelFrissítés kihagyásaImportálásFájl importálásaAkkor is importálja, ha egy meglévő jegyzetnek azonos az első mezőjeAz importálás sikertelen volt. Az importálás sikertelen volt. Információ a hiba elhárításához: Beállítások importálásaAz importálás befejeződött.A médiamappában van, de egyetlen kártya sem használja:Ahhoz, hogy a gyűjteményed jól működjön akkor is, ha más eszközre kerül át, szükséges, hogy a számítógéped belső órája pontosan legyen beállítva. A belső óra olyankor is el lehet állítva, ha a rendszered pontosan mutatja a helyi időt. Kérlek, menj a számítógéped időbeállításaira, és ellenőrizd az alábbiakat: - de./du. (AM/PM) - órahiba (csúszás) - év, hónap, nap - időzóna - téli/nyári időszámítás A pontos időtől való eltérés: %s.Médiaállománnyal együttÜtemezési adatokkal együttCímkékkel együttÚj kártyák mai limitjének növeléseÚj kártyák mai limitjének növelése ennyivel:Ismétlőkártyák mai limitjének növeléseIsmétlőkártyák mai limitjének növelése ennyivel:időközök emelkedő sorrendjébenKiegészítő telepítéseFelhasználói felület nyelve:IdőközIdőköz-módosítóIdőközökÉrvénytelen kód.Érvénytelen fájl. Kérlek, állítsd vissza az egyik biztonsági mentést.A kártyán érvénytelen tulajdonság található. Kérjük, használja az Eszközök>Adatbázis ellenőrzése menüt, és ha a probléma ismét jelentkezik, forduljon a támogatási oldalhoz.Érvénytelen reguláris kifejezés.Felfüggesztve.Címkékre ugrás: Ctrl+Shift+T.Megőrzendő:LaTeXLaTeX-képletLaTeX matematikai környezetElakadásokU&tolsó kártyaLegutóbbi ismétlésa legutóbb hozzáadottak előreTanulásElőrehozott tanulás határaTanulás: %(a)s, ismétlés: %(b)s, újratanulás: %(c)s, szűrtek száma: %(d)sTanulásMumus-szavak kezeléseMumus-szavak küszöbértékeBalLegfeljebbBetöltés…Leghosszabb időközKeresés ebben a mezőben:Legkevésbé könnyűMűveletek&Jegyzettípusok kezelése...Hozzárendelés ehhez: %sHozzárendelés címkékhezVeteránMaximális időközNapi maximális ismétlések számaMédiaállományMinimális időközPercÚj kártyák és ismétlések vegyesenMnemosyne 2.0-ban készült csomag (*.db)Egyebeka legtöbb elakadásKártyák áthelyezéseKártyák áthelyezése ebbe a csomagba:&JegyzetEz a név már létezik.Kártyacsomag neve:Név:HálózatÚjÚj kártyákCsak az új kártyákNapi új kártyák számaÚj kártyacsomag neve:Új időközÚj név:Új jegyzettípus:Új opciócsoport neve:Új sorrendi helye (1–%d.):Új nap kezdete:Egyetlen kártya sem esedékes még.A megadott feltételeknek egyetlen kártya sem felelt meg.Nincs üres kártya.Ma még egyetlen veterán kártyát sem tanultál.Egyetlen hiányzó vagy használaton kívüli fájl sem volt.JegyzettípusJegyzetazonosítóJegyzettípusJegyzettípusokA jegyzet és a hozzá tartozó %d kártya törölve.A jegyzet és a hozzá tartozó %d kártya törölve.Jegyzet félretéveJegyzet felfüggesztveMegjegyzés: a médiaállományról nem készül biztonsági mentés. Kérlek, készíts mentést rendszeresen az Anki-mappádról.Megjegyzés: az előzmények egy része hiányzik. További tájékoztatást a böngésző leírásában találhatsz.Jegyzetek formázatlan szövegkéntEgy jegyzeten legalább egy mezőnek lennie kell.Jegyzetek felcímkézve.SemmiOKa legrégebben látottak előreA legközelebbi szinkronizáláskor kényszerítsen módosítást az egyik irányban.A program egyes jegyzeteket nem importált, mivel nem jött létre belőlük kártya. Ez olyankor fordul elő, ha valamelyik mező üres, illetve ha a szövegfájl tartalmát nem a megfelelő mezőkre képezted le.Csak az új kártyák sorrendi helye módosítható.Egyszerre csak egy kliens férhet hozzá az AnkiWebhez. Ha az előző szinkronizálás nem járt sikerrel, kérlek, próbálkozz újra néhány perc múlva.MegnyitásOptimalizálás...Felső határ (nem kötelező):BeállításokBeállítások ehhez: %sOpciócsoport:Beállítások…Sorrenda hozzáadás sorrendjébenesedékesség ideje szerintHátlapsablon felülbírálása:Betűtípus felülbírálása:Előlapsablon felülbírálása:Jelszó:BeillesztésVágólapon lévő képek beillesztése PNG-kéntPauker 1.8 lecke (*.pau.gz)SzázalékIdőszak: %sÚj kártyák listájának végéreIsmétlőkártyák listájára a megadott határok közti időközzel:Kérlek, adj meg előbb egy új jegyzettípust.Kérlek, csatlakoztass mikrofont a géphez, és győződj meg róla, hogy más program nem használja a hangeszközt.Kérlek, módosítsd ezt a jegyzetet: adj hozzá lyukas szöveget. (%s)Kérlek, győződj meg róla, hogy az egyik profil meg legyen nyitva, az Anki pedig ne legyen elfoglalt, majd próbálkozz újra.Kérlek, telepítsd a PyAudio programot.Kérlek, előbb nyiss meg egy profilt.Kérlek, töröld a(z) %s mappát, és próbálkozz újra.A nyelv módosításának befejezéséhez, kérlek, indítsd újra az Ankit.Kérlek, futtasd az Eszközök > Üres kártyák menüpontot.Kérlek, válassz egy csomagot.Kérlek, egyazon jegyzettípusból válassz kártyákat.Kérlek, válassz ki valamit.Kérlek, frissíts az Anki legújabb verziójára.Kérlek, a Fájl > Importálás menüponttal importáld ezt a fájlt.Kérlek, az AnkiWebre belépve frissítsd a kártyacsomagod, majd próbálkozz újra.Sorrendi helyTestreszabásElőnézetKiválasztott kártya előnézete (%s)Új kártyák előnézeteAz elmúlt időszakban hozzáadott új kártyák előnézete:%d médiafájl feldolgozva%d médiafájl feldolgozvaFeldolgozás…ProfilokProxy-hitelesítés szükséges.KérdésSor vége: %dSor eleje: %dKilépésvéletlenszerűenVéletlenszerű sorrendÉrtékelésÚjraépítésSaját hang felvételeFelvétel...
Idő: %0.1frelatív elmaradásÚjratanulásLegutóbbi szöveg megjelenítése hozzáadáskorHa törlöd ezt a kártyatípust, akkor egy vagy több jegyzet is törlődni fog. Kérlek, hozz létre előbb egy új kártyatípust!ÁtnevezésCsomag átnevezéseHang lejátszása újbólSaját hang lejátszásaSorrendmódosításÚj kártyák sorrendjének módosítása&Sorrendmódosítás...Az alábbi címkék közül legalább egy szerepeljen:ÁtütemezésÁtütemezésKártyák átütemezése az e csomagban adott válaszaimnak megfelelőenFolytatás mostJobbról balra írt szöveg (RTL)'%s' előtti állapotba visszaállítvaIsmétlésIsmétlések számaIsmétlésre fordított időElőzetes ismétlésElőzetes ismétlés erre az időszakra:Az elmúlt időszakban elfelejtett ismétlőkártyák:Elfelejtett kártyák ismétléseIsmétlés sikerességének aránya a nap egyes óráibanIsmétlésekJobbHatókör: %sKeresésKeresés a formázásban (lassú)Válasszunk&Összes kijelölése&Jegyzet kiválasztásaKizárandó címkék:A kiválasztott fájl nem UTF-8 formátumú. Kérlek, nézd meg az útmutató importálásra vonatkozó részét.Célzott tanulásPontosvesszőA szerver nem érhető el. Vagy megszakadt az internetkapcsolatod, vagy pedig egy vírusirtó vagy tűzfalprogram akadályozza az Anki webes csatlakozását.%s alatti összes csomagra is ez az opciócsoport vonatkozzon?Beállítás minden alcsomagra isA Shift gomb le van nyomva. Az automatikus szinkronizálás és a kiegészítők betöltése elmarad.Meglévő kártyák eltolásaGyorsbillentyű: %sGyorsbillentyű: balra nyílGyorsbillentyű: jobbra nyíl vagy EnterGyorsbillentyű: %s%s megtekintéseVálasz mutatásaAzonosak kijelzéseIdőmérés kijelzése válaszadáskorElőbb az ismételendő kártyákat mutassa, aztán az újakatElőbb az új kártyákat mutassa, aztán az ismételendőketAz újakat a hozzáadás sorrendjében mutassaAz újakat véletlenszerűen mutassaKövetkező ismétlés idejének kijelzése a válaszgombok fölöttHátralévő kártyák számának kijelzése ismétléskorMéret:Egyes kapcsolódó vagy félretett kártyákat későbbre halasztottunk.Egyes beállítások csak az Anki újraindítása után lépnek életbe.Egyes frissítéseket a program figyelmen kívül hagyott, mert a jegyzettípus megváltozott:Rendezési mezőRendezéskor ezt a mezőt vegye alapul a böngészőE szerint az oszlop szerint nem lehet rendezni. Kérlek, válassz másikat.SzóközKiindulási helyzet:Kiindulási könnyűségStatisztikákLépés:Lépések (percben)A lépéseknek számoknak kell lenniük.Ma tanultakTanulásTanulócsomagTanuló&csomag...Kezdjük!Tanulás a kártyák állapota vagy címkéje szerintStílusStílus (az összes kártyára vonatkozóan)XML-be exportált Supermemo-fájl (*.xml)FelfüggesztésKártya felfüggesztéseJegyzet felfüggesztéseFelfüggesztveFelfüggesztett+félretettHang- és képanyag szinkronizálása isA szinkronizálás sikertelen volt: %sA szinkronizálás sikertelen volt: nincs internetkapcsolat.A szinkronizáláshoz be kell állítani a pontos időt a számítógép óráján. Kérlek, állítsd be, majd próbálkozz újra.Szinkronizálás...TabulátorAzonosak felcímkézéseCsak címkeCímkékCélcsomag (Ctrl+D)Kívánt mező:SzövegTabulátorral vagy pontosvesszővel határolt szöveg (*)Ez a csomag már létezik.Ez a mezőnév már használatban van.Ez a név már használatban van.Az AnkiWebbel való kapcsolat időtúllépés miatt megszakadt. Kérlek, ellenőrizd az internetkapcsolatodat, majd próbálkozz újra.Az alapértelmezett beállítás nem törölhető.Az alapértelmezett csomag nem törölhető.A csomagjaidban lévő kártyák megoszlásaA letöltött anyag sérült. Kérlek, próbálkozz újra.Az első mező üres.A jegyzettípus első mezőjének kapcsolódnia kell a kártyák tartalmához.Az alábbi karakter nem használható: %sEnnek a kártyának üres az előlapja. Kérlek, futtasd az Eszközök > Üres kártyákat.A megadott szöveg üres kérdést eredményezne az összes kártyán.Az általad hozzáadott új kártyák száma.Megválaszolt kérdések számaA továbbiakban esedékes ismétlések számaAz egyes gombok lenyomásának számaA rendszered ideiglenes mappájának nincsenek megfelelő engedélyei, és az Anki ezeket nem tudja automatikusan javítani. A további tájékozódáshoz, kérlek, keresd meg az Anki-útmutatónak az ideiglenes mappára („temp folder”) vonatkozó részét.A megadott fájl nem érvényes .apkg állomány.A megadott keresésnek egyetlen kártya sem felelt meg. Szeretnéd módosítani?A kívánt módosításhoz a teljes adatbázist fel kell tölteni, amikor legközelebb szinkronizálod a gyűjteményt. Ha más eszközön olyan változtatást végeztél, amit még nem szinkronizáltál, akkor az most el fog veszni. Akarod folytatni?A kérdések megválaszolásával eltöltött időVan még új kártya, de elérted a napi limitet. Növelheted a limitet a beállításoknál, de kérlek, tartsd szem előtt, hogy minél több új kártyát vezetsz be, annál megterhelőbb lesz a rövid távú ismétlés.Legalább egy profilnak lennie kell.E szerint az oszlop szerint nem lehet rendezni, viszont kereshetsz konkrét kártyacsomagokra, ha baloldalt rákattintasz valamelyikre.Úgy tűnik, ez nem érvényes .apkg fájl. Ha ezt a hibaüzenetet egy AnkiWebről letöltött fájlból kaptad, a letöltés valószínűleg sikertelen volt. Kérlek, próbáld újra, és ha a probléma továbbra is fennáll, próbálkozz egy másik böngészővel.A fájl már létezik. Biztosan felül szeretnéd írni?A biztonsági másolatok könnyebb mentése végett ebben a mappában, egy helyen szerepel minden Ankival kapcsolatos adat. Más hely beállításához lásd: %s Ez egy speciális csomag, amely a szokásos ütemezésen kívüli tanulásra szolgál.Ez egy {{c1::minta}} lyukas szöveg.Ez a művelet törli a meglévő gyűjteményed, és a most importált fájlból származó adatokkal írja felül. Valóban ezt akarod?IdőIdőkeretIsmételendőHa egy meglévő jegyzetet lyukas szövegként (cloze) szeretnél használni, előbb át kell állítani „lyukas szöveg” típusra a Szerkesztés > Jegyzettípus módosítása menüponttal.Ha meg akarod most nézni, kattints a lenti „Félretevés megszüntetése” gombra.A szokásos ütemezésen kívüli tanuláshoz kattints alább az Egyéni tanulás gombra.MaA mai ismétlési limitet elérted, de vannak még ismételendő kártyák. Az optimális memorizálás érdekében hasznos lehet a beállítások között megnövelned a napi limitet.ÖsszesenIdőráfordítás összesenKártyák összesenJegyzetek összesenA bevitt szöveg reguláris kifejezésként értendőTípusVálasz megadása: ismeretlen %s mezőCsak olvasható fájlból nem lehetséges az importálás.Félretevés megszüntetéseVisszavonásVisszavonás: %sIsmeretlen fájlformátum.MegtanulatlanMeglévő jegyzet frissítése, ha első mezője egyezik%(b)d meglévő jegyzet közül %(a)d frissítveFeltöltés az AnkiWebreFeltöltés az AnkiWebre...Egyes kártyák hivatkoznak rá, de a médiamappában nem található:1. felhasználó%s verzióVárakozás a szerkesztés befejezéséreFigyelem: a lyukas szöveg addig nem működik, amíg a fenti típust be nem állítod Lyukas szövegre.Bővítéskor az aktuális csomag legyen az alapértelmezésTeljes gyűjteménySzeretnéd most letölteni?Van egy lyukasszöveg-jegyzettípusod, de még nem hoztál létre lyukas szöveget. Folytatod?Sok a kártyacsomagod. Kérlek, nézd meg ezeket: %(a)s. %(b)sMég nem vetted fel a hangodat.Legalább egy oszlopnak lennie kell.FrissFrissen tanultA módosításaid több kártyacsomagot is érintenek. Ha csak az aktuális csomagot szeretnéd módosítani, kérlek, hozz létre előbb ehhez egy új opciócsoportot.A gyűjteményed ellentmondásos állapotban van. Kérlek, futtasd az Eszközök > Adatbázis ellenőrzése menüpontot, majd végezd el újból a szinkronizálást.A gyűjteményed vagy egy médiafájl túl nagy a szinkronizáláshoz.A gyűjteményed feltöltése az AnkiWebre sikeresen megtörtént. Ha bármely más eszközt is használsz, kérlek, szinkronizáld most ezeket, és a letöltést válaszd majd arra a gyűjteményre vonatkozóan, amit az imént töltöttél fel erről a gépről. A későbbi ismétlések és a hozzáadott kártyák ezt követően automatikusan be lesznek illesztve ebbe az állományba.Az itteni és az AnkiWeben tárolt kártyacsomagjaid oly mértékben eltérnek, hogy nem lehet egyesíteni őket, így az egyiken lévő csomagokat felül kell írni a másikon lévőkkel. Ha a letöltést választod, az Anki letölti a gyűjteményt az AnkiWebről, és minden olyan változás el fog veszni, amit a számítógépeden végeztél a legutóbbi szinkronizálás óta. Ha a feltöltést választod, az Anki feltölti a gyűjteményedet az AnkiWebre, és minden olyan változás el fog veszni, amit az AnkiWeben vagy más eszközödön végeztél az ezzel a géppel való legutóbbi szinkronizálás óta. Miután minden eszköz szinkronba került, a későbbi ismétlések és hozzáadott kártyák automatikusan be lesznek illesztve.[nincs csomag]megelőző változat másolatakártyakártyát a csomagbólkártya, kiválasztásuk alapja:gyűjteménynnapcsomagcsomag élettartamamásodpéldánysúgóelrejtóraórával éjfél utánelakadáskevesebb, mint 0,1 kártya/perchozzárendelve ehhez: %shozzárendelve ehhez: Címkékpercperchóismétlésmásodpercstatisztikákez az oldalhétteljes gyűjtemény~anki-2.1.0+dfsg~b36/locale/hy/000077500000000000000000000000001323611211500157365ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/hy/LC_MESSAGES/000077500000000000000000000000001323611211500175235ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/hy/LC_MESSAGES/anki.mo000066400000000000000000002775121323611211500210200ustar00rootroot00000000000000$,8J J JKK"K8K :KDKWKvK8KKKKK"L$)L$NL&sL"LL4L2M8MIM"fM$M$M$M MN.NFNNN]NnNNNN NNNNNNNN NOO"O2O;O AOLOROXO\O cOmO sO~OO OOOOOOOPPP0P PP]PlP rP }PPPPPPIQKQNQVQ]QbQgQkQoQTsQQ,Q(Q R!?RaRfyRR RS S "S-S=SOSdSe{SS7THT) W 6X@X5SXXXYX%sPt`t]it t8t uu)u>uZu^u muzuuu u uu u u uu uuu)u0vMvcv4gv!vvv#v w!w:wwww w.w!x'x)x,x Hx Vxbxix px~x xx+xx xxxxyy+y@yQy Xy cypyNy"yyz zz"z9z?zFzzz{{ ${2{A{I{\{l{ {{{{ { {{,{{{ {| |||.%|FT||| | |4|"}5} <}1H}z}}}}*}}  "" 6Wl{ ? $)?i2 <Sh ‚Ђ<8 AN^c l5w ̓ك    ' 1?NUfz̈́ ҄ ބNL R_nt| & ΅ ݅ 2EM+c#!Æ  < Zg]waՇ7!K m{,ň#k" 1?OWf u Ê5܊ "@ ] hs,#V8:Esٌ* 08i,ɍ-+8<u ~#0 "+ JV_ p~̏#.Rfi ./: jw  "Α 1 6A^ o ͒-1(9bhm œ ̓ ؓVU eo,4GO ɕ"  &6F)Xۖ*'%MU@[68ӗ !?9Myǘ͘ ݘ  ,8 Sa g r ̙ߙ  & 3=N St!d ,5: O](b ƛX+:"f&+ܜ0+'>SF'ٝ*(,1U,EIr'Ԡ#_eD8ڣCj(Fפr ui/ߦM]c . 4 ? K!Wy~'LĨ05=Zo.v&é,A HS doU$ "Z=S0$"Be k{w^5nU}  ʲ̲Ѳ ֲ #:Un³ֳ /1 % 0'=e gu,?ж 1 O[!w!%ڷ K*Z''߸' /$Pu й  :JRY`ipw" "ĺ # - 9CWn"(4&IpüV _"m 2ƽ ' 2=BGKOS @#d',""@.]mI[i;Nj'T,.?+n/,)1#[&!-:1H^v%F! (,,Ua._1=o2Gz*$j5WxO -cf#6F8B&5iNBdC 4!1('Z#!$4$AY: >Um!!' `3gro 05"f! d3:n $D^&{/)D^oUSDsE"! 5B(^-8& DEO6-n1 Jz'U7xPp2:m|)?$+2 9 D OZajqx  $+I+a!*%< Y?d0"/ 7)DUn1 L it! +* V?wZTIg?AA3Ru?Q Zh =&)%O*` $+!2!Hj% Mx1'tPP@:3"Q"t9"%-;i|~*,    6/ f  v ~        * +E 'q $    ) 1. H` G 0 " +  = 6H      !  'ATs& A+ A2O/ o%4SZv*_);ce)(h'CLk!Re-Zm)\++ y: LC9}AU$2.W#2K>ZfA(S |[1 "E +h  ) , !!3/!c!}!!!5!M! H"/S""F"!" "3#!<#9^#u#$1$#P$t$$$$j$ &%"G%*j%!%%"%C%08&8i&&-&W&#8'A\'S'"'($(6(P(3p((("(();*N*4+ D+O+,V+g+P+L<-- ].h..3..%.# /0/H/Q/o/?/!/;/X)000I00 11@(1`i1C12~2l3433-3<4sC4?44H5]59w5e5\6t6"}66/6&6L7%U7{77>7%788(8C85J8=888,8"99<9v9/9 9A9<:+\:-:&:.: ;;/;#<[&<-<0<<3<..=]=U{====>=>'>>?C?+Z?%?N?(??$@,d@s@Ae"AA A'AAAAB4B KBXB$sB6BB)ZCCCrDCD+FFG%G,=G/jG6GfGR8HRHSHZ2IzILJUJhJqJuJwpK!K@ LxKLL HM1SM)MMM MM/N@N*]NNNN NNK OXONkOO4OPP,P!HPjP9PP^P05QCfQQYRuR3yR!RR(R S 'Sa4SBSLSA&ThTGTEAU=UQU(VW@VKVrV~WWJWG!X-iXFX"XLZqNZeZ>&\ze\<]^^_~`EaQ6bRb:bcc+cc?c.e)ff 4g?g&@hgh#hh#hh#hmi i6iOij5j(jk#k17k%ikkmk=lJQll$lklHmYm,mmm:mmPn!n2oBooFp<qI=qq'qqrtnuuw{||||#|}(}-} 2}?}_}t}}}} }}}}} ~~-0~"^~0~~~~~~~ "!&HqxE-u2]>QdDSJo|%l$0CV}#%&'Ni[jU <./0&1123>n?eB t[k ` w9DkF{pNYViUxp:/8dE<pSgJ 1!=QBLHq6^8*)EzrmAcj9.w~9-{goI~b"tZjBQ }.zc=%# 1tYf#^8(y)v+yJ?qA Gh]u SRnrw@_W;>F&,6;TaS#CokXiK3~Xyea*f2GT"YAo4P+[}(_rsLhl +gJ,*-/'Z0 @s;zZGf4}v7bbnTEs`K/!"L7Df?WnMt03M45|R7u89:;<=cX@Z, X\e*_ &U 57x](R]Oa%6yqI_Wum6rc5K{L) Om "=z' vUxM[N5h\'P O!\{j:>O(kC^HK~- 3sHGT) PI^!H:Dm,w2 ?MVQ$ih$g<bv@C4ApWldB+lPY|F`V Ie`.da|RNF$\ (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAlways include question side when replaying audioAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the %(num)d selected add-on?Delete the %(num)d selected add-ons?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFile version unknown, trying import anyway.FilterFilter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Map to %sMap to TagsMark NoteMathJax blockMathJax inlineMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow cards as white on black (night mode)Show new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Sound and video on cards will not function until mpv or mplayer is installed.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied %(a)s %(b)s today.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightin %s dayin %s daysin %s hourin %s hoursin %s minutein %s minutesin %s monthin %s monthsin %s secondin %s secondsin %s yearin %s yearslapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-12-24 20:57+0000 Last-Translator: Arman High Language-Team: Armenian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: hy (1-ը %d-ից) (կասեցված) (անջ.) (միաց.) Պարունակում է %d քարտ:%% Ճիշտ է%(a)0.1f %(b)s օրական%(a)0.1fկԲ ՎերԲ, %(b)0.1fկԲ ՆերԲ%(a)0.1fs (%(b)s)%(b)d գրառումներից %(a)d-ը թարմացվել են%(n)d: %(name)s%(tot)s %(unit)s%.01f քարտ/րոպեում%d քարտ%d քարտը ջնջվեց:%d քարտ արտահանվեց:%d քարտ ներմուծվեց:%d քարտ սովորեցիք%d կապուկը թարմացվեց:%d խումբՎերբեռնել %d մեդիանիշքի փոփոխություններըՆերբեռնվեց %d մեդիանիշք%d գրառում%d գրառում է ավելացվեց%d գրառում ջնջվեց:%d գրառում արտահանվեց:%d գրառում ներմուծվեց:%d գրառում չփոխվեց%d գրառում թարմացվեց%d վերադիտում%d ընտրված է%s պատճեն%s օրում%s ժամում%s րոպեում%s րոպե:%s ամսում%s վայրկյանում%s ջնջելու ենթակա՝%s տարում%s օր%s ժ.%s ր.%s ամ.%s վ.%s տ.&Ծրագրի մասին...&Զննել և տեղադրել...&Քարտեր&Ստուգել շտեմարանը&Սովորել...&Խմբագրել&Արտահանել...&Նիշք&Գտնել&Գնալ&Ուղեցույց&Ուղեցույց...&Օգնություն&Ներմուծել...&Տեղեկություններ...&Հակադարձել ընտրվածքը&Հաջորդ քարտ&Գրառումներ&Բացել հավելումների պանակը...&Նախընտրություններ...&Նախորդ քարտ&Վերահերթագրել...&Աջակցել Anki-ին...&Փոխել հատկագիրը&Գործիքներ&Հետարկել'%(row)s'-ը պարունակում է %(num1)d տող, սպասվում էր %(num2)d(%s ճիշտ)(Գրառումը ջնջված է)(վերջ)(զտված)(ուսուցում)(նոր)(վերադասի սահմանափակում՝ %d)(ընտրեք 1 քարտ)....anki2 նիշքերը նախատեսված չեն ներմուծման համար: Եթե դուք փորձում եք պահուստից վերականգնում կատարել, դիմե՛ք օգտվողի ձեռնարկի «Պահուստներ» բաժնին:/0 օր1 ամիս1 տարի10AM10PM3AM4AM4PMՍխալ 504: Անցախցով անցնելու ժամանակը սպառվել է: Փորձեք ժամանակավոր անջատել հակավիրուսային ծրագիրը::%d քարտԲացել պահոցների պանակըԿայքէջ%(pct)d %% (%(y)s-ից %(x)s-ը)%Y-%m-%d @ %H:%MՊահուստներ
Յուրաքանչյուր անգամ Anki-ն փակելիս կամ համաժամեցնելիս ծրագիրը կստեղծի հավաքածուի պահուստ:Արտահանման ձևաչափը՝Գտնել՝Տառաչափ՝Տառատեսակ՝Որոնել այստեղ՝Պարունակում է՝Գծերի չափը՝Փոխարինել հետևյալով՝ՀամաժամեցումՀամաժամեցում
Այժմ անջատված է. միացնելու համար կտտացրեք գլխավոր պատուհանի համաժամեցման կոճակի վրա:

Հաշիվ է հարկավոր

Համաժամեցման համար հաշիվ է հարկավոր: Գրանցեք հաշիվը, այնուհետև մուտքագրեք նրա տվյալները ներգևում:

Anki-ն արդիացվեց

Թողարկվել է Anki %s:

Սխալ

Տեղի ունեցավ սխալ: Մեկնարկեք Anki-ն սեղմած պահելով Shift ստեղնը: Դա ժամանակավոր կանջատի տեղադրված հավելումները:

Եթե սխալը տեղի է ունենում միայն երբ հավելումները միացված են, ապա օգտագործեք Գործիքներ>Հավելումներ ընտրացուցակը հավելումները մեկ առ մեկ անջատելու և Anki-ն վերամեկնարկելու համար: Կրկնեք մինչև որ հայտնաբերեք խնդիր առաջացնող հավելումը:

Երբ հայտնաբերեք խնդիր առաջացնող հավելումը, զեկուցեք այդ մասին մեր կայքի հավելումների բաժնում:

Վրիպազերծման տեղեկություններ՝

Սխալ

Տեղի ունեցավ սխալ: Օգտագործեք Գործիքներ > Ստուգել շտեմարանը տեսնելու արդյոք դա կլուծի խնդիրը:

Եթե խնդիրը մնում է, ապա զեկուցեք այդ մասին մեր կայքէջում. Պատճենեք և փակցրեք ներգևի տեղեկությունները զեկույցի մեջ:

<անտեսված><ոչ-unicode գրվածք><այստեղ մուտքագրեք որոնման պայմանները, սեղմեք Enter ընթացիկ կապուկի պարունակությունը ցուցադրելու համար>Շատ շնորհակալ ենք բոլոր նրանց, ովքեր օգնել են նախագծին գաղափարներով, սխալների զեկույցներով ու նվիրատվություններով:Քարտի հեշտությունը հաջորդ ժամանակամիջոցի չափն է, երբ դուք կրկնելիս պատասխանում եք «Լավ է»:Զտված կապուկը չի կարող ենթակապուկներ ունենալ:Մեդիանիշքերը համաժամեցնելիս սխալ տեղի ունեցավ: Օգտագործեք Գործիքներ>Մեդիանիշքերի ստուգում, հետո կրկին համաժամեցրեք խնդիրը լուծելու համար:Ընդհատված՝ %sAnki-ի մասինԱվելացնելԱվելացնել (կարճատ՝ ctrl+enter)Ավելացնել քարտի տեսակ...Ավելացնել դաշտԱվելացնել մեդիաԱվելացնել նոր կապուկ (Ctrl+N)Ավելացնել գրառման տեսակԱվելացնել հետադարձումԱվելացնել պիտակներԱվելացնել պիտակներ...Ավելացնել այստեղ՝Հավելումը կազմաձև չունի:Հավելումը չի ներբեռնվել AnkiWeb-ից:ՀավելումներԱվելացնել...Ավելացնել՝ %sԱվելացվածԱյսօր ավելացվածներըԱվելացվեց առաջին դաշտով կրկնորինակ՝ %sՉեմ հիշումՉհիշվողները այսօրՉհիշվողների քանակը՝ %sՔարտերի բոլոր տեսակներըԲոլոր կապուկներըԲոլոր դաշտերըԲոլոր քարտերը պատահական կարգով (սովորելու գործելաձև)Այս հատկագրի բոլոր քարտերը, գրառումները և մեդիանիշքերը ջնջվելու են: Վստա՞հ եք:Թույալատրել HTML դաշտերումՄիշտ ներառել հարցի կողմը ձայնանյութը վերարտադրելիսՁեր տեղադրած հավելումը չհաջողվեց բեռնել: Եթե խնդիրը կրկնվում է, ապա բացեք Գործիքներ>Հավելումներ ընտրացուցակը և անջատեք կամ ջնջեք հավելումը: '%(name)s' բեռնվելիս՝ %(traceback)s Շտեմարանին դիմելիս սխալ տեղի ունեցավ: Հնարավոր պատճառներ՝ - Հակավիրուսային ծրագիրը, հրապատը, պահուստը կամ համաժամեցման ծրագիրը կարող է միջամտել Anki-ի աշխատանքին: Փորձեք մեկ առ մեկ անջատել այդ ծրագրերը և ստուգեք, արդյոք խնդիրը վերացավ: - Ձեր սկավառակը կարող է լցված լինել: - Documents/Anki պանակը կարող է լինել ցանցային հիշասարքում: - Documents/Anki պանակում գտնվող նիշքերը կարող են չգրվող լինել: - Հնարավոր է, որ կոշտ սկավառակը սխալներ է պարունակում: Լավ կլինի օգտվել Գործիքներ>Ստուգել շտեմարանը գործառույթից, որպեսզի համոզվեք, որ հավաքածուն վնասված չէ: Սխալ տեղի ունեցավ %s բացելիսAnkiAnki 2.0 կապուկAnki հավաքածուների փաթեթAnki կապուկների փաթեթAnki-ն չի կարող անվանափոխել ձեր հատկագիրը, քանի որ չի հաջողվում անվանափոխել սկավառակի վրայի պանակը: Համոզվեք, որ թույլտվություն ունեք Documents/Anki պանակի մեջ գրելու համար և ոչ մի այլ ծրագիր այն չի օգտագործում, դրանից հետո կրկին փորձեք:Anki-ն չգտավ հարցի և պատասխանի միջև գիծը: Նրանք տեղերով փոխելու համար ձեռքով կարգաբերեք կաղապարը:Anki-ն չի օժանդակում հավաքածուներ.մեդիա ենթապանակի նիշքերը:Anki-ն բարյացակամ, բանական ուսուցողական համակարգ է, հիմնված «ժամանակամիջոցային կրկնությունների» մեթոդի վրա: Այն ամբողջությամբ անվճար է, բաց ելակետային կոդով:Anki-ն տարածվում է AGPL3 արտոնագրով: Լրացուցիչ տեղեկություններ ստանալու համար կարդացեք արտոնագրի նիշքը:Anki-ն չկարողացավ բացել ձեր հավաքածուի նիշքը: Եթե համակարգիչը վերագործարկելուց հետո խնդիրները մնան, օգտագործեք Բացել Պահուստը կոճակը հատկագրի կառավարչում: Վրիպազերծման տեղեկություններ՝ AnkiWeb ID-ն կամ գաղտնաբառը սխալ է. կրկին փորձեք:AnkiWeb ID՝AnkiWeb-ը սխալ է հայտնաբերել: Մի քանի րոպեից կրկին փորձեք, եթե խնդիրը կրկնվի, ապա սխալի մասին հաղորդագրություն ուղարկեք:AnkiWeb-ը այս պահին զբաղված է: Մի քանի րոպեից կրկին փորձեք:AnkiWeb-ում պրոֆիլակտիկ սպասարկում է ընթանում: Մի քանի րոպեից կրկին փորձեք:ՊատասխանՊատասխանի կոճակներՊատասխաններՀակավիրուսային ծրագիրը կամ հրապատը չի թողնում, որ Anki-ն միանա Համացանցին:Որևէ դրոշԲոլոր չարտապատկերված քարտերը ջնջվելու են: Եթե գրառումը քարտ չունի, ապա այն կվերանա: Վստա՞հ եք, որ ուզում եք շարունակել:Երկու անգամ հանդիպում է այս նիշքում՝ %sՎստա՞հ եք, որ ուզում եք ջնջել %s:Անհրաժեշտ է քարտի առնվազն մեկ տեսակ:Անհրաժեշտ է առնվազն մեկ քայլ:Կցեք պատկերներ/ձայնանիշքեր/տեսանյութեր (F3)Վերականգնելու ընթացքում ինքնաշխատ համաժամեցումը և պահուստավորումը անջատվել են: Նրանք կրկին միացնելու համար փակեք հատկագիրը կամ վերամեկնարկեք Anki-ն:Ինքնաշխատորեն նվագարկել ձայնանիշքըԻնքնաշխատորեն համաժամեցնել հատկագիրը բացելիս/փակելիսՄիջինըՄիջին ժամանակըՊատասխանելու միջին ժամանակըՄիջին հեշտությունՄիջինը սովորած օրերի համարՄիջին ժամանակամիջոցըՊատասխանՊատասխանի նախատեսքՊատասխանի կաղապարՊահուստավորվում է...ՊահուստներՀիմնականՀիմնական (+ հետադարձ քարտերը)Հիմնական (հետադարձը ըստ ընտրության)Հիմնական (մուտքագրեք պատասխանը)Կապույտ դրոշԹավ գրվածք (Ctrl+B)ԶննելԶննել (%(cur)d ցուցադրված է քարտ; %(sel)s)Զննիչի տեսքըԶննիչի տեսքը...Զննիչի ընտրանքներԿառուցելԱռանձնացվածԱռանձնացնելԱռանձնացնել քարտըԱռանձնացնել գրառումըԱռանձնացնել հարաբերվող նոր քարտերը մինչև հաջորդ օրըԱռանձնացնել հարաբերվող կրկնությունները մինչ հաջորդ օրըԻ սկզբանէ Anki-ն հայտնաբերում է դաշտերի միջև եղած գրանշանը, օր.՝ ներդիրը, ստորակետը ևն: Եթե Anki-ն գրանշանը սխալ է հայտնաբերում, ապա կարող եք ճիշտը այստեղ մուտքագրել: Օգտագործեք \t ներդիրը ներկայացնելու համար:ՉեղարկելՔարտՔարտ %dՔարտ 1Քարտ 2Քարտի IDՔարտերի ցանկՔարտի վիճակՔարտի տեսակՔարտի տեսակ՝Քարտերի տեսակներՔարտերի տեսակներ %s-ի համարՔարտը առանձնացվեց:Քարտը հեռացվեց:Քարտը «կպչուն» էր:ՔարտերՔարտերը չեն կարող ձեռքով տեղափոխվել զտված կապուկի մեջ:Քարտերը պարզ գրվածքի տեսքովԿրկնելուց հետո քարտերը ինքնաշխատորեն կվերադարձվեն ելման կապուկների մեջ:Քարտեր...ԿենտրոնՓոխելՓոխել %s հետևյալնով՝Փոխել կապուկըՓոխել կապուկը...Փոխել գրառման տեսակըՓոխել գրառման տեսակը (Ctrl+N)Փոխել գրառման տեսակը...Փոխել գույնը (F8)Փոխել կապուկը կախված գրառման տեսակիցՓոփոխվածՆերգևի փոփոխությունները կազդեն այս քարտի տեսակը %(cnt)d օգտագործող գրառման վրա:Փոփոխությունները կազդեն Anki-ն վերամեկնարկելիս:Ստուգել &մեդիան...Ստուգել արդիացումների առկայությունըՍտուգել նիշքերը մեդիայի գրացուցակումՄեդիայի ստուգում...Ստուգում...ԸնտրելԸնտրել կապուկըԸնտրել գրառման տեսակըԸնտրել պիտակներըՄաքրել դրոշըՄաքրել չօգտագործվածներըՄաքրել չօգտագործված պիտակներըԿրկնօրինակել՝ %sՓակելՓակել և կորցնե՞լ ընթացիկ ներմուծումը:Փակվում է...ԲացթողումներԲացթողումների ջնջում (Ctrl+Shift+C)Կոդ՝Հավաքածուն արտահանված է:Հավաքածուն վնասված է: Մանրամասների համար կարդացեք ձեռնարկը:ԵրկկետՍտորակետԿազմաձևԿազմաձևԿազմաձևել միջերեսի լեզուն և ընտրանքներըՇնորհավորում ենք, դուք այս պահի դրությամբ ավարտեցիք սույն կապուկը:Միացվում է...Միացմանը սպասելու ժամանակը ավարտվեց: Դուք կամ Համացանցին միանալու հետ խնդիրներ ունեք, կամ մեդիայի պանակում շատ մեծ նիշք կա:ՇարունակելՊատճենելՀասուն քարտերի ճիշտ պատասխաններ՝ %(a)d/%(b)d (%(c).1f%%)Ճիշտ՝ %(pct)0.2f%%
(%(good)d of %(tot)d)Անհնար է միանալ AnkiWeb-ին: Ստուգեք Համացանցի հետ կապը և կրկին փորձեք:Չի հաջողվում ձայնագրել ձայնանյութը: Դուք տեղադրե՞լ եք lame և sox:Չի հաջողվում պահել նիշքը՝ %sՍովորելՍտեղծել կապուկՍտեղծել զտված կապուկ...Ստեղծել սանդղելի պատկերներ dvisvgm-ովՍտեղծված էCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+NCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZԳումարային թիվըԳումարային %sԳումարային պատասխաններԳումարային քարտերԸնթացիկ կապուկԳրառման ընթացիկ տեսակ՝Լրացուցիչ ուսուցումՈւսուցման լրացուցիչ աշխատաշրջանԿտրելՇտեմարանը կառուցված և լավարկված է:ԱմսաթիվՍովորած օրերի մասնաբաժինըԱպանույնականացնելՎրիպազերծման կառավարակետԿապուկԿապուկը գերակայում է...Կապուկը ներմուծվելու է հատկագիրը բացելուն պեսԿապուկներՓոքրացող ժամանակամիջոցներՍկզբնադիրՀետաձգումները հաջորդ կրկնությունից առաջ:ՋնջելՋնջել քարտերըՋնջել կապուկներըՋնջել դատարկներըՋնջել գրառումըՋնջել գրառումներըՋնջել պիտակներըՋնջել չօգտագործվողներըՋնջե՞լ դաշտը %s-ից:Ջնջե՞լ %(num)d ընտրված հավելում(ներ)ը:Ջնջե՞լ '%(a)s' քարտերի տեսակը և համապատասխան %(b)s-երը:Ջնջե՞լ գրառման այս տեսակը և նրա բոլոր քարտերը:Ջնջե՞լ չօգտագործվող գրառման այս տեսակը:Ջնջե՞լ չօգտագործվող մեդիանիշքերը:Ջնջվեց %d բացակայող գրառումով քարտը:Ջնջվեց %d բացակայող կաղապարով քարտը:Ջնջվեց %d բացակայող գրառման տեսակով գրառումը:Ջնջվեց %d քարտեր չունեցող գրառումը:Ջնջվեց %d դաշտերի սխալ քանակ ունեցող գրառում:Ջնջվեց:Կապուկների ցանկից այս կապուկի ջնջումը կվերադարձնի բոլոր մնացած քարտերը իրենց ելման կապուկների մեջ:ՆկարագրությունՈւսուցման էկրանին ցուցադրվող նկարագրությունը (միայն այս կապուկի համար)՝ԵրկխոսությունՆերբեռնել AnkiWeb-իցՆերբեռնվածները %(fname)sՆերբեռնվում է AnkiWeb-ից...ԿրկնելիքՄիայն կրկնելիք քարտերըՎաղը կրկնելիքԵ&լքՀեշտությունՀեշտ էՊարգև հեշտերի համարՀեշտերի ժամանակամիջոցըԽմբագրելԽմբագրել "%s"Խմբագրել ընթացիկըԽմբագրել HTMLԽմբագրվածԽմբագրել տառատեսակըԴատարկԴատարկ քարտեր...Դատարկ քարտերի համարները՝ %(c)s Դաշտեր՝ %(f)s Հայտնաբերվեցին դատարկ քարտեր: Մեկնարկեք Գործիքներ>Դատարկ քարտեր:Դատարկ առաջին դաշտ՝ %sՎերջՆշեք նոր քարտերը %s տեղավորելու կապուկը, կամ դաշտը դատարկ թողեք՝Մուտքագրեք քարտի նոր տեղավորությունը (1...%s)՝Մուտքագրեք ավելացվելիք պիտակները՝Մուտքագրեք ջնջվելիք պիտակները՝%(id)s-ի ներբեռնման սխալ՝ %(error)sՆերբեռնման սխալ՝ %sՄեկնարկման սխալ՝ %sԱնվտանգ կապակցումն հաստատելու սխալ: Սովորաբար պատճառը հակավիրուսային ծրագիրն է, հրապատն է, VPN ծրագիրն է, կամ Համացանցի ծառայությունները տրամադրող ձեր մատակարակի խնդիրն է:%s կատարման սխալ:%s գործարկելու սխալԱրտահանելԱրտահանել...Արտահանվեց %d մեդիա նիշքըԼրացուցիչFF1%d դաշտը այս նիշքից՝Դաշտերի քարտեզի կազմումԴաշտի անվանումը՝Դաշտ՝ԴաշտերԴաշտեր %s-ի համարԴաշտերը բաժանված են սրանով՝ %sԴաշտեր...Զտ&իչՆիշքի տարբերակը անհայտ է, միևնույն է ներմուծման փորձ է տեղի ունենում:ԶտիչԶտիչ...Զտիչ՝ԶտվածԶտված կապուկ %dԳտնել &կրկնօրինակները...Գտնել կրկնօրինակներըԳտնել և փո&խարինել...Գտնել և փոխարինելԱվարտելԱռաջին քարտԱռաջին ցուցադրությունԱռաջին դաշտի համընկնում՝ %sՍխալ հատկություններով %d քարտը շտկված է:AnkiDroid կապուկի վերագրման վրեպը շտկված է:Շտկված է գրառման տեսակը՝ %sԴրոշԴրոշ քարտՇրջելՊիտակը արդեն գոյություն ունի:Տառատեսակ՝Ներգևի տողԱնվտանգության նկատառումներով '%s' չի կարելի օգտագործել քարտերի մեջ: Դուք կարող եք տեղադրել հրահանգը այլ պաթեթի մեջ, և ներմուծել այդ փաթեթը LaTeX-ի գլխագրի մեջ:ԿանխատեսումՁևԳտնվեց %(a)s-ը %(b)s-ից:ՀարցՀարցի նախատեսքՀարցի կաղապարԸնդհանուրՍտեղծված նիշք՝ %sՍտեղծված է %s վրաՍտանալ հավելումներ...ՆերբեռնելԼավ էԺամանակամիջոցը բոլոր քայլերից հետոԿանաչ դրոշHTML խմբագրիչԴժվար էՏեղակայե՞լ եք latex և dvipng/dvisvgm:ԳլխագիրՕգնությունԱռավելագույն հեշտությունՊատմությունՏունԸստ օրվա ժամանակիԺամ30 կրկնություններից պակաս լինելիս, ժամացույցը չի ցուցադրվումԵթե ներդրում եք կատարել ծրագրի զարգացման մեջ և նշված չեք ցանկում, ապա կապ հաստատեք մեզ հետ:Եթե ամեն օր սովորեիքԱնտեսել սրանից երկար տևող պատասխանի ժամանակըԱնտեսել տառաչափըԱնտեսել դաշտըԱնտեսել տողերը, որտեղ առաջին դաշտը համընկնում է առկա գրառման հետԱնտեսել այս արդիացումըՆերմուծելՆերմուծել նիշքըՆերմուծել անգամ եթե առկա գրառումը պարունակում է միևնույն առաջին տողըՆերմուծումը ձախողվեց: Ներմուծումը ձախողվեց: Վրիպազերծման տեղեկություններ՝ Ներմուծման ընտրանքներՆերմուծումը ավարտվեց:Առկա է մեդիապանակում, բայց չի օգտագործվում որևէ քարտում՝Որպեսզի համոզվեք հավաքածուի ճիշտ աշխատանքի մեջ սարքերի միջև տեղափոխելիս, Anki-ին հարկավոր է, որ համակարգչի ներքին ժամացույցը ճիշտ լինի: Ներքին ժամացույցը կարող է սխալ լինել անգամ եթե համակարգը տեղական ժամը ճիշտ է ցույց տալիս: Բացեք Ձեր համակարգչի ժամի կարգավորումների պատուհանը և ստուգեք հետևյալը՝ - AM/PM - Ժամի հոսընթացը - Ժամային գոտին - ամառային ժամը Ժամը ճշտելու տարբերությունը՝ %s:Ներառել մեդիանիշքերըՆերառել ժամանակացույցի տեղեկություններըՆերառել պիտակներըՄեծացնել նոր քարտերի այսօրվա սահմանափակումըՄեծացնել նոր քարտերի այսօրվա սահմանափակումը այսքանով՝Մեծացնել կրկնվող քարտերի այսօրվա սահմանափակումըՄեծացնել կրկնվող քարտերի այսօրվա սահմանափակումը այսքանով՝Աճող ժամանակամիջոցներՏեղակայել հավելումներըՄիջերեսի լեզուն՝ԺամանակամիջոցԺամանակամիջոցի փոփոխիչԺամանակամիջոցներԿոդը անվավեր է, կամ հավելումը հասանելի չէ Anki-ի այս տարբերակի համար:Անվավեր կոդ:Անվավեր կազմաձև՝ Նիշքի անվավեր անվանում: Վերանվանեք այն՝ %sԱնվավեր նիշք: Վերականգնեք պահուստից:Քարտի վրա անվավեր հատկություն է հայտնաբերվել: Օգտագործեք Գործիքներ>Ստուգել շտեմարանը, եթե խնդիրը կրկնվի, ապա հարց ուղղեք օժանդակման կայքէջում:Անվավեր կանոնավոր արտահայտություն:Անվավեր որոնում. ստուգեք մուտքագրման սխալներըԲացառված է:Շեղագիր գրվածք (Ctrl+I)Անցնել պիտակներին Ctrl+Shift+TՊահել մինչևLaTeXLaTeX հավասարումLaTeX math env.ՄոռացվածՎերջին քարտՎերջին կրկնությունՎերջին ավելացածները սկզբիցՍովորելԱրտահերթ սովորելու սահմանափակումՍովորվող՝ %(a)s, Կրկնվող՝ %(b)s, Վերասովորվող՝ %(c)s, Զտված՝ %(d)sՍովորվողԳործողություն «կպչուն» քարտերի հետ«Կպչուն» քարտերի շեմըՁախիցՍահմանափակելԲեռնվում է...Տեղային հավաքածուն քարտ չունի: Ներբեռնե՞լ AnkiWeb-ից:Ամենաերկար ժամանակամիջոցըՆայել այս դաշտում՝Նվազագույն հեշտությունԿարգավորելԳրառումների տեսակներըԳրառումների տեսակները...Կարգավորել...Միացնել %s-ինԳրառումների ցուցադրությունՆշել գրառումըMathJax բլոկMathJax ներտողայինԶարգացածներըԱռավելագույն ժամանակամիջոցըԿրկնությունների առավելագույն քանակը (օրը)ՄեդիաՆվազագույն ժամանակամիջոցՐոպեներԽառնել նոր քարտերը ու կրկնություններըMnemosyne 2.0 կապուկ (*.db)ԱվելինԱռավելագույն բացթողումներըՏեղափոխել քարտերըՏեղափոխել քարտերը կապուկի մեջ՝Բազմանիշ բաժանիչները չեն օժանդակվում: Մուտքագրեք միայն մեկ նիշ:&ԳրառումԱնվանումը գոյություն ունի:Կապուկի անվանումը՝Անվանում՝ՀամաժամացումՆորՆոր քարտերԱյսօրվա սահմանափակումը գերազանցող կապուկի նոր քարտերը՝ %sՄիայն նոր քարտերըՆոր քարտեր (օրական)Նոր կապուկի անվանումը՝Նոր ժամանակամիջոցՆոր անվանում՝Գրառման նոր տեսակ՝Կարգավորումների նոր խմբի անվանումը՝Նոր տեղավորությունը (1...%d)՝Հաջորդ օրը սկսում է կեսքիշերիցԴրոշ չկաԿրկնելիք քարտեր դեռ չկանՆշված չափանիշներին համապատասխանող քարտեր չկան:Դատարկ քարտեր չկան:Այսօր ոչ մի հասուն քարտ չի սովորվել:Չօգտագործվող կամ բացակայող քարտեր չգտնվեցին:Արդիացումներ չկան:ԳրառումԳրառման IDԳրառման տեսակԳրառման տեսակներԳրառումը և %d քարտը ջնջվեցին:Գրառումը առանձնացվեց:Գրառումը հեռացվեց:Նկատառում՝ Մեդիան պահուստավորված չէ: Ստեղծեք Anki-ի պանակի պարբերական պահուստավորումը ապահովության համար:Նկատառում՝ Պատմության որոշ մասը բացակայում է: Լրացուցիչ տեղեկությունների համար կարդացեք զննիչի թղթաբանությունը:Գրառումները պարզ գրվածքի տեսքովԳրառումները պահանջում են առնվազն մեկ դաշտ:Գրառումները պիտակավորվեցին:ՈչինչԼԱՎՀները սկզբում ցուցադրելՀաջորդ համաժամեցման ժամանակ վերագրել մեկ ուղղությունովՄեկ կամ մի քանի գրառում չներմուծվեցին, քանի որ նրանք որևէ քարտ չէին ստեղծել: Դա կարող է պատահել դատարկ դաշտերի կամ գրվածքային նիշքի ու դաշտերի սխալ համապատասխանեցումը նշելու պատճառով:Միայն նոր քարտերը կարող են վերատեղադրվել:Միաժամանակ միայն մեկ օգտատեր կարող է օգտվել AnkiWeb-ից: Եթե նախկին համաժամեցումը ձախողվեց, կրկին փորձեք մի քանի րոպեից:ԲացելԲացել պահուստը...Լավարկում...Ընտրանքային սահմանափակում՝ԸնտրանքներԸնտրանքներ %s-ի համարԸնտրանքների խումբ՝Ընտրանքներ...ԿարգԱվելացման կարգիԿրկնելու կարգիԳերակայել հակառակ կողմի կաղապարը՝Փոխել տառատեսակը՝Գերակայել հարցի կողմի կաղապարը՝Anki-ի փաթեթավորված կապուկ/հավաքածու (*.apkg *.colpkg *.zip)Գաղտնաբառ՝ՓակցնելՓակցնել սեղմատախտակի պատկերները իբրև PNGPauker 1.8 դաս (*.pau.gz)ՏոկոսՇրջան՝ %sՏեղադրել նոր քարտերի հերթի վերջումՏեղադրել կրկնության հերթի մեջ, այս ժամանակամիջոցով՝Սկզբում ավելացրեք գրառման այլ տեսակ:Միացրեք խոսափողը և համոզվեք, որ այլ ծրագրերը չեն օգտագործում ձայնային սարքը:Խմբագրեք այս գրառումը՝ ավելացնելով մի քանի բացատ լրացնելու համար: (%s)Համոզվեք, որ հատկագիրը բաց է, Anki-ն զբաղված չէ և կրկին փորձեք:Մուտքագրեք զտիչի անվանումը՝Տեղադրեք PyAudio-նՍկզբում բացեք հատկագիրը:Հեռացրեք %s պանակը և կրկին փորձեք:Վերագործարկեք Anki-ն լեզվի փոփոխությունը ուժի մեջ մտնելու համար:Գործարկեք Գործիքներ>Դատարկ քարտերԸնտրեք կապուկը:Ընտրեք գրառման միայն մեկ տեսակի քարտեր:Ընտրեք մի բան:Տեղադրեք Anki-ի վերջին տարբերակը:Օգտագործեք Նիշք>Ներմուծել այս նիշքը ներմուծելու համար:Այցելեք AnkiWeb, բարելավեք Ձեր կապուկը և կրկին փորձեք:ՀերթՆախընտրություններՆախատեսքԸնտրված քարտի նախատեսք (%s)Նոր քարտերի նախատեսքԱնցյալում ավելացված նոր քարտերի նախատեսքՄշակված մեդիա նիշք %dՄշակում...ՀատկագրերԱնհրաժեշտ է փոխանորդի վավերացում:Մանուշակագույն դրոշՀարցՀերթի վերջ՝ %dՀերթի սկիզբ՝ %dԵլքՊատահական դասավորվածությունՊատահականացնել հերթականությունըԳնահատականՎերակառուցելՁայնագրել սեփական ձայնըՁայնագրել ձայնը (F5)Ձայնագրություն...
Ժամանակ՝ %0.1fԿարմիր դրոշՀարաբերական ժամկետանցմանՎերասովորվողներըՀիշել վերջին մուտքագրված տվյալներըՀեռացնե՞լ %s պահված որոնումներից:Հեռացնել քարտի տեսակը...Հեռացնել ընթացիկ զտիչը...Հեռացնել պիտակները...Հեռացնել ձևաչափումը (Ctrl+R)Այս քարտի հեռացումը կբերի մեկ կամ մի քանի գրառումների ջնջմանը: Սկզբում ստեղծեք նոր քարտի տեսակը:ՎերանվանելՎերանվանել քարտի տեսակը...Վերանվանել կապուկըՓոխարինե՞լ Ձեր հավաքածուն ավելի վաղ պահուստի հետ:Վերարտադրել ձայնանյութըՎերարտադրել սեփական ձայնըՎերատեղադրելՎերատեղադրել քարտի տեսակը...Վերատեղադրել նոր քարտերըՎերատեղադրում...Հարկավոր են այս պիտակներից մեկը կամ մի քանիսը՝ՏեղափոխելՎերահերթագրելՎերահերթագրել քարտերը՝ հիմնվելով այս կապուկի մեջ իմ պատասխանների վրաՇարունակել հիմաԳրվածքի ուղղվածությունը աջից ձախՀետադարձել պահուստինՀետադարձել մինչև '%s' կարգավիճակին:ԿրկնությունԿրկնությունների քանակըԿրկնության ժամանակըԱռաջ կրկնել (օրական սահմանափակումից դուրս)Այսքանով առաջ կրկնել՝Անցյալում մոռացված քարտերը կրկնելԿրկնել մոռացված քարտերըՀաջողակ կրկնությունների բաժինը օրվա յուրաքանչյուր ժամի համար:ԿրկնություններԿապուկի այսօրվա սահմանափակումը գերազանցող կրկնելիք՝ %sԱջիցՊահելՊահել ընթացիկ զտիչը...Պահել PDF-ըՊահված է:Ընդգրկություն՝ %sՈրոնումՈրոնում ձևաչափումով (դանդաղ)ԸնտրելԸնտրել &բոլորըԸնտրել &գրառումներըԸնտրեք բացառվելիք պիտակները՝Ընտրված նիշքը UTF-8 կոդավորումով չէր: Կարդացեք նարմուծման մասին ձեռնարկի մեջ:Ընտրողական ուսուսցումԿետ-ստորակետՍպասարկիչը հայտնաբերված չէ: Կամ կապը խափանվել է, կամ հակավիրուսային ծրագիրը, հրապատը արգելափակում են Anki-ի միացումը Համացանցին:Նշանակե՞լ %s-ից ցածր բոլոր կապուկները այս ընտրանքային խմբի մաս:Նշանակել բոլոր ենթակապուկների համարԸնտրել առջևքի գույնը (F7)Shift ստեղնը սեղմված էր: Բաց է թողնվում ինքնաշխատ համաժամեցումը և հավելումների բեռնումը:Տեղաշարժել առկա քարտերի տեղավորությունըՍտեղանաշարի ստեղնը՝ %sՍտեղնաշարի ստեղնը՝ Ձախ սլաքՍտեղնաշարի ստեղնը՝ Աջ սլաք կամ EnterԿարճատ՝ %sՑուցադրել %sՑուցադրել պատասխանըՑուցադրել երկու կողմերըՑուցադրել կրկնօրինակներըՑուցադրել պատասխանի ժամանակըՑուցադրել քարտերը սպիտակը սևի վրա (գիշերային գործելաձև)Ցուցադրել նոր քարտերը կրկնություններից հետոՑուցադրել նոր քարտերը կրկնություններից առաջՑուցադրել նոր քարտերը ըստ ավելացման ժամանակիՑուցադրել նոր քարտերը պատահական հերթականությամբՑուցադրել հաջորդ կրկնության ժամանակը պատասխանի կոճակների վերևումԿրկնելիս ցուցադրել մնացած քարտերի քանակըԿողասյունՉափ՝Որոշ հարաբերվող ու առանձնացվող քարտեր հետաձգվել են մինչև այլ աշխատաշրջան:Որոշ կարգավորումներ ուժի մեջ կմտնեն Anki-ն վերագործարկելուց հետո:Որոշ թարմացումներ անտեսվել են, որովհետև գրառման տեսակը փոխվել է՝Տեսակավորման դաշտԶննիչում տեսակավորել ըստ այս դաշտիՏեսակավորումը ըստ այս սյունակի չի օժանդակվում: Մեկ ուրիշն ընտրեք:Ձայնը և տեսանյութը քարտերում չեն աշխատի մինչև mpv-ն կամ mplayer-ը չտեղադրվեն:ԲացատՍկզբնական տեղավորություն՝Սկզբնական հեշտությունՎիճակագրությունՎիճակագրությունՔայլ՝Քայլեր (րոպե)Քայլերը պետք է թվեր լինեն:Կանգնեցվում է...Այսօր %(a)s %(b)s սովորեցիք:Սովորեցիք այսօրՍովորելՍովորել կապուկըՍովորել կապուկը...Սովորել հիմաՍովորել ըստ քարտի կարգավիճակի կամ պիտակիՈճավորումՈճավորում (օգտագործվում է բոլոր քարտերում)Վարգիր (Ctrl+=)Արտահանում Supermemo XML-ի մեջ (*.xml)Վերգիր (Ctrl++)ՀեռացնելՀեռացնել քարտըՀեռացնել գրառումըՀեռացվածներըՀեռացվածները + ԱռանձնացվածներըՀամաժամեցումՁայնանյութերը ու պատկերները նույնպես համաժամեցնելՀամաժամեցումը ձախողվեց՝ %sՀամաժամեցումը ձախողվեց. միացում չկա:Համաժամեցման համար անհրաժեշտ է, որ համակարգչի ժամացույցը ճիշտ լինի: Ուղղեք ժամը և կրկին փորձեք:Համաժամեցում...TabՊիտակավորել կրկնօրինակներըՄիայն պիտակավորելՊիտակներԹիրախային կապուկ (Ctrl+D)Թիրախային դաշտ՝ԳրվածքՆերդիրներով կամ կետ-ստորակետներով բաժանված գրվածք (*)Այդ անվանումով կապուկը արդեն արկա է:Դաշտի այդ անվանումը արդեն օգտագործվում է:Այդ անվանումը արդեն օգտագործվում է:AnkiWeb-ին միանալու փորձի ժամանակը սպառվեց: Ստուգեք Համացանցի կապը և կրկին փորձեք:Սկզբնադիր կազմաձևը չի կարելի հեռացնել:Սկզբնադիր կապուկը չի կարելի հեռացնել:Քարտերի բաժանումը կապուկ(ներ)ում:Ներբեռնված նիշքերը վնասված են: Կրկին փորձեք:Առաջին դաշտը դատարկ է:Գրառման առաջին դաշտը պետք է արտապատկերված լինի:Հետևյալ գրանշանը չի կարող օգտագործվել՝ %sՔարտի հարցի կողմը դատարկ է: Մեկնարկեք Գործիքներ>Դատարկ քարտեր:Մուտքագրվածի հետևանքով կստեղծվեն դատարկ հարցեր բոլոր քարտերի համար:Ձեր կողմից ավելացված նոր քարտերի քանակը:Ձեր կողմից պատասխանված քարտերի քանակը:Կրկնելիք քարտերի քանակը:Յուրաքանչյուր կոճակը սեղմելու քանակը:Համակարգի ժամանակավոր պանակի թույլտվությունները սխալ են նշված և Anki-ն չի կարող նրանք ուղղել: Լրացուցիչ տեղեկությունների համար որոնեք «temp folder» Anki-ի ձեռնարկում:Տրամադրվող նիշքը պետք է լինի .apkg ձևաչափով:Որոնման տվյալներով ոչ մի քարտ չգտնվեց: Ուզո՞ւմ եք փոխել նրանք:Հարցվող գործողությունը կպահանջի տվյալների շտեմարանի վերբեռնում հաջորդ համաժամեցման ժամանակ: Այլ սարքերում կատարված ու չհամաժամեցված փոփոխությունները (կրկնություններ ևն) կկորչեն: Շարունակե՞լ:Պատասխանների վրա ծախսված ժամանակ:Այլ նոր քարտեր կան, բայց հասել եք օրական սահմանափակմանը: Դուք կարող եք մեծացնել սահմանափակումը կարգավորումներում, բայց հաշվի առեք, որ ինչքան շատ քարտեր եք նայում, այդքան ավել պետք է կրկնեք մոտակա ժամանակում:Պետք է լինի առնվազն մեկ հատկագիր:Այս աղյուսակը չի կարելի դասակարգել, բայց կարող եք որոնում կատարել անհատական քարտերի տեսակների համար, օր.՝ 'card:1':Այս աղյուսակը չի կարելի դասակարգել, բայց կարող եք որոնում կատարել կոնկրետ կապուկների համար՝ ձախ կողմում կտտացնելով:Նիշքը պետք է .apkg ձևաչափով լինի: Եթե ներբեռնումը AnkiWeb-ից կատարվել, ապա հնարավոր է, որ այն ձախողվել է: Եթե սխալը կրկնվի, փորձեք այլ զննիչ օգտագործել:Այս նիշքը արդեն գոյություն ունի: Վստա՞հ եք, որ ուզում եք վերագրել այն:Այս պանակը պարունակում է Anki-ի բոլոր Ձեր տեղեկությունները, ավելի արագ պահուստավորելու համար: Այլ պանակ օգտագործելու համար նայեք՝ %s Սա արտահերթ սովորելու համար հատուկ կապուկ է:Սա {{c1::օրինակ}} բացթողումը լրացնելու օրինակ է:Սա կստեղծի %d քարտը: Շարունակե՞լ:Սա կջնջի առկա հավաքածուն և կփոխարինի այն ներմուծվող նիշքի տվյալներով: Վստա՞հ եք:ԺամԺամանակի սահմանափակումԿրկնելիքՀավելումնեը զննելու համար սեղմեք զննելու ներքևի կոճակը:

Երբ գտնեք պետք եկած հավելումը, փակցրեք նրա կոդը ներքևում: Դուք կարող եք մի քանի կոդ փակցնել՝ բաժանելով բացատներով:Առկա գրառման բացթողումների լրացումը ավելացնելու համար պետք է նրա տեսակը փոխել «բացթողումների», ընտրելով Խմբագրել>Փոխել գրառման տեսակը:Հիմա սովորելու համար, սեղմեք ներքևի «Վերադարձնել առանձնացվածները» կոճակը:Արտահերթ սովորելու համար սեղմեք ներքևի «Լրացուցիչ ուսուցում» կոճակը:ԱյսօրՀասել եք այսօրվա կրկնությունների սահմանափակմանը, բայց դեռ կրկնվելիք քարտեր կան: Ընտրանքներում կարող եք բարձրացնել օրական սահմանափակումը:Փոխարկումը միացված էՓոխարկել նշանըՓոխարկումը անջատելԸնդհանուրԸնդհանուր ժամանակըՔարտերի քանակըԳրառումների քանակըԸնդունել այս մուտքագրումը որպես կանոնավոր արտահայտությունՏեսակԳրեք պատասխանը՝ անհայտ դաշտ %sՉհաջողվեց ներմուծել միայն կարդացվող նիշքը:Չհաջողվեց տեղափոխել առկա նիշքը աղբարկղի մեջ: Փորձեք վերամեկնարկել համակարգիչը:Վերադարձնել առանձնացվածներըԸնդգծված գրառում (Ctrl+U)ՀետարկումՀետարկել %sՊատասխանի անսպասելի կոդ՝ %sՆիշքի անհայտ ձևաչափ:Չի սովորվելԹարմացնել առկա գրառումները առաջին դաշտի համընկման դեպքում:Արդիացնե՞լ հետևյալ հավելումները:Թարմացվեցին առկա գրառումներից %(a)d из %(b)d:Վերբեռնել AnkiWebՎերբեռնվում է AnkiWeb...Օգտագործված է քարտերում, բայց բացակայում է մեդիապանակում՝Օգտատեր 1Տարբերակ %sՏեսնել հավելումների էջըՏեսնել նիշքերըՍպասում է խմբագրության ավարտին:Զգուշացում. Բացթողումների լրացումը չի աշխատի մինչև վերևում չփոխեք տեսակը «Բացթողումների»-ի:Սկզբնադրորեն ավելացնել ընթացիկ կապուկի մեջԱմբողջ հավաքածունԿուզե՞ք հիմա ներբեռնել այն:Ստեղծել է Damien Elmes: Վրիպաշտկումները, թարգմանությունները, փորձարկումները և դիզայնը տրամադրել են՝

%(cont)sԳրառման տեսակը՝ բացթողումների լրացում է ընտրված , բայց Դուք ոչ մի բացթողում չեք լրացրել: Շարունակե՞լ:Դուք շատ կապուկներ ունեք: Նայեք %(a)s. %(b)sԴուք դեռ չեք ձայնագրել Ձեր ձայնը:Դուք պետք է առնվազն մեկ սյունակ ունենալ:ԹարմերըԹարմերը+ՍովորվողներըՓոփոխությունները կազդեն մի քանի կապուկների վրա: Եթե ուզում եք փոփոխել միայն ընթացիկ կապուկը, ապա նախ ընտրանքների նոր խումբ ստեղծեք:Ձեր հավաքածուի նիշքը վնասված է: Պատճառը կարող է լինել Anki-ն բաց լինելու ժամանակ նիշքի պատճենումը կամ տեղափոխումը, նաև հավաքածուի ցանցային կամ ամպային հիշասարքում պահվելը: Եթե համակարգիչը վերագործարկելուց հետո խնդիրները չեն անհետանում, ապա բացեք ինքնաշխատ պահուստը հատկագրի էկրանից:Ձեր հավաքածուն գտնվում է անհամատեղելի վիճակում: Մեկնարկեք Գործիքներ>Ստուգել շտեմարանը, հետո կրկին համաժամեցրեք:Ձեր հավաքածուն կամ մեդիա նիշքը շատ մեծ է համաժամեցման համար:Ձեր հավաքածուն հաջողությամբ վերբեռնվել է AnkiWeb: Եթե Դուք օգտվում եք ցանկացած այլ սարքերից, ապա նրանք հիմա համաժամեցրեք և ներբեռնեք այս համակարգչից հենց նոր վերբեռնված հավաքածուն: Դրանից հետո, ապագայում կրկնվող և նոր ավելացված քարտերը ինքնաշխատորեն կմիավորվեն:AnkiWeb-ում գտնվող Ձեր կապուկները տարբերվում են տեղային տարբերակից և չեն կարող ինքնաշխատորեն միացվել: Հարկավոր է մի կողմի կապուկները մյուսով վրագրել: Եթե ընտրեք ներբեռնումը, ապա Anki-ն AnkiWeb-ից կներբեռնի կապուկները և այս համակարգչում վերջին համաժամեցումից ի վեր կատարված փոփոխությունները կվերանան: Եթե ընտրեք վերբեռնումը, ապա Anki-ն կվերբեռնի կապուկները AnkiWeb և AnkiWeb-ում կամ այլ սարքերում վերջին համաժամեցումից ի վեր կատարված փոփոխությունները կվերանան: Բոլոր սարքերի համաժամեցումից հետո ապագայում կրկնվող և նոր ավելացված քարտերը ինքնաշխատորեն կմիավորվեն:Ձեր հրապատը կամ հակավիրուսային ծրագիրը չեն թողնում Anki-ին միացում հաստատել: Anki-ի համար բացառություն ավելացրեք այդ ծրագրերում:[կապուկ չկա]պահուստքարտարտ կապուկիցքարտով: Ընտրել ըստ՝հավաքածուօրօրկապուկամբողջ ընթացքումկրկնօրինակօգնությունթաքցնելժամժամ հետո%s օրում%s ժամում%s րոպեում%s ամսում%s վայրկյանում%s տարումմոռացվածներպակաս քան 0.1 քարտ/րոպեումարտապատկերել %sարտապատկերել պիտակներրոպերոպեամիսկրկնությունվայրկյանվիճակագրությունայս էջըշ.ամբողջ հավաքածուն~anki-2.1.0+dfsg~b36/locale/ia/000077500000000000000000000000001323611211500157075ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ia/LC_MESSAGES/000077500000000000000000000000001323611211500174745ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ia/LC_MESSAGES/anki.mo000066400000000000000000001741621323611211500207660ustar00rootroot00000000000000/> >>>">? ?(?;?8M????"?$?$@&(@"O@r@4@2@@@"A$>A$cA$A AAAABB#B8BOBbB wBBBBBBBB BBB BBBBB BB BC C"C:CJCYChCyCC0C CC C CCCCDDDDDDDDDDDTD E,"E(OExE!EEfE8F NF[F mF zFFFFFeF9G7G H%H58HXnHYH%!IkGI I III I II J !J-J6J>JFJ LJ$XJ}J JJ J J%JKJ&K;K"MBM GMUMgMINRNv O7O OwOESP@PPPPRPKQQ#Q# R1RPR(iRR RR RRRR R SSS S:SYS`SsSSS S S)S'SSTTTTTT T T TT UU(U:U3@UtUSUUUU U V VV8V"LVoVwV&V VV VV V VVVWW-$WRWXW(^W5W WWOXXX8]X5XPX7YUYlY qY}YY YYYYYYY Y Y Y Y Z Z Z'Z .Z 9ZGZZZ kZxZ ZZZZZ Z Z ZZ/[2[8[M[%U[{[ [ [ [ [ [ [ [[,[(\G\e\Fz\N\P]>a]P]]]] X^8d^^^^^^ ^^^_ _ __ $_ 1_;_ B_O_U_)d_0___4_!`0`C`Y`o`` aa/a 6a.@aoauawaza a aaa aa aaaabb+b;bPbab hb sbbNb"b cc#c:c@cGccddd %d3dBdJd]d mdxd}d dddd ddddd.dFeUene e e4eee e1f4fDfdfsf*ff Ph^h }hh"h"h hi&i5iIiRi di ni)|ii*jFj]j|jjjjj j jjjj<j-k 6kCkSkXk aklk}k kkk k kkkkkk ll/lIl Nl Zlelyl lllll ll ll l ll m!m8mKm+amm#m!mmm m m<n BnOn]_nano!3o Uocokono,oo#upkpq qq(q0q?q NqYq _q kquqqq qqqq r rr,5r#brVr8rEs\sss*s0ss t,tLt-et+t8tt u uu0u#Bu0fu uuuuu uuuvvv v1vMvbvjvivv v ww %w0w Ew"Swvw ~w1w ww wx x x $x1xAx`x-wxxx xxxx x xyVyty yy,z>zGSz zzz"z {{ {*{:{L{i{{{*{'{|@|6^|8| |!|?|;}A} Q} _}j}p}} }} } } }}}}~0~ 8~ E~ R~\~ m~~!~d~ (37FOT iw(| X+T"&+ʀ0+A>mF'*(F1o,_Iփ'Ƅ#څed8[C$(hr u&/M̉  NJ Ҋ ފ! '/W^ck.&݋,4 ;FUe$"S0h$" {^o5ΎU cmu{  ’̒ђ֒ܒ&<AILT\ bln AL ["g :*/(Z($&і: DH(&& &4"[~ Ƙט-<MQUY^bfy  ƙ ҙߙ# 0 AOd x3˚ښ 26 du0w:%! +vC֝! #.?[q 9 E`\n,,Y :IYv   ¢'Ϣ  .+=Oi'أ,-2AZ`aKNѨ /K@ EO dJn1! '.V v:ҫ ث+<E\m'ǬϬ %956o x  ͮܮ2=9w[  4R,j-  ! 0;!Cek4s 07%u6 B6X79ʳ #.5<CJQ X e r   ʹ *J'Qy ~ 6 . NXlɶ/-*&XNT\CJd Pd[ O̹0Eah   ɺں #27Ejʻ@л*<T pV!s<#):A HV mwξ Z90ſݿ   .AI[k 4E*p-<6?;P-58!( J*X1114H _j >    (5E \"fH   (>Rhp %<D^n  (";^v8)*&Q V a n>|srO# E.Wt*{   #!D fs3z $9-AZo<Zb!},@2 @2Z21:C LY$k->&)/Ybu ! ' |H  9Ii z: % 0CR!e2  "" 3Ad\x4\s+"N%e, $(#(L5u'J8 WRbJIJ$[2 *9AR f's '  (2|&9= O\aBQ),{&*942M-OG&F)m+-.J /.9h ]b~1 B'kt|7$\\w } *)02: CO j9u)8; DO[n( W&/~#!~ J "Vy +=DW juw| !) ,7 @ KWYp;x$/&9<r  ( \CXoL;VA`r]V.n=3)1nqKDRu`R/Lo xG3>Ma:7&krY1FePP#f,<{+bzOD72Ek{t ?hKz>_@|y!8 %w[TSiH5(),*J-,kF~e vj\Z?+lwsE8YQ$U ^C0 s!p["~'QO$Jn'_cP}v(5-Hbm6\dZW 9U^"W*%Tjy" HtQB:R@e X/G `iIza.^Efc0*6 Nuqx=p.#K]Mu-5oclpBSN~4<Z%UX9>S+0A#I'{}Gg2Y lD):Bwt3!mAgmjCLy bON4 IVM6]J?4Fsq7d_W i&[1}2ad8hT|h|;@=fvg (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-07-02 11:20+0000 Last-Translator: karm Language-Team: Interlingua MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) (1 de %d) (disactivate) (activate) Il ha %d carta. Il ha %d cartas.%% Correcte%(a)0.1f %(b)s/die%(a)0.1fs (%(b)s)%(a)d de %(b)d nota ajornate%(a)d de %(b)d notas ajornate%(tot)s %(unit)s%.01f cartas/minuta%d carta%d cartas%d carta cancellate.%d cartas cancellate.%d carta exportate.%d cartas exportate.%d carta importate.%d cartas importate.%d carta studiate%d cartas studiate%d fasce ajornate.%d fasces ajornate.%d gruppo%d gruppos%d cambio de medios a cargar%d cambios de medios a cargar%d file de medios file discargate%d files de medios file discargate%d nota%d notas%d nota addite%d notas addite%d nota cancellate.%d notas cancellate.%d nota exportate.%d notas exportate.%d nota importate.%d notas importate.%d nota inalterate%d notas inalterate%d nota ajornate%d notas ajornate%d revista%d revistas%d seligite%d seligite%s copiar%s die%s dies%s hora%s horas%s minuta%s minutas%s minuta.%s minutas.%s mense%s menses%s secunda%s secundas%s a cancellar%s anno%s annos%sd%sh%sm%sme%ss%sa&A proposito de...&Cram...&Editar&Exportar...&FileTrovar (&Find)Ir (&Go)&Guida&Guida...(&H) Adjuta&Importar...&Inverter le selectionProxime (&Next) carta(&O) aperir le plica del Add-ons...&Preferentias...Carta &Previe&Re-programmation...&Supporto a Anki...Ins&TrumentosDisfacer (&Undo)Le '%(row)s' ha %(num1)d campos, expectate %(num2)d(%s corrigite)(fin)(filtrate)(apprendimento)(nove)(limite parente: %d)(per favor selige 1 carta)...Le files .anki2 non es designate pro ser importate. Si tu es provante a restaurar per un copia de reserva, per favor vide le section 'Copias de reserva' del manual del usator./0d1 mense1 anno10AM10PM3AM4AM4PM504 recipite error de timeout del gateway. Per favor prova a disactivar temporarimente tu antivirus.:%d carta%d cartasAperir le plica del copia de reservaVisitar le sito web%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MCopias de reserva
Anki creara un copia de reserva de tu collection cata vice illo es clause o synchronisate.Exportar le formato:Trovar:Dimension del characteres:Typo de characteres:In:Includer:Dimension del linea:Replaciar con:SynchronisationSynchronisation
Actualmente non activate; clicca le button de synchronisation in le fenestra principal pro la activar.

Conto requirite

Pro mantener tu collection synchronisate es requirite un conto gratuite. Per favor signa te pro un conto, pois insere tu detalios infra.

Anki ajornate

Anki %s ha essite emittite.

Un grande gratias a tote le gente qui ha providite suggestiones, reportos de error e donationes.Un facilitate del carta es le dimension del proxime intervallo quando tu responde "bon" sur un revista.Un fasce filtrate non pote haber sub-fasces.Un problema occurreva durante le synchronisation del medios. Per favor usa Instrumentos>Controlar Medios, pois synchronisa ancora pro corriger le problema.Abortate: %sA proposito de AnkiAdderAdder (via breve: ctrl+enter)Adder un campoAdder le mediosAdder un fasce nove (Ctrl+N)Adder le typo de notaAdder le reversoAdder TagsAdder a:Adder: %sAdditeAddite hodieAddite duplicato con le prime campo: %sDe novoDe novo hodieAncora contar: %sTote le fascesTote le camposTote le cartas in ordine casual (modo cram)Tote le cartas, notas e medios pro iste profilo essera cancellate. Es tu secur?Permitter le HTML in le camposUn error occurreva durante le accesso al base de datos. Causas possibile: - Le software antivirus, firewall, copia de reserva, o de synchronisation pote interferer con Anki. Prova a disactivar tal software e vider si le problema va via. - Tu disco pote esser plen. - Le plica Documents/Anki pote esser sur un drive de rete. - Le files in le plica Documents/Anki pote esser non scribibile. - Tu disco dur pote haber errores. Il es un bon idea facer fluer Instrumentos>Controlar le base de datos, pro assecurar se que tu collection non es corrupte. Un error occurreva durante le apertura de %sAnkiFasce Anki 2.0Pacchetto de fasces AnkiAnki non poter renominar tu profilo pois que illo non pote renominar le plica del profilo sur le disco. Per favor assecura te haber le licentia de scriber in Documents/Anki e necun altere programmas accede actualmente le plicas de tu profilo, pois prova ancora.Anki non pote trovar le linea inter le demanda e le responsa. Per favor adjusta le modello manualmente pro excambiar demanda e responsa.Anki es un systema de apprendimento spatiate amical e intelligente. Il es gratuite e open source.Anki es licentiate sub le licentia AGPL3. Per favor vide le file del licentia in le distribution del fonte pro plus de informationes.Le contrasigno o ID de AnkiWeb esseva non correcte; per favor prova novemente.ID de AnkiWeb:AnkiWeb ha incontrate un error. Per favor reproba in alicun minutas, e si le problema persiste, per favor archiva un reporto de defecto.AnkiWeb es troppo occupate al momento. Per favor reproba in alicun minutas.AnkiWeb es sub mantenentia. Per favor reproba in alicun minutas.ResponderButtones de responsaResponsasUn software antivirus o un firewall impedi Anki le connexion con Interete.Tote le cartas mappate a nihil essera cancellate.Apparite duo vices in le file: %sDesira tu vermente cancellar %s?Al minus un typo de carta es requirite.Al minus un grado es requirite.Reproducer audio automaticamenteSynchronisar automaticamente sur le profilo aperir/clauderMediaTempore medieTempore medie del responsasFacilitate medieMedia del dies studiateIntervallo medieRegrederVista preliminar retroModello de retroCopias de reservaBasic(Carta invertite e) Basic(Carta optionalmente invertite e) BasicNavigarApparentia del navigator WebOptiones del navigatorProducerInhumarInhumar un cartaInhumar un notaInhumar le nove cartas pertinente usque le die successiveInhumar le revistas pertinente usque le die successivePer option predefinite, Anki revelara le character inter campos, qual un scheda, virgula, e assi simile.Si Anki revela le character in modo errate, tu pote inserer isto ci. Usar \t a representar un tabulation.CancellarCartaCarta %dCarta 1Carta 2ID del cartaLista del cartasTypo de cartaTypos de cartaTypos de cartas pro %sCarta inhumate.Carta suspenditeLe carta esseva un sanguisugaCartasLe cartas non pote ser movite manualmente in le joco filtrateCartas in texto clarLe cartas essera automaticamente rendite a lor fasces original post que tu ha revidite los.Cartas...CentrarCambiarCambiar %s in:Cambiar fasceCambiar typo de notaCambiar typo de nota (Ctrl+N)Cambiar typo de nota...Cambiar le fasce dependente del typo de notaCambiateControlo del &Medios...Controlar le files in le directorio de mediosControlo...EligerEliger le fasceEliger le typo de notasEliger le TagsClonar: %sClauderClauder e perder le input actual?ClozeCodice:Le collection es corrupte. Per favor vide le manual.Duo punctosVirgulaConfigurar le lingua de interfacie e le optionesCongratulationes! Tu ha finite iste fasce actualmente.In connection...Connexion foras tempore. O tu connexion a Internet ha problemas, o tu ha un file multo grande in tu plica del medios.ContinuarCopiarCorriger le responsas sur le cartas matur: %(a)d/%(b)d (%(c).1f%%)Corriger: %(pct)0.2f%%
(%(good)d de %(tot)d)Non pote connecter se a AnkiWeb. Per favor controla tu connexion de rete e prova ancora.Non pote registrar le audio. Ha tu installate lame e sox?Impossibile salvar le file: %sCramCrear un fasceCreation del fasce filtrate...CreateCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sResponsas cumulativeCartas cumulativeFasce actualTypo de nota actualStudio personalisateSession de studio personalisateTaliarBase de datos reconstruite e optimisateDataDies studiatede-autorisarConsola de correctionFasceLe fasce essera importate quando un profilo es aperte.FascesIntervallos decrescentePro definition baseRetarda usque le revistas es monstrate de novoCancellarCancellar le cartasCancellar le cartaCancellar le vacueCancellar le notaCancellar le notasCancellar le tagsCancellar le non usateCancellar le campo ab %s?Cancellar le '%(a)s' typo de carta, e su %(b)s?Cancellar iste typo de nota e tote su cartas?Cancellar iste typo de nota non usate?Cancellar le medios non usate?Cancellate %d carta con nota mancante.Cancellate %d cartas con nota mancante.Cancellate %d carta con modello mancante.Cancellate %d cartas con modello mancante.Cancellate %d nota con typo de nota mancante.Cancellate %d notas con typo de nota mancante.Cancellate %d nota con nulle cartas.Cancellate %d notas con nulle cartas.Cancellate %d nota con conto de campo incorrecte.Cancellate %d notas con conto de campo incorrecte.CancellateCancellante iste fasce ex le lista del fasce retornara tote le restante cartas a lor fasce original.DescriptionDescription a monstrar sur le schermo de studio (solmente pro le fasce actual):Fenestra de dialogoDiscargar ex AnkiWebDiscargamento ex AnkiWeb...DebiteSolmente cartas debiteDebite demanE&xirFacileFacileBonus facileIntervallo facileModificarModificar actualModificar HTMLModificateTypo de characteres pro le modificaVacuarVacuation del cartas...Vacuar le numeros del carta: %(c)s Campos: %(f)s Cartas vacue trovate. Per favor exeque Instrumentos>Vacuar le cartas.Vacuar le prime campo: %sFinirInsere le fasce in le qual poner %s nove cartas, o lassar blanc:Insere le nove position de carta (1...%s):Insere le tags a adder:Insere le tags a cancellar:Error in le discargamento de: %sError durante le initio: %sError a establir un connexion secur. Isto es habitualmente causate per le antivirus, firewall o software VPN, o per problemas con tu provider de servicios Interete ISP.Error in le execution de %s.Error in le functionamento de %s.ExportarExportation...Exportate %d file multimedialExportate %d files multimedialExtraFF1Le campo %d de iste file es:Mappa del campoNomine del campoCampo:CamposCampos pro %sCampos separate per %sCampos...FiltrarFiltro:FiltrateCampo filtrate %dCercar &Duplicatos...Trovar &Duplicatos...Trovar e Reim&placiar...Trovar e ReimplaciarFinirPrime cartaPrime RevisionPrime campo concordante: %sFixate %d carta con proprietates non valide.Fixate %d cartas con proprietates non valide.Fixate fasce de AnkiDroid supplantar le defecto.Typo de nota fixate: %sFlipLe plica existe jam.Typo de characteres:Pede de paginaPro rationes de securitate, '%s' non es permittite sur le cartas. Tu pote ancora usar isto ubicante le commando in un pacchetto differente, e importar ille pacchetto in vice in le testa de LaTeX.PrevisionFormaTrovate %(a)s trans %(b)s.FronteVista preliminar del fronteModello del fronteGeneralFile: %s generateGenerate sur %sObtener los compartiteBonIntervallo de graduationEditor HTMLDurCapiteAdjutaMaxime facilitateHistoriaInitioCollapso horariHorasLe horas con minus que 30 revistas non es monstrate.Si tu ha contribuite e non es sur iste lista, per favor continge nos.Si tu ha studiate cata dieIgnorar le tempore de responsa plus longe queIgnorar le majusculasIgnorar le campoIgnorar lineas ubi le prime campo concorda le nota existenteIgnorar iste ajornamentoImportarImportar un fileImportar mesmo si le nota existente ha equal le prime campoImportation fallite. Importation fallite. Info pro le correction: Optiones pro le importationImportation complete.In le plica de medios ma non usate per alicun cartas:Pro assecurar te que tu collection opera correctemente quando illo es movite inter le dispositivos, Anki require que tu horologio de computator interne sia fixate correctemente. Le horologio interne pote esser incorrecte mesmo si tu systema monstra le tempore local correcte. Per favor va al configurationes del tempore sur tu computator e controla le sequente: - AM/PM - Deriva del horologio - Die, mense e anno - Fuso horari - Hora legal Differentia al tempore correcte: %s.Includer mediosIncluder information de programmaIncluder tagsAccrescer le nove limite de carta hodierneAccrescer le nove limite de carta hodierne per leAccrescer le limite de revision de carta hodierneAccrescer le limite de revision de carta hodierneIncrementar le intervallosInstallar le add-onLingua del interfacie:IntervalloModificator de intervalloIntervallosCodice non valide.File non valide. Per favor restaura lo ex un copia de reserva.Proprietate non valide trovate sur le carta. Per favor usar Instrumentos>Controlar base de datos, e si le problema retorna ancora, per favor demandar sur le sito de supporto.Expressiones regular non valide.Isto ha essite suspendite.Saltar al tags con Ctrl+Shift+TMantenerLaTeXEquation LaTeXAmb. math de LaTeX.CaditasCarta ultimeRevision ultimePrimo le ultime additeApprenderLimite del apprendimento in avanteApprendite: %(a)s, Revidite: %(b)s, Reapprendite: %(c)s, Filtrate: %(d)sApprenderAction de sanguisugaLimine del sanguisugaRestanteLimitar aCargamento...Intervallo plus longeReguardar in campo:Facilitate plus basseTractarGestion del typos de nota...Mappar al %sMappar al tagsMaturIntervallo maximeRevisiones/die maximeMediosIntervallo minimeMinutasMiscer le nove cartas e le revisionesFasce de Mnemosyne 2.0 (*.db)Plus deLe plus parte del caditasMover le cartasMover cartas al fasce:N&otaLe nomine existe.Nomine pro le fasce:Nomine:ReteNoveNove cartasNove cartas solmenteNove cartas/dieNove nomine de fasce:Nove intervalloNove nomine:Nove typo de nota:Nove nomine de gruppo de optiones:Nove position (1...%d):Le die proxime initia alNulle cartas es debite ad hora.Nulle cartas ha concordate le criterios tu ha providite.Nulle cartas vacue.Nulle cartas matur esseva studiate hodie.Nulle files inexhauste o mancante trovate.NotaID de notaTypo de notaTypos de notaNota e su %d carta cancellate.Nota e su %d cartas cancellate.Nota inhumate.Nota suspendite.Nota: le medios non es salveguardate. Per favor crea un copia de reserva periodic de tu plica Anki pro esser secur.Nota: alcun de le chronologia es mancante. Pro plus de information, per favor vide le documentation del navigator.Notas in texto planLe notas require al minus un campo.Notas taggate.NihilOKLe plus vetere vidite anteaSur le successive synchronisation, fortiar le cambios in un directionUna o plus de notas esseva non importate, pois que illos non ha generate alicun cartas.Sol le nove cartas pote ser repositionate.Sol un cliente pote acceder AnkiWeb a un vice. Si un precedente synchronisation ha fallite, per favor prova ancora in pauc minutas.AperirOptimisation...Limite facultative:OptionesOptiones pro %sGruppo de optiones:Optiones...OrdineOrdine additeOrdine debiteSupplantar le modello posterior:Supplantar le typo de character:Supplantar le modello del fronte:Contrasigno:CollarCollar le imagines de tabula del fragmento como PNGPauker 1.8 Lection (*.pau.gz)PercentagePuncto: %sPoner al fin del nove cauda de cartaPoner in le cauda de revision con intervallo interponite:Per favor antea adder un altere typo de nota.Per favor connecte un microphono, e assecura alie programmas non usa le dispositivo audio.Per favor redige ce nota e adde alcun deletiones cloze. (%s)Per favor assecura te que un profilo es aperte e Anki non es occupate, alora prova ancora.Per favor installa PyAudioPer favor aperi un profilo antea.Per favor remove le plica %s e prova ancora.Per favor re-initia Anki pro completar le cambiamento de lingua.Per favor face fluer Instrumentos>Vacuar le cartasPer favor elige un fasce.Per favor eliger le cartas ab sol un typo de nota.Per favor elige alco.Per favor ajornar al version plus recente de Anki.Per favor usa File>Importar pro importar ce file.Per favor visita AnkiWeb, ajorna tu fasce, e prova ancora.PositionPreferentiasPre-visualisationPre-visualisa le carta seligite (%s)Pre-visualisa nove cartasPre-visualisa nove cartas addite in le ultimeProcessate %d file multimedialProcessate %d files multimedialTractamento...ProfilosEs requirite le authentication del proxy.QuestionBase del cauda: %dSummitate del cauda: %dQuitarAleatoriRender aleatori le arrangiamentoValorReconstructionReconstructionRegistration...
Tempore: %0.1fDemora relativeReapprenderRememorar le ultime entrata quando addeLe remotion de ce typos de carta pote causar un o plus de notas ser cancellate. Per favor crear antea un nove typo de carta.RenominarRenominar le fasceRepproducer le audioReproducer le voce proprieRepositionRepositionar le nove cartasRepositionar...Require un o plus de iste tags:Re-programmationRe-programmarRe-programmar le cartas in base a mi responsas in ce fasceResumer nuncReverter le direction del texto (RTL)Revertite al stato prior a '%s'.ReviderRevider le contoRevider le temporeRevider avanteRevider avante perRevider le cartas oblidate in finRevider le cartas oblidateRevider le taxo de successo pro cata hora del die.RevisionesDextraCampo: %sCercarCerca intra le formatation (lente)EligerSelection&A ToteEliger &NotasEliger le tags a excluder:Le file eligite non ha essite in formato UTF-8. Per favor vide le section de importation del manual.Studio selectivePuncto e virgulaServitor non trovate. Tu connexion es collabite, o un software antivirus/firewall bloca le connexion de Anki a Internet.Fixar tote le fasces sub %s pro ce gruppo de option?Fixar pro tote le sub-fascesLe clave del majusculas ha essite tenite a basso. Saltante le synchronisation automatic e le cargamento del add-on.Transferer le position del cartas existenteClave de via breve: %sClave de via breve: flecha a sinistraClave de via breve: flecha a dextera o EnterVia-breve: %sMonstrar %sMonstrar le responsaMonstrar le duplicatosMonstrar le temporisator de responsaMonstrar le nove cartas post le revistasMonstrar le nove cartas ante le revistasMonstrar le nove cartas in le ordine ha essite additeMonstrar nove cartas in ordine aleatoriMonstrar le tempore del revision successive supra le buttones del responsaMonstrar le conto del carta restante durante le revisionDimension:Alcun cartas pertinente o inhumate esseva retardate usque un plus recente session.Alcun configurationes prendera effecto post que tu habera reinitiate Anki.Alcun ajornamentos ha essite ignorate perque le typo de nota ha cambiate:Campo del ordineOrdinar per ce campo in le navigatorLe arrangiamento sur ce columna non es supportate.SpatioPosition initial:Facilitate de comenciamentoStatisticaGrado:Grados (in minutas)Le grados debe ser numeros.Studiate hodieStudiarStudiar le fasceStudiar le fasce...Studiar nuncStudiar per le stato o le tag del cartaStiloStilo (compartite per le cartas)Exportation in XML de Supermemo (*.xml)SuspenderSuspender cartaSuspender notaSuspenditeSuspendite+InhumateSynchronisar le audio e le imagines alsiSynchronisation fallite: %sSynchronisation fallite; Interete foras de linea.Synchronisation require le horologio sur tu computista ser fixate correctemente. Per favor fixa le horologio e prova ancora.Synchronisation...TabDuplicates de tagTag solmenteTagsFasce de destination (Ctrl+D)Campo de destination:TextoTexto separate per le signo de tabulation o punctos e virgulas (*)Ce fasce ja existe.Ce nomine de campo es ja usate.Ce nomine es ja usate.Le connexion a AnkiWeb es foras tempore. Le connexion a AnkiWeb es foras tempore.Le configuration base non pote ser removite.Le fasce base non pote ser cancellate.Le compartimento de cartas in tu fasce(s).Le discarga ha essite corrumpite. Per favor prova ancora.Le prime campo es vacue.Le prime campo del typo de nota deber ser mappate.Le sequente character poter non ser usate: %sLe fronte de ce carta es vacue. Per favor exeque Instrumentos>Vacuar le Cartas.Le entrata tu ha providite facera un question vacue sur tote le cartas.Le numero de nove cartas tu ha addite.Le numero de questiones tu ha respondite.Le numero de revisiones debite in le futur.Le numero de vices tu ha pulsate cata button.Le permissiones sur tu plica temporanee del systema es incorrecte, e Anki non es capace a corriger los automaticamente. Per favor cerca pro 'plica temp' in le manual Anki pro plus de information.Le file providite non es un file .apkg valide.Le cerca providite non ha concordate alcun cartas. Desira tu revider isto?Le cambiamento requirite requirera un plen cargamento del base de datos quando tu postea synchronisa tu collection. Si tu ha revisiones o alie cambios attendente sur un altere dispositivo illos non ha essite synchronisate ci ad hora, illos essera perdite. Proceder?Le tempore prendite a responder le questiones.Il ha plure cartas nove disponibile, ma le limite del die ha essite attingite. Tu pote accrescer le limite in le optiones, ma per favor filia in mente que plus de nove cartas tu presenta, le plus alte devenira tu cargo de labor a breve termino.Il debe ser al minus un profilo.Ce columna non pote ser ordinate, ma tu pote cercar pro fasces specific cliccante sur uno al leva.Iste file non pare ser un file .apkg valide. Si tu ha obtenite ce error per un file discargate ab AnkiWeb, il ha chances que tu discarga ha fallite. Per favor prova ancora, e si le problema persiste, per favor prova ancora con un altere navigator.Ce file existe. Desira tu vermente supplantar lo?Ce plica salva tote tu datos Anki in un singulo loco, pro facer facile le salvamentos. Pro indicar Anki usar un altere loco, per favor vide: %s Ce es un fasce special pro studiar extra del normal programmation.Ce es un {{c1::sample}} cloze deletion.Isto delera tu collection existente e replaciara lo con le datos in le file tu sta a importar. Es tu secur?TemporeTempore limite de TimeboxReviderPro facer un cloze deletion sur un nota existente, tu necessita antea cambiar lo a un typo cloze, via Modificar>Cambiar typo de nota.Pro vider los nunc, clicca le button Exhumar, in basso.Pro studiar foras del normal programmation, clicca le button Studio personalisate, in basso.HodieLe limite de revision hodierne ha essite attingite, ma il ha totevia cartas que attende pro ser revidite. Pro memoria optime, reguardar como accrescer le limite diurne in le optiones.TotalTempore totalCartas totalNotas totalTractar le entrata como expression regularInsererInscriber le responsa: campo incognite %sIncapace a importar ab un file solmente a leger.ExhumarDisfacerDisfacer %sformato del file incogniteInvisibileAjornar le notas existente quando le prime campo concordaAjornate %(a)d del %(b)d notas existente.Cargar a AnkiWebCargamento a AnkiWeb...Usate sur le cartas ma mancante ab le plica del medios:Usator 1Version %sAttender pro modificar al fin.Advertimento, cloze deletiones non obrera donec tu non excambiara le typo al alto in Cloze.Quando adde, le base pro le fasce actualLe collection integralDesira tu discargar lo ora?Tu ha un typo de nota cloze deletion ma non ha facite alcun cloze deletiones. Proceder?Tu ha multe fasces. Per favor vide %(a)s. %(b)sTu non ha ancora registrate tu voceTu debe haber al minus un columnaJuveneJuvene+ApprenderTu cambios afficera plure fasces. Si tu desidera cambiar sol le actual fasce, per favor adde un nove gruppo de optiones antea.Tu collection es in un stato inconsistente. Per favor face fluer Instrumentos>Controlar Base de datos, tum synchronisar ancora.Tu collection o un file de medios es troppo grande pro le synchronisation.Tu collection ha essite cargate a AnkiWeb con bon successo. Si tu usa alcun altere dispositivos, per favor synchronisa los ora, e selige discargar le collection tu ha justo cargate ab iste computer. Post assi facite, le revisiones futur e le cartas addite essera integrate automaticamente.Tu fasces ci e sur AnkiWeb differe in un tal modo que illos non pote ser integrate insimul, assi il necesse supplantar le fasces sur un latere con le fasces ex le altere. Si tu elige discargar, Anki discargara le collection ex AnkiWeb, e qualcunque modificationes tu ha facite sur tu computer desde le ultime synchronisation essera perdite. Si tu elige cargar, Anki cargara tu collection a AnkiWeb, e qualcunque modificationes tu ha facite sur AnkiWeb o sur tu altere dispositivos desde le ultime synchronisation a iste dispositivos, essera perdite. Post que tote le dispositivos es in synchronia, le revisiones futur e le cartas addite pote ser integrate automaticamente.[nulle fasce]copias de reservacartascartas ex un fascecartas eligite percollectionddiesfascevita del fasceduplicateadjutaroccultarhorashoras passate medienoctecaditeminus que 0.1 cartas/minutamappate a %smappate a Tagsminutassminutasmerevisionessecundasstatisticaiste paginawle collection integral~anki-2.1.0+dfsg~b36/locale/is/000077500000000000000000000000001323611211500157315ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/is/LC_MESSAGES/000077500000000000000000000000001323611211500175165ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/is/LC_MESSAGES/anki.mo000066400000000000000000000015021323611211500207730ustar00rootroot00000000000000\    !0 (1 of %d) (off) (on)%% Correct%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-07-05 03:16+0000 Last-Translator: Hafsteinn Óskar Kjartansson Language-Team: Icelandic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) (1 af %d) (af) (á)%% rétt%(a)0.1fkB upp, %(b)0.1fkB niður%(a)0.1fs (%(b)s)anki-2.1.0+dfsg~b36/locale/it/000077500000000000000000000000001323611211500157325ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/it/LC_MESSAGES/000077500000000000000000000000001323611211500175175ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/it/LC_MESSAGES/anki.mo000066400000000000000000002274051323611211500210100ustar00rootroot00000000000000y78J 9J DJPJWJ"]JJ JJJJ8J KK*K=K"NK$qK$K&K"KL4L2MLLL"L$L$L$M @MaMvMMMMMMMM NN)N-N1N5N:N>N BNLNcNjNzNN NNNNN NN NNN NNN OO*O9OJOZOaO0gO OOO O OOOOPPPPPPPPPPPTPQ,Q(?QhQ!QQfQ(R >RKR ]R jRuRRRReR)S7SH T)TV ~WW5WXWY*X%XkX Y "Y-Y1YLY ]Y gYqY Y YY YYY'YZ ZZZ Z$,ZQZ WZcZsZ Z Z%ZKZ [1[P[["]^ ^^/^A^#_I_R_vD``7ea awaE!b@gbbbbRbc"cc#c#cd 'dzHdd(de ee .e;eTeee je we eeeeee eefJfdfwfffff f f)f'fggggggg g h h h %h0h BhOh_hqh3whhShii#i *i 8iDiSidi~ii"iii0Zjjj&jj jj jk k "k -k:k LkVk\k zkkkkk-kkkk l(l5sPWss]s t8tTt[tqtttt tttt t tt t t uu u%u+u):u0duuu4u!uvv#/vSvivvww)w 0w.:wiwowqwtw w www ww ww+wx #x-x5x>xOxcxsxxx x xxNx"yByVy [yeyjyyyy>zGzLzfz lzzzzzzz zzz z zz,{0{7{ <{I{Q{V{g{.m{F{{{ | (|45|j|}| |1||||}*}@} ~~ "8"[ ~ ? <J$b)52Qρԁځ +1<C  5 !(: O Y c o yƒȃك  &1NE Ą Ȅ&҄  % 2<Kcz+ׅ#! -CH P Z<e ]a! ǡ·, #Ոkej y ȉ Ή ډ 5$ Zdj ,ڊ#V+8E!8*U0Ό,-*+X8 ƍҍڍ#0+ \js  ƎˎҎ09NV#vǏ֏i[b v/  Аې "9 A1L ~ ؑ ߑ 4-Ky(̒Ւ ܒ  .VF ,:g|G ߔ"* MZ bn~ە*'Cks@y68 *!5?WM  3 J Vd j u Ϙ  ) 6@Q Vw!d  /8= R`(e ɚX+="i&+ߛ0+*>VF'ܜ*(/1X,HIu'ן#à_eG8ݢCm(Fڣr! ul/M`f "1 7 B N!Z|'Lǧ38@]r.y&ƨ,D KV grU$ "Z@S0$ "Eh n{z^5qU}  ±ͱϱԱ ٱ 3G]bjmu}  Vaq  )˴=EUfy'''۵))-W^k@ʶ !%=%c%#%ӷ5> R`tѸոٸݸ0 G Q]cjo v ʹ!й#5 EPDY  ĺϺߺ»Ȼλ[Ի0/2-b#!ּiX x нB^I? +6DJp,s" 2CV lx+  &" )6H ^ l?ze L:7A3yH_*>i |?16qM4! 6W!=> DQiy "#ARnSv  %:<N<  +:WF]S"+; KYp*6+ 7Vls! ! *6"Jmu/  +8JY.6gSE*, ?J#a    + 8 E R _ l y  !7#>bgx5 5Q YgxI0:3k).KSDY=a0 r Hey  % .< N \ gu|+2B3H"|!.* = Sacf ?' .8@I[q Y9K    2ASks &   91=Eo) C&j <.6?O%#?c(u+(+4G `k H%',T A@R"i #>.m~F+=NWo "(:'Ai L.AGL R1^ !7S%g1#9!2TY a n={ ~lW##D?1V 8JRa t< 7A'I q  0:%]<9N#>O!f5+ ,<0i0     +!?M% 3?F[ o6(6Pex 62i ( %A1 s$*  / B %X ~ -  1     + 5  > I -O  }   ! \ ' 8 H =  5 _U   & , <  L V i   ) - + '68^@ Q<EM)L `Y    : ESZj }(" $6GO b'n1~d  3'7_^}6/(C'l-4A@R'*..D$Q;,ynj(uR`4In2 4I k~   !!!" " *" 7"0C"t"(y"1"S"(#7#Q# Y#!e## #8##)$2$"D$:g$$ $!$ $"$s %(~%%%N%d&'&&&&&& 'J'r(RP) )*3------ . .... +.5.;.D.H.\.c.|.!.... .. . .../L M Gl\$7`FV v?`@0Bcl e{n GcN#r%8Nw=}kys >&wMHwRKFP*$bh>j @]WCW)tR 'xu"eh0Vmh6L`J2(c z^Z t\boI:AR5c!&*i|XY4Ob&|T(kj,:{\)@gf/pywOdx.rQiUa_<^ag-BFt4>{SnZ78p|A[ZH;D2qr(()yj7CCYmK}-*QE<^B}H I 3*S3'n54HDPo6x#$%&'7J 89u;<+.:/01U23>="? s^X1NPBq.AqeT[%av xL OW;<vz:+,m-y /0s,Ki$a[tGY"zuDsYvmoCi"'r[S29TXuQ4Wg+O  EdPkJ1+98kgM6FdqVQfl9p5.hG=D!%@-f~bRX!,]` I~NE lVI ]5AdU#/j]?M;_T~o13n=#\fU6J!Z_ ) K_epS?LE (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAlways include question side when replaying audioAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the %(num)d selected add-on?Delete the %(num)d selected add-ons?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFile version unknown, trying import anyway.FilterFilter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Map to %sMap to TagsMark NoteMathJax blockMathJax inlineMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Sound and video on cards will not function until mpv or mplayer is installed.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-12-02 14:20+0000 Last-Translator: pipep Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: (1 su %d) (disabilitato) (disattivato) (attivato) Ha %d carta. Ha %d carte.%% corrette%(a)0.1f %(b)s/giorno%(a)0.1fkB caricati, %(b)0.1fkB scaricati%(a)0.1fs (%(b)s)%(a)d nota su %(b)d aggiornata%(a)d note su %(b)d aggiornate%(n)d: %(name)s%(tot)s %(unit)s%.01f carte/minuto%d carta%d carte%d carta eliminata.%d carte eliminate.%d carta esportata.%d carte esportate.%d carta importata.%d carte importate.%d carta studiata in%d carte studiate in%d mazzo aggiornato.%d mazzi aggiornati.%d gruppo%d gruppi%d modifica contenuto multimediale da caricare%d modifiche contenuto multimediale da caricareScaricato %d file multimediale.Scaricati %d files multimediali.%d nota%d note%d nota aggiunta%d note aggiunte%d nota eliminata.%d note eliminate.%d nota esportata.%d note esportate.%d nota importata.%d note importate.%d nota invariata%d note invariate%d nota aggiornata%d note aggiornate%d ripetizione%d ripetizioni%d selezionata%d selezionate%s copia%s giorno%s giorni%s ora%s ore%s minuto%s minuti%s minuto.%s minuti.%s mese%s mesi%s secondo%s secondi%s da eliminare:%s anno%s anni%sg%sh%sm%sme%ss%sa&Informazioni...&Sfoglia e installa...&Carte&Controlla il database&Studio focalizzato...&Modifica&Esporta...&File&Trova&Vai&Guida&Guida...&Aiuto&Importa...&Informazioni...&Inverti la selezioneCarta segue&nte&Note&Apri la cartella degli add-on...&Preferenze...Carta &precedente&Ripianifica...&Supporta Anki...&Cambia profilo&Strumenti&Annulla'%(row)s' possiedono %(num1)d campi, mentre ci si aspettava %(num2)d(%s corrette)(Nota eliminata)(fine)(filtrato)(apprendimento)(nuova)(limite mazzo superiore: %d)(seleziona 1 carta)...I file .anki2 non possono essere importati. Se stai cercando di ripristinare un backup, leggi la sezione 'Backups' del manuale utente./0d1 mese1 anno10:0022:0003:0004:0016:00Ricevuto errore 504 gateway timeout. Prova a disabilitare temporaneamente il tuo antivirus.:%d carta%d carteApri cartella di backupVisita il sito web%(pct)d%% (%(x)s di %(y)s)%d/%m/%Y @ %H:%MBackup
Anki creerà un backup della tua collezione ogni volta che viene chiuso o sincronizzato.Formato di esportazione:Trova:Dimensione carattere:Carattere:In:Includi:Dimensione riga:Sostituisci con:SincronizzazioneSincronizzazione
Non abilitata correntemente; clicca il pulsante di sincronizzazione nella finestra principale per abilitarla.

Account necessario

È necessario un account gratuito per mantenere sincronizzata la tua collezione. Iscriviti per un account, poi inserisci i tuoi dati qui sotto.

Aggiornamento di Anki

È stato rilasciato Anki %s.

Errore

Si è verificato un errore. Avvia Anki tenendo premuto il tasto Maiusc, disabilitando così temporaneamente gli add-on installati.

Se il problema si verifica unicamente con gli add-on abilitati, vai nel menu Strumenti>Add-on per disabilitare progressivamente gli add-on e riavvia Anki, fino a capire qual è l'add-on che crea il problema.

Quando hai scoperto qual è l'add-on che crea il problema, segnalalo nella sezione add-on del nostro sito di supporto.

Informazioni di debug:

Errore

Si è verificato un errore. Utilizza Strumenti>Controlla il database... per verificare se risolve il problema.

Se il problema permane, segnalalo sul nostro sito di supporto. Copia e incolla le informazioni sottostanti nella tua segnalazione.

Un grande ringraziamento a tutti coloro che hanno contribuito con suggerimenti, segnalazioni di bug e donazioni.La facilità di una carta indica la durata del prossimo intervallo rispetto all'ultimo intervallo, rispondendo "normale" durante la ripetizione.Un mazzo filtrato non può avere sottomazzi.Si è verificato un problema durante la sincronizzazione dei contenuti multimediali. Per correggere il problema esegui Strumenti>Controlla Media, poi sincronizza nuovamente.Interrotto: %sInformazioni su AnkiAggiungiAggiungi (scorciatoia: ctrl+invio)Aggiungi tipo di carta...Aggiungi campoAggiungi mediaAggiungi un nuovo mazzo (Ctrl+N)Aggiungi tipo di notaAggiungi inversaAggiungi etichetteAggiungi etichette...Aggiungi a:L'add-on non ha configurazioni.L'add-on non è stato scaricato da AnkiWeb.Add-onAggiungi...Aggiungi: %sAggiuntoAggiunte oggiAggiunto duplicato con primo campo: %sRipetiFallite oggiCarte fallite: %sTutti i tipi di carteTutti i mazziTutti i campiTutte le carte in ordine casuale (modalità studio focalizzato)Tutte le carte, le note e gli elementi multimediali di questo profilo verranno eliminati. Sei sicuro?Consenti l'HTML nei campiIncludi sempre il lato con la domanda quando si riproduce nuovamente l'audioUn add-on che hai installato non ha potuto essere caricato. Se il problema permane, vai nel menu Strumenti>Add-on, e disabilita o elimina l'add-on. Caricando '%(name)s': %(traceback)s Si è verificato un errore durante l'accesso al database. Possibili cause: - Antivirus, firewall, backup o un software di sincronizzazione possono interferire con Anki. Prova a disabilitare il software e vedere se il problema scompare. - Il disco potrebbe essere pieno. - La cartella Documenti/Anki potrebbe essere su un'unità di rete. - I files nella cartella Documenti/Anki potrebbero non essere scrivibili. - Il disco rigido potrebbe contenere degli errori. Prova ad eseguire Strumenti>Controlla il database per assicurarti che la collezione non sia corrotta. Si è verificato un errore durante l'apertura di %sAnkiMazzo di Anki 2.0Pacchetto di collezioni AnkiPacchetto Mazzi AnkiAnki non ha potuto rinominare il profilo perché non è riuscito a rinominare la cartella del profilo sul disco. Assicurati di avere il permesso di scrittura in Documenti/Anki e che nessun altro programma stia accedendo alle cartelle del profilo, quindi riprova.Anki non ha trovato la linea di separazione tra domanda e risposta. Adatta manualmente il modello per invertire domanda e risposta.Anki non supporta file in sottocartelle della cartella collection.media.Anki è un simpatico e intelligente sistema di ripetizione spaziata. È gratuito e open source.Anki è rilasciato sotto licenza AGPL3. Consulta il file della licenza nella distribuzione sorgente per ulteriori informazioni.Anki non è riuscito ad aprire il tuo file della collezione.Se il problema permane dopo il riavvio del computer, usa il pulsante Apri Backup nel gestore dei profili. Informazioni di debug: L'ID AnkiWeb o la password non erano corretti; prova di nuovo.ID AnkiWeb:Si è verificato un errore su AnkiWeb. Prova di nuovo tra alcuni minuti, e se il problema persiste invia un rapporto di bug.AnkiWeb al momento è sovraccarico. Riprova tra qualche minuto.AnkiWeb è in manutenzione. Riprova tra alcuni minuti.RispostaPulsanti di rispostaRisposteL'antivirus o il firewall stanno impedendo ad Anki di collegarsi ad internet.Qualsiasi contrassegnoTutte le carte vuote verranno eliminate. Se una nota resta senza carte, verrà eliminata anch'essa. Sei sicuro di voler continuare?Apparsa due volte nel file: %sSei sicuro di voler eliminare %s?È richiesta almeno una carta.È richiesto almeno un passo.Allega immagini/audio/video (F3)Sincronizzazione e backup automatici sono stati disabilitati durante il ripristino. Per riabilitarli chiudi il profilo o riavvia Anki.Riproduci automaticamente l'audioSincronizza automaticamente all'apertura/chiusura del profiloMediaDurata mediaTempo medio di rispostaFacilità mediaMedia per i giorni di studioIntervallo medioRetroAnteprima retroModello retroBackup...BackupBasilareBasilare (e carta inversa)Basilare (carta inversa opzionale)Basilare (digita la risposta)Contrassegno bluTesto in grassetto (Ctrl+B)SfogliaSfoglia (%(cur)d carta mostrata; %(sel)s)Sfoglia (%(cur)d carte mostrate; %(sel)s)Aspetto del browserAspetto del browser...Opzioni del browserCreaSeppellitoSeppellisciSeppellisci la cartaSeppellisci la notaSeppellisci le carte nuove correlate fino al giorno seguenteSeppellisci le ripetizioni correlate fino al giorno seguenteDi default, Anki rileva i caratteri tra i campi, come tabulazioni, virgole, ecc. Se Anki non rileva correttamente i caratteri, puoi inserirli qui. Usa \t per rappresentare le tabulazioni.AnnullaCartaCarta %dCarta 1Carta 2ID cartaElenco delle carteStato della cartaTipo di cartaTipo di carta:Tipi di carteTipi di carte per %sCarta seppellita.Carta sospesa.La carta era una sanguisuga.CarteLe carte non possono essere spostate manualmente in un mazzo filtrato.Carte in Testo SempliceLe carte ritorneranno automaticamente nel mazzo originale dopo che le hai ripetute.Carte...CentraleModificaModifica %s in:Cambia il mazzoCambia mazzo:Cambia il tipo di notaCambia tipo di nota (Ctrl+N)Cambia il tipo di nota...Cambia colore (F8)Cambia mazzo a dipendenza del tipo di notaCambiatoI cambiamenti qui sotto avranno effetto su %(cnt)d nota che usa questo tipo di carta.I cambiamenti qui sotto avranno effetto su %(cnt)d note che usano questo tipo di carta.I cambiamenti avranno effetto dopo il riavvio di Anki.Controlla file &Multimediali...Controlla aggiornamentiVerifica i file nella cartella multimedialeControllo file multimediali...Controllo in corso...ScegliScegli il mazzoScegli tipo di notaScegli etichetteCancella contrassegnoCncella non utilizzatiCancella etichette non utilizzateClona: %sChiudiChiudere perdendo i dati attuali?Chiusura...Testo da completareTesto da completare (Ctrl+Shift+C)Codice:Collezione esportataLa collezione è corrotta. Consulta il manuale.Due puntiVirgolaConfiguraConfigurazioneConfigura lingua e opzioni dell'interfacciaCongratulazioni! Hai completato questo mazzo per adesso.Connessione...Connessione scaduta. O ci sono problemi con la tua connessione internet, o hai un file molto grande nella tua cartella multimediale.ContinuaCopiaCarte mature corrette: %(a)d/%(b)d (%(c).1f%%)Corrette: %(pct)0.2f%%
(%(good)d di %(tot)d)Non è stato possibile connettersi ad AnkiWeb. Controlla la tua connessione alla rete e prova di nuovo.Non è stato possibile registrare l'audio. Hai installato lame e sox?Non è stato possibile salvare il file: %sStudio focalizzatoCrea mazzoCrea mazzo filtrato...Crea immagini scalabili con dvisvgmCreatoCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativoCumulate %sRisposte cumulateCarte cumulateMazzo correnteTipo di nota corrente:Studio personalizzatoSessione di studio personalizzatoTagliaDatabase ricostruito e ottimizzato.DataGiorni di studioRevoca l'autorizzazioneConsole di debugMazzoSovrascrivo mazzo...Il mazzo verrà importato all'apertura di un profilo.MazziIntervalli decrescentiPredefinitoDifferimento della ripresentazione delle ripetizioni.EliminaElimina carteElimina il mazzoElimina le carte vuoteElimina la notaElimina le noteElimina etichetteElimina file inutilizzatiElimina campo da %s?Elimina %(num)d add-on selezionato?Elimina i %(num)d add-on selezionati?Elimina il tipo di carte '%(a)s' e il suo %(b)s?Eliminare questo tipo di nota e tutte le sue carte?Elimina questo tipo di nota inutilizzato?Elimina contenuto multimediale non utilizzato?Eliminato %d carta con nota mancante.Eliminato %d carte con nota mancante.Cancellata %d carta con modello mancante.Cancellate %d carte con modello mancante.Eliminata %d nota con tipo di nota mancante.Eliminate %d note con tipo di nota mancante.Eliminata %d nota senza carte.Eliminate %d note senza carte.Eliminata %d nota con contatore di campi errato.Eliminate %d note con contatore di campi errato.Eliminato.L'eliminazione di questo mazzo dall'elenco dei mazzi riporterà tutte le carte rimanenti nel loro mazzo originale.DescrizioneDescrizione da mostrare sulla schermata di studio (solo mazzo corrente):Finestra di dialogoScarica da AnkiWebScaricato %(fname)sDownload da AnkiWeb in corso...ScadenzaSolo carte scaduteDa ripetere domaniEs&ciFacilitàFacileBonus facileIntervallo facileModificaModifica "%s"Modifica correnteModifica HTMLModificatoModifica fontSvuotaCarte vuote...Numeri di carta vuoti: %(c)s Campi: %(f)s Trovate carte vuote. Esegui Strumenti>Carte vuote.Primo campo vuoto: %sFineInserisci il mazzo dove mettere le nuove carte %s, o lascia vuoto:Inserisci una nuova posizione della carta (1...%s):Inserisci etichette da aggiungere:Inserisci etichette da eliminare:Errore nello scaricamento di %(id)s: %(error)sErrore durante il download: %sErrore durante l'avvio: %sErrore nello stabilire una connessione sicura. Questo di solito è causato dall'antivirus, dal firewall da software VPN o da problemi con il vostro provider internet.Errore nell'eseguire %s.Errore nell'eseguire %sEsportaEsporta...Esportato %d file multimedialeEsportati %d file multimedialiSupplementariFF1Il campo %d del file è:Mappatura campiNome del campo:Campo:CampiCampi per %sCampi separati da: %sCampi...Fil&troVersione del file sconosciuta, tento ugualmente l'importazione.FiltroFiltro...Filtro:FiltratoMazzo filtrato %dTrova i &duplicati...Trova i duplicatiTrova e &sostituisci...Trova e sostituisciFinePrima cartaPrima ripetizionePrimo campo corrispondente: %sCorretta %d carta con proprietà non valide.Corrette %d carte con proprietà non valide.Corretto il bug di AnkiDroid di sovrascrizione del mazzo.Corretto tipo di nota: %sContrassegnoContrassegna cartaInvertiLa cartella esiste già.Carattere:Piè di paginaPer motivi di sicurezza non è consentito l'utilizzo di '%s' nelle carte. Puoi però usare ugualmente questo comando inserendolo in un altro pacchetto, e importando il pacchetto nelle intestazioni LaTeX.PrevisioniModuloTrovato %(a)s in %(b)s.FronteAnteprima fronteModello fronteGeneraleFile generato: %sGenerato il %sScarica Add-on...Ottieni mazzi condivisiNormaleIntervallo promozioneContrassegno verdeEditor HTMLDifficileHai installato latex e dvipng/dvisvgm?IntestazioneAiutoFacilità massimaCronologiaPagina inizialeSuddivisione per ora del giornoOreOre con meno di 30 ripetizioni non sono mostrate.Se hai contribuito e non sei in questo elenco, per favore contattaci.Se avessi studiato ogni giornoIgnora i tempi di risposta più lunghi diIgnora maiuscole/minuscoleIgnora campoIgnora le righe il cui primo campo corrisponde a una nota esistenteIgnora questo aggiornamentoImportaImporta fileImporta anche se una nota esistente ha lo stesso primo campoImportazione fallita. Importazione fallita. Informazioni sul debug: Opzioni di importazioneImportazione completata.Nella cartella multimediale ma non utilizzato da nessuna carta:Per poter scambiare correttamente la tua collezione tra diversi dispositivi, è necessario che l'orologio del tuo computer sia impostato correttamente. Non è sufficiente che la data e l'ora vengano visualizzati correttamente. Va nelle impostazioni di data e ora del tuo computer e verifica quanto segue: - AM/PM - Giorno, mese, anno - Fuso orario - Ora legale Differenza rispetto all'ora corretta: %s.Includi file multimedialiIncludi informazioni pianificazioneIncludi etichetteAumenta il limite odierno di carte nuoveAumenta il limite odierno di carte nuove diAumenta il limite odierno di ripetizioniAumenta il limite odierno di ripetizioni diIntervalli crescentiInstalla un Add-onLingua dell'interfaccia:IntervalloModificatore intervalloIntervalliCodice non valido, o add-on non disponibile per la tua versione di Anki.Codice non valido.Configurazione non valida: Nome di file non valido, rinomina: %sFile non valido. Ripristina dal backup.Trovato proprietà della carta non valide. Usa Strumenti>Controlla il database, e se il problema si ripete, chiedi sul sito di supporto.Espressione regolare non valida.Ricerca non valida - verifica la presenza di errori di battitura.È stata sospesa.Testo corsivo (Ctrl+I)Salta a etichette con Ctrl+Shift+TConservaLaTeXEquazione LaTeXAmbiente LaTeX mathErroriUltima cartaRipetizione più recenteDapprima aggiunte più recentementeImparaImpara oltre il limiteImpara: %(a)s, Ripeti: %(b)s, Reimpara: %(c)s, Filtrate: %(d)sIn apprendimentoAzione sanguisugheLimite sanguisugheSinistraLimita aCaricamento in corso...La collezione locale non contiene nessuna carta. Scaricare da AnkiWeb?Intervallo più lungoGuarda nel campo:Facilità minimaGestisciGestisci i tipi di noteGestisci i tipi di nota...Gestisci...Mappa su %sMappa verso le etichetteContrassegna notaBlocco MathJaxMathJax in lineaMatureIntervallo massimoRipetizioni/giorno massimeMediaIntervallo minimoMinutiMescola le carte nuove e le ripetizioniMazzo di Mnemosyne 2.0 (*.db)AltroMaggior numero di erroriSposta carteSposta carte nel mazzo:Separatori multi-carattere non sono supportati. Inserisci un solo carattere.N&otaIl nome esiste.Nome per il mazzo:Nome:ReteNuoveCarte nuoveCarte nuove nel mazzo oltre il limite odierno: %sSolo carte nuoveCarte nuove/giornoNome del nuovo mazzo:Nuovo intervalloNuovo nome:Nuovo tipo di nota:Nome del nuovo gruppo di opzioni:Nuova posizione (1...%d):Il giorno successivo iniziaNessun contrassegnoNessuna carta da ripetere al momento.Nessuna carta soddisfa i criteri che hai indicatoNessuna carta vuota.Nessuna carta matura studiata oggi.Non è stato trovato nessun file inutilizzato o mancante.Nessun aggiornamento disponibile.NotaID notaTipo di notaTipi di noteNota e %d sua carta eliminata.Nota e %d sue carte eliminate.Nota seppellita.Nota sospesa.Nota: Non viene effettuato un backup dei file multimediali. Per sicurezza effettua un backup periodico della cartella di Anki.Nota: Parte della cronologia è mancante. Per ulteriori informazioni consulta la documentazione del browser.Note in testo sempliceLe note richiedono almeno un campo.Note etichettate.NienteOKPiù vecchie visualizzate per primeAlla prossima sincronizzazione, forza i cambiamenti in una direzioneUna o più note non sono state importate, perchè non avrebbero generato nessuna carta. Questo può succedere se hai dei campi vuoti, o se non hai mappato il contenuto del file di testo verso i campi corretti.Solo le carte nuove possono essere riposizionate.Solo un dispositivo per volta può accedere a AnkiWeb. Se una sincronizzazione precedente è fallita, riprova tra alcuni minuti.ApriApri backup...Ottimizzazione in corso...Limite opzionale:OpzioniOpzioni per %sGruppo di opzioni:Opzioni...OrdineOrdine di aggiuntaOrdine di scadenzaSovrascrivi modello retro:Sovrascrivi carattere:Sovrascrivi modello fronte:Mazzo/Collezzione Anki impacchettato (*.apkg *.colpkg *.zip)Password:IncollaIncolla immagini dagli appunti come pngLezione di Pauker 1.8 (*.pau.gz)PercentualePeriodo: %sPosiziona alla fine della coda delle carte nuoveInserisci nella coda delle ripetizioni con intervallo tra:Aggiungi prima un altro tipo di nota.Collega un microfono e assicurati che altri programmi non stiano usando il dispositivo audio.Modifica questa nota e aggiungi testo da completare. (%s)Assicurati che un profilo sia aperto e che Anki non sia occupato, poi riprova.Dai un nome al tuo filtro:Installa PyAudioApri prima un profilo.Rimuovi la cartella %s e riprova.Riavvia Anki per completare il cambiamento di lingua.Esegui Strumenti>Carte vuoteSeleziona un mazzo.Seleziona le carte da un solo tipo di nota.Per piacere, seleziona qualcosa.Aggiorna alla versione più recente di Anki.Utilizza File>Importa per importare questo file.Visita AnkiWeb, aggiorna il tuo mazzo e riprova.PosizionePreferenzeAnteprimaAnteprima carta selezionata (%s)Anteprima carte nuoveAnteprima carte nuove aggiunte negli ultimiProcessato %d file multimedialeProcessati %d file multimedialiElaborazione...ProfiliÈ necessaria l'autenticazione proxy.Contrassegno violaDomandaFondo della coda: %dCima della coda: %dEsciCasualeOrdina in modo casualeValutazioneRicreaRegistra la tua voceRegistra audio (F5)Registrazione...
Tempo: %0.1fContrassegno rossoRitardo relativoReimparaRicorda l'ultima immissione durante l'aggiunta di noteRimuovere %s dalle tue ricerche salvate?Rimuovi tipo di carta...Rimuovi filtro attuale...Rimuovi etichette...Rimuovi formattazione (Ctrl+R)La rimozione di questo tipo di carte causerebbe l'eliminazione di una o più note. Crea dapprima un nuovo tipo di carte.RinominaRinomina tipo di carte...Rinomina il mazzoSostituire la tua collezione con un backup precedente?Riproduci di nuovo l'audioRiproduci la tua voceRiposizionaRiposiziona tipo di carte...Riposiziona le carte nuoveRiposiziona...Richiedi una o più di queste etichette:Cambia la dataRipianificaRipianifica le carte considerando le mie risposte in questo mazzoRiprendi oraInverti la direzione del testo (RTL)Ritorna allo stato del backupRipristinato allo stato precedente a '%s'.RipetizioneConteggio delle ripetizioniDurata delle ripetizioniRipeti in anticipoRipeti in anticipo diRipeti carte dimenticate negli ultimiRipeti carte dimenticateSuccesso delle ripetizioni per ora del giornoRipetizioniDa ripetere nel mazzo oltre il limite odierno: %sDestraSalvaSalva il filtro attuale...Salva pdfSalvato.Ambito: %sCercaCerca all'interno della formattazione (lento)SelezionaSeleziona &tuttoSeleziona ¬eSeleziona etichette da escludere:Il file selezionato non era nel formato UTF-8. Consulta la sezione importazione del manuale.Studio selettivoPunto e virgolaServer non trovato. O la connessione internet non è attiva, o il software antivirus/firewall sta impedendo ad Anki di connettersi ad internet.Impostare tutti i mazzi sotto %s in questo gruppo di opzioni?Imposta per tutti i sottomazziImposta colore primo piano (F7)Il tasto Shift era premuto. Salto la sincronizzazione automatica e il caricamento degli add-on.Sposta le carte esistentiTasto di scorciatoia: %sTasto di scorciatoia: Freccia sinistraTasto di scorciatoia: Freccia destra o InvioScorciatoia: %sMostra %sMostra la rispostaMostra entrambi i latiMostra i duplicatiMostra il timer della rispostaMostra le carte nuove dopo le ripetizioniMostra le carte nuove prima delle ripetizioniMostra le carte nuove in ordine di aggiuntaMostra le carte nuove in ordine casualeMostra la prossima scadenza sopra i pulsanti di rispostaMostra il contatore delle carte rimanenti durante le ripetizioniBarra lateraleDimensione:Alcune carte correlate o seppellite sono state rinviate ad una prossima sessione.Alcune opzioni avranno effetto solo dopo il riavvio di Anki.Alcuni aggiornamenti sono stati ignorati perché il tipo di nota è cambiato:Campo ordinamentoOrdina in base a questo campo nel browserL'ordinamento per questa colonna non è supportato. Scegli un'altra colonna.Audio e video sulle carte non funzioneranno fino a quando non verranno installati mpv o mplayer.SpazioPosizione di partenza:Facilità inizialeStatisticheStatistichePasso:Passi (in minuti)I passi devono essere numeri.Arresto...Studiate oggiStudiaStudia il mazzoStudia il mazzo...Studia adessoStudia per stato delle carte o etichettaStileStile (condiviso tra le carte)Pedice (Ctrl+=)Supermemo esportato in XML (*.xml)Apice (Ctrl++)SospendiSospendi la cartaSospendi la notaSospeseSospese+SeppelliteSincronizzaSincronizza anche l'audio e le immaginiSincronizzazione fallita: %sSincronizzazione fallita; internet non collegato.La sincronizzazione richiede che l'orologio sul tuo computer sia impostato correttamente. Sistema l'orologio e prova di nuovo.Sincronizzazione in corso...TabulazioneEtichetta duplicatiEtichetta soltantoEtichetteMazzo di destinazioneCampo bersaglio:TestoTesto separato da tabulazioni o punti e virgola (*)Quel mazzo esiste già.Quel nome del campo è già utilizzato.Quel nome è già utilizzato.La connessione ad AnkiWeb è scaduta. Controlla la tua connessione alla rete e prova di nuovo.La configurazione predefinita non può essere rimossa.Il mazzo predefinito non può essere eliminato.Suddivisione delle carte nei tuoi mazzi.Il file scaricato è corrotto. Riprova.Il primo campo è vuoto.Il primo campo della nota dev'essere mappato.Il seguente carattere non può essere utilizzato: %sIl fronte di questa carta è vuoto. Esegui Strumenti>Carte vuote.La tua immissione creerebbe una domanda vuota su tutte le carte.Numero di carte nuove che hai aggiunto.Numero di domande alle quali hai risposto.Numero di ripetizioni che scadranno in futuro.Numero di volte che hai premuto ogni pulsante.I permessi della cartella temporanea del tuo sistema non sono impostati correttamente, e Anki non è in grado di correggerli automaticamente. Per ulteriori informazioni cerca 'temp folder' nel manuale di Anki.Il file non è un file .apkg valido.La ricerca non ha fornito nessun risultato. Vuoi modificare i criteri di ricerca?La modifica richiesta provocherà il caricamento completo del database la prossima volta che sincronizzi la collezione. Se hai delle ripetizioni o degli altri cambiamenti in sospeso su un altro dispositivo che non sono ancora stati sincronizzati qui, andranno persi. Continuare?Tempo impiegato per rispondere alle domande.Ci sono ulteriori carte nuove disponibili, ma il limite giornaliero è stato raggiunto. Puoi aumentare il limite nelle opzioni, ma ricordati che più carte nuove introduci, più grande diventerà il tuo carico di lavoro per le ripetizioni a breve termine.Dev'esserci almeno un profilo.Non è possibile ordinare per questa colonna, ma puoi eseguire una ricerca per singoli tipi di carte, p.es. con 'card:1'.Non puoi ordinare per questa colonna, ma puoi cercare mazzi specifici cliccando su uno di essi sulla sinistra.Questi file sembra non essere un file .apkg valido. Se ottieni questo errore con un file scaricato da AnkiWeb, è probabile che lo scaricamento non è riuscito. Riprova, e se il problema rimane, prova di nuovo con un altro browser.Questo file esiste. Vuoi sovrascriverlo?Questa cartella contiene tutti i dati di Anki, per facilitare i backup. Per utilizzare un altro percorso, leggi: %s Questo è un mazzo speciale per studiare al di fuori della pianificazione normale.Questo è un {{c1::esempio}} di testo da completare.Verrà creata %d carte. Proseguire?Verranno create %d carte. Proseguire?La tua collezione esistente verrà eliminata e sostituita con i dati del file che stai importando. Sei sicuro?DurataLimite di tempo per sessioneDa ripeterePer sfogliare gli add-on, clicca sul pulsante sfoglia qui sotto.

Quando hai trovato un add-on che vuoi installare, incolla il suo codice qui sotto. Puoi inserire anche più codici separati da uno spazio.Per inserire testo da completare in una nota esistente, devi dapprima cambiarla in una nota di tipo con testo da completare, attraverso Modifica>Cambia tipo di notaPer vederle ora, clicca qui sotto su Disseppellisci.Per studiare al di fuori della pianificazione normale, clicca sul pulsante Studio personalizzato qui sotto.OggiIl limite delle ripetizioni per oggi è stato raggiunto, ma ci sono ancora carte che aspettano di essere ripetute. Per una memorizzazione ottimale, considera di aumentare il limite giornaliero nelle opzioni.Attiva/disattiva abilitatoAttiva/disattiva contrassegnoAttiva/disattiva sospensioneTotaleDurata totaleCarte totaliNote totaliConsidera l'immissione come espressione regolareTipoDigita la risposta: campo sconosciuto %sImpossibile importare da un file di sola lettura.Impossibile spostare il file esistente nel cestino - prova a riavviare il computer.DisseppellisciSottolinea testo (Ctrl+U)Annulla&Annulla %sCodice di risposta imprevisto: %sFormato del file sconosciuto.Mai visteAggiorna le note esistenti se il primo campo corrispondeAggiornare gli add-on seguenti?Aggiornate %(a)d di %(b)d note esistenti.Carica su AnkiWebCaricamento su AnkiWeb in corso...Usato nelle carte ma mancante nella cartella multimediale:Utente 1Versione %sVisualizza la pagina degli add-onMostra i fileAspettando la modifica per finire.Attenzione, testo da completare non funzionerà fino a quando non cambierai in testo da completare il tipo in alto.Aggiungi le note nuove al mazzo correnteCollezione completaVuoi scaricarlo ora?Scritto da Damien Elmes, con patches, traduzioni, test e design di:

%(cont)sHai una nota di tipo testo da completare ma non hai inserito nessun testo da completare. Proseguire?Hai moltissimi mazzi. Vedi %(a)s. %(b)sNon hai ancora registrato la tua voce.Devi avere almeno una colonna.GiovaniGiovani+ImparaI tuoi cambiamenti avranno effetto su più mazzi. Se vuoi cambiare solo il mazzo corrente, aggiungi dapprima un nuovo gruppo di opzioni.Il file della tua collezione sembra essere corrotto. Questo può succedere se il file viene copiato o spostato mentre Anki è aperto, o quando la collezione è salvata su un dispositivo di rete o su cloud. Se il problema persiste dopo il riavvio del computer, apri un backup automatico dalla schermata di impostazione dei profili.La tua collezione è in uno stato inconsistente. Esegui Strumenti>Controlla il database, poi sincronizza di nuovo.La tua collezione o un file multimediale è troppo grande per la sincronizzazione.La tua collezione è stata caricata con successo su AnkiWeb. Se usi altri dispositivi, sincronizzali ora e scegli di scaricare la collezione che hai appena caricato da questo computer. In seguito, le ripetizioni e le aggiunte di carte verranno unite automaticamente.I tuoi mazzi qui e su AnkiWeb differiscono in modo tale che non è possibile unirli. È necessario sovrascrivere i mazzi in un posto con quelli nell'altro posto. Se scegli di scaricare, Anki scaricherà la collezione da AnkiWeb, e tutte le modifiche fatte sul computer dopo l'ultima sincronizzazione andranno perse. Se scegli di caricare, Anki caricherà la tua collezione su AnkiWeb, e tutte le modifiche fatte su AnkiWeb o su altri dispositivi dopo l'ultima sincronizzazione con questo dispositivo andranno perse. Dopo che tutti i dispositivi sono stati sincronizzati, le ripetizioni e le aggiunte di carte verranno unite automaticamente.Il tuo firewall o programma antivirus sta impedendo ad Anki di stabilire una connessione con se stesso. Aggiungi p.f. un'eccezione per Anki.[nessun mazzo]backupcartecarte dal mazzocarte selezionate percollezioneggiornimazzovita del mazzoduplicatoaiutonascondioreore dopo mezzanotteerrorimeno di 0.1 carte/minutomappato su %smappato verso le etichetteminminutimeripetizionisecondistatistichequesta paginascollezione intera~anki-2.1.0+dfsg~b36/locale/ja/000077500000000000000000000000001323611211500157105ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ja/LC_MESSAGES/000077500000000000000000000000001323611211500174755ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ja/LC_MESSAGES/anki.mo000066400000000000000000002454011323611211500207620ustar00rootroot00000000000000`6 H !H ,H8H?H"EHhH jHtHHH8HHII"&I$II$nI&I"II4I2%JXJiJ"J$J$J$J K9KNKfKnK}KKKKK KKLL L LLL L$L+L;LDL JLUL[LaLeL lLvL |LLL LLLLLLL MM"M0(M YMfM lM wMMMMMMCNENHNPNWN\NaNeNiNTmNN,N(NO!9O[OfsOO OO P P'P7PIP^PeuPP7QHQ)T 0U:U5MUXUYU%6Vk\V V VVVV W W#W 9W GWSW \WhWpW'WWWWW W$WX XX%X 4X >X%IXKoXXX}Y"a[[ [[[[\I']Rq]v];^7^ _w)_E_@_(`/`>`RF```%a#@a#daa aa(a b bb 3b@bYbjb ob |b bbbbb bbbJcNcacqcwc~c c c)c'ccdddddd d d d d de e#e3eEe3KeeSeeee e ff'f8fRfff"yfff0.g_gog&g gg gg g g gg hhhboPoo]o Yp8eppppppp p qqq q 'q5q :q Dq Qq[q bqoquq)q0qqq4q!.rPrcr#yrrrrNsbsss zsssss s sss ss st t tt$t-t>tRtbtwtt t ttNt"u1uEu JuTuYupuvu}u-v6v;vUv [vivxvvvv vvv v vvvv v www)w./wF^www w w4w,x?x Fx1Rxxxxx*xy zz zz"z"{ @{a{v{{{{ {?{ { |$$|)I|s||2}F}]}r}}}}}} } }}}}<~B~ K~X~h~m~ v~5~~~ ~~~~   % 1;BSgm~     ( 7E T akzĀ+ڀ#!:\rw  < сށ]aL!‚ ,<#k( Ƅ΄݄  +: S]c ,Ӆ#V$8{E1*N0yLJ,݇ -#+Q8} ˈӈ# $2; Zfo ʉ܉#>bvi#* >/J z  Ћ"ދ 1 FQn  ͌݌-AIOTkt { ͍V< LV,َG6 ~  ŏя >\*{'ΐ֐@ܐ68T !?MHN ^ lw}  ̒ ڒ&9Vk s  Γ!d hsw (  X;+"&+ 60P+>F'3*[(1,I̘'.#_>e84Cĝ(F1rx  uß/9Mi^ my !ӡء'Lkr.&'9,Q~  Uˣ$!F"WZzSդ0)$Z" {0^L5U}@ ȫЫ֫    ',17KRm Ǭɬڬܬ Ȯ Ү ܮ. <3p7ί*-$-R*BѰEZ*m)-±-0*Oz IJβ   #- 4>EL c&q γ %7G\ q&  ƴ)(7lI µ˵ ݵ,=A   &,28 = )J!t1Nhչ QS]"aW|?U cn-!% AM] p6{I %IA ? M!;\-6&SqVJ"hm qh t{.>-%)3O30?D KXk '- Ub r9 "653l   (<2O! K*8Nc '/WvH C[6!!(*Ju'' 0 4> W-bQ 9`>  43z^1$$7 \fmt{     , 9 F S `mt{! "9,f m z E ,4MTm '0B]bHN =XFU=3Rq`;FB .2'#K g s}$* " 8EDd|&&M'Q@yKE80~0 ")+6.e (;N^z1U*I"!%*, W er` g1t$*OV u :{/3$N<' Q%.8T$R!$:$_-*-*I'_!PlF~WE1w:/6IYu|U ! 3 =Jm] 'Cb  - N mw!  #3!Ik(0(HY$<`6e  7!!3U} * ? ' / 7 : <Y  9         " 5 < O h     9  ' 7!B!d<LN7"/Z3R:RL'H$I5nbQX_3o'5 $! FS Z ep w  '  1';/c!*$'-0.$_2N>Q6j/)0$Z !  B  MZo ;HX_4'*\& !636j*3< 6= t  c D K8!!5!]!y1" " """"""9#K#g#n## #3### $##$G$`$g$z$$ $$$"$T$@% %& &(&A&H&d& {&B&*&9&-0'^'7':2(!m(f(*(Z!)"|)|)?*\*{*'**$*O,~P,5,. !.6,/c/0u0E%2k2ZM313>344!44O496a7Y8889"9&9: :$:=:$V:{:/:9:~:w;; ;;!;;T;64<@k<<#<U<D=S=$f==-==<j>>$>>xt?J?8@*W@@@@7aACr^DfD8FHyIII!IIIII J JJ J&J6J=JAJEJaJ ~JJJJJJJJJJJ!#$Z)&'(K[5:>bASCQrp5] xX]O u2**+,1-/03%3:0lbt@#^w 4m1 ]8TgzXLIdH>;"1W4 [Pt`j?n>!F )$'S%0}`K!  :S32+WMYj IUx?$QTOzY\Q170H^_iw\l6<E?l#ihkJPB6~6P)kDi%MmDE8F}O,S+*|fF~ P^' y  L<GzyhENN'f6u9oyM7qsOX@<Z8AU=$G.MR~h.EK8Vq`I=W-5LX->IcegJ.BA}v;c  oD_L/gwBuN:Co(={W2;e_a&"= ([Y[s {n^G9]qTdZF ? ,H |R_aK4H VBp@2"eGJtCs4CcDUUr;#9 )9\5m` TQf"r\*b+(,{.Z7/%/3v@J&-xdk !|VnR<Vpv&ANYjR7a (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser OptionsBuildBuriedBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFilterFilter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Map to %sMap to TagsMark NoteMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Sound and video on cards will not function until mpv or mplayer is installed.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: Anki Japanese Translation v0.2 Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2018-02-01 13:39+0000 Last-Translator: snowtimeglass Language-Team: Jarvik7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2018-02-02 05:15+0000 X-Generator: Launchpad (build 18544) Language: ja_JP (1 / %d) (無効) (無効) (有効) %d 枚のカードが含まれています。%% 正解%(a)0.1f %(b)s/日%(a)0.1fkB アップロード, %(b)0.1fkB ダウンロード%(a)0.1f 秒 (%(b)s)%(b)d 件中 %(a)d 件のノートを更新しました%(tot)s %(unit)sカード %.01f 枚/分%d 枚のカード%d 枚のカードを削除しました。%d 枚のカードを書き出しました。%d 枚のカードを読み込みました。%d 枚のカードを%d 個のデッキを更新しました。%d グループ%d 個の変更したメディアをアップロードします。%d 個のメディアファイルをダウンロードしました。%d 個のノート%d 個のノートを追加しました。%d個のノートを削除しました。%d 個のノートを書き出しました。%d 個のノートを読み込みました。%d 個のノートを変更しませんでした%d 個のノートを更新しました。%d 枚の復習カード%d 枚を選択%s コピー%s 日間%s 時間%s 分間%s 分学習しました。%s か月%s 秒%s を削除します:%s 年間%s 日%s 時間%s 分%s か月%s 秒%s 年Anki について (&A)カード(&C)データベースをチェック (&C)詰め込み学習 (&C)編集 (&E)書き出す (&E)ファイル (&F)検索 (&F)移動 (&G)ガイド (&G)ガイド (&G)ヘルプ (&H)読み込む (&I)カード情報選択を反転 (&I)次のカード (&N)ノート(&N)アドオンフォルダを開く (&O)設定(&P)前のカード (&P)スケジュールを変更 (&R)Anki への支援 (&S)プロファイルを切り替える (&S)ツール (&T)元に戻す (&U)「%(row)s」には %(num1)d 個のフィールドがありました。予想では %(num2)d 個でした。(%s 正解)(終了)(フィルター)(学習中)(新規)(元の最大出題数は %d)(カードを一枚選択してください)....anki2 ファイルは読み込み用に設計していません。バックアップの復元をしたい場合は、ユーザーマニュアルの 'Backups' の項目を参照してください。/0d1か月1年10:0022:0003:0004:0016:00504 Gateway timeout エラーを受け取りました。お使いになっているアンチウィルスソフトを一時的に使用停止してから試してください。:%d 枚のカードバックアップフォルダを開く公式サイトを開く%(pct)d%% (%(x)s / %(y)s)%Y-%m-%d @ %H:%Mバックアップ
Anki はコレクションは閉じた時と同期した時にバックアップを作成します。ファイルの形式検索文字列フォントサイズフォント対象:対象:行のサイズ:置換文字列同期同期
現在有効になっていません。有効にするにはメインウィンドウの同期ボタンを押してください。

アカウントが必要です

コレクションを同期するには無料のアカウントが必要です。登録 して、下の項目を入力して下さい。

Anki アップデート

Anki %s がリリースされました。

エラー

エラーが発生しました。Shiftキーを押した状態でAnkiを起動してください。この操作により、インストールされているアドオン全てが一時的に無効になります。

アドオン全てを無効にすると問題が起こらなくなる場合、メニューの[ツール]>[アドオン] でアドオン管理画面を開き、アドオンを1つまたはいくつか無効にしてAnkiを再起動してください。この手順を繰り返し、問題を引き起こすアドオンを特定してください。

問題を引き起こすアドオンを特定できた際は、その問題をサポートサイトのアドオンセクションにご報告いただければ幸いです。

Debug info:

エラー

エラーが発生しました。[ツール] > [データベースをチェック] を実行し、問題が解消されたかどうか確認してください。

引き続き問題が生じる場合は サポートサイトにご報告ください。なお、その際、この下に記載されている情報をコピーして、報告していただく文章の中に貼り付けてください。

<無視する><ここに入力すると検索します; enter を押すと現在のデッキを表示します>提案、バグ報告、寄付をしてくださった方々に感謝いたします。カードの易しさとは、復習で [普通] を選んだ時に設定する次回の復習間隔の相対値です。フィルターデッキにサブデッキは作れません。メディアの同期中に問題が発生しました。この問題を修正するには、[ツール] から [データベースをチェック] を実行してから、再度同期してください。中断: %sAnki について追加追加(ショートカット: ctrl+enter)カードタイプを追加...フィールドを追加メディアを追加デッキを新規追加 (Ctrl+N)ノートタイプを追加Add Reverseタグを追加タグを追加...追加先:このアドオンの設定は変更できません。アドオンがAnkiWebからダウンロードされませんでした。アドオン追加...追加: %s追加今日追加したカード最初のフィールドが重複したノートを追加しました: %sもう一度今日間違えたカード忘却回数: %s全てのカードタイプ全てのデッキ全てのフィールド全てのカードを無作為に選択 (詰め込みモード)このプロファイルのカードやノート、画像や音声など、全ては削除されます。よろしいですか?フィールドに HTML を使うインストールしたアドオンの読み込みに失敗しました。問題が続く場合は、メニューバーの[ツール]→[アドオン...]で表示されるアドオン管理画面で、そのアドオンを無効化するか削除してください。 '%(name)s' 読み込みの際: %(traceback)s データベースにアクセスしたところエラーが発生しました。 考えられる理由: - アンチウイルス、ファイアウォール、バックアップ、同期機能のソフトが Anki との接続の障害になっている。このようなソフトを無効にして、問題が解決するか調べてみてください。 - お使いになっているディスクに空き容量がない。 - Documents/Anki フォルダをネットワークドライブに設定している。 - Documents/Anki フォルダ内のファイルに書き込みができない。 - お使いになっているハードディスクにエラーが発生している。 [ツール] から [データベースをチェック] を実行して、お使いになっているコレクションが壊れてないか確かめるのはいい考えです。 %s を開いた時にエラーが発生しました。AnkiAnki 2.0 デッキAnki コレクションパッケージAnki デッキパッケージプロファイルの名前を変更できませんでした。ディスク上のプロファイルフォルダの名前が変更できないためです。Documents/Anki フォルダへの書き込み権限を設定していて、他のプログラムからプロファイルフォルダへアクセスしていないことを確認してから、もう一度実行してください。Anki は質問と答えの間に罫線を見つけられませんでした。質問と答えを切り替えるには、テンプレートを手動で調整してください。Anki はメディアファイル用フォルダ(collection.media)のサブフォルダ内のファイルをサポートしていません。Anki は、誰でも使える知的な分散学習システムです。しかも無料でオープンソース。Anki は、AGPL3 ライセンスの下で使用許諾しています。更に詳しい情報をご覧になりたい方は、配布ソースコードの中の LICENSE ファイルをご覧ください。コレクションファイルを開けませんでした。コンピューターを再起動しても問題が続く場合は、メニューの[ファイル]→[プロファイルを切り替える]→[バックアップを開く...] で最近バックアップしたコレクションを復元してください。 Debug info: AnkiWeb の ID 又は パスワード が間違っています。もう一度入力してください。AnkiWeb ID:AnkiWeb にエラーが発生しました。しばらくしてからもう一度実行してください。エラーが続く場合はバグレポートを送信してください。AnkiWeb は現在非常に混雑しています。しばらくしてからもう一度実行してください。AnkiWeb はメンテナンス中です。しばらくしてからもう一度実行してください。解答答えたボタン答えた回数アンチウィルスソフトまたはファイアウォールソフトが原因で、Anki がインターネットに接続できません。フラグありNothing に設定したカードは削除されます。ノートにカードが残っていない場合は、そのノートが失われます。それでも処理を続行しますか。%s は二回ファイルに出てきました本当に %s を削除しますか?最低一つのカードタイプが必要です。最低でも一つのステップが必要です。メディア(画像/音声/動画)を追加 (F3)音声を自動再生するプロファイルを開閉する際に自動的に同期する平均平均時間平均所要時間易しさの平均値学習日の平均平均間隔Back裏面のプレビュー裏面のテンプレートバックアップ中...バックアップ基本基本 (裏面カード付き)基本 (裏面カードを任意選択)青フラグ太字 (Ctrl+B)ブラウザブラウザ (%(cur)d 枚のカードを表示; %(sel)s)ブラウザの表示設定ブラウザのオプション作成延期延期するカードを延期ノートを延期関連する新規カードを翌日まで延期する関連カードの復習を翌日まで延期する既定では、Anki はフィールドを区切るタブやカンマなどの文字を認識します。 もし Anki がこのような文字をうまく識別できないときは、ここで入力してください。 タブを使う時は \t と入力します。キャンセルカードCard %dカード 1カード 2カード IDカード一覧カードの状態カードタイプカードタイプ:カードタイプノート「%s」が使用するカードタイプカードを延期しました。カードを保留しました無駄なカードでした。カードフィルターデッキには手動でカードを移動できません。テキストファイル形式のカードカードは復習が済んだら元のデッキに自動的に戻ります。カード...中央揃え変更%s を以下に変更:デッキを変更デッキを変更...ノートタイプを変更ノートタイプを変更(Ctrl+N)ノートタイプを変更...色を変更 (F8)カード追加の時、ノートタイプによってデッキを選択変更日ここでの内容の変更は、このカードタイプを使用している%(cnt)d個のノートに影響を与えます。変更を反映させるにはAnkiを再起動してください。メディアをチェックアップデートを確認メディアフォルダにあるファイルを検査チェック中...選択デッキを選択して下さいノートタイプを選択して下さいタグを選択フラグを除去使用されていないタグを削除使用されていないタグを削除クローン: %s閉じる閉じて現在の入力を破棄しますか?穴埋め穴埋め (Ctrl+Shift+C)コード:コレクションを書き出しました。コレクションが壊れています。マニュアルをご覧ください。コロンコンマ設定設定インターフェイス言語とオプションを設定おめでとうございます!このデッキの今日の課題を全て達成しました!接続中...接続がタイムアウトしました。お使いになっているインターネット接続に問題が発生しているか、メディアフォルダーの中に非常に大きなファイルがあるようです。継続コピー熟知なカードの正解: %(a)d/%(b)d (%(c).1f%%)正解: %(pct)0.2f%%
(%(good)d / %(tot)d)AnkiWeb に接続できません。ネットワーク接続を確認してから、もう一度実行してください。録音できません。lame と sox がインストール済みか確認してください。ファイル %s を保存できませんでした詰め込み学習デッキを作成フィルターデッキを作成...作成日Ctrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+Z合計合計時間 [%s]合計解答数カードの合計枚数現在のデッキ現在のノートタイプ:カスタム学習カスタム学習セッションカットデータベースを再構築し最適化しました。日付学習日数認証解除デバッグコンソールデッキデッキを強制指定プロファイルを開いた時にデッキを読み込みます。デッキ間隔が大きい順Default次に復習する予定削除カードを削除するデッキを削除白紙のノートを削除ノートを削除するタグを削除未使用のファイルを削除する%s からフィールドを削除しますか。カードタイプ '%(a)s'とその %(b)s を削除しますか。このノートタイプとその全てのカードを削除してもよろしいですか?この使用されていないノートタイプを削除しますか?この使用されていないメディアファイルを削除しますか?ノートがない %d 枚のカードを削除しました。テンプレートがない %d 枚のカードを削除しました。ノートタイプを設定していない %d 個のノートを削除しました。カードがない %d 個のノートを削除しました。間違ったフィールド数を持つ %d 個のノートを削除しました。削除しました。このデッキを削除すると、残りのカードも全て元のデッキに戻ります。説明学習画面に表示する説明 (現在選択中のデッキのみ):ダイアログAnkiWeb からダウンロード%(fname)s をダウンロードしました。AnkiWeb からダウンロードしています...期日復習期日に達したカードのみ明日が期日のカード終了 (&X)易しさ簡単簡単と答えた時のボーナス簡単と答えた時に設定する間隔編集「%s」を編集現在のノートを編集HTML を編集編集日フォントを編集空にする白紙カードをチェック白紙カードの番号: %(c)s 各フィールドの内容: %(f)s 白紙カードが見つかりました。[ツール] から [白紙カードをチェック] を実行してください。最初のフィールドが空白:%sEndカードタイプ %s から生成される新規カードを追加するデッキを選択してください。ここでデッキを選択すると、「追加」ウィンドウでのデッキの選択は無視されます。未選択(空欄)のままにしておくこともできます。カードの新しい位置を入力してください (1...%s):タグを追加する:タグを削除する:%(id)s のダウンロード中にエラーが発生しました: %(error)s%s をダウンロードした時にエラーが発生しました。起動中にエラーが発生しました: %s安全な接続を確立する際にエラーが発生しました。通常このエラーは、アンチウイルスソフト、ファイアウォールソフト、VPN ソフトあるいは、お使いになっている ISP の問題が原因で発生します。%s 実行中にエラーが発生しました。%s を実行中にエラー書き出す書き出す...追加FF1ファイルの%d番目のフィールドは:フィールドの割り当てフィールド名:フィールド:フィールド%s のフィールド%sで区切ったフィールドフィールド...フィルター (&T)フィルターフィルター...フィルター:フィルターフィルターデッキ %d重複を検索する (&D)...重複を検索検索して置換検索して置換終了最初のカード最初の復習最初のフィールドが一致しました: %s無効なプロパティを持っている %d 枚のカードを修正しました。AnkiDroid のデッキの指定に関するバグを修正しました。修正したノートタイプ: %sフラグを付けるカードにフラグを付ける反転使用済みのフォルダー名です。フォント:フッターセキュリティ上の理由から'%s' をカードに使用できません。使用するには、別のパッケージにこの命令を配置して、代わりの LaTeX ヘッダを持たせたパッケージで読み込みます。予測フォーム%(b)s の中に %(a)s が見つかりました。Front表面のプレビュー表面のテンプレート一般生成ファイル: %s作成日時: %sアドオンを取得...共有デッキをダウンロード普通学習後に設定する間隔緑フラグHTML エディタ難しいヘッダーヘルプ易しさの最大値履歴Home時間ごとの分析時間復習が 30 件以下の時間帯は表示しません。貢献していただいたのにお名前がこの一覧に記載されていない方は、どうぞご連絡下さい。毎日学習した場合統計情報に利用する解答時間の最大値大文字小文字を区別しないフィールドを無視する最初のフィールドが既存のノートと一致する行は無視するこのアップデートを無視する読み込むファイルを読み込む最初のフィールドが既存のノートと同じであっても読み込む読み込みは失敗しました。 読み込みを失敗しました。デバッグ情報: 読み込みオプション読み込みが完了しました。カードに未使用で、メディアフォルダーに存在するファイル:デバイス間で移動したコレクションが正しく動作するために、コンピュータの内蔵時計を正確に設定する必要があります。お使いになっているシステムが現地時間を正しく表示している場合でも、内蔵時計が間違っていることがあります。 お使いになっているコンピュータの時刻設定で次の項目を確認してください。 - 午前/午後 - 時刻同期 - 年月日 - 時間帯 - 夏時間 正確な時刻からのずれ: %s 秒メディアファイルを含めるスケジュール情報を含めるタグを含める今日の新規カードの上限を上げる今日の新規カードの上限に追加今日の復習カードの上限を上げる今日の復習カードの上限に追加間隔が小さい順アドオンをインストールするインターフェースの言語間隔間隔の調整間隔無効なコードです。数字が誤っているか、このアドオンがこのバージョンのAnkiに対応していません。コードが不正です。無効な設定: 無効なファイル名です。名前を変更してください: %sファイルが壊れています。バックアップから復元してください。カードに無効なプロパティを設定しています。[ツール] から [データベースをチェック] を実行してください。それでもこの問題が解決しない場合は、サポートサイトでご質問ください。無効な正規表現。無効な検索 - 入力ミスがないか確認してください。保留しました。斜体 (Ctrl+I)Ctrl+Shift+T でタグフィールドに移動します。保存ファイル数LaTeXLaTeX インライン数式LaTeX ディスプレイ数式忘却最後のカード直近の復習追加時期が新しい順学習先取り学習の限度学習: %(a)s枚、復習: %(b)s枚、再学習: %(c)s枚、フィルター: %(d)s枚学習中無駄なカードの処理無駄なカードになる回数左寄せ最大枚数読み込み中...ローカルコレクションにカードがありません。AnkiWebからダウンロードしますか?間隔の最大値対象フィールド:易しさの最小値ノートタイプの管理ノートタイプを管理ノートタイプを管理...ノートタイプを管理...%s に割り当てるタグに割り当てるノートにマーク熟知間隔の上限一日あたりの復習上限メディア間隔の下限分間新規カードと学習カードを混ぜるMnemosyne 2.0 デッキ (*.db)その他忘却回数が多い順カードを移動カードをデッキに移動:ノート (&O)使用済みの名前です。デッキ名:名前:ネットワーク新規新規カード新規カードのみ一日の新規カードの上限新しいデッキ名新しい間隔新しい名前:変更後のノートタイプ:新しいオプショングループ名:新しい位置 (1...%d):日付更新時刻フラグなし期日に達したカードはありません。指定した条件に一致するカードはありませんでした。白紙カードはありません。今日は熟知なカードを学習しませんでした。使用されていないファイル、行方不明のファイルはありませんでした。利用可能なアップデートはありません。ノートノート IDノートタイプノートタイプノートと %d 枚のカードを削除しました。ノートを延期しました。ノートを保留しました。注意: メディアファイル(画像/音声/動画)はバックアップされていません。安全のために Anki のフォルダを定期的にバックアップしてください。注意: いくつかの履歴が消失しています。詳しい情報はユーザーマニュアルをご覧ください。テキストファイル形式のノートノートには最低一つのフィールドが必要です。ノートにタグを付けました。NothingOK前回表示日時が古い順次回の同期は、一方向に変更を強制実行するカードが生成されないため、ノートを読み込みませんでした。これは、フィールドが空欄の時、あるいはテキストファイルの内容が正しい項目に関連付けられていない時に発生します。新規カードだけが表示順を変更できます。AnkiWeb に接続できるのは、一度に一つのクライアントだけです。前回の同期に失敗している場合は、しばらくしてからもう一度実行してください。開くバックアップを開く...最適化しています...追加条件:オプション%s のオプションオプショングループオプション...順番追加した順番復習期日が古い順解答のテンプレート:フォント:質問のテンプレート:パスワード:貼り付けクリップボード画像をPNG形式で貼り付けるPauker 1.8 Lesson (*.pau.gz)パーセント期間: %s新規カードの最後に設定次の期間内に復習を設定まず別のノートタイプを追加してください。マイクを接続して、他のプログラムがオーディオデバイスを使用していないことを確認してください。このノートを編集して、穴埋めを追加してください。(%s)プロファイルが開いていて、Anki は処理中でないことを確認してから、もう一度実行してください。このフィルターに名前を付けてください:PyAudio をインストールしてくださいまずプロファイルを開いてください。フォルダー %s を削除してから、もう一度実行してください。Ankiを再起動した後、言語が変更されます。[ツール] から [白紙カードをチェック] を実行してください。デッキを選択してください。一つのノートタイプからカードを選択してください。何かを選択してください。最新バージョンのAnkiにアップグレードしてください。このファイルを読み込むには、 [ファイル] から [読み込む] を実行してください。AnkiWeb でデッキをアップグレードしてから、もう一度実行してください。位置設定プレビュー選択したカードをプレビューする (%s)新規カードをプレビューする新規カードのプレビュー: 追加日が過去処理中...プロファイルプロキシ認証が必要です。紫フラグ質問最後: %d先頭: %d終了無作為ランダムに並べ替える評価再構築自分の声を録音音声を録音 (F5)記録中...
時間: %0.1f赤フラグ期日超過が相対的に大きい順再学習追加の際に直前の入力を残すフィルター「%s」を削除しますか?このカードタイプを削除現在のフィルターの保存を解除タグを除去...全ての書式をクリア (Ctrl+R)このカードタイプを削除すると、一つ以上のノートも削除することになります。まずは新しいカードタイプを追加してください。名前を変更このカードタイプ名を変更...デッキ名を変更現在のコレクションの代わりに、今までにバックアップされたコレクションを使用することができます。リストを開きますか?オーディオを再生自分の声を再生並び替えるこのカードタイプの順序を変更...新規カードの表示順番を並び替える新規カードを並び替える...次のタグの中から1つ以上を指定する:スケジュール変更次の解答時刻を再計算このデッキの解答に基づいてカードをスケジュールし直す学習し続ける右から左入力 (RTL)バックアップされたコレクションの復元「%s」より前の状態に戻りました。復習復習した回数学習した時間先取りして復習する先取りする日数忘れたカードを復習する: 過去忘却したカードを復習する時間帯ごとの正解率復習右寄せ保存現在のフィルターを保存PDFで保存保存しました。範囲: %s検索書式済みの内容の中まで検索 (速度が低下します)選択枚数全てを選択 (&A)ノートを選択 (&N)除外するタグの選択:選択したファイルは UTF-8 形式ではありません。マニュアルの Importing (読み込み) に関する項目をご覧ください。選択学習セミコロンサーバーが見つかりませんでした。接続が中断しているか、アンチウィルスソフトまたはファイアウォールソフトが Anki のインターネット接続を遮断しています。このオプショングループを%s内のすべてのサブデッキに適用しますか?全てのサブデッキに適用する文字の色を設定 (F7)シフトキーを押したまま起動しましたので、自動的な同期とアドオンの読み込みを省略しました。既存のカードの順序を移動するショートカットキーは「%s」ショートカット: %s%s を表示解答を表示常に両面を表示重複を表示する解答タイマーを表示する復習カードの後に新規カードを学習する復習カードの前に新規カードを学習する新規カードを追加順に表示する新規カードを無作為に選んで表示する次回の復習時期を解答ボタンの上に表示する復習の際にカードの残り枚数を表示するサイドバーサイズ:以後のセッションに先送りした関連カードや延期したカードがあります。Anki を再起動した後に有効になる設定があります。ノートタイプを変更したため無視した更新があります。ソートフィールドこのフィールドでソート(並び替え)するこの列で並び替えることはできません。別の列を選択してください。カード上の音声と動画は、mpvまたはmplayerがインストールされていないと再生できません。スペース開始位置:易しさの初期値統計統計間隔:学習ステップ(分間)学習ステップは数字で指定してください。今日学習したカード学習デッキを学習するデッキを学習する...学習するカードの状態やタグを選んで学習する書式書式 (カード間で共有)下付き文字 (Ctrl+=)Supermemo 用の XML 形式 (*.xml)上付き文字 (Ctrl++)保留カードを保留ノートを保留保留保留+延期同期音声と画像も同期する同期できませんでした: %s同期できませんでした。インターネットに接続していません。同期するにはお使いのコンピュータの時計を正しく設定する必要があります。時計を正しく設定してから、もう一度実行してください。同期中...タブ重複にタグを付けるタグを付けるだけタグ対象デッキ(Crtl+D)対象フィールド:テキストテキスト(タブ区切りまたはセミコロン区切り) (*)そのデッキは既に存在します。そのフィールド名は既に使用しています。その名前は既に使用しています。AnkiWeb への接続がタイムアウトしました。お使いのネットワーク接続を確認してから、もう一度実行してください。既定の設定「Default」は削除できません。既定のデッキ「default」は削除できません。デッキ内のカードの内訳ダウンロードしたファイルが破損しました。もう一度やり直してください。最初のフィールドが空欄です。ノートタイプの最初のフィールドは割り当てなくてはなりません。次の文字は使えません: %sこのカードは表側が白紙です。[ツール] から [白紙カードをチェック] を実行してください。追加するカードは表側が全て白紙になります。新規カードの追加枚数質問に答えた回数復習期日が来るカードの枚数各ボタンを押した回数お使いになっているシステムの temp フォルダ (一時フォルダ) のパーミッションが間違っています。Ankiは自動的に訂正できません。更に詳しい情報をご覧になるには、Anki マニュアルを 'temp folder' で検索してください。指定したファイルは正当な .apkg ファイルではありません。指定した検索項目は、どのカードにも一致しませんでした。検索項目を変えてみてください。要求した変更を行うには、次回のコレクションの同期の際にデータベースの完全なアップロードが必要です。他の端末で復習やその他の変更を行ってまだ同期が済んでいない場合、これらの変更は失われます。処理を続けますか。解答にかかった時間新規カードはまだ残ってますが、今日の最大出題数に達しました。 最大出題数を増やすこともできますが、更にカードを追加すると それだけ短期的に復習の負荷が掛かることに注意してください。最低限一つのプロファイルが必要です。この列は並び替えできませんが、検索でカードタイプを絞り込むことができます。例)検索欄に「card:1」と入力して検索この列で並び替えることはできませんが、左側のパネルからデッキを一つ選択するとそのデッキで絞り込むことができます。このファイルは、正当な .apkg ファイルではないようです。このエラーが AnkiWeb からダウンロードしたファイルで発生した場合、ダウンロードが失敗した可能性があります。再度ダウンロードしても、この問題が続くようであれば、別のブラウザからもう一度実行してください。このファイルは既に存在します。上書きしますか。このフォルダーは、全ての Anki データを保存する唯一の場所です。これによってバックアップが簡単になります。別の場所を設定するには次の情報をご覧ください: %s これは標準のスケジュールから外れて学習する特別なデッキです。これは {{c1::sample}} 穴埋め問題です。%d枚のカードが作成されます。続行しますか?この処理は、既存のコレクションを削除し、今から読み込むファイルのデータに置き換えます。本当に実行しますか?時間タイムボックスの時間枠復習下の「ブラウザ」ボタンをクリックすると、アドオンの一覧が表示されます。

気に入ったアドオンが見つかった場合は、そのアドオンのコードを下の欄に貼り付けてください。スペースで間隔を空けて複数のコードを入力することも可能です。このノートに穴埋め問題を作るには、まず今のノートタイプを穴埋め問題に対応したノートタイプに変更する必要があります。[編集] > [ノートタイプを変更]から、穴埋め問題に対応したノートタイプを選択してください。(Ankiインストール時から付属しているノートタイプのうちでは、「Cloze」が穴埋め問題に対応しています。)今すぐ表示するには、下にある [延期を解除] ボタンを押してください。標準のスケジュールから外れて学習するには、下の [カスタム学習] ボタンを押してください。今日復習カードはまだ残ってますが、今日の出題上限に達しました。 適正な記憶力に見合った、一日の制限値まで引き上げることを検討してください。有効/無効 の切り替えマークを付ける/除去する保留/保留解除 を切り替える合計合計時間カードの合計枚数ノートの合計枚数入力条件に正規表現を使うノートタイプ解答キー入力: 不明なフィールド %s読み込み専用ファイルは読み込めません。ファイルをゴミ箱に移動することができません。コンピューターを再起動してみてください。延期を解除下線 (Ctrl+U)元に戻す元に戻す - %sファイルの種類が不明。新規最初のフィールドが一致した場合、既存のノートを更新する。次のアドオンをアップデートしますか?%(b)d 件中 %(a)d 件の既存のノートを更新しましたAnkiWeb にアップロードAnkiWeb にアップロード中...カードに使用中で、メディアフォルダーに存在しないファイル:ユーザー 1バージョン %sアドオン解説ページを開くファイルを見る編集が終わるのを待っています。注意: 穴埋め問題は上部にある「ノートタイプ」の設定を「Cloze」(穴埋め)タイプに変更するまで機能しません。カード追加の時、現在のデッキを既定にするコレクション全体今ダウンロードしますか?Damien Elmes が作成しました。パッチ、翻訳、テスト、デザインで次の方々にご協力いただきました:

%(cont)s穴埋め問題のノートタイプがありますが、穴埋め問題を作っていません。続行しますか。デッキの数が多いようです。%(a)s をご覧ください。%(b)sまだ録音してません。最低でも一つの列は必要です。未熟未熟+学習中この変更は複数のデッキに影響が及びます。現在のデッキのみに変更を加えたい時には、まず最初にオプショングループを新規追加してください。コレクションが破損しているおそれがあります。このような破損は、Ankiを使用中に中身のファイルの移動やコピーを行った場合や、コレクションをネットワークドライブやクラウドドライブに保管している場合に起きることがあります。コンピューターを再起動しても問題が続く場合は、メニューの[ファイル]>[プロファイル]でプロファイルウィンドウを開き、自動バックアップされたコレクションを使用してください。お使いになっているコレクションは一貫性が失われています。[ツール] から [データベースをチェック] を実行してから、再度同期してください。お使いになっているコレクションかメディアファイルが大きすぎて同期できません。コレクションを AnkiWeb にアップロードしました。 他のデバイスを使っている場合は、直ちにそのデバイスで同期して、このコンピュータからアップロードしたコレクションをダウンロードしてください。この処理の後は、復習やカードの追加は自動的に統合します。このデッキは AnkiWeb 上の単語帳との違いが大きくなり、統合できなくなりました。どちらか一方で残りを上書きする必要があります。 ダウンロードを選択すると、AnkiWeb からコレクションをダウンロードします。前回の同期以降にこのコンピュータ上で行った変更は失われます。 アップロードを選択すると、AnkiWeb にコレクションをアップロードします。前回の同期以降に AnkiWeb 上や他のデバイスで行った変更は失われます。 全てのデバイスで同期した後は、復習やカードの追加は自動的に統合します。ファイアウォールかウイルス対策ソフトがAnkiの接続処理を妨げています。Ankiを例外リストに追加してください。[デッキなし]バックアップ枚のカード選択中のデッキから取得枚。出題方法:コレクション日日デッキ全期間重複ヘルプ表示しない時間時回カード 0.1 枚以下/分%s に割り当てるタグ に割り当てる分分間か月枚の復習カード秒統計このページ週コレクション全体~anki-2.1.0+dfsg~b36/locale/km/000077500000000000000000000000001323611211500157255ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/km/LC_MESSAGES/000077500000000000000000000000001323611211500175125ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/km/LC_MESSAGES/anki.mo000066400000000000000000000007561323611211500210010ustar00rootroot00000000000000$,89Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2013-10-01 08:25+0000 Last-Translator: Rob Hawkins Language-Team: Khmer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) anki-2.1.0+dfsg~b36/locale/ko/000077500000000000000000000000001323611211500157275ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ko/LC_MESSAGES/000077500000000000000000000000001323611211500175145ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ko/LC_MESSAGES/anki.mo000066400000000000000000001767471323611211500210210ustar00rootroot00000000000000.> >>>">> >>8 ?D?U?h?"y?$?$?&?" @0@4C@2x@@@"@$@$!A$FA kAAAAAAAA B B 5BCBTBXB\B`BeBiB mBwBB BBBBB BB BB BBBCC&C7C>C0DC uC C CCCCCCYD[D^DfDmDrDwD{DDTDD,D(E0E!OEqEfEE FF %F 2F=FMF_FtFeFF7G GG5GX&HYH%HkH kI wIII I II I IIIII J$J5J ;JGJ WJ aJ%lJKJJJ"LL L MMNRNvN7OO OwOE P@QPPPPRPQQ#Q#QQR(!RJR RR_R sRRRR R RRRRRSS+S;SAS FS PS)ZS'SShToTtT|TTT T T TT TTTT3T,US@UUUU U UUUU"V'V/V&?V fVrV yVV V VVVVV-V WW(W5?W uWWXX8X5NXPX7X Y$Y )Y5YMY UY`YgYnYuY|YY Y Y Y Y Y YYY Y YYZ #Z0Z CZPZeZiZZ Z Z ZZ/ZZZ[% [3[ :[ G[ S[ `[ l[ y[ [[([[[F\NL\P\>\P+]|]]] ]8](^/^E^a^e^ t^^^^ ^ ^^ ^ ^^ ^^^)^0_J_`_4d_!_____```` `.``aaa !a /a;aBa IaWa oayaaaaaaaaa a a bN#b"rbbbbbbbcccc ccccc cdd d(d-d4d 9dFdNdSddd.jdFddd e %e42egeze e1eeeee*f=f gg hh"5h"Xh {hhhhhh h h)i1iiiij jj!j1j 8j BjPjcjij<{jj jjjj jjk k#k*k ?k IkUk\kmkkkkkkk k kkl ll&l,l4l 8lBl Ql_l nl {llllll+lm#(m!Lmnmsm {m m<m mm]maHnn!n nnnn, o8o#pk$pp ppppp pp p pqq'q @qJqPqnq q qq,q#qVr8hrErrr*s0Fswss,ss-s+t8Jtt tttt#t0t "u0u9uXuau ruuuuuuuuuuuivv v vv vv v"vw w1w FwQw nww w w wwww-x0x8x >xHxOxox vx xxVxx yy,yyGy &zGzXz"qz zz zzzzz{0{*O{'z{{@{6{8 | Y|!d|?||| | |||} %}3} 9} D} R}\}w}}}} } } }} }~!,~dN~ ~~~~~~ ~(0 JkX+" &.+U0+̀>F7'~*(с1,,Ia'Qy#ee8C(r u/'MWL R ] i!u' .&Ahz, ƋыU$Fk"|S0$$"Il r{~^5YU  ,79> C MW\ag{ǒ̒Ԓגߒ   Ô ˔ Ք!ߔ /O`qzڕ%&Fcl̖)%< E R\bkqx  —З     $2 CQe~"Șژ K" n z  ؙܙ\ *&+Q}q&BUkzϜ]J1|rLwb=ڟ ȠԠ۠ 4I ^l { ,ˡ ҡ#  7 mXƢ3(M PM/ 3AgE(G&p58ͫ/$T [i~ìʬ ެ #?Fd u 47׭  #, 5 ? M [i} گJ$,IQ  °Ӱ  ('PW.o   ֱ 5,3B;~/] ( ij3ѳ4i:B( .L S^elsz ɵֵݵ   5C X<e ȶٶ6=0Du |  ƷԷ#G9X53ȸ3K04|Aw? ƺԺ' . < GQX p~  (̻J@][a.$$6Nm+H er- ;۾  %, 4>Rq  ǿ>(H a$k X_)f    ) 3 =GX_dxDd)4@u B ;O'eG %:(J6s! &98r$Fk' $+?I   7DUf{ "  % ALhw   32!f2;5I P Z h>v sle$?7Sb(iD/  -AWf | A + R7/t3/c$6#GZ$<2:MmP  !#/SDl& $1I P]nu  !  .5FMW " (.CW # '+<N`jy F!q* +   )4L2a/+!0/CsP{>Y e1sX/6>5X  . "2H O ] k#u 3~8%&,L%yx,,E%rC$?/AXqR!5Wu'1_Y+>72h0L Wwgn " 0 >Lc$j3 ?1\@  .cHA&g&M'8 =KiJ     & -7> EPWo8u!.#69o  % Y@UmJ8T>^oZS-l:0&0kn~HAPr ]O,Il vE0}=J_74#ip V.CbMN c);x*_xL4/Chyq>eHw;\=yw 5"tXQQfE4'())G*+h7C{b sgZW<(jupB5WN!R\@/qnX|&OL#Hk$]aMzs%2*E`j5Yb|XU6S[!T'"Rhv FqNAO=cU,D]fFw^+[Bd `-'3 Ksnu<~m+ }I[Jr,2l`im?PK{19W$RV8;P(->"G$xzDd1ViA&9?tr2j@ekgBIv|_ML1 FSK3ZG<3Dpo6a\ T g%Y.~{/^a7fQye z}:?:ctd (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-05-29 06:46+0000 Last-Translator: Chang Hyun Oh Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: (1/%d) (꺼짐) (켜짐) %d카드가 들어 있습니다.%% 정답%(a)0.1f %(b)s/일%(a)d/%(b)d노트를 업데이트 했습니다.%(tot)s %(unit)s%.01f 카드/분%d카드%d카드를 삭제했습니다.%d카드를 내보냈습니다.%d카드를 가져왔습니다.%d카드를 공부한 시간%d뭉치를 업데이트했습니다.%d그룹업로드할 변경사항 %d개다운로드된 파일 %d개%d노트%d노트를 추가했습니다.%d노트를 삭제했습니다.%d노트를 내보냈습니다.%d노트를 가져왔습니다.%d노트는 변경되지 않았습니다.%d노트를 업데이트했습니다.%d복습%d개 선택%s 복사%s일%s시간%s분%s분.%s개월%s초삭제할 %s:%s년%s일%s시간%s분%s달%s초%s년정보(&A)...벼락치기(&C)...편집(&E)내보내기(&E)...파일(&F)찾기(&F)이동(&G)지침서(&G)지침서(&G)...도움말(&H)가져오기(&I)...선택 항목 반전(&I)다음 카드(&N)추가 기능 폴더 열기(&O)...환경 설정(&P)...이전 카드(&P)일정 재조정(&R)...Anki 후원(&S)...도구(&T)실행 취소(&U)'%(row)s'째 줄의 필드는 %(num1)d개. 예상한 필드는 %(num2)d개.(%s 정답)(여과됨)(익히는 중)(새 카드)(부모 제한: %d)(카드 1장 선택해주세요)....anki2 파일은 가져오기 용으로 제작되지 않았습니다. 백업 파일에서 복구를 하려면, 사용 설명서에서 '백업' 항목을 참고하세요./0일1개월1년10AM10PM3AM4AM4PM504 gateway timeout 오류가 발생했습니다. 안티바이러스를 잠시 꺼보세요.:%d카드백업 폴더 열기공식 웹사이트 방문%(pct)d%% (%(x)s/%(y)s)%Y-%m-%d @ %H:%M백업
Anki는 사용자의 모음집을 종료하거나 동기화할 때마다 백업을 만듭니다.내보내기 형식:찾을 말:글꼴 크기:글꼴:대상:포함:줄 간격:바꿀 말:동기화동기화
현재 사용하지 않고 있습니다. 프로그램 기본 창에서 동기화 버튼을 눌러서 활성화하세요.

계정이 필요합니다

무료 계정이 있어야 사용자의 모음집을 동기화할 수 있습니다. 사용자 등록을 한 뒤, 필요한 정보를 아래에 입력하세요.

Anki 업데이트

Anki %s 버전이 공개되었습니다.

<무시><비 유니코드 텍스트><찾을 내용을 이 곳에 입력하세요. 이대로 엔터 키를 누르면 현재 뭉치를 표시합니다.>제안, 버그 신고, 기부를 해주신 모든 분께 감사드립니다.카드의 수월함은 "알맞음" 평가 버튼에 지정된 다음 복습 간격의 크기로 나타납니다.여과된 뭉치는 하위 뭉치를 가질 수 없습니다.미디어를 동기화하는 도중 문제가 발생했습니다. 도구>미디어 검사를 실행한 뒤, 다시 동기화하여 이 문제를 해결하세요.중단됨: %sAnki 소개추가추가 (단축키: ctrl+enter)필드 추가미디어 넣기새 뭉치 추가 (Ctrl+N)노트 유형 추가반대 방향 추가태그 추가삽입 위치:추가: %s추가됨오늘 추가정렬 필드와 중복된 노트 추가: %s다시오늘 다시'다시'버튼을 누른 횟수: %s모든 뭉치모든 필드전체 카드의 무작위 순서 (벼락치기 모드)현재 프로필의 모든 카드, 노트, 미디어 파일이 삭제됩니다. 계속 진행하겠습니까?필드 안에 HTML 허용데이터베이스에 접근 도중 오류가 발생했습니다. 가능한 유발 원인: - 바이러스 백신 프로그램, 방화벽, 백업, 또는 동기화 소프트웨어가 앙키를 방해할 수도 있습니다. 그러한 소프트웨어를 꺼보시고, 해당 문제가 사라지는지 확인하세요. - 하드디스크가 꽉 찼을 수도 있습니다. - 내 문서/Anki 폴더가 네트워크 폴더에 존재할 수 도 있습니다. - 내 문서/Anki 폴더가 쓰기 불가 상태일 수도 있습니다. - 하드디스크에 오류가 있을 수도 있습니다. "도구>데이터베이스 검사"를 실행해서 모음집이 깨진 것은 아닌지 확인하는 것도 좋은 방법입니다. %s를 여는동안 에러가 발생하였습니다.AnkiAnki 2.0 뭉치Anki 뭉치 꾸러미Anki가 하드디스크에 있는 프로필 폴더의 이름을 바꿀 수 없습니다. 내 문서/Anki 폴더에 쓰기 권한을 가지고 있는지 확인하고, 다른 프로그램이 프로필 폴더를 접근 중은 아닌지 확인한 후 다시 시도하세요.질문과 답을 구분하는 선을 찾을 수 없습니다. 서식을 수동으로 수정해서 질문과 답을 바꾸세요.Anki는 사용하기 편하고, 영리한 분산 학습 시스템입니다. 무료로 제공하는 오픈 소스 프로그램입니다.Anki는 AGPL3 라이센스를 따릅니다. 더 자세한 정보는 소스 배포판의 라이센스 파일을 참고하세요.AnkiWeb 아이디나 비밀번호가 틀렸습니다. 다시 시도하세요.AnkiWeb 아이디:AnkiWeb에 문제가 생겼습니다. 몇 분 뒤 다시 시도해 봐도, 문제가 계속될 경우, 오류 보고를 해주세요.현재 AnkiWeb에 접속량이 많습니다. 몇 분 뒤 다시 시도하세요.AnkiWeb은 현재 점검 중입니다. 몇 분 후에 다시 시도하세요.답평가 버튼답Anki가 인터넷에 접속하는 것을 백신이나 방화벽 소프트웨어가 막고 있습니다.어디에도 배정되지 않은 카드는 모두 삭제됩니다. 카드가 존재하지 않는 노트는 사라집니다. 계속 진행하겠습니까?파일에서 두 번 등장합니다: %s%s 뭉치를 삭제하시겠습니까?최소한 하나의 카드 유형이 필요합니다.적어도 하나의 단계는 반드시 필요합니다.자동으로 오디오 재생프로필을 열고 닫을 때 자동 동기화평균평균 시간평균 답변 시간평균 수월함공부한 기간 동안 평균평균 복습 간격뒷면뒷면 미리보기뒷면 서식백업기본기본 (역방향 카드 포함)기본 (선택적 역방향 카드)탐색탐색기에서 표시할 때탐색기 옵션모으기덮기카드 덮기노트 덮기연관된 새 카드를 다음날까지 덮어두기연관된 복습 카드를 다음날까지 덮어두기기본적으로 Anki는 탭이나 쉼표 같은 필드 구분 문자를 자동으로 감지합니다. 만약 Anki가 구분 문자를 제대로 감지하지 못한다면, 이곳에 구분 문자를 직접 입력하세요. 탭은 \t로 표현하세요.취소카드카드 %d카드 1카드 2카드 ID카드 목록카드 유형카드 유형%s의 카드 유형카드를 덮었습니다.카드가 보류되었습니다.카드가 거머리였습니다.카드여과된 뭉치에 카드를 수동으로 옮겨 넣을 수 없습니다.텍스트 파일로 정리한 카드공부한 카드는 자동으로 원래 있던 뭉치로 돌아갑니다.카드...가운데수정'%s'에서:뭉치 바꾸기노트 유형 바꾸기노트 유형 바꾸기 (Ctrl+N)노트 유형 바꾸기...노트 유형에 따라 뭉치 바꾸기변경미디어 검사(&M)...미디어 디렉토리에 있는 파일 점검검사 중...선택뭉치 선택노트 유형 선택태그 선택복제: %s닫기입력한 내용을 포기하고 창을 닫을까요?빈칸코드:모음집이 깨졌습니다. 사용 설명서를 참고하세요.쌍점쉼표인터페이스 언어 및 기타 옵션 설정축하합니다! 현재까지 이 뭉치에서 만기된 모든 카드를 공부했습니다.연결 중...연결 시간이 초과되었습니다. 인터넷 연결에 문제가 있거나 미디어 폴더에 크기가 큰 파일이 있을 수 있습니다.계속복사하기성숙한 카드 정답률: %(a)d/%(b)d (%(c).1f%%)정답률: %(pct)0.2f%%
(%(good)d/%(tot)d)AnkiWeb에 연결할 수 없습니다. 네트워크 연결 상태를 확인하고 다시 시도하세요.녹음을 할 수 없습니다. lame과 sox를 설치했습니까?파일을 저장할 수 없습니다: %s몰아보기뭉치 만들기여과된 뭉치 만들기...생성Ctrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+Z누적누적 %s누적 답변누적 카드현재 뭉치현재 노트 유형:맞춤 공부맞춤 공부 세션잘라내기데이터베이스를 재구성하고 최적화했습니다.날짜공부한 기간권한 해제디버그 콘솔뭉치프로필을 열 때 뭉치를 가져올 것입니다.뭉치복습 간격이 긴 것부터기본다음 번 복습 때까지 기다리는 시간.삭제카드 삭제뭉치 삭제빈 카드 삭제노트 삭제노트 삭제태그 삭제잉여 미디어 삭제%s에서 필드를 삭제할까요?이 노트 유형과 여기에 속한 모든 카드를 작제할까요?사용하지 않는 이 노트 유형을 삭제할까요?사용되지 않는 미디어 파일을 지울까요?노트가 사라진 %d카드를 삭제했습니다.서식이 사라진 %d카드를 삭제했습니다.사라진 노트 형식으로 작성된 노트 %d개를 삭제했습니다.카드가 없는 노트 %d개를 삭제했습니다.잘못된 필드를 포함한 %d개 노트를 삭제했습니다.삭제했습니다.뭉치 목록에서 이 뭉치를 지우면, 남아 있는 모든 카드는 각자의 원래 뭉치로 돌아갑니다.설명공부 화면에 표시할 설명 (현재 뭉치에만 해당):대화 상자웹에서 다운로드AnkiWeb에서 다운로드하는 중...만기만기인 카드만내일 만기종료(&X)수월함쉬움쉬움 버튼 보너스쉬움 간격편집현재 카드 편집HTML 편집편집글꼴비우기빈 카드...빈 카드 번호: %(c)s 필드: %(f)s 빈 카드가 발견되었습니다. 도구>빈 카드를 실행하세요.비어 있는 첫 필드: %sEnd%s의 새로운 카드를 넣을 뭉치를 입력하거나, 빈 칸으로 남겨 두세요:새 카드 위치를 입력하세요 (1...%s):추가할 태그를 입력하세요:삭제할 태그를 입력하세요:다운로드 오류: %s프로그램 시작 오류: %s보안 연결에 실패했습니다. 이 오류는 주로 바이러스 백신, 방화벽 또는 VPN으로 인하여 나타나거나, 인터넷 제공자의 문제 때문에 나타납니다.%s 실행 중 오류 발생.%s 실행 중 오류 발생.내보내기내보내기...%d개 미디어 파일을 내보냈습니다.기타FF1필드 %d 데이터베이스 검사를 실행해 보시고, 이후에도 문제가 지속될 경우 고객지원 웹사이트에 문의해 주세요.잘못된 정규 표현식입니다.보류되었습니다.Ctrl+Shift+T를 눌러 태그로 이동보관할 백업LaTeXLaTeX equationLaTeX math env.실패마지막 카드최근 복습나중에 추가한 것부터익힘앞당겨 공부하기 제한익힘: %(a)s, 복습: %(b)s, 재익힘: %(c)s, 여과됨:%(d)s익힘 카드거머리 처리거머리 문턱왼쪽개수 제한여는 중...최대 복습 간격검색 대상 필드:최저 수월함관리노트 유형 관리...%s로 배정태그로 배정성숙한 카드최대 복습 간격최대 복습량/일미디어최소 복습 간격분새 카드와 복습 카드 섞기Mnemosyne 2.0 뭉치 (*.db)그밖에많이 틀린 순서대로카드 이동카드를 뭉치로 이동:노트(&O)이미 존재하는 이름.뭉치 이름:이름:네트워크새 카드새 카드새 카드만새 카드/일새 뭉치 이름:새 복습 간격새 이름:새 노트 유형:새 옵션 그룹 이름:새 위치 (1...%d):하루가 시작하는 시각은 자정으로부터만기된 카드가 없습니다.제시한 기준에 맞는 카드가 없습니다.빈 카드가 없습니다.오늘은 성숙한 카드를 공부하지 않았습니다.사용하지 않거나 빠진 파일이 없습니다.노트노트 ID노트 유형노트 유형노트와 그에 속한 카드 %d개가 삭제되었습니다.노트를 덮었습니다.노트가 보류되었습니다.주의: 미디어는 백업되지 않습니다. 만약을 대비해 주기적으로 Anki 폴더를 백업하세요.알림: 내력의 일부가 빠졌습니다. 더 자세한 정보는 탐색기 문서에서 확인하세요.텍스트 파일로 정리한 노트노트는 적어도 하나 이상의 필드가 필요합니다.노트에 태그 설정됨.배정 안 함확인처음 공부한 지 오래된 것부터다음 동기화 때, 한 방향으로만 변경 사항 적용하기어떤 카드로 만들어 내지 않는 노트가 하나 이상 있어서 해당 노트를 가져오지 못했습니다. 이 문제는 빈 필드가 있거나, 텍스트 파일의 내용을 올바른 필드에 배정되지 않았기 때문에 발생할 수 있습니다.위치 수정은 새 카드만 가능합니다.오직 한 클라이언트만이 AnkiWeb에 접근할 수 있습니다. 만약 이전 동기화가 실패했다면, 몇 분 뒤에 다시 시도하세요.열기최적화하는 중...그밖의 조건:옵션%s의 옵션옵션 그룹:옵션...순서추가한 순서대로만기 순서대로뒷면 서식 교체:글꼴 교체:앞면 서식 교체:비밀번호:붙여넣기클립보드에 있는 이미지를 PNG 형식으로 붙여넣기Pauker 1.8 Lesson (*.pau.gz)백분율기간: %s새 카드 대기열의 끝으로 보내기다음 범위 안의 복습 간격을 유지한 채로 복습 대기열에 넣기:먼저 다른 노트 유형을 추가하세요.마이크를 연결하고, 다른 프로그램이 오디오 장치를 사용하고 있지 않은지 확인하세요.노트를 편집해서 빈칸을 뚫으세요. (%s)프로필이 열려 있는 상태이고, Anki가 다른 작업을 진행 중은 아닌지 확인하고, 다시 시도하세요.PyAudio를 설치하세요먼저 프로필을 열어 주세요%s 폴더를 삭제한 후 다시 시도해 주세요.바뀐 언어 설정을 적용하려면 Anki를 재시작해 주세요.도구>빈 카드를 실행하세요뭉치를 선택하세요.하나의 노트 유형에 속한 카드만 선택하세요.무언가 선택하세요.최신 버전의 Anki로 업그레이드하세요.이 파일을 가져오려면, 파일>가져오기 메뉴를 사용하세요.AnkiWeb을 방문해서 뭉치를 업그레이드한 뒤 다시 시도하세요.위치환경 설정미리 보기선택된 카드 미리 보기 (%s)새 카드 미리 보기이 기간 전부터 현재까지 추가한 새 카드 미리보기:%d개의 미디어 파일을 처리함처리 중...프로필프록시 인증이 필요합니다.질문대기열의 끝: %d대기열의 시작: %d닫기무작위로무작위 순서평점다시 모으기음성 녹음녹음 중...
시간: %0.1f늦은 정도의 상대값재익힘이전에 입력한 내용 유지이 카드 유형을 제거하면 하나 이상의 노트가 삭제될 수 있습니다. 먼저 새로운 카드 유형을 만드세요.이름 변경뭉치 이름 변경오디오 재생음성 재생위치 재조정새 카드 위치 재조정위치 재조정...이 태그들 중 하나 이상 있어야 함:일정 재조정일정 재조정이 뭉치에서 선택한 평가 버튼을 카드의 복습 일정에 반영다시 진행글씨 좌우 뒤집기 (RTL)'%s' 이전 상태도 되돌리기복습복습 횟수복습 시간앞당겨 복습하기이 기간만큼 앞당겨 복습하기:이 기간 전부터 현재까지 잊어버린 카드 복습하기:잊어버린 카드 복습하기하루 중 시간대 별 정답률.복습오른쪽범위: %s찾기꾸밈 정보 안까지 찾기 (느림)이 뭉치에서전체 선택(&A)노트 선택(&N)제외할 태그 선택:선택한 파일이 UTF-8 형식이 아닙니다. 매뉴얼의 가져오기 부분을 참고해 주세요.선택적 공부쌍반점서버를 찾을 수 없습니다. 인터넷 연결이 끊어졌거나, 바이러스 백신 또는 방화벽 소프트웨어가 Anki가 인터넷에 접속할 수 없도록 막고 있습니다.%s의 모든 하위 뭉치에도 이 옵션 그룹을 지정할까요?모든 하위 뭉치에도 적용Shift 키가 눌러진 채로 실행되었습니다. 자동 동기화와 추가 기능 로딩을 건너뜁니다.기존 카드의 위치 이동단축키: %s단축키: 왼쪽 화살표단축키: 오른쪽 화살표 또는 Enter단축키: %s%s 보기답 보기중복된 항목 보기답변 시간 표시새 카드는 복습 카드보다 나중에 등장새 카드는 복습 카드보다 먼저 등장새 카드는 추가한 순서대로 등장새 카드는 무작위로 등장평가 버튼 위에 다음 복습 시점 표시남은 카드 개수를 복습 화면에 표시크기:관련된 카드 또는 덮어진 카드는 다음 세션까지 연기됩니다.일부 사항은 Anki를 다시 시작한 뒤 적용됩니다.일부 노트 유형이 수정되었기 때문에 업데이트가 되지 않았습니다.정렬 필드탐색기에서 이 필드를 기준으로 정렬이 세로열을 기준으로 정렬할 수 없습니다. 다른 열을 선택하세요.스페이스 바시작 위치:초기 수월함통계단계:익힘 단계(분 단위)익힘 단계는 반드시 숫자로 지정하세요.오늘 공부공부공부할 뭉치공부할 뭉치...공부 시작카드 상태 또는 태그별로 공부하기스타일스타일 (카드끼리 공유됨)Supermemo XML (*.xml)보류카드 보류노트 보류보류됨보류된 카드 + 덮어진 카드오디오와 이미지 동기화동기화 실패: %s동기화 실패: 인터넷이 연결되지 않음.동기화를 하려면 사용자 컴퓨터의 시각이 정확해야합니다. 시계를 수정한 뒤 다시 시도하세요.동기화 중...탭중복된 태그태그만 달기태그목표 뭉치 (Ctrl+D)목표 필드:내용탭이나 쌍반점으로 구분한 텍스트 파일 (*)그 뭉치는 이미 존재합니다.이미 사용 중인 필드 이름입니다.이미 사용 중인 이름입니다.AnkiWeb과의 연결 시간이 초과되었습니다. 네트워크 연결 상태를 점검하고 다시 시도하세요.기본 설정은 삭제할 수 없습니다.기본 뭉치는 삭제할 수 없습니다.뭉치에 들어있는 카드 분류.다운로드에 오류가 있습니다. 다시 시도해 주세요.첫째 필드가 비어있습니다.노트 유형의 첫 필드는 반드시 배정되야합니다.다음 문자는 사용할 수 없습니다: %s이 카드의 앞면이 비어 있습니다. 도구 > 빈 카드를 실행해 주세요.입력한 내용대로라면 모든 카드에서 빈 질문이 만들어집니다.추가한 카드의 수그동안 답변한 질문 개수앞으로 공부할 복습량각 버튼을 누른 횟수시스템의 임시 폴더 권한이 잘못되었으며 Anki가 직접 수정할 수 없습니다. Anki 매뉴얼의 '임시 폴더' 항목을 참고하세요.유효한 .apkg 파일이 아닙니다.제시한 검색어에 해당하는 카드가 없습니다. 검색어를 수정하겠습니까?이 변경 사항을 적용할 경우, 다음 동기화 때 데이터베이스 전체를 업로드해야합니다. 다른 기기에서 했던 복습 등의 변경 사항이 아직 이 곳에 동기화된 상태가 아니라면, 그대로 잃게됩니다. 계속하겠습니까?질문에 답을 하기까지 걸린 시간공부할 수 있는 새 카드가 더 있지만, 일일 제한량에 도달했습니다. 옵션에서 제한량을 높일 수 있지만, 새 카드를 더 많이 시작할수록 그에 따라 단기 복습량도 늘어난다는 것을 주의하세요.적어도 하나의 프로필은 반드시 있어야합니다.이 세로열을 기준으로 정렬할 수 없습니다. 그러나 왼편의 항목을 클릭해서 특정 뭉치를 검색할 수 있습니다.유효한 .apkg 파일이 아닙니다. AnkiWeb에서 다운로드한 파일이라면 다운로드에 실패했을 가능성이 있습니다. 다시 시도해 보시고, 문제가 계속되면 다른 브라우저로 다시 시도해 주세요.파일이 이미 존재합니다. 덮어쓸까요?이 폴더는 백업 생성을 쉽게 하기 위해서, 사용자의 모든 Anki 관련 데이터를 한 곳에 저장합니다. 다른 위치를 지정하려면 다음을 참고하세요: %s 이것은 정상 복습 일정에서 벗어난 공부를 할 때 사용하는 특별한 뭉치입니다.이것은 빈칸 뚫기 {{c1::견본}}입니다.기존의 모음집을 삭제하고 가져오려는 파일에 들어있는 자료로 대체할 것입니다. 계속 진행할까요?시간시간 제한복습 카드이미 존재하는 노트에 빈칸 뚫기를 만들려면, 편집>노트 유형 바꾸기를 통해서 빈칸 뚫기 유형으로 먼저 바꾸어야 합니다.이 카드들을 지금 보려면 아래의 '덮기 해제' 버튼을 눌러 주세요.정상 복습 일정을 벗어나 공부를 하고 싶다면, 아래에 있는 맞춤 공부 버튼을 클릭하세요.오늘복습을 기다리는 카드가 더 있지만, 일일 제한량에 도달했습니다. 최적의 암기 효과를 위해, 옵션에서 제한량을 높이길 권합니다.전체전체 시간전체 카드전체 노트정규식으로 취급유형답 입력: 알 수 없는 필드 %s읽기 전용 파일은 가져올 수 없습니다.덮기 해제실행 취소%s 취소알 수 없는 파일 형식.보지 않은 카드첫 필드가 일치할 경우 기존의 노트를 업데이트기존 %(b)d 노트 중 %(a)d을 업데이트함.AnkiWeb으로 업로드AnkiWeb에 업로드 중...카드에 사용되었지만, 미디어 폴더에 없는 파일:사용자 1버전 %s편집이 끝나길 기다리고 있습니다.빈칸 뚫기는 화면 위쪽에서 유형을 빈칸(Cloze)으로 선택해야만 동작합니다.카드를 추가할 때, 현재 뭉치에 넣도록 기본 설정모음집 전체지금 다운로드하시겠습니까?빈칸 유형의 노트를 지정했지만 빈칸이 뚫리지 않았습니다. 계속 진행할까요?보유한 뭉치가 많습니다. 다음을 참조해 주세요. %(a)s. %(b)s음성을 녹음하지 않았습니다.적어도 세로열 하나는 반드시 필요합니다.어린 카드어린 카드 + 익힘 카드이 변경은 모든 덱에 영향을 미칩니다. 만약 현재 덱만 바꾸시려면, 먼저 새로운 옵션 그룹을 생성하십시요.콜렉션이 일치하지 않는 상태입니다. 도구 > 데이터베이스 검사 를 실행하신후 다시 동기화 하십시요.동기화 하기엔 콜렉션 또는 미디어 파일이 너무 큽니다.성공적으로 모음집을 AnkiWeb에 업로드했습니다. 만약 다른 기기를 사용하고 있다면, 이 컴퓨터에서 업로드한 모읍집을 다운로드할 수 있도록 동기화하세요. 그 뒤에 이루어진 복습과 카드 추가는 자동으로 병합됩니다.이 기기에 저장된 내용과 AnkiWeb에 저장된 내용이 차이가 나기 때문에, 한쪽의 내용을 다른 쪽으로 덮어써야만 합니다. AnkiWeb의 내용을 이 컴퓨터에 덮어쓰려면 '웹에서 다운로드'를 선택해 주세요. (주의: 마지막 동기화 이후 이 컴퓨터에서 이루어진 변경 사항은 소실됩니다) 이 컴퓨터의 내용을 AnkiWeb에 덮어쓰려면 '웹으로 업로드'를 선택해 주세요. (주의: 마지막 동기화 이후 앙키웹이나 다른 기기에서 이루어진 변경 사항은 소실됩니다.) 모든 기기들이 동기화되고 나면, 이후의 복습 내용과 추가된 카드는 자동적으로 처리될 수 있습니다.[뭉치 없음]개카드뭉치의 카드카드, 선택 기준모음집일일뭉치뭉치 일생복제도움말숨김시간시간 뒤실패분당 0.1카드 미만%s에 배정됨태그로 배정됨분분달복습초통계현재 페이지주모음집 전체~anki-2.1.0+dfsg~b36/locale/ku/000077500000000000000000000000001323611211500157355ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ku/LC_MESSAGES/000077500000000000000000000000001323611211500175225ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ku/LC_MESSAGES/anki.mo000066400000000000000000000010171323611211500210000ustar00rootroot00000000000000,<PQS %Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-01-30 23:24+0000 Last-Translator: Rokar ✌ Language-Team: Kurdish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) %anki-2.1.0+dfsg~b36/locale/lt/000077500000000000000000000000001323611211500157355ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/lt/LC_MESSAGES/000077500000000000000000000000001323611211500175225ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/lt/LC_MESSAGES/anki.mo000066400000000000000000000107551323611211500210110ustar00rootroot00000000000000=S8 9DK MWj8|"$$!&F"m$$ <Qiq   $/ A0L}   % B M N Z a c o  I  % G Df A A J/ z & B BHGH+*0?"\# ' $,< DNT]l7   % 0*;*f+ </$5.) :*09+7 , 2!%4=6"8-#'&( 3;1 (1 of %d) (off)%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d note%d notes%d note added%d notes added%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s month%s months%s second%s seconds%s year%s years%sd%sh%sm%ss%sy&About...&Edit&Export...&File&Find&Go&Help&Import...&Invert Selection&Next Card'%(row)s' had %(num1)d fields, expected %(num2)dAddedAverage TimeBasicCenterDueFirst ReviewIntervalLeftReviewsRightShow new cards before reviewsShow new cards in order addedShow new cards in random orderSupermemo XML export (*.xml)Total TimeProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2014-07-14 15:49+0000 Last-Translator: John Smith Language-Team: Lithuanian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: lt (1 iš %d) (iš)%% Teisingai%(a)0.1f %(b)s/diena%(a)0.1fs (%(b)s)%(a)d iš %(b)d užrašų atnaujinta%(a)d iš %(b)d užrašų atnaujinti%.01f kortelių/minutę%d kortelė%d kortelės%d kortelės%d kortelė ištrinta.%d kortelės ištrintos.%d kortelių ištrinta.%d kortelė iškelta.%d kortelės iškeltos.%d kortelių iškelta.%d kortelė įkelta.%d kortelės įkeltos.%d kortelių įkelta.%d kortelė išmokta%d kortelės išmoktos%d kortelių išmokta%d rinkinys atnaujintas.%d rinkiniai atnaujinti.%d rinkinių atnaujinta.%d grupė%d grupės%d grupių%d užrašas%d užrašai%d užrašų%d užrašas pridėtas%d užrašų pridėta%d užrašai pridėta%d užrašas įkeltas.%d užrašai įkelti.%d užrašų įkelta.%d užrašas nepakeistas%d užrašai nepakeisti%d užrašų nepakeista%d užrašas atnaujintas%d užrašai atnaujinti%d užrašų atnaujinta%d peržiūra%d peržiūros%d peržiūrųPasirinkta %dPasirinktos %dPasirinkta %d%s kopijavimas%s diena%s dienos%s dienų%s valanda%s valandos%s valandų%s minutė%s minutės%s minučių%s mėnuo%s mėnesiaimėnesių%s sekundė%s sekundės%s sekundžių%s metai%s metai%s metų%sd%sh%sm%ss%sy&Apie...&Keisti&Eksportuoti...&Failas&Ieškoti&Eiti&Pagalba&Importuoti...Žymėt&i atvirkščiai&Kita kortelė'%(row)s' yra %(num1)d laukai, tikėtasi rasti %(num2)dPridėtaLaiko vidurkisPagrindinisCentreLaukiaPirmąkart pamatytaIntervalasKairėjeKartojimaiDešinėjeParodyti naujas korteles prieš kartojimąParodyti naujas korteles pridėjimo tvarkaParodyti naujas korteles atsitiktine tvarkaSupermemo XML eksportas (*.xml)Laikas iš visoanki-2.1.0+dfsg~b36/locale/lv/000077500000000000000000000000001323611211500157375ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/lv/LC_MESSAGES/000077500000000000000000000000001323611211500175245ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/lv/LC_MESSAGES/anki.mo000066400000000000000000000033571323611211500210130ustar00rootroot00000000000000%`ac{   +:A GTf{b d r|"" ! ,7>F N[n     %%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s month%s months%s second%s seconds%s year%s years&About...&Cram...&Edit&File&Find&Go&Help&Next Card&Previous Card&Tools&UndoFind:Line Size:Replace With:AddedBasicCenterProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2014-04-08 07:45+0000 Last-Translator: Damien Elmes Language-Team: Latvian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: lv %%d izvēlēti%s kopēt%s diena%s dienas%s stunda%s stundas%s minūte%s minūtes%s minūšu%s mēnesis%s mēneši%s sekunde%s sekundes%s sekunžu%s gads%s gadi&Par programmu&Iekalt...&Rediģēt&Fails&Atrast&Doties&Palīdzība&Nākamā Kartīte&Iepriekšējā Kartīte&Rīki&AtsauktAtrast:Rindiņas izmērs:Aizstāt Ar:PievienotsPamataCentrētanki-2.1.0+dfsg~b36/locale/mn/000077500000000000000000000000001323611211500157305ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/mn/LC_MESSAGES/000077500000000000000000000000001323611211500175155ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/mn/LC_MESSAGES/anki.mo000066400000000000000000000233621323611211500210020ustar00rootroot00000000000000l       ! 6 G K O S W [ e n t z        0 ( 6 L Y k x   X %-3 9DRI p w &( '.5< CPW ^jqw|    ' ,8=FB    %18=EM R \ hv   6%\y 8 ! " ,27KafQh x      / 9EKg'w  0 <:#w!9 PxZ   -GP . ;8F-?4=;ly ' .; BM g t--#5%8#^"  $ 3 +  #!))!:S!!!4!!! ""0"L"^" p"}"""" "2"#9#H# ]#j##H#@#J-$rx$)$%(%=%gL%%V%&.&0B& s& ~&%&/&&!MS R-b);&BC$rZWL6i\X}]Tmz?IQ(,8"3pjnGHk54:{f's%@DP_1^A2<ov+YENUOt *l>9a7 qVy `0 e d|c/hJFwg=#~[.uxK%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s month%s months%s second%s seconds%s year%s years%sd%sh%sm%ss%sy&About...&Cram...&Edit&File&Find&Go&Guide...&Help&Invert Selection&Next Card&Previous Card&Reschedule...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)dOpen backup folderExport format:Find:Font Size:Font:In:Line Size:Replace With:A big thanks to all the people who have provided suggestions, bug reports and donations.About AnkiAddAdd TagsAdd: %sAddedAgainAll FieldsAnkiAnki is a friendly, intelligent spaced learning system. It's free and open source.Average TimeBasicBuryBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCard ListCenterChangeChange %s to:Check the files in the media directoryCloseClose and lose current input?Configure interface language and optionsConnecting...CreatedCtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+ZDeleteDelete TagsDialogE&xitEaseEasyEditEnter tags to add:Enter tags to delete:ExportExport...F1Field %d of file is:Field mappingFieldsFind and Re&place...Find and ReplaceFirst ReviewGoodHTML EditorHardHelpIf you have contributed and are not on this list, please get in touch.Ignore this updateImportImport failed. Import optionsInclude scheduling informationInclude tagsInvalid regular expression.KeepLapsesLeftMap to %sMap to TagsMatureMoreNetworkNothingOpenPassword:PreferencesProcessing...Recording...
Time: %0.1fRescheduleReviewReviewsRightSelect &AllShow AnswerShow new cards before reviewsShow new cards in order addedShow new cards in random orderSome settings will take effect after you restart Anki.Supermemo XML export (*.xml)SuspendSuspendedTagsThis file exists. Are you sure you want to overwrite it?Total TimeTreat input as regular expressionUndo %sVersion %sWould you like to download it now?Youngdaysmapped to %smapped to TagsminsProject-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:02+0000 Last-Translator: Damien Elmes Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: mn X-Poedit-Bookmarks: -1,132,-1,-1,-1,-1,-1,-1,-1,-1 %d-г сонгосон%s хуулах%s өдөр%s цаг%s минут%s сар%s секунд%s жил%sөдөр%sцаг%sсар%sсек%sжил&Тухай...&Оройтож бэлтгэх&Засварла&Файл&Хайлт&Оч&Гарын авлага...&Тусламж&Сонголтыг чанх эсрэг&Дараагийн карт&Өмнөх карт&Дахин төлөвлөх...&Багаж&Буцаа'%(row)s' had %(num1)d fields, expected %(num2)dНөөшийн хавтсыг нээхЭкспорт формат:Хайлт:Фонт Хэмжээ:Фонт:Байрлал:Мөрийн Хэмжээ:Дараатай нь нөхөөсөнд явах:Санал өгөх, алдаа мэдэгдэх, хандив өгсөн хүмүүст маш их баярлалаа.Анкигын тухайНэмШошгыг нэмНэм: %sНэмсэнДахиадБүх талбаруудАнкиАнки гэдэг ухаалаг, хэрэглэгчид ойлгомжтой давталтын систем. Үүнийг үнэгүй болон нээлттэй эхийн программ.Цагийн дундажҮндсэнБулахАнки стандарт процессоор талбарын хооронд тэмдгийг илрүүлнэ, жишээ нь, таслал, цэгтэй таслал, гэх мэт. Анки тэмдгийг буруу илрүүлбэл энд оруулна уу. Таб бол \t хэрэглэнэ уу.ХүчингүйКартын ЖагсаалтТөвдӨөрчлөх%s-с дараагийн нь өөрчлөх:Медиа каталогийн файлуудыг шалгахХааХааж одоогийн оруулалтыг хаях уу?програмын харагдах байдлын хэл бас тохиргоонуудыг өөрчлөхХолбож байна...ҮүсгэсэнCtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+ZУстгаШошгыг устгахДиалог&ГарахАмрын түвшинАмарханЗасварлаНэмэхийн шошгыг оруулах:Устгахын шошгыг оруулах:ЭкспортЭкспорт...F1Файлын талбар %d :Талбарын тааруулахТалбаруудХайж &орлуулах...Хайж орлуулахЭхлэхийн давталтСайнHTML хэлний редакторХэцүүТусламжТа Анкит өргөсөн харин нэрээ дэмжигчийн жагсаалтад байхгүй надад мэдэгдэнэ уу.Энэ шинэчлэлийг үл тоохИмпорт хийИмпорт дампуурсан. Импортын тохиргоонуудТөлөвлөлтийн мэдээллийг хамрахШошгуудыг оруулахХүчингүй байнгын илэрхийлэлХадгалахЦаг алдалтЗүүн%s-тай тааруулахШошготой холбоХуучин ньЦааш үзэхСүлжээЮу ч байхгүйНээхНууц үг:ТохируулалтуудГүйцэтгэж байна...Дуу хурааж байна...
Цаг: %0.1fДахин төлөвлөхДавталтДавталтуудБаруун&Бүгдийг сонгоХариулт үзүүлэхШинэ картыг бүх хуучин картын өмнө үзэхШинэ картыг нэмсэн дарааллаар үзэхШинэ картыг санамсаргүй дарааллаар үзэхЗарим тохируулгууд Анкиг дахин асаахийн дараа үр дүн нь гарна.Supermemo XML-руу экпорт (*.xml)ТүдгэлзэхТүдгэлзсэнШошгуудЭнэ файл аль хэзээний байна. Та үүнийг дарж бичих мөн уу?Нийт цагБичсэн хэрэг байнгын илэрхийлэлтээр хэрэглэнэ%s-г тайлах%s хувилбарТа одоо татах гэсийн юм уу?Залууөдрүүд%s-тай тааруулсанШошгууд-той тааруулахминутуудanki-2.1.0+dfsg~b36/locale/mr/000077500000000000000000000000001323611211500157345ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/mr/LC_MESSAGES/000077500000000000000000000000001323611211500175215ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/mr/LC_MESSAGES/anki.mo000066400000000000000000000511451323611211500210060ustar00rootroot00000000000000Q " , .8"I$l$&.CVk|     )8?0E v,(5 KX j w7 X grv  K".Q VdRv7 w E##(Lk(     -5;Ut{B ISZ ao&w ( %,3: A N[bfkq x      5 C J Q Y m }            F D!W! ^!j!z!*!! !!!""" " "+"3"8" @"!J"l"t"y" " "" " """ ""# # # #)#G#e#6#####8##$ )$!4$V$^$,e$ $"$$$$$$$$%% %#% +%5%7%9%& ''@%'f'h'%w'g'm([s(()+)))*%.*%T*%z*******'*+'+#?+c+u+ ++ +.+$+:,)R,!|,:,,$,o-- --5--- --..A.E].9.0./$#/H/`/*o/'/4//'0:001 1H1252S2d2t2222W3>34!'4)I4s4b5&6A=67I8Y8s8?8`8]'9G9,9x9s::2:%:J:.G;v;1;;; ;);><X<u< <-<>+>??'&?N?N^????G?!8@!Z@z|@&@A%.ATA[AbAiA pA }AA AA.AA&A$B4BDB _BlBBBOB_C/bC/CC"C DD>D"TDwDDD0D(D7E/:E.jEEE!EE+E F*F CFMF `F jFtFBGVG,mG1G)GGWH,HE I fIsII IIII IIJ0JJ KK#!KEKaKqK/KKOK5L5SLL L!LLTLaCMHMMONN NOzO OOWO P)PFPPjP \Q iQ sQ Q4Q#Q)Q R R 3R@RPRaRcR|s="x}<g OD2t0~e6P\X^z/UH1 bZ,Qw-*Nu7RGV&F:{a)?Y#9l@`]Emc$n!+3h p4WBMT;k8KJC.(%v_dqi'I  j >5fL[ySAro (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d note%d notes%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s month%s months%s second%s seconds%s year%s years%sd%sh%sm%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(new)(please select 1 card).../0d1 month1 year:%d card%d cardsOpen backup folderVisit websiteExport format:Find:Font Size:Font:In:Include:Line Size:Replace With:

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.About AnkiAddAdd (shortcut: ctrl+enter)Add TagsAdd to:Add: %sAddedAdded TodayAgainAll FieldsAll cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki is a friendly, intelligent spaced learning system. It's free and open source.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAppeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBuildBuryBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCard ListCenterChangeChange %s to:ChangedCheck the files in the media directoryChecking...ChooseCloseClose and lose current input?ColonCommaConfigure interface language and optionsConnecting...CopyCreatedCtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+ZCutDateDecksDeleteDelete TagsDescriptionDialogE&xitEasyEditEmptyEndEnter tags to add:Enter tags to delete:Error executing %s.Error running %sExportExport...ExtraF1Field %d of file is:Field mappingFieldsFilterFilter:Find &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFirst ReviewFooterForecastGeneralGoodHTML EditorHardHeaderHelpHistoryHomeHoursIf you have contributed and are not on this list, please get in touch.Ignore this updateImportImport FileImport failed. Import optionsIn media folder but not used by any cards:Include scheduling informationInclude tagsInvalid regular expression.KeepLaTeXLearningLeftMap to %sMap to TagsMinutesMoreNetworkNew CardsNo unused or missing files found.NothingOpenOptionsPassword:PercentagePositionPreferencesProcessing...RandomRecording...
Time: %0.1fRescheduleReverse text direction (RTL)ReviewRightSelect &AllShow AnswerShow new cards before reviewsShow new cards in order addedShow new cards in random orderSome settings will take effect after you restart Anki.Supermemo XML export (*.xml)SuspendTagsTextThis file exists. Are you sure you want to overwrite it?TotalTotal TimeTreat input as regular expressionUndo %sUnseenUsed on cards but missing from media folder:Version %sWould you like to download it now?dayshelphidehourshours past midnightmapped to %smapped to Tagsminsminutesmosecondsthis pagew~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:02+0000 Last-Translator: sabretou Language-Team: Marathi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: mr (%d मधून १) (बंद) (चालू) %d पत्ता आहे. %d पत्ते आहेत.%% अचूक%d पत्ता%d पत्ते%d पत्ता काढून टाकला.%d पत्ते काढून टाकले.%d पत्ता निर्यात केला.%d पत्ते निर्यात केले.%d पत्ता आयात केला.%d पत्ते आयात केले.%d पत्त्यांचा एवढ्या वेळात अभ्यास केला:%d पत्त्यांचा एवढ्या वेळात अभ्यास केला:%d टीप%d टिपा%d निवडला%d निवडले%s प्रत%s दिवस%s दिवस%s तास%s तास%s मिनीट%s मिनीट%s महिना%s महिने%s सेकंद%s सेकंद%s वर्ष%s वर्ष%sदि%sता%sम%sसे%sवआन्की विषयी (&A)...कोंबा (&C)...संपादन (&E)एक्सपोर्ट (&E)...फाइल (&F)शोधा (&F)जा (&G)मदत (&H)इम्पोर्ट (&I)...निवडणूक उलट करा (&I)पुढचा पत्ता (&N)&अॅड-ऑन्स फोल्डर उघडा...प्राधान्यता (&P)...आधला पत्ता (&P)पुन्ह अनुसूचित करा (&R)...साधने (&T)पूर्ववत करा (&U)'%(row)s' मध्ये %(num1)d रकाने होते, %(num2)d अपेक्षीत होते(%s अचूक)(अंत)(नवीन)(कृपया १ पत्ता निवडा).../०दि1 महिना१ वर्ष:%d पत्ता%d पत्तेबॅकअप संचिका उघडासंकेतस्थळ पाहानिर्यात स्वरूप:शोधा:फॉन्ट अकार:फॉन्ट:आत:समाविष्ट करा:ओळींचा आकार:याने अदलाबदल करा:

आन्की अद्ययावत केले

आन्की %s प्रकाशीत झालं आहे.

<दुर्लक्ष केले><युनिकोड नसलेलं पाठ्य>ज्यांनी सूचना, बग अहवाल व देणग्या पुरवल्या त्या सर्वांचे हार्दिक धन्यवाद.आन्की विषयीजोडाजोडा (शोर्टकट: कंट्रोल+एंटर)टॅग जोडाह्यात जोडा:जोडा: %sजोडलेआज जोडलेपुन्हासर्व रकानेया प्रोफाईलचे सर्व पत्ते, नोट व मीडिया डिलीट केले जातील. आपली खात्री आहे का?फील्डांमध्ये एचटीएमएल अनुमत करा%s उघडण्यात त्रुटी आढळलीआन्कीआन्की २.० डेकआन्की डेक पॅकेजआन्की एक स्नेहभावाचे व हुशार अंतरदेउन शिकण्याची प्रणाली आहे. हे मोफत व मुक्त स्रोतोचे आहे.आन्कीवेब आयडी किंव्हा पासवर्ड चुकीचा होता; पुन्हा प्रयत्न करून बघा.आन्कीवेब आयडी:आन्कीवेबमध्ये त्रुटी आढळली. काही मिनिटांनंतर पुन्हा प्रयत्न करून बघा. जर समस्या टिकून राहिली, तर कृपया बग रिपोर्ट नोंदवा.आन्कीवेब यावेळी खूपच व्यस्त आहे. कृपया काही मिनिटांनंतर पुन्हा प्रयत्न करा.उत्तरउत्तर बटणउत्तरंफाईलमध्ये दोनदा आढळलं: %sतुम्हाला नक्की %s डिलीट करायचं आहे का?कमीतकमी एक कार्ड प्रकार आवश्यक आहे.कमीतकमी एक पाऊल आवश्यक आहे.आपोआप ऑडिओ वाजवाप्रोफाईल उघड/बंद केल्यावर आपोआप समक्रमीत करासरासरीसरासरी वेळमध्यामान उत्तर वेळमध्यमान सहजताशिकलेल्या दिवसांचे मध्यमानमध्यमान मध्यांतरमागीलमागील पुर्वावलोकनमागील साचाबॅकअपमूळमूळ (व उलट पत्ता)मूळ (वैकल्पिक उलट पत्ता)तपासणी कराबिल्डगाडामुलभूत मघ्ये, आन्की रकाना ते रकाना मधील टॅब, स्वल्पविराम वगैरे सारख्या अक्षराचा तपास लावेल. जर आन्की त्या अक्षराला चुकीच्या पद्धतीने तपास लावत असेल तर ते आपण इथे प्रविष्ट करु शकतात. टॅब दर्शित करण्यासाठी \t वापरा.रद्द करापत्त्यांची यादीकेंद्रबदलवा%s ला बदलवून करा:बदललेमिडीया संचयीकेतील फाइल तपासातपासत आहे.....निवडाबंद कराबंद करून वर्तमान आदान गमवा?अपूर्णविरामस्वल्पविरामअंतराफलकाच्या भाषेची व पर्यायांची संरचना कराजोडणी करत आहे...नक्कलनिर्माण कलेलेCtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Zकापादिनांकपत्त्यांचे गठ्ठेकाढून टाकाटॅग काढून टाकावर्णनसंवादनिर्गमन (&x)सोपेसंपादित करारिकामेसमाप्तजोडण्यासाठी टॅग प्रविष्ट करा:काढून टाकण्यासाठी टॅग प्रविष्ट करा:%s चालवताना त्रुटी.%s चालू करण्यात दोषनिर्यात करानिर्यात करा...अगाऊF1फाइल मधील %d रकाना आहे:रकाना मांडणेरकानेगाळणीचाळणी:प्रतिलिपि शोधा (&D)...प्रतिलिपि शोधाशोधून अदलाबदल करा (&p)...शोधून अदलाबदल करापहिले पुनरावलोकनतळटीपहवामानसर्वसामान्यचांगलेएचटीएमएल संपादककठीणशिर्षटीपमदतइतिहासगृहतासजर तुम्ही योगदान केल्याशिवाय या यादीत नसाल, तर आम्हाला कळवा.हा अद्ययावत दुर्लक्ष कराआयात कराफाइल प्राप्त कराआयात अपयशी राहिले. पर्याय आयात कराहे कोणत्याही पत्त्याने न वापरल्याशीवाय मिडीया संचयीकेत आहेत:अनुसूचानाची माहिती समाविष्ट कराटॅग समाविष्ट कराअवैध रेग्यूलर एक्सप्रेशन.ठेवालॅटेकशिक्षणडावी%s ला मांडाटॅगना मांडामिनिटेअधिकनेटवर्कनवीन पत्तेकोणत्याही विनावापरलेल्या किंव्हा गायब असलेल्या फाइल सापडल्या नाही.काही नाहीउघडापर्यायपरवलीचा शब्द:टक्केवारीस्थानपसंतीविश्लेषण करत आहे...यादृच्छिकध्वनिमुद्रित करत आहे...
वेळ: %0.1fपुन्हा अनुसूचित कराविपरीत पाठ्य दिशा (RTL)समीक्षाउजवीसर्व निवडा (&A)उत्तर दाखवानवीन पत्ते पुनरावलोकनाधी दाखवानवीन पत्ते जोडण्याच्या क्रमात दाखवानवीन पत्ते विनाक्रमी दाखवाकाही संयोजना फक्त आन्की पुन्हा सुरु केल्यानंतर लागू होतील.सुपरमेमो एक्सएमएल निर्यात (*.xml)निलंबित कराटॅगपाठ्यही फाइल अस्तित्वात आहे. खोडून पुन्हलेखन करावे?एकूणअकूण वेळआदानला रेग्यूलर एक्सप्रेशन माना%s मागे घ्यान पाहिलेलेपत्त्यांवर वापरलेले पण मिडीया संचयीकेतून गायब असलेले:%s आवृत्तीतुम्हाला हे अत्ता डाउनलोड करायचे आहे का?दिवसमदतलपवातासमध्यरात्रीनंतर तास%s ला मांडलेटॅगना मांडलेमिनिटंमिनिटेमकाओसेंकदहे पानw~anki-2.1.0+dfsg~b36/locale/ms/000077500000000000000000000000001323611211500157355ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ms/LC_MESSAGES/000077500000000000000000000000001323611211500175225ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ms/LC_MESSAGES/anki.mo000066400000000000000000000141571323611211500210110ustar00rootroot00000000000000Y " 8Na"r$$&" ) 4< 2q   " $ $ $? d          - 7 @ F Q W ] a g y                      , ( + fJ     5XH  AT dr#!/)2IJ5!!%#D+h*  (:J \hq z     *4;K^b %)-2+4+` n 3@ R _m~c #0BQi ,:X6YJU4I+ Q@.'&S!;5=*%" FHKAE0V /1D$?29#PO-T7 NB3R>(GW8)<LMC (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:&About...&Cram...&Edit&Export...&File&Find&Go&Help&Invert Selection&Next Card&Preferences...&Previous Card&Reschedule...&Tools&Undo(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM:%d card%d cardsOpen backup folderVisit websiteBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:A big thanks to all the people who have provided suggestions, bug reports and donations.Add FieldAdded TodayAnki Deck Packagemapped to %sminsProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2015-11-06 02:52+0000 Last-Translator: najibah Language-Team: Malay MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: ms Satu daripada %d (tutup) (buka) Ia ada %d kad. Ia ada %d kad.%% Betul%(a)0.1f %(b)s/hari%(a)0.1fs (%(b)s)%(a)d of %(b)d nota dikemas kini%(a)d of %(b)d nota dikemas kini%.01f kad/minit%d kad%d kad%d kad dipadam.%d kad dipadam.%d kad dieksport.%d kad dieksport.%d kad diimport.%d kad diimport.%d kad dipelajari dalam%d kad dipelajari dalam%d dek dikemas kini.%d dek dikemas kini.%d kumpulan%d kumpulan%d perubahan media untuk dimuat naik%d perubahan media untuk dimuat naik%d fail media dimuat turun%d fail media dimuat turun%d nota%d nota%d nota ditambah%d nota ditambah%d nota dipadam.%d nota dipadam.%d nota dieksport.%d nota dieksport.%d nota diimport.%d nota diimport.%d nota tidak diubah.%d nota tidak diubah.%d nota dikemas kini%d nota di kemas kini%d semakan%d semakan%d dipilih%d dipilihsalinan %s%s jam%s jam%s minit%s minit%s minit%s minit%s bulan%s bulan%s saat%s saat%s untuk dipadam:&Perihal...&Asak...&Sunting&Eksport...&Fail&Cari&Pergi&Bantuan&Songsangkan Pilihan&Kad Seterusnya&Keutamaan...&Kad Sebelumnya&Jadual Semula...&Peralatan&Buat Semula%s tepat(tamat)(ditapis)(belajar)(baru)(had utama: %d)(sila pilih 1 kad)...fail .anki2 tidak didesain untuk pengimportan. Sekiranya anda cuba untuk menyetor semula daripada satu sandar, mohon rujuk bahagian 'Sandar' dalam manual pengguna./0d1 bulan1 year10PG10MLM3PG4PG4PTG:%d kad.%d kad.Buka pelipat simpananLawat laman webSandar
Anki akan menyediakan satu sandar bagi koleksi anda setiap kali ia ditutup atau diselaraskan.Format eksport:Cari:Saiz font:Font:Dalam:Sertakan:Saiz garisan:Gantikan dengan:Sebesar-besar terima kasih bagi semua yang terlibat memberi cadangan, melapor pepijat dan menderma.Tambah MedanDitambah Hari IniPakej Dek Ankidipeta kepada %sminitanki-2.1.0+dfsg~b36/locale/nb/000077500000000000000000000000001323611211500157155ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/nb/LC_MESSAGES/000077500000000000000000000000001323611211500175025ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/nb/LC_MESSAGES/anki.mo000066400000000000000000000636231323611211500207730ustar00rootroot00000000000000 l! !!!"!" "(";"Z"8l""""""$"$"#&G#"n##2###"$$($$M$$r$ $$$$$$ %"%9%L% a%o%%%%%%% %%% %%%%% %% %% & &$&4&C&R&c&j&0p& && & &&&&&&'''''''''T' (, ((9(b(!((f(") 8)E) W) d)o))))e)#*7* ++5"+XX+Y+k , w, ,,, , ,, , ,,,- - -- "-.- >- H-KS--"-- ---R.v.7J/ /w/E0@L0000R001#1#112(2E2 M2Z2 n2{2 2 222222 2 2)23333333 3 3 34 4'4743=4q4S4444 4 4 5555"I5l5t5&5 55 55 5 55566-!6O6U6([6 66656767 %717I7 Q7\7c7j7q7x77 7 7 7 777 77 777 7 888$898A8 H8 U8 a8 n8 z8 8 88,8(8 9+9F@9N9P9>':Pf::]: ;*;1;G;c;i;n;s; x; ;; ;;;;;;;;< <%<+<-<0< L< Z<f<m< t<< <<<<<<<<== = )=N6===== ===F=>>">2>A> `>m>>>> > >>>>>>> > > >?!? (? 4???F?N?T?[? b? n?z???6? @@ @)@/@L@ T@^@ c@n@r@w@8|@@@@ @!@@@@AA/A 6A"AA0dAA AAAA AAAA AAAAA B B6B;BCBFBNB TB^B`BqBsB VDaDgD#nDDDDDD?D E1ECE!SE'uE%E'E1EF/2FbF'vF%F)F)F,G)EGoGGGGGGGG H"H 7HEHLHTH[HaHhHoH vHH HHHHH HH HH HH I I,I;I KIUI1\I II IIII IIIsJuJxJJJJJJJbJK+ K76K nK!KK`K*L @LML dL qL{LLLL_L.M;M NN9/NTiNjN)O OOOO OOP#P6PGP ZP dPqPzPP PPP PQPQ'4Q\QaQtQQ` RdmR2R SrSAS1SS S TTTcT T%U8UUUsU+UUUUUV V V)V :V HVRVmV sV~V%VVrWyW~WWWW WW WW W WW6W"XM3XXXX XXXXX$XYY%-Y SY^YcYrYY YY(YYY.YZ Z*Z ;ZIZRZ5YZ8ZZZZ [ ["[)[0[7[>[E[ L[ Y[ f[ s[[[[[ [[[ [[ [ \ \"\+\ 1\<\L\ R\ ^\l\ ~\\'\)\\]I(]Er]U]9^LH^^]^ ^__$_<_E_U_Z_b_ t____ __(_,_` ` 8` B`O`V`X`[` t` ``` `` ``````aa(a8a AaNaUaaaa aaa aaJbPb nbxbbbbbbbb cc(c.c2c;c Tc^cdc mc {cc cc cc cccc cdd//d$_dFd dd dd"d e e&e+e=e AeKeEQeeee e%eeeeeff $f/f7Ifffffffff ffffff g"'gJgSg\g`g ig tgggg\'msvA%S`gl_}E#B?KoowMV^L(c)NO*T6, - ysi&W?=kERF}(QJCV+zx'.F$R@e4]Yxe1`t20Z!Lij 3XQ ~f_G:{< 1T$0<Ur&>K/D ,UClm%9"8~[;7h@*MpwI6{kz!\r ^B[DS.qv/W79bcaYt"-GuP|d4XANZO5 ;P:y5# |Ib8)fjn>]3Haqh2g J up+= dHn (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeBackBack PreviewBack TemplateBackupsBasicBrowseBrowser OptionsBuryBury CardBury NoteBury related new cards until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsConnecting...ContinueCopyCorrect: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCtrl+ZCurrent DeckCurrent note type:Custom StudyCutDateDays studiedDebug ConsoleDeckDecksDecreasing intervalsDefaultDeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDialogDownload from AnkiWebDownloading from AnkiWeb...E&xitEaseEasyEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...EndEnter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed note type: %sFont:FooterGoodHTML EditorHardHelpIf you have contributed and are not on this list, please get in touch.Ignore this updateImportImport failed. Import optionsInclude scheduling informationInclude tagsInvalid regular expression.KeepLapsesLeftMap to %sMap to TagsMatureMoreNetworkNo empty cards.NothingOpenPassword:PreferencesProcessing...Recording...
Time: %0.1fRenameRename DeckRescheduleReviewReviewsRightSaved.SearchSelect &AllShow AnswerShow new cards before reviewsShow new cards in order addedShow new cards in random orderSome settings will take effect after you restart Anki.StatisticsStep:Stopping...StudySupermemo XML export (*.xml)SuspendSuspendedSyncSyncing...TabTagsTextThis file exists. Are you sure you want to overwrite it?TimeTodayTotalTotal TimeTreat input as regular expressionTypeUndoUndo %sUpload to AnkiWebUploading to AnkiWeb...User 1Version %sWould you like to download it now?You have a lot of decks. Please see %(a)s. %(b)sYoung[no deck]backupscardscards from the deckcollectionddaysdeckduplicatehelphidehourshours past midnightmapped to %smapped to Tagsminsminutesmosecondsstatsthis pagewwhole collection~Project-Id-Version: ankiqt 0.9.9.7.9 Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-11-23 01:00+0000 Last-Translator: Guillem Palau Salvà Language-Team: Norwegian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: no (1 av %d) (av) (på) Den har %d kort. Den har %d kort.%% Riktig%(a)0.1f %(b)s/dag%(a)0.1fkB opp, %(b)0.1fkB ned%(a)0.1fs(%(b)s)%(a)d av %(b)d notat oppdatert%(a)d av %(b)d notater oppdatert%(tot)s %(unit)s%.01f kort/minutt%d kort%d kort%d kort slettet.%d kort slettet.%d kort eksportert.%d kort eksportert.%d kort importert.%d kort importert.%d kort studert på%d kort studert på%d kortstokk oppdatert.%d kortstokker oppdatert.%d gruppe%d grupper%d mediafil lastet ned%d mediafiler lastet ned%d notat%d notater%d notat lagt inn.%d notater lagt inn.%d notat slettet.%d notater slettet.%d notat eksportert%d notater eksportert%d notat importert.%d notater importert.%d notat ikke uendret%d notater ikke endret%d notat oppdatert.%d notater oppdatert.%d repetering%d repeteringer%d valgt%d valgt%s-kopi%s dag%s dager%s time%s timer%s minutt%s minutter%s minutt.%s minutter.%s måned%s måneder%s sekund%s sekunder%s som skal slettes:%s år%s år%s dag%s tim.%s min%smd.%s sek%s år&Om...&Råpugge...&Rediger&Eksporter…&Fil&Søk&Start&Guide&Manual...&Hjelp&Importer...&Invertere markering&Neste kort&Åpne Add-ons mappen...&Innstillinger...&Forrige kort&Endre plan...&Støtt Anki...&VerktøyA&ngre'%(row)s' hadde %(num1)d felt, forventet %(num2)d(%s korrekt)(slutt)(filtrert)(lært)(ny)(parent grense:%d)(velg 1 kort)....anki2 filer er ikke laget for å bli importert. Viss du forsøker å gjennopprette ifra sikkerhetskopi, se seksjonen om 'Backup' i brukermanualen/0d1 måned1 år10:0022:0003:0004:0016:00504 gateway timeout error received. Prøv å slå av antivirusprogrammet ditt mens du bruker Anki.:%d kort%d kortÅpne folder for sikkerhetskopierBesøk websiden%(pct)d%% (%(x)s av %(y)s)%Y-%m-%d @ %H:%MBackups
Anki vil lage en backup av dine ting hver gang den lukkes eller synkroniseres.Eksportformat:Finn:Fontstørrelse:Font:I:Inkluder:Linjestørrelse:Erstatt med:SynkroniseringSynkronisering
Ikke aktivert; trykk på synk-knappen i hovedvinduet for å aktivere.

Konto nødvendig

En gratis konto er nødvendig for å synkronisere dine ting. Registrer deg for en konto, og skriv inn dine data under.

Anki Oppdatering

Anki %s har blitt gitt ut.

En stor takk til alle som har bidratt med forslag, feilrapporteringer og donasjoner.Et korts vanskelighetsgrad er hvor lenge til neste visning når svaret ditt er "lett" under øving.Det oppstod en feil under synkroniseringen av media. Bruk Verktøy->Skjekk Media, deretter synkroniser på nytt for å løse feilen.Avbrutt: %sOm AnkiLegg tilLegg til (shortcut: ctrl+enter)Legg til feltLegg til mediaLegg til ny stokk (Ctrl+N)Legg til notattypeLegg til BaksideLegg til etiketterLegg til:Legg til: %sLagt tilLagt til i dagIgjenGjenta idagGjentatt antall: %sAlle kortstokkeneAlle feltAlle kortene, notatene og media for denne profilen vil bli slettet. Er du sikker?Tillat Html i teksten.Det oppstod en feil under åpning av %sAnkiAnki 2.0 kortstokkAnki kortstokkpakkeAnki kunne ikke finne linja mellom spørsmål og svar. Prøv å forandre malen manuelt og bytte plasseringen av spørsmål og svar.Anki er et vennlig og intelligent intervallbasert læresystem. Det er gratis og med åpen kilde.Anki er lisensiert med AGPL3 lisens. Les lisensfilen i kildefildistribusjonen hvis du er nysgjerrig.AnkiWeb ID eller passord var ugyldig; prøv igjen.AnkiWeb ID:AnkiWeb opplevde en feil. Prøv igjen om noen minutter, og hvis det fortsatt er en feil, sender du en feilrapport.AnkiWeb er for øyeblikket opptatt. Prøv igjen om noen minutter.AnkiWeb oppdateres. Prøv igjen om noen minutter.SvarSvarknapperSvarDitt antivirusprogram eller brannmuren hindrer Anki i å koble seg opp mot internettKort som ikke har koblinger, vil bli slettet. Hvis et notat ikke har kobling til noe kort, fjernes det. Er du sikker på at du vil fortsette?Ble funnet to steder i filen: %sEr du sikker på at du vil slette %s?Du må ha minst en korttype.Minst ett steg er nødvendig.Lyd avspilles utomatiskAutomatisk synk når profilen åpnes/lukkesMiddelsGjennomsnittstidGjennomsnitlig svartidMiddels vanskelighetsgradBaksideForhåndsvis baksideBaksidemalSikkerhetskopierGrunnleggendeBibliotekAlternativer for nettleserSkjulSkjul kortGrunn til skjulingSkjul relaterte nye kort til i morgenI utgangspunktet vil Anki oppdage tegnet mellom feltene, slik som tabulator, komma osv. If Anki ikke oppdager tegnet på riktig måte, kan du angi det her. Bruk /t for å angi tabulator.AvbrytKortKort %dKort %dKort 2Kort IDKortlisteKorttypeKorttyperKorttyper for %sKort skjult.Fjernede kortKortKortene kan ikke flyttes til en sortert stokk manuelt.Kort i Ren TekstKortene vil bli flyttet tilbake til sine stokker etter at du har studert dem.Kort...SentrerEndreEndre %s til:Endre kortstokkEndre NotattypeEndre Notattype (Ctrl+N)Endre Notattype...Endre kortstokk avhengig av korttypeEndretSjekk &Media...Kontrollere filene i mediebiblioteketSjekker...VelgVelg kortstokkVelg NotattypeVelg EtiketterKopier: %sLukkLukk vinduet og mist ulagret inntasting?ClozeKode:Samling er korrupt. Venneligst sjekk manualen.KolonKommaTilpass Ankis språk og endre alternativerKobler til...FortsettKopierKorrekt: %(pct)0.2f%%
(%(good)d av %(tot)d)Kunne ikke ta opp lyd. Har du installert lame eller sox?Kunne ikke lagre fil: %sOpprett kortstokkLag Filtrert Kortstokk...OpprettetCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Skift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCtrl+ZNåværende kortstokkNåverende notattype:Egen Studie:Klipp upDatoDager studertFeilmeldingskonsollKortstokkKortstokkerSynkende intervallerStandardSlettSlett KortSlett kortstokkSlettSlett NotatSlett NotaterTa bort etiketterSlett UbrukteSlette felt fra %s?Slette korttypen '%(a)s' og dens %(b)s?Slette denne korttypen og alle dens kort?Slette denne ubrukte korttypen?Slette ubrukte media?Slettet %d kort med manglende notat.Slettet %d kort med manglende notat.Slettet %d kort med manglende mal.Slettet %d kort med manglende mal.Slettet %d notat med manglende notattype.Slettet %d notater med manglende notattype.Slettet %d notat uten kort.Slettet %d notater uten kort.Slettet %d notat med feil antall felt.Slettet %d kort med feil antall felt.Slettet.Dersom denne kortstokken slettes, vil alle gjenværende kort returnere til sin originalstokk.BeskrivelseDialogLast ned fra AnkiWebLaster ned fra AnkiWeb.&AvsluttInnlæringsgradLettRedigerEndre NåværendeEndre HTMLEndretEndre skrifttypeTomTomme kort...SluttSkriv inn etiketter som skal legges til:Skriv inn hvilke etiketter som skal tas bortFeil under nedlastning: %sFeil under oppstart: %sEksporterEksporter...EkstraFF1Felt %d i fil er:FeltkoblingFeltnavn:Felt:FeltFelter for %sFelter separert med: %sFelter...FilterFilter:FiltrertFiltrert Kortstokk %dFind &Duplikater...Find DuplikaterSøk og &erstattSøk og erstattFullførFørste KortFørste repetisjonReparerte %d kort med ugyldige egenskaper.Reparerte %d kort med ugyldige egenskaper.Reparerte notattype: %sSkrift:BunntekstBraHTML-redigeringVanskeligHjelpVennligst ta kontakt dersom du har bidratt og ikke står på denne listen.Hopp over denne oppdateringenImportereKlarte ikke å importere. ImportalternativInkluder planlegginginformasjonInkluder etiketterUgyldig regular expression.BeholdFeilVenstreKoble til %sKoble til etiketterGamleMerNettverkIngen tomme kort funnet.IngentingÅpnePassord:InnstillingerBehandler...Opptak...
Tid: %0.1fEndre navnGi nytt navn til kortstokkLag ny planRepeterRepetisjonerHøyreLagret.SøkMarker &altVis svarVis nye kort før repetisjonerVis nye kort i den rekkefølgen de ble lagt tilVis nye kort i tilfeldig rekkefølgeVisse innstillinger blir aktive først etter at du har restartet Anki.StatistikkSteg:Stopper...StuderSupermemo XML-eksportering (*.xml)DeaktiverDeaktivertSynkSynkroniserer …TabEtiketterTekstDenne filen finnes allerede. Er du sikker på at du vil erstatte den?TidI dagTotaltTotal tidBehandle input som regular expressionTypeAngreAngre %sLast opp til AnkiWebLaster opp til AnkiWeb...Bruker 1Versjon %sVil du laste det ned nå?Du har mange kortstokker. Venneligst sjekk %(a)s. %(b)sUng[ingen kortstokk]sikkerhetskopierkortkort fra kortstokkensamlingddagerkortstokkduplikathjelpskjultimertimer etter midnattkoblet sammen med %skoblet sammen med etiketterminutterminuttermd.sekunderstatistikkdenne sidenuhele samlingen~anki-2.1.0+dfsg~b36/locale/nl/000077500000000000000000000000001323611211500157275ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/nl/LC_MESSAGES/000077500000000000000000000000001323611211500175145ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/nl/LC_MESSAGES/anki.mo000066400000000000000000001745361323611211500210130ustar00rootroot00000000000000T.> >>>"!>D> F>P>c>8u>>>>">$?$+?&P?"w??4?2?@&@"C@$f@$@$@ @@ A#A+A:AKA`AwAA AAAAAAAA AAA AABB B BB "B-B ?BJBbBrBBBBB0B BB B BCC!C8CYEY LY WYeYxY YY YYYYY Y Z ZZ/ ZPZVZkZ%sZZ Z Z Z Z Z Z ZZ,[(<[e[[F[N[P.\>\P\]]] v]8]]]]]] ^^^^ $^ /^=^ B^ O^Y^ `^m^s^)^0^^^4^!,_N_a_w___(`<`M` T`^`d`f`i` ` ``` `` `````aa*a?aPa Wa baoaNa"aa bb)b/b6bbbbc c"c1c9cLc \cgclc cccc ccccc.cFcDd]d }d d4ddd d1d#e3eSebe*vee ?gMg lgyg"g"g ghh$h8hAh Sh ]h)khhi5iLikipiviii i iiii<ij %j2jBjGj Pj[jlj {jjj j jjjjjjjkk8k =k IkTkhk nk{kkkk kk kk k kkkl'l:l+Pl|l#l!lll l l<l 1m>m]Nmamn!"n DnRnZn]n,onn#dokoo oppp.p =pHp Np Zpdp|pp pppp p pq,$q#QqVuq8qErKrbr*rrr,r s-#s+Qs8}ss ssss#t $t2t;tZtct tttttttttttiulu su uu uu u"uu u1v 3v>v [v|v v v vvvv-vw%w +w5wlF'*(E1n,^IՁ'ł#كec8ZC#(gr u%/Mˇ ƈ ш ݈! '.V]bj.&܉,3 :EUd$ߊ"S0g$" {^n5͌U bltz  ːАՐې%;@HKS[ akm~ (4;+BnpxO+'1S1)&A7^57=$=b75ؖ* JW gu̗ߗ  '6?GMS\ bn% ŘӘ 9 R] eq$`bemty~u/-2`%>Tc~ Ԝq\3' [gA|Zs-R a k!uԠ " 0;%Nt| 0aKc4 ɤܤu'z: S_NI> b"&ک$#&J5f Ϫ, +DXag"ӫث ;4+` (08 A N XcvGT t $Ϯ, @J%_ Я ܯ$># bo+u/ѰqZ cAm7n<V Ų   - : G T anu | ͳ%? ES hv=z Ӵ4ݴ 2B[s9׵E4Wc[wkSm7 q #E0v#ɹ   :[d u#@ں0T6ۻҼ   ! 2 @JPWf  ѽ  ->_[/  " .8 /8Oaj  6GR  VY mxR&7+MyCSq,0,0 <Sp 2}!  (@_eE|   0 A O]e "05I] {  %!=_x$6/3. bn}i  }8h$4Dy C5  1"Jm *  4CM7{<ET4(Cl92FT[ (#@_ v & -#@d*m % /=Xl"#8 1>!]1 2% Xd kv} s` s}07lQ(  )#='a.-A-(VN_OO N-Z?  /O_h ( / F+Q})j-I M Ygl }-] 4k+&= 2J@}51(&'O?w7qD,'&>J  98Vr )-4bkzA3$!94[ .]23fzW<#)#Mq vBL- !)< V`bhl{    $ - :FH\c_n a$qEWc]<.!LIPVFkBJZ46upB{@voMxaGDL%?c`#h=<F}*O$2{K wvJV(&/N( t){d~}ek\b+b] >2ytgQmK-RND3;8eCjY9y%l r>AylOzW/+G[,UPQ'~V|*t !XR\b7=|_ pAYqK1,_ &?L@8o!}Cs58i0r()75* ?,s-g ::aN+f>SXY`dg]fz~FhoB=w%u/16 Z3s@`e 3k"#U2J[T<rzn#IX^5Zm :xEDf^P9jxTnT1 |4u09'H.Wi\$ES;H7HQvM'MqSm6p.&wOR"IA0;hi4Gd^Ul-)j["C  (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-11-29 01:20+0000 Last-Translator: tasha Language-Team: Dutch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:16+0000 X-Generator: Launchpad (build 18534) Language: nl (1 van %d) (uit) (aan) Het bevat %d kaart. Het bevat %d kaarten.%% Juist%(a)0.1f %(b)s/dag%(a)0.1fs (%(b)s)%(a)d van %(b)d aantekening bijgewerkt%(a)d van %(b)d aantekeningen bijgewerkt%(tot)s %(unit)s%.01f kaarten/minuut%d kaart%d kaarten%d kaart verwijderd.%d kaarten verwijderd.%d kaart geëxporteerd.%d kaarten geëxporteerd.%d kaart geïmporteerd.%d kaarten geïmporteerd.%d kaart geleerd in%d kaarten geleerd in%d set bijgewerkt.%d sets bijgewerkt.%d groep%d groepenNog %d media wijziging uploadenNog %d media wijzigingen uploaden%d mediabestand gedownload%d mediabestanden gedownload%d aantekening%d aantekeningen%d aantekening toegevoegd%d aantekeningen toegevoegd%d aantekening verwijderd.%d aantekeningen verwijderd.%d aantekening geëxporteerd.%d aantekeningen geëxporteerd.%d aantekening geïmporteerd.%d aantekeningen geïmporteerd.%d aantekening ongewijzigd%d aantekeningen ongewijzigd%d aantekening bijgewerkt%d aantekeningen bijgewerkt%d herhaling%d herhalingen%d geselecteerd%d geselecteerd%s kopiëren%s dag%s dagen%s uur%s uur%s minuut%s minuten%s minuut.%s minuten.%s maand%s maanden%s seconde%s seconden%s te verwijderen:%s jaar%s jaar%sd%sh%sm%smo%ss%sy&Over...&Blokken...B&ewerken&Exporteren...&Bestand&Zoeken&Gaan&Gids&Gids...&Help&Importeren&Selectie omkeren&Volgende kaartMap met invoegtoepassingen &openen...&Voorkeuren...&Vorige kaart&Planning wijzigen...Anki &steunen...H&ulpmiddelen&Ongedaan maken%(row)s' bevatten %(num1)d velden, verwachtte er %(num2)d(%s juist)(einde)(gefilterd)(aan het leren)(nieuw)(limiet van bovenliggend niveau: %d)(kies 1 kaart)....anki2 bestanden zijn niet bedoeld om te importeren. Als u een back-up probeert te herstellen, lees dan het hoofdstuk 'Back-ups' van de gebruikershandleiding./0d1 maand1 jaar10AM10PM3AM4AM4PM504 gateway time-out fout ontvangen. Gelieve uw antivirus software tijdelijk uit te schakelen en opnieuw te proberen.:%d kaart%d kaartenMap met back-ups openenBezoek website%(pct)d%% (%(x)s van de %(y)s)%Y-%m-%d @ %H:%MBack-ups
Anki zal een back-up maken van uw collectie telkens wanneer het programma geopend of gesynchroniseerd wordt.Exportformaat:Zoeken:Grootte lettertype:Lettertype:In:Set:Regelbreedte:Vervangen door:SynchronisatieSynchronisatie
Uitgeschakeld; klik op de Sync-knop in het hoofdscherm om deze functie in te schakelen.

Account vereist

Een gratis account is vereist om uw collectie gesynchroniseerd te houden. Gelieve eerst een account aan te vragen, vooraleer onderstaande gegevens in te vullen.

Update Anki

Anki %s is beschikbaar.

Hartelijk dank aan iedereen die heeft bijgedragen met suggesties, foutrapporten of giften.Het gemak van een kaart is de lengte van het volgende interval wanneer u een herhaling als "goed" evalueert.Een gefilterde set kan geen subsets bevatten.Er is een probleem opgetreden bij het synchroniseren van media. Gebruik Extra>Controleer media, en synchroniseer opnieuw om dit probleem te verhelpen.Afgebroken: %sOver AnkiToevoegenToevoegen (sneltoets: ctrl+enter)Veld toevoegenMedia toevoegenNieuwe set toevoegen (Ctrl+N)Aantekeningstype toevoegenOmgekeerde toevoegenTags toevoegenToevoegen aan:Toevoegen: %sToegevoegdVandaag toegevoegdDubbel toegevoegd met eerste veld: %sOpnieuwVandaag opnieuwAantal te herdoen: %sAlle setsAlle veldenAlle kaarten in willekeurige volgorde (blokmode)Alle kaarten, aantekeningen en media voor dit profiel zullen worden verwijderd. Weet u het zeker?HTML in velden toestaanEr is een fout opgetreden bij het benaderen van de database. Mogelijke oorzaken: - Antivirus, firewall, back-up, of synchronisatie software kan Anki blokkeren. Probeer of het uitschakelen van deze software het probleem verhelpt. - Uw harde schijf kan vol zijn. - De Documenten/Anki map staat op een netwerkschijf. - Bestanden in de Documenten/Anki map zijn alleen lezen. - Uw harde schijf kan fouten vertonen. Om te controleren of uw collectie niet corrupt is kunt u het beste via het menu Hulpmiddelen>Database Controleren... selecteren. Er deed zich een probleem voor bij het openen van %sAnkiAnki 2.0 setIngepakte Anki-setAnki kon uw profiel niet hernoemen omdat het de profielmap niet kon hernoemen. Controleer of u schrijfrechten heeft op de map Documenten/Anki en of deze map niet in gebruik is, en probeer het opnieuw.Anki kon de lijn tussen de vraag en het antwoord niet vinden. Pas het sjabloon handmatig aan om vraag en antwoord te verwisselen.Anki is een toegankelijk en intelligent systeem voor studie d.m.v. gespreide herhaling. Het is gratis en open source.Anki gebruikt de AGPL3 licentie. Gelieve het licensiebestand in de brondistributie raad te plegen voor verdere informatie.AnkiWeb ID of wachtwoord was onjuist; probeer het opnieuw.AnkiWeb ID:Er is een fout in AnkiWeb opgetreden. Probeer het over een paar minuten opnieuw, en dien een foutenrapport in als het probleem blijft optreden.AnkiWeb is momenteel te zwaar belast. Probeer het over enkele minuten opnieuw.AnkiWeb is in onderhoud. Gelieve over enkele minuten opnieuw te proberen.AntwoordAntwoordknoppenAntwoordenAnki wordt door antivirus of firewall-software gehinderd bij het maken van een internetverbinding.Kaarten die nergens aan gekoppeld zijn zullen verwijderd worden. Als een aantekening geen kaarten meer heeft, zal deze verdwijnen. Weet u zeker dat u verder wilt gaan?Kwam twee keer in bestand voor: %sBent u zeker dat u %s wil verwijderen?Minstens één kaarttype is vereist.Minstens één leerstap is vereist.Geluid automatisch afspelenProfiel automatisch synchroniseren bij openen/sluitenGemiddeldeGemiddelde duurGemiddelde antwoordtijdGemiddelde gemakGemiddelde voor dagen waarop je geleerd hebtGemiddeld intervalAchterkantVoorvertoning achterkantSjabloon achterkantBack-upsBasisBasis (en omgekeerde kaart)Basis (omgekeerde kaart optioneel)BladerenBrowseruitzichtBrowserinstellingenBouwBegravenBegraaf kaartBegraaf gerelateerde nieuwe kaarten tot het eind van de dagBegraaf gerelateerde herhalingen tot de volgende dagAnki detecteert standaard het karakter tussen velden, zoals tabs, komma's, etc. Indien Anki het karakter verkeerd detecteert kan u het hier invoeren. Gebruik \t voor een tab.AnnulerenKaartKaart %dKaart 1Kaart 2Kaart-IDKaartenlijstKaarttypeKaarttypesKaarttypes voor %sKaart begravenKaart opgeschort.Deze kaart was moeilijk.KaartenKaarten kunnen niet handmatig aan een gefilterde set toegevoegd worden.Kaarten in tekst zonder opmaakKaarten zullen na het herhalen automatisch terugkeren naar hun oorspronkelijke sets.Kaarten...CentrerenWijzigen%s wijzigen naar:Set veranderenAantekeningstype veranderenAantekeningstype veranderen (Ctrl+N)Aantekeningstype veranderen...Set veranderen op basis van aantekeningstypeGewijzigdControleer &media...Bestanden in de media-map controlerenBezig met controleren...KiezenSet selecterenAantekeningstype selecterenTags kiezenDupliceer: %sSluitenSluiten en huidige invoer verwerpen?ClozeCode:Collectie is beschadigd. Gelieve de handleiding te raadplegen.Dubbele puntKommaInterfacetaal en -instellingen configurerenProficiat! U bent voorlopig klaar met deze set.Bezig met verbinden...Internetverbinding verlopen. Misschien ondervindt u internetproblemen of bevat uw mediamap een erg groot bestand.DoorgaanKopiërenJuiste antwoorden voor volwassen kaarten: %(a)d/%(b)d (%(c).1f%%)Juist: %(pct)0.2f%%
(%(good)d van de %(tot)d)Kon geen verbinding maken met AnkiWeb. Gelieve uw netwerkverbinding te controleren en dan opnieuw te proberen.Kon geen geluid opnemen. Heeft u lame en sox geïnstalleerd?Kon bestand niet opslaan: %sBlokkenSet aanmakenGefilterde set aanmaken...AangemaaktCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulatiefCumulatieve %sCumulatieve antwoordenCumulatieve kaartenHuidige setHuidige aantekeningstype:Aangepaste studieAangepaste studiesessieKnippenDatabase herbouwd en geoptimaliseerd.DatumDagen geleerdMachtiging intrekkenDebug consoleSetSet zal geïmporteerd worden zodra een profiel wordt geopend.SetsAfnemende intervallenStandaardVertragingen totdat herhalingen weer getoond worden.VerwijderenKaarten verwijderenSet verwijderenLege kaarten verwijderenAantekening verwijderenAantekeningen verwijderenTags verwijderenOngebruikte kaarten verwijderenVeld uit %s verwijderen?Het '%(a)s' kaarttype en de bijhorende %(b)s verwijderen?Wilt u dit aantekeningstype en alle bijbehorende kaarten verwijderen?Wilt u dit ongebruikte aantekeningstype verwijderen?Ongebruikte media verwijderen?%d kaart met ontbrekende aantekening verwijderd.%d kaarten met ontbrekende aantekening verwijderd.%d kaart met ontbrekend sjabloon verwijderd.%d kaarten met ontbrekend sjabloon verwijderd.%d aantekening met ontbrekend aantekeningstype verwijderd.%d aantekeningen met ontbrekend aantekeningstype verwijderd.%d aantekening met 0 kaarten verwijderd.%d aantekeningen met 0 kaarten verwijderd.%d aantekening met verkeerd aantal velden verwijderd.%d aantekeningen met verkeerd aantal velden verwijderd.Verwijderd.Door deze set uit de lijst te verwijderen zullen alle resterende kaarten terugkeren naar hun oorspronkelijke set.BeschrijvingBeschrijving getoond op het studiescherm (enkel voor de huidige set):DialoogvensterDownloaden van AnkiWebBezig met downloaden van AnkiWeb...VerwachtEnkel verwachte kaartenMorgen verwacht&AfsluitenGemakkelijkheidsgraadMakkelijkBonus voor makkelijke kaartenInterval voor makkelijke kaartenBewerkenHuidige bewerkenHTML bewerkenBewerktLettertype invoerveldLeegLege kaarten...Lege kaarten: %(c)s Velden: %(f)s Lege kaarten gevonden. Gelieve Extra>Lege kaarten uit te voeren.Leeg eerste veld: %sEindeGeef de set op waar de %s nieuwe kaarten aan toegevoegd moeten worden, of laat leeg:Nieuwe kaartpositie (1...%s):Voer nieuwe tags in:Voer te verwijderen tags in:Fout tijdens downloaden: %sFout tijdens opstarten: %sFout bij het opzetten van een beveiligde verbinding. Dit wordt meestal veroorzaakt door antivirus, firewall of VPN software, of door problemen met uw internet provider.Fout bij uitvoeren %s.Fout bij uitvoeren van %sExporterenExporteren...ExtraFF1Veld %d van bestand wordt:VeldkoppelingVeldnaam:Veld:VeldenVelden voor %sVelden gescheiden door: %sVelden...FilterFilter:GefilterdGefilterde set %d&Dubbele kaarten zoeken...Dubbele kaarten zoekenZoeken en &vervangen...Zoeken en vervangenBeëindigenEerste kaartEerste herhalingEerste veld komt overeen: %s%d kaart met ongeldige eigenschappen hersteld.%d kaarten met ongeldige eigenschappen hersteld.AnkiDroid deck overschrijving bug gecorrigeerd.Aantekeningtype hersteld: %sOmdraaienMap bestaat al.Lettertype:VoettekstOm veiligheidsredenen is '%s' niet toegestaan in kaarten. U kan dit nog wel gebruiken als u in plaats hiervan het commando in een ander pakket plaatst, en dat pakket importeert in de LaTex koptekst.VoorspellingFormulier%(a)s in %(b)s gevonden.VoorkantVoorvertoning voorkantSjabloon voorkantAlgemeenAangemaakt bestand: %sAangemaakt op %sGedeelde set downloadenGoedInterval na lerenHTML-editorMoeilijkKoptekstHelpHoogste gemakGeschiedenisStartVerdeling per uuruurUren met minder dan 30 herhalingen worden niet getoondGelieve contact met ons op te nemen als uw bijdrage niet vermeld wordt.Als je elke dag had geleerdNegeer antwoordtijden langer danHoofd-/kleine letters negerenVeld negerenLijnen negeren waarvan het eerste veld identiek is aan een reeds bestaande aantekeningDeze update negerenImporterenBestand importerenImporteren zelfs als het eerste veld hetzelfde is als in een bestaande aantekeningImporteren mislukt. Importeren mislukt. Debug-informatie: Instellingen voor importerenKlaar met importeren.In media-map maar niet gebruikt in kaarten:Om ervoor te zorgen dat uw collectie correct werkt wanneer u ze verplaatst naar een ander toestel vereist Anki dat de interne klok van uw computer correct ingesteld is. Ook als uw systeem de correcte lokale tijd weergeeft kan de interne klok fout ingesteld zijn. Ga naar de tijdsinstellingen van uw computer en controleer het volgende: - AM/PM - Klokdrift - Dag, maand en jaar - Tijdszone - Zomer-/wintertijd Afwijking ten opzichte van correcte tijd: %s.Media toevoegenPlanningsinformatie toevoegenTags toevoegenDe limiet op nieuwe kaarten vandaag verhogenDe limiet op nieuwe kaarten vandaag verhogen metDe limiet op herhaalkaarten vandaag verhogenDe limiet op herhaalkaarten vandaag verhogen metToenemende intervallenInvoegtoepassing installerenInterfacetaal:IntervalIntervalsfactorIntervallenOngeldige code.Ongeldig bestand. Gelieve te herladen van back-up.Kaart heeft ongeldige eigenschap. Gebruik Hulpmiddelen>Database controleren. Indien het probleem zich opnieuw voordoet, contacteer de supportwebsite.Ongeldige reguliere expressie.Daarom werd hij opgeschort.Spring naar tags met Ctrl+Shift+TBewaarLaTeXLaTeX-formuleLaTeX wiskunde-omgevingVergissingenLaatste kaartMeest recente herhalingMeest recent toegevoegde eerstLerenMaximaal vooruit lerenLeren: %(a)s, Herhalen: %(b)s, Opnieuw leren: %(c)s, Gefilterd: %(d)sAan het lerenActie moeilijke kaartenDrempelwaarde moeilijke kaartResterendBeperken totBezig met laden…Langste intervalZoek in veld:Laagste gemakBeherenAantekeningstypes beheren...Koppelen aan %sKoppelen aan tagsVolwassenMaximumintervalMaximum herhalingen/dagMediaMinimumintervalMinutenMeng nieuwe kaarten en herhalingenMnemosyne 2.0 set (*.db)MeerMeeste vergissingenKaarten verplaatsenKaarten verplaatsen naar set:&AantekeningNaam bestaat.Naam voor set:Naam:NetwerkNieuwNieuwe kaartenEnkel nieuwe kaartenNieuwe kaarten/dagNieuwe setnaam:Interval nieuwe kaartenNieuwe naam:Nieuw aantekeningstype:Nieuwe naam voor deze optiegroep:Nieuwe positie (1...%d):Volgende dag begint omEr worden nog geen kaarten verwacht.Geen enkele kaart voldeed aan de criteria die u ingaf.Geen lege kaarten.Er zijn vandaag geen volwassen kaarten geleerd.Geen ongebruikte of ontbrekende bestanden gevonden.AantekeningAantekening-IDAantekeningstypeAantekeningstypesAantekening en de bijbehorende %d kaart verwijderd.Aantekening en de bijbehorende %d kaarten verwijderd.Aantekening begraven.Aantekening opgeschort.Let op: er wordt geen back-up gemaakt van uw media. Maak voor de zekerheid zelf regelmatig een back-up van uw Anki-bestanden.Let op: een deel van de geschiedenis ontbreekt. Zie voor meer informatie de documentatie van de browser.Aantekeningen in tekst zonder opmaakAantekeningen moeten ten minste één veld bevatten.Aantekening getagd.NietsOkOudste eerstForceer veranderingen in één richting bij volgende synchronisatieEén of meerdere aantekeningen werden niet geïmporteerd omdat ze geen kaarten genereerden. Dit kan gebeuren wanneer u lege velden heeft of wanneer u de inhoud van het tekstbestand aan de verkeerde velden hebt gekoppeld.Alleen nieuwe kaarten kunnen hun volgorde veranderen.Slechts één client kan tegelijk toegang hebben tot AnkiWeb. Indien een vorige synchronisatie mislukt is, gelieve het opnieuw te proberen binnen enkele minuten.OpenenBezig met optimaliseren...Limiet (optioneel):InstellingenInstellingen voor %sOptiegroep:Instellingen…VolgordeVolgorde van toevoegingVolgorde van verwachtingAchterkant sjabloon overschrijven:Lettertype overschrijven:Voorkant sjabloon overschrijven:Wachtwoord:PlakkenPlak afbeeldingen van het klembord als PNGPauker 1.8 les (*.pau.gz)PercentagePeriode: %sAan het einde van de rij met nieuwe kaarten plaatsenIn de rij met te herhalen kaarten plaatsen met een interval tussen:Gelieve eerst een ander aantekeningstype toe te voegen.Gelieve een microfoon aan te sluiten, en ervoor te zorgen dat geen andere programma's gebruikmaken van het geluidsapparaat.Pas deze aantekening aan en voeg een aantal clozes toe. (%s)Controleer dat een profiel is geopend en dat Anki niet bezig is, en probeer opnieuw.Gelieve PyAudio te installerenOpen eerst een profiel.Probeer de map %s te verwijderen en probeer opnieuw.Gelieve Extra>Lege kaarten uit te voerenGelieve een set te selecteren.Gelieve kaarten van één aantekeningstype te selecteren.Gelieve iets te selecteren.Gelieve de laatste versie van Anki te installeren.Gelieve Bestand->Importeren te gebruiken om dit bestand te importeren.Gelieve AnkiWeb te openen, vervolgens uw set te upgraden en dan opnieuw te proberen.PositieVoorkeurenVoorvertoningGeselecteerde kaart (%s) vooraf bekijkenNieuwe kaarten op voorhand herhalenVooraf nieuwe kaarten bekijken die zijn toegevoegd in de laatsteBezig met verwerken...ProfielenProxy vereist authenticatie.VraagAchterkant wachtrij: %dVoorkant wachtrij: %dBeëindigenWillekeurigVolgorde willekeurig door elkaar halenBeoordelingOpnieuw opbouwenEigen stem opnemenBezig met opnemen...
Tijd: %0.1fHerlerenLaatste invoer tijdens toevoegen onthoudenDoor dit aantekeningstype te verwijderen zullen één of meerdere kaarten ook verwijderd worden. Definieer eerst een nieuw aantekeningstype.HernoemenSet hernoemenGeluid opnieuw afspelen...Eigen stem afspelenVolgorde veranderenVolgorde nieuwe kaarten veranderenVolgorde veranderen...Vereis één of meer van deze tags:HerplanPlanning wijzigenHerplan kaarten op basis van mijn antwoorden in deze setNu hervattenOmgekeerde tekstrichting (RNL)Herzet naar de staat vóór '%s'.HerhalenAantal herhalingenHerhalingstijdOp voorhand herhalenOp voorhand herhalen voorKaarten herhalen die vergeten waren in de laatsteVergeten kaarten herhalenSuccespercentage voor elk uur van de dag bekijken.HerhalingenRechtsBereik: %sZoekenBinnen opmaak zoeken (traag)Willekeurig&Alles selecteren&Aantekeningen selecterenSelecteer ongewilde tags:De geselecteerde file was niet in het UTF-8 formaat. Gelieve de importeersectie in de handleiding erop na te lezen.Selectief studerenPuntkommaServer niet gevonden. Ofwel is uw verbinding verbroken, ofwel belet antivirus/firewall software Anki zich te verbinden met het internet.Deze optiegroep op alle sets onder %s toepassen?Op alle subsets toepassenDe shift-toets was ingedrukt. Automatisch synchroniseren en laden van invoegtoepassingen wordt overgeslagen.Positie van bestaande kaarten opschuivenSneltoets: %sSneltoets: %s%s tonenAntwoord tonenDubbels tonenAntwoordtimer tonenNieuwe kaarten na herhalingen tonenNieuwe kaarten vóór herhalingen tonenNieuwe kaarten in volgorde van toevoegen tonenNieuwe kaarten in willekeurige volgorde tonenDe tijd van de volgende herhaling boven de antwoordknoppen tonen.Aantal resterende kaarten tijdens leren tonenGrootte:Enkele gerelateerde of begraven kaarten zijn uitgesteld tot een latere sessie.Sommige instellingen worden pas toegepast nadat u Anki opnieuw opgestart heeft.Enkele updates werden genegeerd omdat het type van de aantekening gewijzigd is:SorteerveldGebruik dit veld in de browser om te sorterenSorteren op deze kolom is niet mogelijk. Kies een andere kolom.SpatieStartpositie:Beginwaarde gemakStatistiekenLeerstap:Leerstappen (in minuten)Leerstappen moeten in minuten worden ingevoerd.Vandaag geleerdStuderenKaarten in set studerenKaarten in set studeren...Nu studerenLeren aan de hand van kaartstatus of tagStijlStijl (gedeeld tussen kaarten)Supermemo XML uitvoer (*.xml)OpschortenKaart opschortenAantekening opschortenOpgeschortGeluiden en afbeeldingen ook synchroniserenSynchronisatie mislukt: %sSynchronisatie mislukt; internet offline.Synchronisatie vereist dat de klok op uw computer juist is ingesteld. Stel uw klok bij en probeer opnieuw.Bezig met synchroniseren...TabTag dubbelsAlleen taggenTagsDoelset (Ctrl+D)Doelveld:TekstTekst gescheiden door tabs of puntkomma's (*)Deze set bestaat reeds.Die veldnaam is al in gebruik.Die naam is al in gebruik.De verbinding met AnkiWeb duurde te lang. Controleer uw netwerkverbinding en probeer opnieuw.De standaardconfiguratie kan niet verwijderd worden.De standaardset kan niet verwijderd worden.De verdeling van kaarten in uw set(s).Het eerste veld is leeg.Het eerste veld van dit aantekeningstype moet gekoppeld zijn.Het volgende karakter mag niet gebruikt worden: %sDe voorzijde van deze kaart is leeg. Gebruik Extra>Lege kaarten.Met uw invoer zou de vraag op alle kaarten leeg zijn.Het aantal nieuwe kaarten dat u heeft toegevoegd.Het aantal vragen dat u beantwoord hebt.Het aantal op komst zijnde herhalingen.Het aantal keer dat u de verschillende knoppen heeft ingedrukt.De rechten van de tijdelijke map op uw systeem zijn niet correct ingesteld en Anki kan ze niet automatisch herstellen. Zoek op 'temp folder' in de Anki handleiding voor meer informatie.Het geselecteerde bestand is geen geldig .apkg bestand.Er zijn geen kaarten met die zoektermen. Wilt u de termen aanpassen?Voor deze verandering is het nodig om bij de volgende synchronisatie de hele database op te laden. Als er op een ander apparaat nog herhalingen of andere veranderingen zijn die nog niet gesynchroniseerd zijn, dan zullen deze verloren gaan. Doorgaan?De tijd die u nam om vragen te beantwoorden.Er zijn meer nieuwe kaarten beschikbaar, maar de dagelijkse limiet is bereikt. U kunt de limiet in de instellingen verhogen, maar let er op dat dit uw werkdruk op de korte termijn zal verzwaren.Er moet minstens één profiel bestaan.Op deze kolom kan niet gesorteerd worden, maar u kunt wel zoeken naar specifieke sets door een set aan de linkerkant te selecteren.Dit bestand lijkt geen geldig .apkg bestand te zijn. Indien u deze fout kriigt voor een bestand dat werd gedownload van AnkiWeb, is de kans groot dat uw download mislukte. Gelieve nogmaals te proberen, en indien het probleem zich herhaalt, gelieve de download in een andere browser te proberen.Dit bestand bestaat. Bent u zeker dat u het wil overschrijven?In deze map wordt al uw Anki-data op één locatie opgeslagen, om het aanmaken van back-ups te vergemakkelijken. Als u Anki een andere locatie wilt laten gebruiken, kijk dan op: %s Dit is een speciale set bedoeld om buiten de normale planning te studeren.Dit is een {{c1::sample}} cloze.Dit zal uw bestaande collectie verwijderen en vervangen door de data in het bestand dat u aan het importeren bent. Weet u het zeker?TijdMaximale studeertijdTe herhalenOm een cloze te maken van een bestaande aantekening moet u eerst het type veranderen naar cloze, via Bewerken>Aantekeningstype.Om deze nu te zien, klik op de 'Graaf op' knop hieronder.Klik op onderstaande Aangepaste studie knop om buiten de normale planning te studeren.VandaagHet maximum te herhalen kaarten is voor vandaag bereikt, maar er zijn nog steeds kaarten die voor vandaag gepland waren. Overweeg deze dagelijkse limiet in de instellingen te verhogen, om optimaal te leren.TotaalTotale tijdTotaal aantal kaartenTotaal aantal aantekeningenInvoer behandelen als reguliere expressieTypeType antwoord: onbekend veld %sKan een alleen-lezen bestand niet importeren.Graaf opOngedaan maken%s ongedaan makenOnbekend bestandsformaatOngezienBestaande aantekeningen aanpassen als het eerste veld overeenkomt%(a)d van %(b)d bestaande aantekeningen bijgewerkt.Opladen naar AnkiWebBezig met opladen naar AnkiWeb...Gebruikt in kaarten maar niet gevonden in media-map:Gebruiker 1Versie %sAan het wachten tot u klaar bent met bewerken.Waarschuwing, clozes zullen niet werken zolang u het type bovenaan niet verandert naar Cloze.Gebruik standaard de huidige set bij het toevoegenVolledige collectieWilt u het nu downloaden?U hebt een cloze aantekeningstype, maar u heeft nog geen clozes gecreëerd. Verdergaan?U heeft een groot aantal sets. Gelieve %(a)s te lezen. %(b)sU heeft uw stem nog niet opgenomen.U moet minstens één kolom hebben.JongJong+LerenUw aanpassingen zullen een effect hebben op verschillende sets. Als u enkel deze set wenst te veranderen, gelieve eerst een nieuwe optiegroep aan te maken.Uw collectie is in een inconsistente staat. Gelieve Extra>Database controleren uit te voeren, en dan opnieuw te synchroniseren.Uw collectie of een mediabestand is te groot om te synchroniseren.Uw collectie was succesvol opgeladen naar AnkiWeb. Indien u nog andere apparaten gebruikt, gelieve die nu te synchroniseren, erop lettend ervoor te kiezen om de collectie te downloaden die u net hebt opgeladen van deze computer. Eenmaal gebeurd zullen toekomstige herhalingen en toegevoegde kaarten automatisch worden samengevoegd.Uw sets hier en op AnkiWeb verschillen dermate dat ze niet kunnen samengevoegd worden. Daarom is het nodig de sets van één van beide zijden te overschrijven met de sets van de andere zijde. Indien u kiest voor downloaden, zal Anki uw collectie downloaden van AnkiWeb, en alle veranderingen die u hebt gemaakt op uw computer sinds de laatste synchronisatie zullen verloren gaan. Indien u kiest voor opladen, zal Anki uw collectie opladen naar AnkiWeb, en alle veranderingen die u hebt gemaakt op AnkiWeb of enig ander apparaat sinds de laatste synchronisatie zullen verloren gaan. Nadat al uw apparaten terug gesynchroniseerd zijn, zullen toekomstige herhalingen en toegevoegde kaarten terug automatisch samengevoegd kunnen worden.[geen set]back-upskaartenkaarten van de setkaarten geselecteerd doorcollectieddagensetlevensduur setdubbelhelpverbergenuuruur na middernachtvergissingenMinder dan 0.1 kaarten/minuutgekoppeld aan %sgekoppeld aan Tagsminutenminutenmaherhalingensecondenstatistiekendeze paginawvolledige collectie~anki-2.1.0+dfsg~b36/locale/no/000077500000000000000000000000001323611211500157325ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/no/LC_MESSAGES/000077500000000000000000000000001323611211500175175ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/no/LC_MESSAGES/anki.mo000066400000000000000000000012621323611211500207770ustar00rootroot00000000000000$,8x9Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2012-12-21 16:25+0900 PO-Revision-Date: 2011-03-29 15:05+0000 Last-Translator: FULL NAME Language-Team: Norwegian Language: no MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #-#-#-#-# no.po (anki) #-#-#-#-# Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2012-11-19 04:43+0000 X-Generator: Launchpad (build 16278) #-#-#-#-# no.po (anki) #-#-#-#-# Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2012-11-19 04:42+0000 X-Generator: Launchpad (build 16278) anki-2.1.0+dfsg~b36/locale/oc/000077500000000000000000000000001323611211500157175ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/oc/LC_MESSAGES/000077500000000000000000000000001323611211500175045ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/oc/LC_MESSAGES/anki.mo000066400000000000000000000424361323611211500207740ustar00rootroot00000000000000*l  " , .8K8]"$$&8"_$$ .C[cr   " (39?C JT Ze w0 $ * 5@FYpt#'T+,(!f1     e3 7C! {!!5!X!Y'"%"k" # #*#.# I# S#]# s# ##### #$## ## # $%$K:$$"$$ $$ $$$% %#(%#L%p%%(%% %% %&& & *&8&@&F&`&&&&&& &&&&&&& & & &'''('/' 6' D'P'a'{''' '' ' '''''' ''( ( (($(+(2(9(@( G( T( a( n( {( ((( ( ( ( ((( ( ( () ))&).) 5) B) N) Z)f)m)q)w)|))))))) ))))) )))))*!* (*5*:*@*G*P*U* Z*f*k*p*v*}******* *** * * ***+ + +"+(+.+K+S+ X+ c+n+t+v+{+++++++ s- --$-- ---G-9.J.^.)q.).).)../H/Z/m/+/)/+/ 0 #0 D0Q0b0q00000 0000000 0 11 1 -1 71A1G1N1l1 s111!1111 222E!2g2w2 }22 22222_3a3d3k3p3v3|333e33238'4)`4"44q4 75X5i555555566DR7 77b7V8p8.9A9 99: :.:>:!P:r::: : :: :6:; ; .;<;N;)^;i;;6<H<M<]<s< << <'<)<%='=G=;g== ====== > > )>4>$N> s>~>>>>>>>>>>>? "?0?@?W? ^?h?p?x???#? ??@!@9@@@Q@`@g@y@ @@@ @@@ @@@@@@@ @ A A A !A ,A7A>A EA OA \AjAAA AAAAAA AABB#B 5BAB TB_BgBmB tB~BBBBB B BBBBBB BCC"C8C?CRC ZC eC sC ~CC CCCCC!CC CCCCCC DD D $D2D HD UD_DfD wDDD!D D D D DDDDDDDEE E:]*['Z2CXypmcH1Vga=ndM@#`uf\ Q;R!*7L8Y!O"6Iwq) 9>-KE$ ,vz< b&.s|DJe 4'/3AWxFU 0 ~i N?_$r%&()o{T (tGk } S%+"5hjBl#P ^ (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d note%d notes%d note added%d notes added%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnkiWeb ID:AnswerAnswer ButtonsAnswersAppeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardCancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCardsCards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...ChangedCheck &Media...Checking...ChooseChoose DeckClone: %sCloseClozeCode:ColonCommaConnecting...ContinueCopyCreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCurrent DeckCustom StudyCutDateDays studiedDeauthorizeDebug ConsoleDeckDecksDecreasing intervalsDefaultDeleteDelete CardsDelete DeckDelete NoteDescriptionDialogDueE&xitEasyEditEditedEmptyEmpty Cards...EndError executing %s.ExportExport...ExtraF1Field:FieldsFields...FilterFilter:FilteredFiltered Deck %dFind and ReplaceFinishFirst ReviewFlipFont:FooterForecastFormGoodHTML EditorHardHelpHoursImportInvalid regular expression.KeepLeftMinutesMoreNetworkNewNew CardsNothingOpenPassword:PreferencesProcessing...ReviewReviewsRightSelect &AllSemicolonSpaceStudySupermemo XML export (*.xml)SuspendTagsTotal TimeVersion %scardsddayshelphoursminutesmosecondsstatsProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-10-04 14:44+0000 Last-Translator: Cédric VALMARY (Tot en òc) Language-Team: Occitan (post 1500) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n > 1; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: (1 sus %d) (inactiu) (actiu) Conten %d carta. Conten %d cartas.%% corrèctas%(a)0.1f %(b)s per jorn%(a)0.1fs (%(b)s)%(a)d sus %(b)d nòta mesa a jorn.%(a)d sus %(b)d nòtas mesas a jorn.%(tot)s %(unit)s%.01f cartas/minuta%d carta%d cartas%d carta suprimida.%d cartas suprimidas.%d carta exportada.%d cartas exportadas.%d carta importada.%d cartas importadas.%d carta estudiada.%d cartas estudiadas.%d paquet mes a jorn.%d paquets meses a jorn.%d grop%d gropes%d nòta%d nòtas%d nòta mai%d nòtas mai%d nòta introdusida%d nòtas introdusidas%d nòta incambiada%d nòtas incambiadas%d nòta mesa a jorn%d nòtas mesas a jorn%d revision%d revisions%d seleccionada%d seleccionadasCòpia de %s%s jorn%s jorns%s ora%s oras%s minuta%s minutas%s minuta.%s minutas.%s mes%s meses%s segonda%s segondas%s per suprimir :%s an%s ans%sd%sh%sm%smo%ss%sy&A prepaus...&Bachotar…&Editar&Exportar...&Fichièr&Recercar&Anar&Ajuda&Manual en linha (en anglés)A&juda&Importar…&Inversar la seleccionCarta &seguentaDobrir lo dorsièr dels empeutons&Preferéncias...Carta &precedentaTo&rnar planificar…&Far un don&Aisinas&Anullar« %(row)s » aviá %(num1)d camps al luòc dels %(num2)d previstes(%s corrèctes)(fin)(filtrada)(aprendissatge)(inedita)(limit parent : %d)(seleccionatz 1 carta)...Los fichièrs que pòrtan l’extension .anki2 pòdon pas servir a l’impòrt-expòrt ; lo manual vos precisa las modalitats de salvament./0d1 mes1 an10 h22 h3 h4 h16 hError 504 d'espèra de palanca recebuda. Ensajatz de desactivar temporàriament vòstre antivirusses.:%d carta %d cartas Dobrir lo dorsièr dels salvamentsVisitar lo site internet%(pct)d%% (%(x)s sus %(y)s)%d/%m/%Y @ %H:%MSalvaments
Anki va crear un salvament de vòstra colleccion a cada còp qu’es tampada o sincronizada.Format d’exportacion :Trobar :Talha de la poliça :Poliça :dins :Inclure :Longor de linha :Remplaçar per :SincronizacionSincronizacion
Desactivada pel moment ; per l’activar clicatz sul boton de sincronizacion dins la fenèstra principala.

Compte requesit

Vos cal aver un compte per poder sincronizar vòstra colleccion. Mercé de crear un compte gratuitament, puèi entratz las informacions de connexion çaijós.

Mesa a jorn de Anki

La version %s ven de paréisser.

< Entratz aicí vòstra recèrca o alara quichatz Entrada per veire lo paquet actual entièr >Un grandmercé a totes los qu'an contribuit amb lors suggestions, diagnostics, o dons.L’indici de facilitat d’una carta correspond a l’interval de temps (en jorns) que seriá afichat en dessús del boton de revision « Corrècte ».un paquet de carta pòt pas aver de sospaquetsUn problèma s'es produit pendent la sincronizacion dels mèdias. Utilizatz Aisinas > Verificacion dels mèdias, puèi sincronizatz tornarmai per corregir l'error.Anullat  %sA prepaus d’AnkiApondreApondre (acorchi :Ctrl+Entrada)Apondre un campApondre un MèdiaApondre un paquet novèl (Ctrl+N)Apondre un tipe de nòtaApondre lo versoApondre d'etiquetasApondre a :Apondre : %sApondutApondut uèiUn doblon es estat apondut amb coma primièr camp : %sTornamaiTornamai uèiDoblits : %sTotes los paquetsTotes los campsTotas las cartas dins un òrdre aleatòriL’integralitat de las cartas, nòtas e mèdias del compte seràn suprimits. Procedir a la supression ?Tolerar de HTML dins los campsUna error s'es produita almoment de la dobertura de %sAnkiPaquet ANKI 2.0Molon de paquets ANKIIdentificant Anki :RespondreBotons de responsaResponsasApareis en doble dins lo fichièr : %sSètz segur(a) que volètz suprimir %s ?Al mens un tipe de carta es requesit.Al mens una etapa es requesida.Jogar l’àudio automaticamentSincronizar automaticament a la dobertura e a la tampadura.MejanaDurada mejanaDurada de réponse moyenneFacilitat mejanaInterval mejanVersoApercebut del versoModèl del versoSalvamentsElementariGeneralitats (dos senses)Generalitats (convèrsa facultativa)PercórrerAparéncia del navigadorOpcions de l’exploradorGenerarEnterrarEnterrar la cartaAnullarCartaCarta %dCarta 1Carta 2Identificant cartaLista de las cartasTipe de cartaTipes de cartasTipes de cartas per %sCartasCartas…CentrarCambiarCambiar %s en :Cambiar de paquetModificar lo tipe de nòtaModificar lo tipe de nòta (Ctrl+N)Modificar lo tipe de la nòta...CambiatVerificacion dels &mèdias...Verificacion en cors...CausirCausir lo paquetDuplicar : %sTamparTèxte amb traucsCòdi :Dos puntsVirgulaConnexion en cors...ContunharCopiarCreatCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Maj+FCtrl+Maj+LCtrl+Maj+MCtrl+Maj+NCtrl+Maj+PCtrl+Maj+SCtrl+WCtrl+ZCumulatiu%s cumuladasPaquet actualRevisions particularasTalharDataJorns obrantsSuprimir l'autorizacionConsòla d'ErrorsPaquetPaquetsIntervals descreissentsPer defautSuprimirSuprimir cartasSuprimir lo paquetSuprimir la nòtaDescripcionBóstia de dialògEscasença&QuitarAisitEditarModificatVoidCartas voidas…FinError al moment d'executar %s.ExportarExportar...SuplementariF1Camp :CampsCamps...FiltrarSeleccion :FiltratPaquet filtrat %dRecercar e remplaçarAcabarPrimièra revisionRevirarPoliça :Pè de paginaPrevisionsFormulariPlanEditor HTMLDurAjudaOrasImportarExpression racionala pas valabla.GardarEsquèrraMinutasMaiRetNovèlCartas novèlasPas resDobrirSenhal :PreferénciasTractament en cors...ContrarotlarRevisionsDreitaSeleccionar &totPunt-virgulaEspaciEstudiarSupermemo exportat en XML (*.xml)SuspendreEtiquetasDurada totalaVersion %scartasjjornsajudaorasminutasmesegondasestatisticasanki-2.1.0+dfsg~b36/locale/pl/000077500000000000000000000000001323611211500157315ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/pl/LC_MESSAGES/000077500000000000000000000000001323611211500175165ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/pl/LC_MESSAGES/anki.mo000066400000000000000000002323231323611211500210020ustar00rootroot000000000000004L8K K K(K/K"5KXK ZKdKwKK8KKKLL"&L$IL$nL&L"LL4L2%MXMiM"M$M$M$M N9NNNfNnN}NNNNN NNOO O OOO O$O;OBORO[O aOlOrOxO|O OO OOO OOOOOPP"P2P9P0?P pP}PP P PPPPPPiQkQnQvQ}QQQQQTQQ,Q(R@R!_RRfRS S#S 5S BSMS]SoSSeST7THT),W VX`X5sXXXYY%\YkY Y YZ Z$Z 5Z ?ZIZ _Z mZyZ ZZZ'ZZZZZ Z$[)[ /[;[K[\[ k[ u[%[K[[1\9\\"^^ ^__*_ `I`R`v-aa7Nb bwbE c@PccccRcd dd#d#dd ez1ee(ee ef f$f=fNf Sf `f nf|fffff fffJgMg`gvgggg g g)g'gghhhhhh h h h i ii +i8iHiZi3`iiSiij j j !j-jtP@tt]t t8u=uDuZuouuu uuuu u uu u u uu vvv)#v0Mv~vv4v!vvw#wFٝ' *H(s1Ξ,I'#_+e8!C(Freإݥ u/&MVK Zfu { !Ũ'L X_w|.& 1C,[  Uժ$+P"aZS߫03$d" {:^V5U}J ȲҲڲ   '16;AUjг 38@CKS Ycevx pz)¶ ĶѶ-n'ʷ;J GkAKAa[E 6$B[QNJ?N&ٻ"#,Dd%Ǽ $(8QX o{   ýн߽.=O_q /Ⱦؾ .AE  b|~6! s+  !7wMG1= LZIprb-* FT[a|    $(MU ^ho%~1"UT;($.CUsD nPEH V}pKL:  V "++&B"i"(<K ! < KV+v"  /.&U!*2: C N Y c nx> O9 ', T^95o! )? Zf$n B  # - :'G+o @JAQ5XI"l+    # .9@IPW^els z  !6ETj+ 3IO a k  i 's0%_n] o_z=,>P ht    *:@(O6xD(>Y(w H "$'D Vbh my5 '9Oajy.O~   !+>NT p ~%  FHX+ J]w E!90C9cK!Z|,'2-DUh{L-AK!02R#(; T`Pr   ;Shw   3@ PZm E*py  5  1>Ph #01 6=t   h/L~P0k>,  ! *6Le{5"  ( 3&=2d)U4rL"$A:|3*1 -D Sr      % B>              ) < Q n  }  . %   . @ {\    8 O ^ s    %   / ?Lk" " .6J 8    4<N _e=Z"_!,  $53L #'';3Q UHK:(L^ ks  0 6BQ*`# '2F)U%BpY ku/!6wS5,'.3V0";Q4./'*-_ i~( _ k!!1c""7,#'d##h$w$|$$$nF%.%Z%?&G&& '$';'A'Q'a'0t''"'2'L'L(R(i( p(!z(( (C(!)3%)Y)l)6) ) )) )#)Z*%y**"**HS+(+&+)+,,s0,B,v-W^./.u/b\2 222 2223 333&3/353;3B3W3&u3#3+3&34/484S4l4444 44 4 4444rxG/u4]@QdFULq~%l&2DV $&'(Pi\lW  </01(2334?p@gDt]k` y;FlH}pOZWkUyq:1:fE>rSiL 1 !=RDMJq8^8,+G{smCek9.w;/{ioK~d#vZlBS ~0zd?'% 3v[f#_:)z*wX-{J?sCIh_w UTpty@_X=>G(.7;VaT%EqmZjM5Y{fc,h4IT$[Bp6R-[}*`rsLjn +hK,*- /)[0 Au=|\Gh4v9bcoUFubK!1"$N9DgAYnMu25N56~S8v9:;<=>eXB\. Z^e+a &V!77z^(T_Qb'6ysIaWwn8tc5M|N) Oo "?| ' xWzO]P7j^)R P#\}j<@Q*mE`JL . 3tI HV+!PJ`#H<Eo-x2"AOXS%ki$g>dxBC6ArYmfC,nQY}Ha"Kgb0ec|RNF&] (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAlways include question side when replaying audioAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the %(num)d selected add-on?Delete the %(num)d selected add-ons?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFile version unknown, trying import anyway.FilterFilter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax inlineMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow cards as white on black (night mode)Show new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Sound and video on cards will not function until mpv or mplayer is installed.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied %(a)s %(b)s today.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightin %s dayin %s daysin %s hourin %s hoursin %s minutein %s minutesin %s monthin %s monthsin %s secondin %s secondsin %s yearin %s yearslapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: ankiqt_pl_PL Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2018-01-31 16:03+0000 Last-Translator: Marcin Mikołajczak Language-Team: s120801-translate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: pl (1 z %d) (wyłączony) (wył) (wł) Ma %d kartę. Ma %d karty. Ma %d kart.%% poprawnych%(a)0.1f %(b)s/dzieńwysłano %(a)0.1fkB, ściągnięto %(b)0.1fkB%(a)0.1fs (%(b)s)Zaktualizowano %(a)d z %(b)d notatekZaktualizowano %(a)d z %(b)d notatekZaktualizowano %(a)d z %(b)d notatek%(n)d: %(name)s%(tot)s %(unit)s%0.1f kart/minutę%d karta%d karty%d kartUsunięto %d kartę.Usunięto %d karty.Usunięto %d kart.Wyeksportowano %d kartę.Wyeksportowano %d karty.Wyeksportowano %d kart.zaimportowano %d kartę.zaimportowano %d karty.zaimportowano %d kart.Przejrzano %d kartę wPrzejrzano %d karty wPrzejrzano %d kart wZaktualizowano %d talię.Zaktualizowano %d talie.Zaktualizowano %d talii.%d grupa%d grupy%d grupdo wysłania %d zmiana w plikachdo wysłania %d zmiany w plikachdo wysłania %d zmian w plikachściągnięto %d plikściągnięto %d plikiściągnięto %d plików%d notatka%d notatki%d notatekdodano %d notatkędodano %d notatkidodano %d notatekUsunięto %d notatkę.Usunięto %d notatki.Usunięto %d notatek.Wyeksportowano %d notatkę.Wyeksportowano %d notatki.Wyeksportowano %d notatek.zaimportowano %d notatkę.zaimportowano %d notatki.zaimportowano %d notatek.nie zmieniono %d notatkinie zmieniono %d notateknie zmieniono %d notatekzaktualizowano %d notatkęzaktualizowano %d notatkizaktualizowano %d notatek%d powtórka%d powtórki%d powtórek%d wybrana%d wybrane%d wybranychkopia %s%s dzień%s dni%s dni%s godzina%s godziny%s godzin%s minuta%s minuty%s minut%s minuta.%s minuty.%s minut.%s miesiąc%s miesiące%s miesięcy%s sekunda%s sekundy%s sekund%s do usunięcia:%s rok%s lata%s lat%sd%sh%sm%smo%ss%sy&O programie...&Pobierz i zainstaluj...&KartySprawdź &bazę danych&Zakuwaj...&Edytuj&Eksportuj...&Plik&Szukaj&Idź&Poradnik&Poradnik...&Pomoc&Importuj...&Informacja...&Odwróć zaznaczenie&Następna karta&Notatki&Otwórz folder z dodatkami...&Ustawienia...&Poprzednia karta&Zmień plan...&Wesprzyj Anki...&Przełącz profil&Narzędzia&Cofnij'%(row)s' ma %(num1)d pól, oczekiwano %(num2)d(%s poprawnych)(Notatka usunięta)(koniec)(przefiltrowane)(nienauczona)(nowa)(parent limit: %d)(wybierz 1 kartę)...Pliki .anki2 nie zą przeznaczone do importowania. Jeśli próbujesz odtworzyć talię z kopii zapasowej, zobacz sekcję 'Backups' w podręczniku użytkownika./0d1 miesiąc1 rok10:0022:0003:0004:0016:00Wystąpił błąd 504 gateway timeout. Spróbuj na chwilę wyłączyć Twój program antywirusowy.:%d kartę%d karty%d kartOtwórz katalog kopii zapasowychOdwiedź stronę%(pct)d%% (%(x)s z %(y)s)%Y-%m-%d @ %H:%MKopie zapasowe
Anki stworzy kopie zapasową Twojej kolekcji przy każdym wyłączeniu lub synchronizacji.Format eksportu:Znajdź:Rozmiar czcionki:Czcionka:W:Zawiera:Rozmiar linii:Zastąp przez:SynchronizacjaSynchronizacja
Aktualnie wyłączona; kliknij przycisk synchronizacji w oknie głównym, aby ją włączyć.

Wymagane konto

Wymagane jest posiadanie darmowego konta, aby Twoja kolekcja mogła być synchronizowana. Proszę zarejestrować konto, a następnie wprowadzić swoje dane poniżej.

Aktualizacja Anki

Została wydana nowa wersja: Anki %s.

Błąd

Wystąpił błąd. Uruchom ponownie Anki trzymając klawisz Shift - wyłączy to tymczasowo zainstalowane dodatki.

Jeśli problem pojawia się tylko, gdy włączone są dodatki, wyłącz niektóre z nich w menu Narzędzia>Dodatki i uruchom ponownie Anki. Powtarzaj, aż odkryjesz, który dodatek powoduje problem.

Gdy odkryjesz dodatek powodujący problem, dodaj zgłoszenie w sekcji dodatków na stronie wsparcia technicznego.

Informacja diagnostyczna:

Błąd

Wystąpił błąd. Spróbuj, czy wybranie opcji Narzędzia > Sprawdź bazę danych nie rozwiąże problemu.

Jeśli problem nie zniknie, zgłoś go na stronie wsparcia technicznego. Skopiuj poniższą informację do Twojego zgłoszenia.

Podziękowania dla wszystkich osób, które podawały pomysły, zgłaszały błędy i wpłacały dary pieniężne.Trudność karty oznacza przerwę, jaką otrzyma karta po wybraniu "dobrze" przy powtórce.Filtrowane talie nie mogą mieć podtalii.Wystąpił problem podczas synchronizacji plików. Wybierz z menu Narzędzia>Sprawdź pliki a następnie uruchom ponownie synchronizację.Przerwane: %sO AnkiDodajDodaj (skrót: ctrl+enter)Dodaj typ karty...Dodaj poleDodaj plikiDodaj nową talię (Ctrl+N)Dodaj typ notatkiDodaj rewersDodaj etykietyDodaj etykiety...Dodaj do:Dodatek nie ma konfiguracjiDodatku nie ściągnięto z AnkiWeb.DodatkiDodaj…Dodaj: %sDodanoDodane dzisiajDodano duplikat z pierwszym polem: %sZnowuDzisiejsze odp. ZnowuLiczba odp. Znowu: %sWszystkie schowane kartyWszystkie typy kartWszystkie talieWszystkie polaWszystkie karty w losowej kolejności (zakuwanie)Wszystkie karty, notatki i media tego profilu zostaną usunięte. Czy jesteś pewien?Zezwól na HTML w polachZawsze dołączaj stronę pytania przy odtwarzaniu nagraniaNie udało się załadować zainstalowanego dodatku. Jeśli problem będzie się utrzymywał, przejdź do menu Narzędzia>Dodatki i wyłącz lub usuń dodatek. Przy ładowaniu '%(name)s': %(traceback)s Wystąpił błąd w dostępie do bazy danych. Możliwe przyczyny: - antywirus, zapora sieciowa, program do kopii zapasowej lub synchronizacji może przeszkadzać Anki. Spróbuj wyłączyć takie oprogramowanie i sprawdzić, czy problem zniknie. - Twój dysk może być pełny - Folder Dokumenty/Anki może być na dysku sieciowym. - Pliki w folderze Dokumenty/Anki mogą być bez prawa do zapisu. - Możesz mieć błędy na dysku. Warto w tym momencie uruchomić Narzędzia>Sprawdź bazę danych, by upewnić się, że kolekcja nie jest uszkodzona. Wystąpił błąd przy otwieraniu %sAnkiTalia Anki 2.0Pakiet kolekcji AnkiPakiet talii AnkiAnki nie było w stanie zmienić nazwę Twojego profilu, ponieważ nie udało się zmienić nazwy folderu z profilem na dysku. Upewnij się, że masz uprawnienia do zapisu do Dokumenty/Anki i że żadne inne programy nie korzystają z folderów profilu, a następnie spróbuj ponownie.Program Anki nie mógł odnaleźć linijki pomiędzy pytaniem a odpowiedzią. Proszę ręcznie dopasować szablon, by zamienić pytanie z odpowiedzią.Anki nie obsługuje plików w podfolderach folderu collection.media.Anki to przyjazny w użyciu, inteligentny system wspomagający naukę. Jest wolnym i otwartym oprogramowaniem.Anki jest udostępnione na licencji AGPL3. Aby dowiedzieć się więcej, przeczytaj plik licencji w dystrybucji z kodem źródłowym.Anki nie jest w stanie otworzyć pliku kolekcji. Jeśli problem nie zniknie po ponownym uruchomieniu komputera, użyj opcji Otwórz kopię zapasową w menedżerze profili. Informacja diagnostyczna: Identyfikator AnkiWeb ID lub hasło jest niepoprawne; spróbuj ponownie.Identyfikator AnkiWeb ID:AnkiWeb napotkał problem. Spróbuj ponownie za kilka minut, a jeżeli błąd nadal występuje, wypełnij raport o błędzie.AnkiWeb jest zbyt zajęty w tym momencie. Spróbuj ponownie za kilka minut.AnkiWeb przechodzi właśnie konserwację. Spróbuj ponownie za parę minut.OdpowiedźPrzyciski odpowiedziOdpowiedziProgram antywirusowy lub zapora sieciowa uniemożliwia Anki połączenie z Internetem.Dowolna flagaWszystkie karty nieprzypisane do niczego zostaną usunięte. Jeżeli w notatce nie pozostały żadne karty, zostanie ona utracona. Czy jesteś pewien, że chcesz kontynuować?Pojawił się dwa razy w pliku:% sCzy jesteś pewien, że chcesz usunąć %s?Co najmniej jedna karta typu jest wymagana.Przynajmniej jeden krok jest wymagany.Załącz obraz/nagranie/wideo (F3)Automatyczna synchronizacja i kopie zapasowe zostały wyłączone przy przywracaniu. Aby włączyć je ponownie, zamknij profil lub uruchom ponownie Anki.Automatycznie odtwórz pliki audioAutomatycznie synchronizuj przy otwarciu/zamknięciu profiluŚredniaŚredni czasŚredni czas odpowiedziŚrednia trudnośćŚrednia dla dni, gdy się uczonoŚrednia przerwaTyłPodgląd tyłuSzablon tyłuTworzenie kopii zapasowej...Kopie zapasowePodstawowyPodstawowy (z odwrotną kartą)Podstawowy (z opcjonalną odwrotną kartą)Podstawowy (wpisywanie odpowiedzi)Niebieska flagaPogrubienie (Ctrl+B)PrzeglądajPrzeglądaj (pokazano %(cur)d kartę; %(sel)s)Przeglądaj (pokazano %(cur)d karty; %(sel)s)Przeglądaj (pokazano %(cur)d kart; %(sel)s)Wygląd w przeglądarceWygląd przeglądarki...Opcje przeglądarkiBudujZakopaneZakopZakop kartęZakop notatkęZakop powiązane nowe karty do następnego dniaZakop powiązane powtórki do następnego dniaDomyślnie Anki wykrywa znak oddzielający pola, jak np. tabulator, dwukropek itp. Jeśli Anki nieprawidłowo wykrywa taki znak, możesz wpisać go tutaj. Użyj \t jako oznaczenie tabulacji.AnulujKartaKarta %dKarta 1Karta 2ID kartyLista kartStan kartyTyp kartyTyp karty:Typy kartTypy kart dla %sKarta została zakopana.Karta została zawieszona.Karta okazała się pijawką.KartyKarty nie mogą być ręcznie przeniesione do talii z filtrem.Karty jako zwykły tekstPo zakończeniu powtórek, karty automatycznie powrócą do talii źródłowej.Karty...WyśrodkowanieZmieńZmień %s na:Zmień talięZmień talię...Zmień typ notatkiZmień typ notatki (Ctrl+N)Zmień typ notatki...Zmień kolor (F8)Zmień talię na podstawie typu notatkiZmienionoPoniższe zmiany dotkną %(cnt)d notatki używającej tego typu karty.Poniższe zmiany dotkną %(cnt)d notatek używających tego typu karty.Poniższe zmiany dotkną %(cnt)d notatek używających tego typu karty.Zmiany będą miały skutek po ponownym uruchomieniu AnkiSprawdź &pliki...Sprawdź aktualizacjeSprawdź pliki w katalogu mediówSprawdzanie plików...Sprawdzanie...WybierzWybierz talięWybierz typ notatkiWybierz etykietyUsuń flagęWyczyść nieużywaneUsuń nieużywane etykietySklonuj: %sZamknijZamknąć i porzucić aktualne dane?Zamykanie...LukaLuki (Ctrl+Shift+C)Kod:Wyesportowano kolekcjęKolekcja jest uszkodzona. Prosimy o zapoznanie się z instrukcją.DwukropekPrzecinekKonfiguracjaKonfiguracjaKonfiguracja języka interfejsu i opcjiGratulacje! Zakończono powtórki na dziś.Łączenie...Przekroczono limit czasu na nawiązanie połączenia. Twoje połączenie internetowe nie działa dobrze lub masz bardzo duży plik w folderze plików.KontynuujKopiujPoprawne odpowiedzi dla dojrzałych kart: %(a)d/%(b)d (%(c).1f%%)Poprawne: %(pct)0.2f%%
(%(good)d z %(tot)d)Nieudane połączenie z AnkiWeb. Sprawdź połączenie twojej sieci i spróbuj ponownie.Nie udało się nagrać twojego audio. Czy zainstalowałeś lame lub sox?Nie można zapisać pliku: %sZakuwajStwórz talięStwórz filtrowaną talię...Twórz skalowalne obrazy za pomocą dvisvgmUtworzonaCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZŁącznieŁącznie %sŁącznie odpowiedziŁącznie kartAktualna taliaAktualny typ notatki:Niestandardowa naukaSesja nauki niestandardowejWytnijBaza danych przebudowana i zoptymalizowana.DataDni naukiDeautoryzujKonsola debugowaniaTaliaNadpisz talię...Talia zostanie zaimportowana przy otwarciu profilu.TalieMalejące przerwyDomyślnaCzas do kolejnego wyświetlenia.UsuńUsuń kartyUsuń talięUsuń pusteUsuń notatkęUsuń notatkiUsuń etykietyUsuń nieużywaneUsunąć pole z %s?Usunąć %(num)d wybrany dodatek?Usunąć %(num)d wybrane dodatki?Usunąć %(num)d wybranych dodatków?Usunąć typ kart '%(a)s' i jego %(b)s?Usunąć ten typ notatki i wszystkie jego karty?Usunąć ten nieużywany typ notatki?Usunąć nieużywane pliki?Usunięto %d kartę bez notatki.Usunięto %d karty bez notatki.Usunięto %d kart bez notatki.Usunięto %d kartę z brakującym szablonem.Usunięto %d karty z brakującym szablonem.Usunięto %d kart z brakującym szablonem.Usunięto %d notatkę bez ustawionego typu notatki.Usunięto %d notatki bez ustawionego typu notatki.Usunięto %d notatek bez ustawionego typu notatki.Usunięto %d notatkę bez kart.Usunięto %d notatki bez kart.Usunięto %d notatek bez kart.Usunięto %d notatkę ze złą liczbą pól.Usunięto %d notatki ze złą liczbą pól.Usunięto %d notatek ze złą liczbą pól.Usunięto.Usunięcie tej talii z listy talii zwróci wszystkie pozostałe karty do ich oryginalnej talii.OpisOpis pokazywany na ekranie nauki (tylko dla aktualnej talii):Okno dialogowePobierz z AnkiWebPobrano %(fname)sPobieranie z AnkiWeb...OczekująceTylko oczekujące kartyPrzychodzące jutro&ZakończTrudnośćŁatwaPremia odpowiedzi "Łatwa"Przerwa dla łatwychEdytujEdytuj "%s"Edytuj aktualnąEdytuj HTMLZmodyfikowanoCzcionka edycjiPustyPuste karty...Numery pustych kart: %(c)s Pola: %(f)s Znaleziono puste karty. Uruchom Narzędzia>Puste kartyPuste pierwsze pole:% sZakończWprowadź talię, aby dodać %s nowych kart lub pozostaw puste pole:Wprowadź nową pozycję karty (1...%s):Wpisz etykiety do dodania:Wpisz etykiety do usunięcia:Błąd przy pobieraniu %(id)s: %(error)sBłąd pobierania: %sBłąd podczas uruchamiania: %sBłąd przy ustanawianiu bezpiecznego połączenia. Zazwyczaj przyczyną jest program antywirusowy, zapora sieciowa, program VPN albo problemy z dostarczycielem Internetu.Błąd podczas wykonywania% s.Błąd uruchamiania %sEksportujEksportuj...Wyeksportowano %d plikWyeksportowano %d plikiWyeksportowano %d plikówDodatkoweFF1Pole %d z pliku jest:Odwzorowanie pólNazwa pola:Pole:PolaPola dla %sPola oddzielone o: %sPola...&FiltrujPodjęto próbę importu mimo nieznanej wersji pliku.FiltrFiltruj…Filtr:PrzefiltrowaneFiltrowana talia %dZnajdź &duplikaty...Znajdź duplikatyZnajdź i za&mień...Znajdź i zamieńZakończPierwsza kartaPierwsze przeglądnięciePierwsze dopasowane pole: %sNaprawiono %d kartę z nieprawidłowymi wartościami.Naprawiono %d karty z nieprawidłowymi wartościami.Naprawiono %d kart z nieprawidłowymi wartościami.Naprawiono talię AnkiDroid korygując błąd.Naprawiono typ notatki: %sDodaj flagęDodaj flagę do kartyOdwróćFolder już istnieje.Czcionka:StopkaZe względów bezpieczeństwa, '%s' jest niedozwolony dla kart. Można go nadal używać przez umieszczenie polecenia w innym zestawie i zaimportowanie go wraz z nagłówkiem LaTeX.PrognozaFormularzZnaleziono %(a)s spośród %(b)s.PrzódPodgląd przoduSzablon przoduOgólneWygenerowany plik: %sWygenerowane %sPobierz dodatki...Pobierz gotowąDobraPrzerwa kart "absolwentów"Zielona flagaEdytor HTMLTrudnaCzy posiadasz latex i dvipng/dvisvgm?NagłówekPomocNajmniejsza trudnośćHistoriaEkran głównyPodział godzinowygodzinPominięto godziny, w których przeprowadzono mniej niż 30 powtórek.Jeśli masz swój wkład w program i nie jesteś na liście, zgłoś to.Gdybyś uczył się codziennieIgnoruj odpowiedzi z czasem dłuższym niżIgnoruj wielkość literIgnoruj poleIgnoruj ​​linie, których pierwsze pole pasuje do istniejącej notatkiIgnoruj tę aktualizacjęImportujImportuj plikImportuj nawet jeśli istniejąca notatka ma takie samo pierwsze poleImportowanie nie powiodło się. Importowanie nie powiodło się. Informacje debugowania: Opcje importowaniaImport zakończony powodzeniem.W katalogu z mediami, ale nieużywane przez żadne karty:Aby zapewnić, że Twoja kolekcja działa poprawnie na wszystkich urządzeniach, Anki potrzebuje poprawnie ustawionego zegara systemowego. Zegar systemowy może chodzić źle nawet jeśli Twój system pokazuje poprawny czas lokalny. Otwórz ustawienia czasu swojego komputera i sprawdź: - AM/PM - spóźnienie zegara - dzień, miesiąc i rok - strefę czasową - czas zimowy/letni Różnica w stosunku do poprawnego czasu: %sDołącz plikiDołącz informację o planowaniuDołącz etykietyZwiększenie dzisiejszego limitu nowych kartZwiększ dzisiejszy limit nowych kart oZwiększenie dzisiejszego limitu przejrzanych kartZwiększ dzisiejszy limit przejrzanych kart oRosnące przerwyZainstaluj dodatekJęzyk interfejsu:PrzerwaModyfikator przerwPrzerwyKod jest nieprawidłowy lub dodatek nie jest dostępny na tę wersję Anki.Nieprawidłowy kod.Nieprawidłowa konfiguracja: Nieprawidłowa nazwa pliku, zmień nazwę: %sNieprawidłowy plik. Proszę przywrócić dane z kopii zapasowej.Karta zawiera nieprawidłową wartość. Uruchom Narzędzia->Sprawdź bazę danych, jeśli problem powtórzy się, zadaj pytanie na stronie wsparcia technicznego.Niepoprawne wyrażenie regularne.Nieprawidłowe wyszukiwanie - poszukaj literówek.Została zawieszona.Pochylenie (Ctrl+I)Przeskocz do etykiet z Ctrl+Shift+TZachowajLaTeXRównanie LaTeXŚrodowisko matematyczne LaTeXPomyłkiOstatnia kartaOstatnia powtórkaNajpierw ostatnio dodaneNienauczoneNauka ponad limitNienauczone: %(a)s, Powtarzane: %(b)s, Uczone ponownie: %(c)s, Filtrowane: %(d)sNienauczoneDziałanie dla pijawekPróg pijawekPo lewejOgranicz doŁadowanie...Nie ma kart w lokalnej kolekcji. Ściągnąć je z AnkiWeb?Najdłuższa przerwaSzukaj w polu:Największa trudnośćZarządzajZarządzaj typami notatekZarządzaj typami notatekZarządzaj...Ręcznie schowane kartyOdwzorowanie na %sOdwzorowanie na etykietyWyróżnij notatkęBlok MathJaxLiniowy MathJaxDojrzałeMaksymalna przerwaMaksymalnie powtórek/dzieńPlikiMinimalna przerwaminutWymieszaj nowe karty i powtórkiTalia Mnemosyne 2.0 (*.db)WięcejNajwięcej pomyłekPrzenieś kartyPrzenieś karty do talii:Wieloznakowe separatory nie są obsługiwane. Wpisz tylko jeden znak.N&otatkaNazwa istnieje.Nazwa talii:Nazwa:SiećNoweNowe kartyLiczba nowych kart w talii ponad dzisiejszy limit: %sTylko nowe kartNowe karty/dzieńNowa nazwa talii:Przerwa nowej kartyNowa nazwa :Nowy typ notatki:Nowa nazwa grupy opcji:Nowa pozycja (1...%d):Nowy dzień zaczyna sięBrak flagiNie oczekują jeszcze żadne karty.Żadne karty nie odpowiadają podanym kryteriom.Brak pustych kart.Nie przejrzano dzisiaj żadnych dojrzałych kart.Nie znaleziono nieużywanych lub brakujących plików.Nie ma aktualizacjiNotatkaID notatkiTyp notatkiTypy notatekUsunięto notatkę i jej %d kartę.Usunięto notatkę i jej %d karty.Usunięto notatkę i jej %d kart.Notatka zakopana.Notatka została zawieszona.Uwaga: pliki nie podlegają kopii zapasowej. Dla bezpieczeństwa danych należy co jakiś czas robić kopię zapasową folderu Anki.Uwaga: Brakuje niektórych elementów historii. Aby dowiedzieć się więcej na ten temat, zobacz dokumentację przeglądarki.Notatki jako zwykły tekstW notatce wymagane jest przynajmniej jedno pole.Notatki oznaczone etykietąNicOKNajstarsze najpierwPrzy następnej synchronizacji wymuś zmiany w jednym kierunkuJedna lub więcej notatek nie zostały zaimportowane ponieważ nie tworzą żadnej karty. Tak się może zdarzyć kiedy są puste pola lub są nieprawidłowo przypisane wartości z pliku do właściwych pól.Można zmieniać pozycję tylko nowych kart.Tylko jeden klient może uzyskać w tym samym czasie dostęp AnkiWeb. Jeśli synchronizacja się nie powiodła należny spróbować ją wykonać ponownie za kilka minut.OtwórzOtwórz kopię zapasową...Optymalizacja...Opcjonalny limit:OpcjeOpcje dla %sGrupa opcji:Opcje...KolejnośćW kolejności dodaniaW kolejności przyjściaZmień szablon tyłu:Zmień czcionkę:Zmień szablon przodu:Spakowana kolekcja/talia Anki (*.apkg *.colpkg *.zip)Hasło:WklejWklej zdjęcia ze schowka jako PNGLekcja Pauker 1.8 (*.pau.gz)ProcentowoOkres: %sUmieść na końcu kolejki nowych kartUmieść w kolejce powtórek z przerwą pomiędzy:Proszę najpierw dodać inny typ notatki.Podłącz mikrofon i upewnij się, że inne programy nie używają urządzenia audio.Należy edytować tę notatkę i usunąć luki. (%s)Proszę upewnić się, że profil jest otwarty i program Anki nie jest zajęty, a następnie spróbować ponownie.Podaj nazwę filtru:Proszę zainstalować PyAudioProszę najpierw utworzyć profil.Usuń folder %s i spróbuj ponownie.Prosimy ponownie uruchomić Anki, aby ukończyć zmienę języka.Uruchom Narzędzia>Puste kartyProszę wybrać talię.Proszę wybrać karty tylko z jednego typu notatki.Należy wybrać co najmniej jeden element.Proszę zaktualizować Anki do najnowszej wersji.Użyj Plik>Import, by zaimportować ten plik.Należy przejść na stronę AnkiWeb, zaktualizować talię i spróbować ponownie.PołożenieUstawieniaPodglądPodgląd wybranej karty (%s)Podgląd nowych kartPodgląd kart dodanych przez ostatniePrzetworzono %d plikPrzetworzono %d plikiPrzetworzono %d plikówPrzetwarzanie...ProfileWymagana autentykacja proxy.Purpurowa flagaPytanieKoniec kolejki: %dPoczątek kolejki: %dZamknijLosowaKolejnośc losowaOcenaPrzebudujNagraj swój głosNagraj dźwięk (F5)Nagrywanie...
Czas: %0.1fCzerwona flagaWedług względnego spóźnieniaUczone ponownieZapamiętuj ostatnią wartość przy dodawaniuUsunąć %s z zapisanych wyszukiwań?Usuń typ karty...Usuń aktualny filtr...Usuń etykiety...Usuń formatowanie (Ctrl+R)Usunięcie tego typu karty spowodowałoby usunięcie jednej lub więcej notatek. Proszę najpierw utworzyć nowy typ karty.Zmień nazwęZmień nazwę typu karty...Zmień nazwę taliiZastąpić kolekcję przez poprzednią kopię zapasową?Odtwórz audioOdtwórz swój głosZmień pozycjęZmień pozycję typu karty...Zmień pozycję nowych kartZmień pozycję...Wymagaj co najmniej jednej z etykiet:Zmień planZmień planZmień plan na podstawie odpowiedzi w tej taliiWznów terazOdwrotny kierunek tekstu (RTL)Przywróć kopię zapasowąPrzywrócono do stanu sprzed '%s'.PowtarzaneLiczba powtórekCzas powtórkiPowtórka z wyprzedzeniemPowtórka z wyprzedzeniem oPowtórz karty zapomniane ostatnioPowtórka zapomnianych kartOdsetek poprawnych odpowiedzi w różnych porach dnia.PowtórkiOczekujące powtórki w talii ponad dzisiejszy limit: %sPo prawejZapiszZapisz aktualny filtr...Zapisz PDFZapisano.Zakres: %sSzukajSzukaj z formatowaniem (wolne)WybierzZaznacz &wszystkoWybierz ¬atkiWybierz etykiety do wykluczenia:Wybrany plik nie używa kodowania UTF-8. Przeczytaj rozdział o imporcie w podręczniku użytkownika.Selektywna naukaŚrednikNie znaleziono serwera. Albo twoje połączenie nie działa, albo program antywirusowy lub zapora sieciowa blokuje Anki dostęp do Internetu.Ustawić tę opcję grup dla wszystkich poniższych %s talii?Ustaw dla wszystkich podtaliiUstaw kolor czcionki (F7)Przytrzymano klawisz Shift. Pomijanie automatycznej synchronizacji i ładowania dodatków.Zmień pozycję istniejących kartSkrót klawiszowy: %sKlawisz skrótu: Strzałka w lewoKlawisz skrótu: Strzałka w prawo lub EnterSkrót: %sWyświetl %sPokaż odpowiedźPokaż obie stronyPokaż duplikatyPokaż czas odpowiedziWyświetl karty jako białe na czarnym (tryb nocny)Pokaż nowe karty po powtórkachPokaż nowe karty przed powtórkamiPokaż nowe karty w kolejności dodaniaPokaż nowe karty w losowej kolejnościPokaż czas następnej powtórki nad przyciskami odpowiedziPokaż ilość pozostałych kart w czasie powtórkiPasek bocznyRozmiar:Zostały jeszcze powiązane lub zakopane karty - czekają na następną sesję nauki.Niektóre ustawienia zadziałają dopiero po ponownym uruchomieniu Anki.Niektóre zmiany zostały zignorowane, ponieważ zmienił się typ notatki:Pole sortowaniaSortuj w przeglądarce według tego polaSortowanie w tej kolumnie nie jest możliwe. Proszę wybrać inną kolumnę.Dźwięk i wideo na kartach nie będą działać jeśli mpv lub mplayer nie są zainstalowane.OdstępPołożenie początkowe:Początkowa trudnośćStatystykiStatystykiKrok:Kroki (w minutach)Kroki muszą być liczbami.Zatrzymywanie...Przejrzano dziś %(a)s %(b)s.Przejrzane dzisiajNaukaNauka taliiNauka talii...Ucz się terazPowtórka według stanu karty lub etykietyStylStyl (wspólny dla wszystkich kart)Indeks dolny (Ctrl+=)Eksport XML Supermemo (*.xml)Indeks górny (Ctrl++)ZawieśZawieś kartęZawieś notatkęZawieszoneZawieszone+zakopaneSynchronizacjaSynchronizuj również dźwięki i obrazySynchronizacja nie powiodła się: %sSynchronizacja nie powiodła się; brak połączenia z internetem.Synchronizacja wymaga, aby zegar na twoim komputerze był ustawiony poprawnie. Nastaw zegar i spróbuj ponownie.Synchronizacja...TabulatorDuplikaty etykietTylko etykietaEtykietyTalia docelowa (Ctrl+D)Pole docelowe:TekstTekst oddzielony tabulacją lub średnikami (*)Ta talia już istnieje.Ta nazwa pola jest już używana.Ta nazwa jest już używana.Przekroczono limit czasu połączenia z AnkiWeb. Proszę sprawdzić stan połączenia z siecią i spróbować ponownie.Usunięcie domyślnej konfiguracji nie jest możliwe.Domyślna talia nie może zostać usunięta.Podział kart w Twojej talii (taliach).Pobrano uszkodzoną zawartość. Spróbuj ponownie.Pierwsze pole jest puste.Pierwsze pole typu notatki musi być przypisane.Ten znak nie może być użyty: %sPrzód tej karty jest pusty. Uruchom Narzędzia>Puste kartyWprowadzony tekst spowodowałby utworzenie pustego pytania we wszystkich kartach.Liczba dodanych nowych kart.Liczba pytań, na które odpowiedziałeś/aś.Liczba powtórek oczekujących w przyszłości.Liczba naciśnięć każdego przycisku.Uprawnienia do systemowego folderu tymczasowego są nieprawidłowe, a Anki nie jest w stanie automatycznie ich poprawić. Przeczytaj w podręczniku Anki część "temp folder".Podany plik nie jest poprawnym plikiem .apkg.Nie znaleziono kart odpowiadającym kryteriom wyszukiwania. Chcesz spróbować z innym hasłem?Żądana zmiana wymagać będzie pełnego wysłania bazy danych przy następnej synchronizacji Twojej kolekcji. Jeżeli posiadasz powtórki lub inne oczekujące zmiany na innym urządzeniu, które nie zostały jeszcze zsynchronizowane, zostaną one utracone. Czy kontynuować?Czas odpowiedzi na pytania.Więcej nowych kart jest dostępnych, ale dzienny limit został przekroczony. Możesz zwiększyć limit w opcjach, ale miej na uwadze, że im więcej nowych kart poznajesz, tym liczba kart do przejrzenia w najbliższym czasie będzie większa.Musi istnieć przynajmniej jeden profil.Nie można sortować po tej kolumnie, ale można wyszukiwać konkretne typy kart, np. 'card:1'.Nie można sortować po tej kolumnie, ale możesz szukać konkretnej talii, klikając ją po lewej stronie.Ten plik nie jest prawidłowym plikiem .apkg. Jeżeli ten błąd dotyczy plików pobranych z AnkiWeb, to być może nie został poprawnie pobrany. Jeżeli problem będzie się powtarzał spróbuj użyć innej przeglądarki.Plik już istnieje. Na pewno chcesz go nadpisać?W tym katalogu przechowywane są wszystkie dane programu Anki, aby łatwo tworzyć kopie zapasowe. Żeby zmienić lokalizację plików, zobacz: %s Specjalna talia do powtórek poza normalnym rozkładem.To {{c1::sample}} luka do wypełnienia.Zostanie stworzona %d karta. Kontynuować?Zostaną stworzone %d karty. Kontynuować?Zostanie stworzonych %d kart. Kontynuować?Twoja kolekcja zostanie usunięta i zastąpiona danymi z pliku, który importujesz. Chcesz kontynuować?CzasLimit czasowy - TimeboxDo przejrzeniaAby przeglądać dodatki, kliknij przycisk Przeglądaj.

Gdy znajdziesz dodatek, wklej jego kod poniżej. Możesz wkleić wiele kodów oddzielonych spacją.Aby wprowadzić luki do istniejącej notatki, musisz zmienić jej typ na lukę przez Edycja>Zmień typ notatkiAby je teraz zobaczyć, kliknij przycisk OdkopAby uczyć się poza normalnym rozkładem, kliknij poniżej przycisk Niestandardowa nauka.DzisiajDzisiejszy limit powtórki został osiągnięty, ale są jeszcze karty czekające na powtórkę. Dla najlepszego zapamiętywania, rozważ zwiększenie dziennego limitu w opcjach.Włącz/wyłączPrzełącz wyróżnieniePrzełącz zawieszenieRazemCałkowity czasWszystkich kartWszystkich notatekTraktuj wartość pola jako wyrażenie regularneTypWpisz odpowiedź: nieznane pole %sNie można zaimportować z pliku tylko do odczytu.Nie udało się przenieść pliku do kosza - spróbuj zrestartować komputerOdkopPodkreślenie (Ctrl+U)CofnijCofnij %sNiespodziewany kod odpowiedzi: %sNieznany format pliku.NiewidzianeAktualizuj istniejące notatki jeżeli zgadzają się pierwsze polaZaktualizować poniższe dodatki?Zaktualizowano %(a)d z %(b)d istniejących notatek.Wyślij do AnkiWebWysyłanie do AnkiWeb...Użyte w kartach, ale brakujące w folderze z plikami:Użytkownik 1Wersja %sOdwiedź stronę dodatkuPokaż plikiOczekiwanie na zakończenie edycji.Uwaga: wypełnianie luk nie będzie działać, jeśli nie ustawisz typu na górze na Luka.Dodawaj domyślnie do aktualnej taliiCała kolekcjaCzy chcesz ściągnąć ją teraz?Stworzone przez Damiena Elmesa, z poprawkami, tłumaczeniami, testowaniem i projektem autorstwa następujących osób:

%(cont)sWybrano typ Luka, ale nie ma żadnych luk do wypełnienia. Kontynuować?Masz mnóstwo talii. Zobacz %(a)s. %(b)sNie nagrałeś jeszcze swojego głosu.Musi istnieć przynajmniej jedna kolumna.MłodeMłode+NienauczoneTwoje zmiany dotkną wiele talii. Jeśli chcesz zmienić tylko aktualną talię, dodaj najpierw nową grupę opcji.Twój plik kolekcji wydaje się być zepsuty. Może to nastąpić przez kopiowanie lub przenoszenie pliku gdy Anki działa albo gdy kolekcja jest przechowywana na dysku sieciowym lub w chmurze. Jeśli problem nie zniknie po ponownym uruchomieniu komputera, użyj opcji automatycznej kopii zapasowej w menedżerze profili.Twoja kolekcja jest w niespójnym stanie. Uruchom Narzędzia>Sprawdź bazę danych i ponownie wykonaj synchronizację.Twoja kolekcja lub pliki multimedialne są zbyt duże i nie można ich synchronizować.Twoja kolekcja została pomyślnie przesłana do AnkiWeb. Jeśli używasz innych urządzeń, wykonaj na nich synchronizację, wybierając ściągnięcie kolekcji przesłanej przed chwilą z tego komputera. Dzięki temu przyszłe aktualizacje i dodatkowe karty będą ze sobą automatycznie połączone.Twoje talie tu i na AnkiWeb różnią się w taki sposób, że nie mogą być złączone razem. Konieczne jest nadpisanie talii po jednej stronie taliami z drugiej strony. Jeśli wybierzesz ściągnięcie, Anki ściągnie kolekcję z AnkiWeb i wszystkie zmiany wykonane na Twoim komputerze od ostatniej synchronizacji będą stracone. Jeśli wybierzesz wysłanie, Anki wyśle Twoją kolekcję do AnkiWeb i wszystkie zmiany wykonane w AnkiWeb albo na innych urządzeniach od ostatniej synchronizacji będą stracone. Po zsynchronizowaniu wszystkich urządzeń kolejne powtórki i dodane karty zostaną złączone automatycznie.Zapora sieciowa lub program antywirusowy uniemożliwia Anki połączenie. Dodaj wyjątek dla Anki.[brak talii]kopii zapasowychkartkarty z taliiWybrane karty:kolekcjaddnitaliaczas życia taliiduplikatpomocukryjgodzingodziny po północyw %s dzieńw %s dniw %s dniw %s godzinęw %s godzinyw %s godzinw %s minutęw %s minutyw %s minutw %s miesiącw %s miesiącew %s miesięcyw %s sekundęw %s sekundyw %s sekundw %s rokw %s lataw %s latpomyłekponiżej 0,1 karty/minutęodwzorowane na %sodwzorowane na etykietyminutminutmopowtóreksekundstatystykita stronawcała kolekcja~anki-2.1.0+dfsg~b36/locale/pt/000077500000000000000000000000001323611211500157415ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/pt/LC_MESSAGES/000077500000000000000000000000001323611211500175265ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/pt/LC_MESSAGES/anki.mo000066400000000000000000002117341323611211500210150ustar00rootroot00000000000000]5G G GHH" H0H 2HKFKUKfK{KKK KKKKKKKK KKLL*L3L 9LDLJLPLTL [LeL kLvLL LLLLLLLL MM0M HMUMdM jM uMMMMMMANCNFNNNUNZN_NcNgNTkNN,N(NO!7OYOfqOO OO P P%P5PGP\PesPP7Q QQ5QXRYgR%RkR SS _SjSnSS S SS S SS SSS'T@THTOTWT ]T$iTT TTT T T%TKTFU[U"?WbW gWuWWWXRYvXY7Y ZwZEZ@Z[[([R0[[[\#*\#N\r\ \\(\\ \ ] ]*]C]T] Y] f] t]]]]]] ]]^J^S^f^|^^^^ ^ ^)^'^_______ _ _ _ ` `` 1`>`N```3f``S`a aa a 'a3aBaSamaa"aaaa&a bb b'b 8b Db Ob\b nbxb~b bbbbb-bcc c 'c(5c5^c cc&d/d84d5mdPd7d,eCe HeTe#leeeeeee e e eeeeeeffff f *f 7f Df Qf ^f kf xf f fff f fff ff gg,g0gPg Ug bg ng|gg/gggg%g h h h +h 8h Dh Qh ]hkh,h(hhhF iNQiPi>iP0jj]j j8j-k4kJk_k{kk kkkk k kk k k kk kkl)l0=lnll4l!lll#m,mBm[mmmn n.nBnHnJnMn in wnnn nn nnn nnnnno o5oFo Mo XoeoN}o"oop ppp.p4p;ppppq q'q6q>qQqaq pq{qq q qq,qqq qqqrr.rFIrrr r r4rs*s 1s1=sossss*ss uu uu"u"v +vLvavpvvv v v)vvewwwwwwwww w xx(x.x<@x}x xxxx x5xxy yy%y7y Ly Vy `y ly vyyyyyyyyyyz z #z.zBz HzUzdzjzrz vzz zz z zzzz{{{+2{^{#n{!{{{{ { {<{ )|6|]F|a|}!} <}J}R}U},g}}#\~k~~~ &5 DO U ak    ,+#XV|8ӀE Ri*0,B-[+8  &#80\  Ãσ؃ "3Eaj#˄߄i"  х܅ ": B1M  ن 5-Lz Ň Vu ,?TGo ؉" %2 :FVfxъ*'CK@Q68ɋ ! ?/ou  Ԍ  2:Yl ʍۍ !d6 Žǎ ܎( 2SXn+Ǐ"&+=i0+>F'f*(1,ҒII'9a#Meqו8ΖC(ۗFrKØ ֘u/VMԙڙ{  š!Κ';BZ_g.ϛ&&,>k r} U$3"DZgS0$G"l {^5|U #)= OZ\a f pzԣ -/ 3 > L Y&c "Φ? 0AU)h))+.AXTG''.'V'~''Ω .8GXm֪ͪڪ  0> FS \fjpy  " 3 @4J  ЬíʭЭ֭ܭkX.Z+!Ԯx ̯ ٯ #v:5a FZjY/IJ dz6J^ u$*Ҵ ڴ -> DQn6Rߵ2@Jٸ\Hq̻XLK F_o#'6!^!> +>Xioȿп" +6PSW  02P@IOX` ht KdS|  *F\(n& #9 LZl  "7 R^ g t)4 py>3_TS( %)07>EL S ^ it{    *7> E O\q ) "/FN<k # 3APc,2*!QAUe=O` [ UEa'7 =IPfw ~ 1HOhEl* %D"Y|,@ IAU %. 5@HQe~i *w "  '4ETX i u  5S/! F8S\;n58&_A$Pu+.(+ 7Vk  ?" '-=O UcyI   6 ? I>W  ' 3ARYk  &,=QW\ bo  & 0.Q)?%(- 5 BVP/`mG$#>*i1L  #4 GSYp1 2 >&K0r,`o1m)*/TA,5H7c@D ! +9,Mz9C $1 NYbv   *5$Uzx[d~ ) 4 ?=I #)">/a.   #.!7 Ydu"{&6G?" &.VU'%- < GRcz)(6(7@`7 QJBJ2Dbj}   *(8a h% %"H+eq. @J `l/r$Y1V*2<#2A+tOE"6&Y*)7@%+E&!zH3?0Dl8 7B[z $# '( 7P     " !   < K 2k   3      5 (F Yo )  # W) y 8 "4 %W }   "K!b s  #5Pg   *6"*f 7Z`9: p. V[J`"G\AjXP}Gl!#%&s'$()Ja45*Yt$]Z~+Tp! m6nN;Q\K9uL4MEkY HgI}b "n?/[r; Hh[,7]<#f.=a R_z@2@b3U{gJ_L:^g~NW;\D|Q` AX 7F{BPymSXn{H&Z)o9=F> vqu+Q& 3SGy(u2>MT6TMsh!2''?WC8%i~H_c;q|J5 \y*+,./0:]oca GBdC1}$Xq w RdlmO DzVIU:v>)%0U,7K$fYP-O)tx1 AL3vQD<MEzFE8ex?S I-K9/lOj^8KZ&W!iw t@rh4A0EI(]Cik PwdjU2^YWr#V5(RN.e1 b< F<O8?'C=BpND"T1o-+c,S-k/0|=5%@R #ex36>s4[LVB (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedCheck &Media...Check for UpdatesCheck the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFilterFilter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Map to %sMap to TagsMark NoteMathJax blockMathJax inlineMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckReplay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: Anki 0.9.7.7 Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-11-23 01:17+0000 Last-Translator: Guillem Palau Salvà Language-Team: LANGUAGE <> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) X-Poedit-Country: Portugal Language: X-Poedit-Language: Português (1 de %d) (desativado) (desligado) (ligado) Contém %d ficha. Contém %d fichas.%% Correctas%(a)0.1f %(b)s/dia%(a)0.1fkB acima, %(b)0.1fkB baixo%(a)0.1fs (%(b)s)%(a)d de %(b)d nota atualizada%(a)d de %(b)d notas atualizadas%(n)d: %(name)s%(tot)s %(unit)s%.01f fichas/minuto%d ficha%d fichas%d ficha eliminada.%d fichas eliminadas.%d ficha exportada.%d fichas exportadas.%d ficha importada.%d fichas importadas.%d ficha estudada em%d fichas estudadas em%d baralho atualizado.%d baralhos atualizados%d grupo%d grupos%d alteração de multimédia para carregar%d alterações de multimédia para carregar%d ficheiro de média descarregado%d ficheiros de média descarregados%d nota%d notas%d nota adicionada%d notas adicionadas%d nota eliminada.%d notas eliminadas.%d nota exportada.%d notas exportadas.%d nota importada.%d notas importadas.%d nota inalterada%d notas inalteradas%d nota atualizada%d notas atualizadas%d revisão%d revisões%d selecionado%d selecionados%s cópia%s dia%s dias%s hora%s horas%s minuto%s minutos%s minuto.%s minutos.%s mês%s meses%s segundo%s segundos%s para eliminar:%s ano%s anos%sdia(s)%sh%smin(s)%sme%ss%sy&Sobre...&Navegar e instalar...&Fichas&Checar Banco de Dados&Intensivo...&Editar&Exportar...&Arquivo&Procurar&Ir&Guia&Guia...&Ajuda&Importar...&Info...&Inverter seleção&Próxima ficha&Notas&Abrir Pasta de Complementos...&Preferências...Ficha &anterior&Reagendar...&Suporte Anki...Mudar de &Perfil&Ferramentas&Desfazer'%(row)s' tem %(num1)d campos, de %(num2)d esperados(%s certo)(Nota eliminada)(fim)(filtrado)(estudando)(novo)(limite pai: %d)(por favor, seleccione 1 ficha)...Os arquivos .anki2 não são projetados para serem importados. Se você estiver tentando restaurar uma cópia de segurança, por favor, consulte a seção "Cópias de segurança" do manual do usuário./0d1 mês1 ano10:0022:003:004:0016:00504 erro de tempo limite de portal recebido. Por favor, tente desabilitar temporariamente o seu antivírus.:%d ficha%d fichasAbrir pasta de backupVisite o site%(pct)d%% (%(x)s de %(y)s)%Y-%m-%d @ %H:%MBackups
Anki criará uma cópia de segurança da sua coleção a cada vez que ela for fechada ou sincronizada.Formato a exportar:Encontrar:Tamanho da FonteFonteEm:Incluir:Tamanho da LinhaSubstituir Por:SincronizaçãoSincronização
Não ativada agora; clique no botão de sincronização na janela principal para ativá-la.

Requer conta

Uma conta grátis é necessária para manter sua coleção sincronizada. Por favor, registre-se e então entre com seus detalhes abaixo.

Anki atualizado

Anki %s foi lançado.

Um muito obrigado a todas as pessoas que nos deram sugestões, avisos de bugs e doações.A dificuldade da ficha é o tamanho do próximo intervalo quando você responder "bom" na revisão.Um baralho filtrado não pode ter sub-baralhos.Um problema ocorreu durante a sincronização. Por favor, vá em Ferramentas>Verificar Média, e sincronize novamente para corrigir o problema.Abortado: %sSobre o AnkiAdicionarAdicionar (atalho: ctrl+enter)Adicionar tipo de ficha...Adicionar CampoAdicionar MédiaCriar Novo Baralho (Ctrl+N)Adicionar Tipo de NotaAdicionar invertidoAdicionar etiquetasAdicionar etiquetas...Adicionar a:Complemento não tem configuração.O add-on não foi descarregado do AnkiWeb.Add-onsAdicionar...Adicionar: %sAdicionadoAdicionado hojeDuplicata adicionada com o primeiro campo: %sErreiRepetir HojeContagem de repetições: %sTodos os tipos de fichaTodos os BaralhosTodos os CamposTodas as fichas em ordem aleatória (estudo intensivo)Todas as fichas, notas e média para este usuário serão eliminadas. Tem certeza?Permitir HTML em camposUm erro ocorreu ao aceder à base de dados. Causas possíveis: - Software de antivírus, firewall, cópias de segurança ou sincronização pode estar a interferir com o Anki. Experimente desativar este software e veja se o problema desaparece. - O seu disco pode estar cheio. - A pasta Documentos/Anki pode estar numa unidade de rede. - Pode não ser permitida a escrita de ficheiros na pasta Documentos/Anki. - O seu disco rígido pode conter erros. É uma boa ideia executar Ferramentas>Verificar Base de Dados para se assegurar que a sua coleção não foi corrompida. Ocorreu um erro ao abrir %sAnkiBaralho Anki 2.0Pacote de coleção de AnkiPacote Anki BaralhoO Anki não pôde renomear o seu perfil porque não foi capaz de renomear a pasta de perfil no disco. Por favor assegure-se que possui permissões para escrever em Documentos/Anki e que mais nenhum programa acede as suas pastas de perfil e volte a tentar.O Anki não conseguiu encontrar a linha entre a questão e a resposta. Por favor, ajuste o modelo manualmente para alternar entre a questão e a resposta.Anki é um sistema de aprendizagem amigável e inteligente. É gratuito e de código aberto.O Anki é licenciado sob a licença AGPL3. Por favor, veja o arquivo de licença na distribuição do código-fonte para mais informação.O Usuário AnkiWeb ou senha está incorreto; por favor, tente outra vez.Usuário AnkiWeb:AnkiWeb encontrou um erro. Por favor, tente outra vez em alguns minutos, e se o problema persistir, por favor, reporte a falha.O AnkiWeb está sobrecarregado no momento. Por favor, tente outra vez em alguns minutos.AnkiWeb está em manutenção. Por favor tente novamente em alguns minutos.RespostaBotões de RespostaRespostasO antivirus ou firewall está bloqueando o Anki de acessar a internet.Qualquier MarcaTodas as fichas em branco serão eliminadas. Se uma nota não tiver ficha referente, será perdida. Tem certeza que quer continuar?Aparece 2 vezes no arquivo: %sTem certeza que deseja eliminar %s?Ao menos um tipo de ficha é requerido.Ao menos um passo é necessário.Anexar imagens/áudio/vídeo (F3)Tocar áudio automaticamenteSincronizar automaticamente ao abrir/fechar perfil de usuárioMédiaTempo médioTempo médio de respostaDificuldade médiaMédia dos dias estudadosIntervalo médioVersoVisualizar o VersoModelo do VersoA fazer cópia de segurança...Cópias de segurançaBásicoBásico (e ficha invertida)Básico (ficha invertida opcional)Básico (digite a resposta)Marca azulTexto em negrito (Ctrl+B)PainelNavegar (%(cur)d carta exibida; %(sel)s)Navegar (%(cur)d cartas exibidas; %(sel)s)Aparência do PainelAspeto do navegador...Opções do exploradorCriarOcultasOcultarOcultar fichaOcultar NotaOcultar fichas relacionadas até ao dia seguinteOcultar revisões relacionadas até o próximo diaPor definição, Anki detecta os caracteres entre os campos, como um tab, vírgula, etc. Se Anki estiver detectando incorretamente, você pode digitá-lo aqui. Use \t para representar tab.CancelarFichaFicha %dFicha 1Ficha 2ID da fichaLista de fichasEstado de fichaTipo de fichaTipo de ficha:Tipos de fichaTipos de ficha para %sFicha ocultada.Ficha suspensa.Ficha era um sanguessuga.FichasAs fichas não podem ser movidas manualmente dentro de um baralho filtrado.Fichas em texto simplesAs fichas voltarão automaticamente aos seus baralhos originais depois da revisão.Fichas...CentroAlterarMudar %s para:Mudar baralhoMudar baralho...Mudar Tipo de NotaMudar Tipo de Nota (Ctrl+N)Mudar Tipo de Nota...Mudar de cor (F8)Mudar baralho dependendo do tipo de notaAlteradoVerificação e Mídia...Verificar atualizaçõesVerificar ficheiros na pasta de mídiaVerificando...EscolherEscolher BaralhoEscolher Tipo de NotaEscolha etiquetas.Remover marcaLimpar Não-usadoLimpar Etiquetas Não-usadasClone: %sFecharFechar e perder este cartão?A fechar...Omissão de PalavrasFechar eliminação (Ctrl+Shift+C)Código:Coleção exportada.A coleção está corrompida. Por favor, veja o manual.Dois pontosVírgulaDefiniçõesDefiniçõesConfigurar idioma de interface e opçõesParabéns! Você terminou este baralho por enquanto.Conectando...A ligação expirou. Poderá estar com problemas na ligação à internet ou tem um ficheiro demasiado grande na pasta de Média.AvançarCopiarRespostas correctas em fichas maduras: %(a)d/%(b)d (%(c).1f%%)Certo: %(pct)0.2f%%
(%(good)d de %(tot)d)AnkiWeb não pôde ser conectado. Por favor, verifique sua conexão à rede e tente outra vez.Não foi possível gravar o áudio. O codec lame e o programa sox estão instalados?Não foi possível salvar o ficheiro: %sFiltradosCriar BaralhoCriar Baralho Filtrado...Criar imagens escaláveis com dvisvgmCriadoCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZAcumuladoAcumulado %sRespostas AcumuladasFichas cumulativasBaralho AtualTipo de nota atual:Estudo PersonalizadoSessão de Estudo PersonalizadoRecortarBanco de dados reconstruído e otimizado.DataDias estudadosDesautorizarConsole de depuraçãoBaralhoSubstituição de Baralho...O baralho será importando quando um usuário for escolhido.BaralhosMais distantes a estudar/revisarPadrãoIntervalos entre as revisões.EliminarEliminar fichasEliminar baralhoEliminar vaziasEliminar notaEliminar notasEliminar etiquetasEliminar não utilizado/a(s)Eliminar campo de %s?Eliminar o tipo de ficha '%(a)s' e os %(b)s?Eliminar este tipo de nota e todas as suas fichas?Eliminar este tipo de nota não utilizado?Eliminar média não utilizada?%d ficha com a nota em falta eliminada.%d fichas com a nota em falta eliminadas.%d ficha com o modelo em falta eliminada.%d fichas com o modelo em falta eliminadas.Foi eliminada %d nota com tipo de nota em falta.Foram eliminadas %d notas com tipo de nota em falta.%d nota sem fichas eliminada.%d notas sem fichas eliminadas.Eliminar %d nota com erro na contagem do campo.Eliminar %d notas com erro na contagem do campo.Eliminado.Ao eliminar este baralho da lista, todas as fichas restantes voltarão ao baralho original.DescriçãoDescrição para mostrar no ecrâ de estudo (apenas o baralho atual):Caixa de DiálogoDescarregar do AnkiWeb%(fname)s foi descarregadoA descarregar do AnkiWeb...A reverApenas fichas pendentesA rever amanhãSai&rDificuldadeFácilBónus por ser FácilIntervalo fácilEditarEditar "%s"Editar AtualEditar HTMLEditadoFonte de EdiçãoVazioFichas vazias...Números das fichas vazias: %(c)s Campos: %(f)s Fichas vazias encontradas. Por favor, execute Ferramentas>Fichas vazias.Primeiro campo vazio: %sFimAbra o baralho para colocar %s novas fichas nele, ou deixe em branco:Digite a nova posição da ficha (1...%s):Digite as etiquetas a adicionar:Digite as etiquetas a eliminar:Erro ao descarregar %(id)s: %(error)sErro no download: %sErro durante a inicialização: %sErro na tentativa de estabelecer um ligação segura. Normalmente, isto é causado por software de antivírus, firewall ou VPN ou problemas com o seu ISP.Erro ao executar %s.Erro ao executar %sExportarExportar...%d ficheiro de média exportado%d ficheiros de média exportadosExtraFF1Campo %d do ficheiro é:Mapeamento de campoNome do campo:Campo:CamposCampos para %sCampos separados por: %sCampos...Fil&trarFiltroFiltrar...Filtro:FiltradoBaralho Filtrado %dEncontrar &Duplicados...Encontrar DuplicadosLocalizar e &Substituir...Localizar e substituirTerminarPrimeira fichaPrimeira RevisãoPrimeiro campo encontrado: %s%d ficha com propriedades inválidas foi reparada.%d fichas com propriedades inválidas foram reparadas.Corrigido erros AnkiDroid , deck corrigidoTipo de nota corrigida: %sMarcarCarta de MarcadorVirarA pasta já existe.Fonte:RodapéPor segurança, '%s' não é permitido nas fichas. Ainda pode, em vez disso, usá-lo colocando o comando num pacote diferente e importando o pacote no cabeçalho LaTeX.PrevisãoFormulárioEncontrar %(a)s através de %(b)s.FrenteVisualizar a FrenteModelo da FrenteGeralficheiro gerado: %sGerado em %sObter add-ons...Obter partilhaBomRepetir 'Bom' emMarca verdeEditor HTMLDifícilInstalou latex e dvipng/dvisvgm?CabeçalhoAjudaMais fácilHistóricoInícioDistribuição por horaHorasHoras com menos de 30 revisões não foram mostradas.Se você tiver contribuído e não estiver nesta lista, por favor entre em contato.Se você estudou todos os diasIgnorar resposta dada acima deIgnorar maiúsculas / minúsculasIgnorar campoIgnorar linhas onde o primeiro campo corresponda a uma nota existente.Ignorar esta atualizaçãoImportarImportar ficheiroImportar mesmo que existam notas com o primeiro campo igualImportação falhou. Importação falhou. Informações para depuração: Opções de importaçãoImportação completa.Na pasta média, mas não utilizado(s) em nenhuma ficha:Para garantir que a sua coleção funcione corretamente caso seja transferida entre dispositivos, é preciso que o relógio interno de seu computador esteja configurado corretamente. O relógio interno pode estar errado mesmo se seu sistema esteja mostrando a hora local correta. Por favor, abra as configurações do seu computador e verifique o seguinte: - AM/PM - Diferença horária - Dia, mês e ano - Fuso horário - Horário de verão Diferença para corrigir o tempo: %s.Incluir médiaIncluir informações de agendamentoIncluir etiquetasAumentar o limite de fichas novas para hojeAumentar o limite de fichas novas para hoje emAumentar o limite de fichas a rever hojeAumentar o limite de fichas a rever hoje emMais próximos a estudar/reverInstalar ComplementoIdioma da Interface:IntervaloModificar o intervaloIntervalosCódigo inválido.Ficheiro inválido. Por favor, restaure a cópia de segurança.Propriedade inválida encontrada na ficha. Por favor, use Ferramentas>Verificar base de dados, e se o problema aparecer de novo, por favor, faça uma pergunta no site de suporte.Expressão regular inválida.Isto foi suspenso.Texto em itálico (Ctrl+I)Ir para etiquetas com Ctrl+Shift+TManterLaTeXEquação LaTeXMatemática LaTeXErrosÚltima fichaRevisão mais recenteCriados há menos tempoAprenderAprender além do limiteAprendidos: %(a)s, Revistos: %(b)s, Reaprendidos: %(c)s, Filtrados: %(d)sAprendizagemAção de sanguessugaLimite de sanguessugaEsquerdaLimitar aCarregando...A coleção local não contém fichas. Descarregar de AnkiWeb?Maior intervaloVer no campo:Mais difícilGerirGerenciar Tipos de NotasGerir Tipos de Notas...Gerir...Mapear para %sMapear para EtiquetasMarcar notabloco MathJaxMathJax em linhaMaduroIntervalo máximorevisões máximas/diaMédiaIntervalo mínimoMinutosMisturar fichas novas e a reverBaralho Mnemosyne 2.0 (*.db)MaisMais respostas erradasMover fichasMover fichas para o baralho:N&otaNome já existe.Nome para o baralhoNome:RedeNovosNovas fichasSomente fichas novasNovas fichas/diaNovo nome do baralho:Novo intervaloNovo nome:Novo tipo de nota:Novo nome do grupo de opções:Nova posição (1...%d):Novo dia começa àsSem MarcaNenhuma ficha é pendente ainda.Nenhuma ficha corresponde aos seus critérios.Não há fichas vazias.Hoje não foram estudadas fichas maduras.Todos os ficheiros foram localizados e estão a ser utilizados.Não há atualizações disponíveis.NotaID notaTipo de NotaTipos de NotaA nota e a sua %d ficha foram eliminadas.A nota e as suas %d fichas foram eliminadas.A nota ficará oculta até o Anki ser reaberto.Nota suspensa.Nota: A média não tem backup. Por favor, copie periodicamente a sua pasta Anki por segurança.Nota: Algo no histórico foi perdido. Para mais informações, por favor, veja a documentação do navegador.Notas em Texto PuroAs notas requerem ao menos um campo.Notas marcadas.NadaOKMais antiga data do primeiro estudoNa próxima sincronização, obrigar mudanças numa direção.Uma ou mais notas não foram importadas porque não geraram fichas, talvez por terem campos vazios ou porque não mapeou o conteúdo do ficheiro texto para os campos correctos.Somente as fichas novas podem ser reposicionadas.Apenas um cliente pode aceder ao AnkiWeb de cada vez. Se uma sincronização anterior falhou, por favor tente novamente em alguns minutos.AbrirAbrir cópia de segurança...Otimizando...Limite opcional:OpçõesOpções para %sGrupo de opções:Opções...OrdemCriados há mais tempoRevisões mais próximasSubstituir modelo do verso:Substituir frente:Substituir modelo da frente:Senha:ColarColar imagens da área de transferência como PNGPauker Lição 1.8 (*.pau.gz)PercentagemPeríodo: %sColocar no fim da fila de novas fichasColocar na fila de revisão com intervalo entre:Por favor, crie outro tipo de nota primeiro.Por favor, ligue um microfone e certifique-se que outros programas não estejam a usar o áudio.Por favor, clique em Editar abaixo, marque alguma palavra e clique em Omissão de Palavras (Ctrl+Shift+C). (%s)Certifique-se que um perfil de utilizador está aberto e o Anki não está bloqueado, então tente outra vez.Por favor, instale PyAudioPor favor, primeiro escolha o utilizador.Por favor, remova a pasta %s e tente novamente.Por favor reinicie o Anki para completar a alteração de idioma.Por favor, execute Ferramentas>Fichas vaziasPor favor, escolha um baralho.Por favor, escolhe fichas de somente um tipo de nota.Por favor, selecione algo.Por favor, atualize o Anki para a versão mais recente.Por favor, use Ficheiro -> Importar para importar este ficheiro.Por favor, visite o AnkiWeb, atualize seu baralho e tente outra vez.PosiçãoPreferênciasPré-visualizaçãoPré-visualizar as fichas seleccionadas (%s)Pré-visualizar fichas novasPré-visualizar fichas novas criadas no/a(s) último/a(s)%d ficheiro de média processado%d ficheiros de média processadosProcessando...utilizadoresRequer autenticação proxy.Marca lilaPerguntaÚltimo da fila: %dPrimeiro da fila: %dSairAleatórioOrdem aleatóriaClassificaçãoRecriarGravar a Própria VozGravar áudio (F5)Gravando...
Tempo: %0.1fMarca vermelhaAtrasos relativosReaprenderNão apagar depois de adicionarRemover %s de suas pesquisas salvas?Eliminar tipo de ficha...Eliminar filtro atual...Eliminar etiquetas...Eliminar formatação (Ctrl+R)Remover este tipo de ficha causaria a eliminação de uma ou mais notas. Por favor, crie um novo tipo de ficha primeiro.RenomearEliminar tipo de ficha...Renomear BaralhoRepetir ÁudioRepetir Própria VozReposicionarTipo de Carta de Reposição...Reposicionar novas fichasReposicionar...Deve ter pelo menos uma dessas etiquetas:ReagendadoReagendarRe-agendar fichas com base nas minhas respostas neste baralhoResumir AgoraDirecção do texto invertida (RTL)Reverter a cópia de segurançaVoltar ao estado antes de '%s'.RevisãoContagem de revisãoTempo de RevisãoAntecipar a revisãoAntecipar a revisão dos próximosRever as fichas esquecidas no/a(s) último/a(s)Rever as fichas esquecidasRever a taxa de sucesso para cada hora do dia.RevisõesDireitaGuardarGuardar filtro atual...Guardar PDFGuardado.Escopo: %sProcurarProcurar com formatação (lento)SelecionarSelecionar &TudoSelecionar &NotasSeleccione etiquetas para excluir:O ficheiro selecionado não encontra-se no formato UTF-8. Por favor, veja no manual como fazer a importação corretamente.Estudo SeletivoPonto e vírgulaServidor não encontrado. Ou a sua ligação caiu, ou um programa antivírus/firewall está impedindo o Anki de aceder à internet.Definir todos os baralhos abaixo %s com este grupo de opções?Definir para todos os sub-baralhosEstabelecer cor do primeiro plano (F7)A tecla Shift foi pressionada. Ignorando o carregamento e sincronização automático.Alterar posição das fichas existentesTecla de Atalho: %sTecla de atalho: seta para a esquerdaTecla de atalho: seta para a direita ou EnterAtalho: %sMostrar %sMostrar RespostaMostrar ambos os ladosMostrar DuplicadosMostrar cronómetro de respostaMostrar novas fichas depois das revisõesMostrar novas fichas antes das revisõesMostrar novas fichas na ordem em que foram adicionadasMostrar novas fichas em ordem aleatóriaMostrar tempo da próxima revisão acima dos botões de respostaMostrar contador de fichas restantes durante a revisãoBarra lateralTamanho:Algumas fichas relacionadas ou ocultas foram atrasadas até uma próxima sessão.Algumas configurações só surtirão efeito quando você reiniciar o AnkiAlgumas atualizações foram ignoradas porque o tipo de nota foi alterado:Classificar CampoClassificar as fichas no explorador por este campoNão é possível classificar esta coluna. Por favor, escolha outra.EspaçoPosição inicial:Multiplicador de diasEstatísticasEstatísticasPasso:Passos (em minutos)Passos devem ser números.A parar...Estudados HojeEstudarEstudar BaralhoEstudar Baralho...Estudar AgoraEstudar pelo estado da ficha ou etiquetaEstiloEstilo (partilhado entre fichas)Subscrito (Ctrl+=)Exportação em Supermemo XML (*.xml)Índice (Ctrl++)SuspensoSuspender fichaSuspender NotaSuspensoSuspensas+OcultasSincronizarSincronizar áudios e imagens tambémFalha na sincronização: %sFalha na sincronização; internet offline.A sincronização requer que o relógio do seu computador esteja correto. Por favor, corrija-o e tente outra vez.Sincronizando...TabMarcadores duplicadosSomente EtiquetasEtiquetasBaralho Alvo (Ctrl+D)Campo alvo:TextoTexto separado por tabs ou ponto e vírgula (*)Este baralho já existe.Este nome de campo já está em uso.Este nome já está em uso.A conexão ao AnkiWeb expirou. Por favor, confira sua conexão à rede e tente outra vez.A configuração padrão não pode ser excluída.O baralho padrão não pode ser eliminado.Como as fichas se dividem no(s) seu(s) baralho(s).A transferência foi corrompida. Por favor, tente outra vez.O primeiro campo está vazio.O primeiro campo do tipo de nota deve ser mapeado.O seguinte caracter não pode ser usado: %sA frente desta ficha está vazia. Por favor, execute Ferramentas>Fichas vazias.A entrada que forneceu criaria uma pergunta vazia em todas as fichas.O número de fichas que adicionou.Quantas questões você já respondeu.Quantas revisões agendadas para o futuro.Quantas vezes você escolheu cada botão.As permissões na pasta temporária de seu sistema estão incorretas, e por isso o Anki não pode corrigí-los automáticamente. Por favor, procure por 'pasta temporária' no manual do Anki para mais informações.O ficheiro fornecido não é um ficheiro .apkg válido.A pesquisa não encontrou nenhuma ficha. Gostaria de alterá-la?A alteração solicitada exigirá que a base de dados completo seja enviada na próxima sincronização. Se houver revisões ou outras mudanças noutro dispositivo que ainda não tenham sido sincronizadas aqui, elas serão perdidas. Continuar?O tempo gasto para responder às questões.Há mais fichas novas disponíveis, mas o limite diário foi atingido. Pode aumentar o limite nas opções, porém, tenha presente que quanto mais fichas novas estudar, maior será a sua carga de revisão a curto prazo.Deve existir pelo menos um utilizador.Não se pode classificar por esta coluna, mas você pode procurar por baralhos específicos clicando em algum à esquerda.Este ficheiro não parece ser um ficheiro .apkg válido. Se recebe este erro de um ficheiro descarregado do AnkiWeb, provavelmente a descarga falhou. Por favor, tente novamente, e se o problema persistir, tente com um navegador diferente.Este ficheiro existe. Gostaria de sobreescrevê-lo?Esta pasta armazena todos os seus dados Anki em um único local para facilitar o backup. Se quiser que o Anki use um local diferente, por favor, veja: %s Este é um baralho especial para estudar fora da agenda normal.Isto é uma {{c1::sample}} omissão de palavras.Isto criará %d ficha. Continuar?Isto criará %d fichas. Continuar?Isto eliminará a sua colecção existente e substituirá os dados pelos do ficheiro importado. Tem certeza?TempoTempo limiteA reverPara omitir palavras numa nota existente, você precisa mudá-la para o tipo Omissão de Palavras, via Editar>Mudar Tipo de Nota.Para vê-los agora, clique no botão Desocultar abaixo.Para estudar sem interferir na agenda normal, clique no botão Estudo Personalizado abaixo.HojeO limite de revisão de hoje foi atingido, porém ainda existem fichas a serem revistas. Para melhorar a sua memória, considere aumentar o limite diário nas opções.Alternância habilitadoMarca de AlternânciaSuspensão de AlternânciaTotalTempo TotalTotal de fichasTotal de notasTratar texto como expressão regularTipoTipo de resposta: campo desconhecido %sNão é possível importar de ficheiro somente leitura.DesocultarSublinhar texto (Ctrl+U)AnularAnular %sCódigo de resposta inesperado: %sFormato de ficheiro desconhecido.Não vistosAtualizar notas existentes quando o primeiro campo coincidirAtualizar os seguintes add-ons?%(a)d de %(b)d notas existentes foram atualizadas.Enviar para o AnkiWebEnviando para o AnkiWeb...Usado(s) em fichas mas em falta na pasta de média:utilizador 1Versão %sVisitar página do add-onVer os ficheirosAguardando pela edição para finalizar.Atenção, exclusões cloze não funcionarão até que você mude o tipo no topo de ClozeAo criar, o baralho atual será o padrãoColeção inteiraGostaria de fazer o download agora?Escrito por Damien Elmes, com correções, traduções, testes e desenho de:

%(cont)sVocê tem uma eliminação de nota do tipo Cloze, mas não foram feitas quaisquer eliminações do tipo Cloze. Confirma?Você tem muitos baralhos. Por favor, veja %(a)s. %(b)s.Você ainda não gravou a sua voz.É preciso ter pelo menos uma coluna.JovemJovens e a aprenderSuas mudanças afetam múltiplos decks. Se você quer modificar apenas o deck atual, por favor, adicione novas opções de grupo primeiro.A sua colecção está num estado inconsistente. Por favor, execute Ferramentas>Verificar base de dados e sincronize novamente.A sua coleção ou um ficheiro de média é grande demais para sincronizar.A sua coleção foi subida com sucesso ao AnkiWeb. Se usa outros dispositivos, por favor, sincronize-os agora e escolha descarregar a colecção que acabou de enviar do seu computador. Depois de fazer isso, as revisões futuras e as fichas adicionadas serão incorporadas automaticamente.Os seus baralhos aqui e no AnkiWeb diferem tanto que não podem ser misturados, será necessário que um deles sobrescreva o outro. Se escolher descarregar, o Anki trará a colecção do AnkiWeb e todas as mudanças que tenha feito desde a última sincronização serão perdidas. Se escolher subir, o Anki copiará a sua colecção para o AnkiWeb e todas as mudanças que tenha feito no AnkiWeb ou em outros dispositivos desde a última sincronização serão perdidas. Assim que todos os dispositivos estiverem sincronizados, as futuras revisões e as fichas adicionadas serão misturadas automaticamente.[sem baralho]cópias de segurançafichasfichas do baralhofichas seleccionadas porcoleçãoddiasbaralhosempreduplicadoajudaesconderhorashoras depois da meia-noiterespostas erradasmenos de 0,1 fichas/minutomapeado para %smapeado para Etiquetasminsminutosmêsrevisõessegundosestatísticasesta páginawcoleção completa~anki-2.1.0+dfsg~b36/locale/pt_BR/000077500000000000000000000000001323611211500163245ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/pt_BR/LC_MESSAGES/000077500000000000000000000000001323611211500201115ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/pt_BR/LC_MESSAGES/anki.mo000066400000000000000000002277001323611211500214000ustar00rootroot00000000000000w7J J $J0J7J"=J`J bJlJJJ8JJJ KK".K$QK$vK&K"KK4K2-L`LqL"L$L$L$L MAMVMnMvMMMMMM MM N NNNNN "N,NCNJNZNcN iNtNzNNN NN NNN NNNNN OO*O:OAO0GO xOOO O OOOOOOqPsPvP~PPPPPPTPP,P(QHQ!gQQfQR R+R =R JRUReRwRReR S7SHS)4V ^WhW5{WXWY X%dXkX X Y YY,Y =Y GYQY gY uYY YYY'YYYYY Z$ Z1Z 7ZCZSZ bZ lZ%wZKZZ1Z0[["]] ]]^!^_I_R_v$``7Ea }awaEb@GbbbbRbbcc#c#cc dz(dd(dd dd ee4eEe Je We eese{eeee eeeJeDfWfmf}fff f f)f'ffgggggg g g g g hh "h/h?hQh3WhhShhhi i i$i3iDi^iri"iii0:jkj{j&jj jj jj j k kk ,k6krPr?s]Hs s8ssstt9t=t LtYt_tdt it ttt t t tt ttt)t0t,uBu4Fu!{uuu#uuvvvvv v.vwww w 'w 5wAwHw Ow]w uwww wwwwwwwwx x x#xN;x"xxx xxxxxxyyyy yyyyzz .z9z>z Rz ]ziz,nzzz zzzzz.zF{N{g{ { {4{{{ {1{-|=|]|l|*|| I~W~ v~~"~"~ ~ .BK ]?g $)2:?ETd k u<  5*`q  Ă ΂ ڂ -3DLf N !'/ 3&=d s ΄+B#R!v Ņ<Ѕ ]*a! .69,Kx#@kdЈՈ   (3 9 EOgv5 ʼnωՉ  &,E#rV8E&l*09,O|-+Ì8( 1=E`#r0 ǍՍލ   #16=MT\m#2Ai\Ə͏ / * ;F^ s" 1  "C J W cp-( 7@ GQXx  V ",ғG Jk|" Ŕ ͔ٔ (Fd*'֕ޕ@6%8\ !?–MPV f t ϗ ՗ :Mj  !d | ˙(Й 4XO+"Ԛ&+J0d+>F'G*o(1Ü,I*'B#._Re8HCآ(FEr !uפ/MM}˥ѥr  !Ŧ' L2ȧݧ.&1Xj,  ҨݨU$Rw"ZS0Z$"Ӫ ٪{a^}5ܬU}q  -8:? D NX]bh|ȱͱձر    " . ;"Eh jt?/-F-t-/е./VB;ն'''6'^''ַ '8Mdu ¸иԸ ظ ( 0= FPTZc jwչ   & 34= r} ºܺ»ȻͻһiػB2D+w!¼xu ǽҽv(5O=' epFZm'5 [ h u#7 N&[* - $1Ngy/`A2t&4[w|Jq\HeX@K F Sd(*>!i!>>[  .AW_$} SAVq  12*  1AQ`qM!U;   (.W`@<V%v& CMT r"7  #.)=4g *3=:3x_T 'a %  !,3<CJQX_f m z  ) =K_t) <$a j -.B3q)PW>eK\H \ B\n  " ) 5 BNVhz3O*G.,v  "; A OUWZy  4I`wq(2[v m w" #'8 GS&\  6S\{!F.7;H567$ E,W.,/ 1F [e {M3>6u#<A~"*BKJd  8<L [ is   7>P#X|X<BSdjou/ "B[ p}*+> Jkp x U^mf$ "#%@I3K& 3AR[l 8 FM1S  )0,bDoi%'/@2[84>6Du  ,--C[   %6FNbu  $!9Nyl 0M\ q~)  =  G "U x %     " + E .d  6        !  B M ^ "p z   / ? " " V6 )  # +   &1BYl+*8*@G9 VJ0J{0D WN  ):IQa t,%%*3ET] m%y+qZko  /$7YS1*4 5?u2+SKF0&*)?5AL+"mz)2?i0Dl   7![?!!!K"c"y"" """$""'"6#dP# ### #"# $ 3$<?$$|$2$$$2% 8% C%N% j%(w%Y%&%!&#3&WW&s&5#' Y'#z'' ''=:(x)H)$D*ni+y- R.`.v... ..... .....//4/K/i/n/v/ {// / ////J M GjZ$5_DV v=`@.@ajd{nEaN!r#6Lu;|jwr <$vKHwPKFP("af>j @]UAW'rR %ws cf.Vkh6J^J0&b x7Z rZbmG:?P3c!&*h|VY2O`$zR(ih,8 y\)>}ef-oyuMdv.pOgS _]:^`e+BFt2<zSlZ56n{A[XH;B0o~q(&)xh7CCWlK{-(QE:\@}F I3*S1'l54FDNo6x#$%&'7J 89u;<+.:/01U23>= ?q\X/LPBq,AocT[#_t vL OU9<uy8+,m-w /0s*Ii"aYsGY"z tBqWtknAg"%pYQ2TVsO4Wg)M  EbNkH1)78ifK4DbpTQel9p3,gE=D%>+d}`RX!*[^ I|NC kTG ]5?cS#-i[=~M9_R ~m/1m;!\dU4HX]'I^enQ?LC (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAlways include question side when replaying audioAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFilterFilter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Map to %sMap to TagsMark NoteMathJax blockMathJax inlineMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Sound and video on cards will not function until mpv or mplayer is installed.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: Anki 0.9.7.7 Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-11-27 04:29+0000 Last-Translator: Guillem Palau Salvà Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n > 1; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) X-Poedit-Country: BRAZIL Language: X-Poedit-Language: Português (1 de %d) (disabled) (desligado) (ligado) Há %d cartão. Há %d cartões.%% Correto%(a)0.1f %(b)s/dia%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d de %(b)d nota atualizada%(a)d de %(b)d notas atualizadas%(n)d: %(name)s%(tot)s %(unit)s%.01f cartões/minuto%d cartão%d cartões%d cartão excluído.%d cartões excluídos.%d cartão exportado.%d cartões exportados.%d cartão importado.%d cartões importados.%d cartão estudado em%d cartões estudados em%d baralho atualizado.%d baralhos atualizados%d grupo%d grupos%d alteração de mídia para fazer upload%d alterações de mídia para fazer upload%d arquivo de mídia baixado%d arquivos de mídia baixados%d nota%d notas%d nota adicionada%d notas adicionadas%d nota excluída.%d notas excluídas.%d nota exportada.%d notas exportadas.%d nota importada.%d notas importadas.%d nota inalterada%d notas inalteradas%d nota atualizada%d notas atualizadas%d revisão%d revisões%d selecionado%d selecionados%s cópia%s dia%s dias%s hora%s horas%s minuto%s minutos%s minuto.%s minutos.%s mês%s meses%s segundo%s segundos%s para excluir:%s ano%s anos%sdia(s)%sh%smin(s)%smês(meses)%ss%sy&Sobre...&Pesquisar e Instalar...&Cartas&Checar Banco de Dados&Intensivo...&Editar&Exportar...&Arquivo&Procurar&Ir&Guia&Guia...A&juda&Importar...&Informação...&Inverter Seleção&Próximo Cartão&Notas&Abrir Pasta de Complementos...&Preferências...Cartão &anterior&Reagendar...&Suporte Anki...&Mudar Perfil&Ferramentas&Desfazer'%(row)s' tem %(num1)d campos, de %(num2)d esperados(%s certo)(Nota deletada)(fim)(filtrado)(estudando)(novo)(limite pai: %d)(Favor, selecione 1 card)...Os arquivos .anki2 não são projetados para serem importados. Se você estiver tentando restaurar uma cópia de segurança, por favor, consulte a seção "Cópias de segurança" do manual do usuário./0d1 mês1 ano10:0022:003:004:0016:00504 erro de tempo limite de portal recebido. Por favor, tente desabilitar temporariamente seu antivírus.:%d cartão%d cartõesAbrir pasta de backupVisite o site%(pct)d%% (%(x)s de %(y)s)%Y-%m-%d @ %H:%MBackups
Anki criará uma cópia de segurança da sua coleção a cada vez que ela for fechada ou sincronizada.Formato a exportar:Encontrar:Tamanho da FonteFonteEm:Incluir:Tamanho da LinhaSubstituir Por:SincronizaçãoSincronização
Não ativada agora; clique no botão de sincronização na janela principal para ativá-la.

Requer conta

Uma conta grátis é necessária para manter sua coleção sincronizada. Por favor, registre-se e então entre com seus detalhes abaixo.

Anki atualizado

Anki %s foi lançado.

Erro

Ocorreu um erro. Por favor, inicialize Anki enquanto segura a tecla shift, isto vai desabilitar temporariamente os complementos (add-ons) que você instalou.

Se o problema ocorre somente quando os complementos estão habilitados, por favor vá para Ferramentas > Complementos e desabilite algum(s) complemento(s), na tentativa de descobrir qual complemento é o responsável pelo problema.

Assim que você descobrir o complemento responsável, por favor relate o problema na seção de complementos em nossa página de ajuda.

Informação de Debug:

Erro

Ocorreu um erro. Por favor, vá para Ferramentas > Checar Banco de Dados para ver o problema é corrigido.

Se o problema persistir, por favor relate-o em nossa página de ajuda. Copie e cole a informação abaixo dentro de seu relatório.

Um muito obrigado a todas as pessoas que nos deram sugestões, avisos de bugs e doações.A dificuldade do cartão diz o tamanho do próximo intervalo quando você responder "bom" na revisão.Um baralho filtrado não pode possuir os subbaralhos.Um problema ocorreu durante a sincronização. Por favor, vá em Ferramentas>Verificar Mídia, e sincronize novamente para corrigir o problema.Abortado: %sSobre o AnkiAdicionarAdicionar (atalho: ctrl+enter)Adicionar Tipo de Cartão...Adicionar CampoAdicionar MídiaCriar Novo Baralho (Ctrl+N)Adicionar Tipo de NotaAdicionar InvertidoAdicionar etiquetasAdicionar Etiquetas...Adicionar a:O complemento não tem configuração.O complemento não foi baixado de AnkiWeb.ComplementosAdicionar...Adicionar: %sAdicionadoAdicionado hojeDuplicata adicionada com o primeiro campo: %sErreiRepetir HojeContagem de repetições: %sTodos os Tipos de CartasTodos os BaralhosTodos os CamposTodas as cartas em ordem aleatória (cram mode)Todos os cartões, notas e mídia para este usuário serão excluídos. Você está certo disso?Permitir HTML em camposSempre incluir a área da questão quando o áudio é reproduzidoUm complemento que você instalou falhou ao ser carregado. Se o problema persistir, vá para Ferramentas > Complementos, e desabilite este complemento. Ao carregar '%(name)s': %(traceback)s Ocorreu um erro ao acessar o banco de dados. As causas possíveis: - Antivírus, firewall, backup ou o software de sincronização pode estar interferindo com o Anki. Tente desativar tais softwares e verifique se o problema desaparece. - O disco rígido pode estar cheio. - A pasta Documentos/Anki pode estar numa unidade de rede. - Os arquivos na pasta Documentos/Anki não pode estar gravável. - Pode haver erros no disco rígido. É aconselhável executar Ferramentos>Verificar banco de dados, a fim de garantir a coleção não é corrupto. Ocorreu um erro ao abrir %sAnkiBaralho Anki 2.0Pacote de Coleções do AnkiPacote Anki BaralhoO Anki não poderia alterar o nome do perfil porque não poderia alterar o nome da pasta de perfil no disco. Por favor, verifique se você possuir a permissão de escrita ao Arquivos/Anki e outros programas não estiver acessando as pastas de perfil, em seguida, tente novamente.O Anki não conseguiu encontrar a linha entre a questão e a resposta. Por favor, ajuste o modelo manualmente para alternar entre a questão e a resposta.Anki não suporta arquivos em sub-pastas dentro da pasta collection.media.Anki é um sistema de aprendizagem amigável e inteligente. É gratuito e de código aberto.Anki é licenciado sobre a licença AGPL3. Por favor, veja o arquivo de licença na fonte de distribuição para maiores informações.Anki não pôde abrir seu arquivo de coleção. Se o problema persistir após reiniciar seu computador, por favor clique no botão Abrir Backup, no gerenciador de perfil. Informação de Debug: O Usuário AnkiWeb ou senha está incorreto; por favor, tente outra vez.Usuário AnkiWeb:AnkiWeb encontrou um erro. Por favor, tente outra vez em alguns minutos, e se o problema persistir, por favor, reporte a falha.O AnkiWeb está sobrecarregado no momento. Por favor, tente outra vez em alguns minutos.AnkiWeb está em manutenção. Por favor tente novamente em alguns minutos.RespostaBotões de RespostaRespostasO antivirus ou firewall está bloqueando o Anki de acessar a internet.Qualquer emblemaTodos os cartões em branco serão excluídos. Se uma nota não tiver cartão referente, será descartada. Você tem certeza que quer continuar?Aparece 2 vezes no arquivo: %sVocê tem certeza que deseja excluir %s?Pelo ao menos um tipo de card é requeridoAo menos um passo é necessário.Anexar imagens/áudio/vídeo (F3)Sincronização automática e backup foram desabilitados durante a restauração. Para habilitá-los novamente, feche o Perfil ou reinicie Anki.Tocar áudio automaticamenteSincronizar automaticamente ao abrir/fechar perfil de usuárioMédiaTempo médioTempo médio de respostaDificuldade médiaMédia dos dias estudadosIntervalo médioVersoVisualizar o VersoModelo do VersoFazendo back-up...Cópias de segurançaBásicoBásico (e cartão invertido)Básico (cartão invertido opcional)Básico (digite a resposta)Marcador AzulTexto em Negrito (Ctrl+B)PainelNavegar (%(cur)d carta exibida; %(sel)s)Navegar (%(cur)d cartas exibidas; %(sel)s)Aparência do PainelAparência do Navegador...Opções do Painel de CartõesCriarEnterradoOcultarOcultar CartãoOcultar NotaOcultar cartões relacionados até o próximo diaOcultar revisões relacionadas até o próximo diaPor padrão, Anki detecta o caractere entre os campos, como um tab, vírgula, etc. Se Anki estiver detectando incorretamente, você pode digitá-lo aqui. Use \t para representar tab.CancelarCartãoCartão %dCartão 1Cartão 2ID do CartãoLista de CartõesEstado da CartaTipo do CartãoTipo da Carta:Tipos de CartãoTipos de Cartão para %sCartão ocultado.Cartão suspenso.Cartão era um sanguessuga.CartõesOs cartões não podem ser movidos manualmente dentro de um baralho filtrado.Cartões em Texto SimplesOs cartões voltarão automaticamente aos seus baralhos originais depois da revisão.Cartões...CentroAlterarMudar %s para:Mudar BaralhoMudar Baralho...Mudar Tipo de NotaMudar Tipo de Nota (Ctrl+N)Mudar Tipo de Nota...Mudar cor (F8)Mudar baralho dependendo do tipo de notaAlteradoAs alterações abaixo afetarão a %(cnt)d nota que usa este tipo de carta.As alterações abaixo afetarão as %(cnt)d notas que usam este tipo de carta.As alterações surtirão efeito, assim que Anki for reiniciado.Verificação e Mídia...Verificar se há atualizaçõesVerificar arquivos na pasta de mídiaVerificando mídia...Verificando...EscolherEscolher BaralhoEscolher Tipo de NotaEscolha etiquetas.Limpar MarcadorLimpar Não-usadoLimpar Etiquetas Não-usadasClone: %sFecharFechar e perder este cartão?Encerrando...Omissão de PalavrasFechar eliminação (Ctrl+Shift+C)Código:Coleção exportada.A coleção está corrompida. Por favor, veja o manual.Dois pontosVírgulaConfigurarConfiguraçãoConfigurar idioma de interface e opçõesParabéns! Você terminou este baralho por enquanto.Conectando...Conexão expirou. Ou sua conexão de internet está com problemas, ou você tem um arquivo muito grande em sua pasta de mídia.AvançarCopiarResposta correta em cartões antigos: %(a)d/%(b)d (%(c).1f%%)Certo: %(pct)0.2f%%
(%(good)d de %(tot)d)AnkiWeb não pôde ser conectado. Por favor, verifique sua conexão à rede e tente outra vez.Não foi possível gravar o áudio. O codec lame e o programa sox estão instalados?Não foi possível salvar o arquivo: %sFiltradosCriar BaralhoCriar Baralho Filtrado...Criar imagens escaláveis com dvisvgmCriadoCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZAcumuladoAcumulado %sRespostas AcumuladasCartões AcumuladosBaralho AtualTipo de nota atual:Estudo PersonalizadoSessão de Estudo PersonalizadoRecortarBanco de dados reconstruído e otimizado.DataDias estudadosDesautorizarConsole de depuraçãoBaralhoSubstituição de Baralho...O baralho será importando quando um usuário for escolhido.BaralhosMais distantes a estudar/revisarPadrãoIntervalos entre as revisões.ExcluirExcluir CartõesExcluir BaralhoExcluir VaziosExcluir NotaExcluir NotasApagar EtiquetasExcluir não utilizadaExcluir campo de %s?Apagar o '%(a)s' tipos de cartão, e os %(b)s?Excluir este tipo de nota e todos os seus cartões?Excluir este tipo de nota não utilizado?Apagar mídia não utilizada?Excluído %d cartão com nota faltando.Excluído %d cartões com nota faltando.Excluído %d cartão com o modelo perdido.Excluídos %d cartões com o modelo perdido.Foi excluída %d nota com tipo de nota faltando.Foram excluídas %d notas com tipo de nota faltando.Foi excluída %d nota sem cartões.Foram excluídas %d notas sem cartões.Apagar nota com erro na contagem do campo. %dApagar notas com erro na contagem do campo. %dExcluído.Ao excluir esse baralho da lista, todos os cartões restantes voltarão ao baralho original.DescriçãoDescrição para mostrar na tela de estudo (apenas baralho atual):Caixa de DiálogoBaixar do AnkiWeb%(fname)s foi baixadoBaixando do AnkiWeb...A RevisarApenas cartões devidos.A Revisar amanhãSai&rDificuldadeFácilBônus por ser FácilIntervalo fácilEditarEditar "%s"Editar AtualEditar HTMLEditadoFonte de EdiçãoDevolver CartõesCartões Vazios...Números dos cartões vazios: %(c)s Campos: %(f)s Cartões vazios encontrados. Por favor, vá até Ferramentas > Cartões vazios.Primeiro campo vazio: %sFimAbra o baralho para colocar %s novos cartões nele, ou deixe em branco:Digite a nova posição do cartão (1...%s):Digite as etiquetas a adicionar:Digite as etiquetas a apagar:Erro ao baixar %(id)s: %(error)sErro no download: %sErro durante a inicialização: %sErro ao estabelecer uma conexão segura. Isso é geralmente causado pelo antivírus, firewall ou software de VPN, ou pelas problemas com o seu ISP.Erro ao executar %s.Erro ao executar %sExportarExportar...Exportados %d arquivos de mídiaExportados %d arquivos de mídiaExtraFF1Campo %d do arquivo é:Mapeamento de campoNome do campo:Campo:CamposCampos para %sCampos separados por: %sCampos...FiltrarFiltroFiltrar...Filtro:FiltradoBaralho Filtrado %dEncontrar &Duplicatas...Encontrar DuplicatasAchar e &Substituir...Localizar e substituirTerminarPrimeiro CartãoPrimeia RevisãoPrimeiro campo encontrado: %s%d cartão com propriedades inválidas foi concertado.%d cartões com propriedades inválidas foram concertados.Corrigido bug AnkiDroid , deck corrigidoTipo de nota corrigida: %sMarcadorCarta de MarcadorVirarA pasta já existe.Fonte:RodapéPor segurança, '%s' não é permitido nos cartões. Você ainda pode, em vez disso, usá-lo colocando o comando em um pacote diferente e importando o pacote no cabeçalho LaTeX.PrevisãoFormulárioEncontrar %(a)s através de %(b)s.FrenteVisualizar a FrenteModelo da FrenteGeralArquivo gerado: %sGerado em %sAdicionar ComplementosObter CompartilhadoBomRepetir 'Bom' emMarcador VerdeEditor HTMLDifícilVocê instalou latex e dvipng/dvisvgm?CabeçalhoAjudaMais fácilHistóricoInícioDistribuição por horaHorasHoras com menos que 30 revisões não foram mostradas.Se você tiver contribuído e não estiver nessa lista, por favor entre em contato.Se você estudou todos os diasIgnorar resposta dada acima deIgnorar maiúsculas / minúsculasIgnorar o campoIgnorar linhas onde o primeiro campo corresponda a uma nota existente.Ignorar esta atualizaçãoImportarImportar ArquivoImportar mesmo que existam notas com o primeiro campo igualImportação falhou. Importação falhou. Informações para depuração: Opções de importaçãoImportação completa.Na pasta Mídia, mas não utilizado em nenhum cartão:Para garantir que a sua coleção funcione corretamente caso seja transferida entre dispositivos, é preciso que o relógio interno de seu computador esteja configurado corretamente. O relógio interno pode estar errado mesmo se seu sistema esteja mostrando a hora local correta. Por favor, abra as configurações do seu computador e verifique o seguinte: - AM/PM - Clock drift - Dia, mês e ano - Fuso horário - Horário de verão Diferença para corrigir o tempo: %s.Incluir mídiaIncluir informações de agendamentoIncluir etiquetasAumentar o limite de cartões novos por hojeAumentar o limite de cartões novos de hoje emAumentar o limite de cartões a revisar hojeAumentar o limite de cartões a revisar hoje emMais próximos a estudar/revisarInstalar ComplementoIdioma da Interface:IntervaloModificar o intervaloIntervalosCódigo inválido, ou complemento não disponível para esta versão do Anki.Código inválido.Configuração inválida: Nome de arquivo inválido, por favor renomeie-o: %sArquivo inválido. Por favor, restaure a cópia de segurança.Propriedade inválida encontrada no cartão. Por favor, vá em Ferramentas>Verificar Banco de Dados, e se o problema aparecer de novo, faça uma pergunta no site de suporte.Expressão regular inválida.Procura inválida - por favor, veja se há erros de escrita.Isto foi suspenso.Texto em Itálico (Ctrl+I)Ir para etiquetas com Ctrl+Shift+TManterLaTeXEquação LaTeXMatemática LaTeXErrosÚltimo CartãoRevisão mais recenteCriados há menos tempoAprenderAprender além do limiteAprendidos: %(a)s, Revisados: %(b)s, Reaprendidos: %(c)s, Filtrados: %(d)sAprendizagemAção sanguessugaLimite sanguessugaEsquerdaLimitar aCarregando...A coleção local não possui cartas. Baixar de AnkiWeb?Maior intervaloOlhar o campo:Mais difícilGerenciarGerenciar Tipos de NotasGerenciar Tipos de Notas...Gerenciar...Mapear para %sMapear para EtiquetasNota de Marcabloco MathJaxMathJax em linhaMaduroIntervalo máximorevisões máximas/diaMídiaIntervalo mínimoMinutosMisturar cartões novos e a revisarBaralho Mnemosyne 2.0 (*.db)MaisMais respostas erradasMover CartõesMover cartões para o baralho:Separadores multi-caractere não são suportados. Por favor, digite apenas um caractere.N&otaNome já existe.Nome para o deckNome:RedeNovosNovos CartõesLimite de novas cartas no baralho, por hoje: %sSomente cartões novos.Novos cartões/diaNovo nome do baralho:Novo intervaloNovo nome:Novo tipo de nota:Novo nome do grupo de opções:Nova posição (1...%d):Novo dia começa àsSem MarcadorNenhum card é devido ainda.Nenhum cartão atende aos seus critérios.Não há cartões vazios.Hoje não foram estudados cartões antigos.Todos os arquivos foram localizados e estão sendo utilizados.Sem atualizações disponíveis.NotaID notaTipo de NotaTipos de NotaA nota e seu %d cartão foram excluídos.A nota e seus %d cartões foram excluídos.Nota ocultada.Nota suspensa.Nota: A mídia não tem backup. Por favor, copie periodicamente sua pasta Anki por segurança.Nota: Algo no histórico foi perdido. Para mais informações, por favor, veja a documentação do navegador.Notas em Texto PuroAs notas requerem ao menos um campo.Notas marcadas.NadaOKMais antiga data do primeiro estudoNa próxima sincronização, obrigar mudanças em uma direção.Uma ou mais notas não foram importadas porque não elas não geraram cartões. Talvez por terem campos vazios ou porque você não mapeou o conteúdo do arquivo texto para os campos corretos.Somente os cartões novos podem ser reposicionados.Apenas um cliente pode acessar o AnkiWeb por vez. Se uma sincronização anterior falhou, por favor tente novamente em alguns minutos.AbrirAbrir cópia de segurança (backup)...Otimizando...Limite opcional:OpçõesOpções para %sGrupo de opções:Opções...OrdemCriados há mais tempoRevisões mais próximasSubstituir modelo do verso:Substituir frente:Substituir modelo da frente:Pacote de Coleção/Baralho Anki (*.apkg *.colpkg *.zip)Senha:ColarColar imagens da área de transferência como PNGPauker Lição 1.8 (*.pau.gz)PorcentagemPeríodo: %sColocar no fim da fila de novos cartões.Colocar na fila de revisão com intervalo entre:Por favor, crie outro tipo de nota primeiro.Por favor, conecte um microfone e certifique-se que outros programas não estejam usando o áudio.Por favor, clique em Editar abaixo, marque alguma palavra e clique em Omissão de Palavras (Ctrl+Shift+C). (%s)Certifique-se que um perfil de usuário está aberto e o Anki não está travado, então tente outra vez.Por favor, dê um nome ao seu filtro:Por favor, instale PyAudioPor favor, primeiro escolha o usuário.Por favor. remova a pasta %s e tente novamente.Por favor, reinicie o Anki para completar a mudação de idioma.Por favor, vá até Ferramentas > Cartões Vazios.Por favor, escolha um baralho.Por favor, escolhar cartões de somente um tipo de nota.Por favor, selecione algo.Por favor, atualize o Anki para a versão mais nova.Por favor, use Arquivo -> Importar para importar este arquivo.Por favor, visite o AnkiWeb, atualiza seu baralho e tente outra vez.PosiçãoPreferênciasPré-visualizaçãoPré-vizualizar os cartão selecionado (%s).Visualizar cartões novosVisualizar cartões novos criados por últimoProcessados %d arquivos de mídiaProcessados %d arquivos de mídiaProcessando...UsuáriosRequer autenticação proxy.Marcador RoxoPerguntaÚltimo da fila: %dPrimeiro da fila: %dSairAleatórioOrdem aleatóriaClassificaçãoRecriarGravar Própria VozGravar áudio (F5)Gravando...
Tempo: %0.1fMarcador VermelhoAtrasos relativosReaprenderNão apagar depois que adicionarRemover %s de suas pesquisas salvas?Remover Tipo de Cartão...Remover Filtro Atual...Remover Etiquetas...Remover Formatação (Ctrl+R)Remover este tipo de cartão causaria a exclusão de uma ou mais notas. Por favor, crie um novo tipo de cartão primeiro.RenomearRenomear Tipo de Cartão...Renomear BaralhoSubstituir sua coleção por um backup anterior?Repetir ÁudioRepetir Própria VozReposicionarTipo de Carta de Reposição...Reposicionar Novos CartõesReposicionar...Deve ter pelo menos uma dessas etiquetas:ReagendadoReagendarReagendar cartões baseado nas minhas respostas neste baralhoResumir AgoraDireção do texto invertida (RTL)Reverter ao backupRetornar para o estado antes de '%s'.RevisãoContagem de revisãoTempo de RevisãoAntecipar a revisãoAntecipar a revisão dos próximosRevisar os cartões esquecidos nos últimosRevisar os cartões esquecidosRever a taxa de sucesso para cada hora do dia.RevisõesLimite de revisões pendentes no baralho, por hoje: %sDireitaSalvarSalvar Filtro Atual...Salvar PDFSalvo.Escopo: %sProcurarProcurar com formatação (lento)SelecionarSelecionar &TudoSelecionar &NotasExcluir cartões com as etiquetas:O arquivo selecionado não encontra-se no formato UTF-8. Por favor, veja no manual como fazer a importação corretamente.Estudo SeletivoPonto e vírgulaServidor não encontrado. Ou sua conexão caiu, ou um programa antivírus/firewall está impedindo o Anki de acessar a internet.Definir todos os baralhos abaixo %s com este grupo de opções?Definir para todos os sub-baralhosDefinir cor de primeiro plano (F7)A tecla Shift foi pressionada. Ignorando o carregamento e sincronização automático.Alterar posição dos cartões existentesTecla de Atalho: %sTecla de atalho: Seta para esquerdaTecla de atalho: Seta para direita ou EnterAtalho: %sMostrar %sMostrar RespostaMostrar ambos os ladosMostrar DuplicatasMostrar cronômetro de respostaMostrar novos cartões depois das revisõesMostrar novos cartões antes das revisõesMostrar novos cartões na ordem em que foram adicionadosMostrar novos cartões em ordem aleatóriaMostrar tempo da próxima revisão acima dos botões de respostaMostrar contador de cartões restantes durante a revisãoBarra LateralTamanho:Alguns cartões relacionados ou ocultos foram adiadas até que uma sessão mais tarde.Algumas configurações só surtirão efeito quando você reiniciar o AnkiAlgumas atualizações foram ignoradas porque o tipo de nota foi alterado:Classificar CampoClassificar os cartões no Painel por este campoNão é possível classificar esta coluna. Por favor, escolha outra.Áudio e vídeo nas cartas não vão funcionar, até que seja instalado mpv ou mplayer.EspaçoPosição inicial:Multiplicador de diasEstatísticasEstatísticasPasso:Passos (em minutos)Passos devem ser números.Interrompendo...Estudados HojeEstudarEstudar BaralhoEstudar Baralho...Estudar AgoraEstudando pelo status do cartão ou etiquetaEstiloEstilo (compartilhado entre cartões)Subscrito (Ctrl+=)Exportação em Supermemo XML (*.xml)Superscrito (Ctrl++)SuspensoSuspender CartãoSuspender NotaSuspensoSuspenso+OcultoSincronizarSincronizar áudios e imagens tambémFalha na sincronização: %sFalha na sincronização; internet offline.A sincronização requer que o relógio do seu computador esteja correto. Por favor, corrija-o e tente outra vez.Sincronizando...TabMarcadores duplicadosSomente EtiquetasEtiquetasBaralho Alvo (Ctrl+D)Campo alvo:TextoTexto separado por tabs ou ponto e vírgula (*)Este baralho já existe.Este nome de campo já está em uso.Este nome já está em uso.A conexão ao AnkiWeb expirou. Por favor, confira sua conexão à rede e tente outra vez.A configuração padrão não pode ser excluída.O baralho padrão não pode ser excluído.Como os cartões se dividem no(s) seu(s) baralho(s).O download foi corrompido. Por favor tente novamente.O primeiro campo está vazio.O primeiro campo do tipo de nota deve ser mapeado.O seguinte caracter não pode ser usado: %sA frente deste cartão está vazia. Por favor, execute Ferramentas>Cartões Vazios.A entrada que você forneceu criaria questões vazias em todos os cartões.O número de novos cartões que você adicionou.Quantas questões você já respondeu.Quantas revisões agendadas para o futuro.Quantas vezes você escolheu cada botão.As permissões na pasta temporária de seu sistema estão incorretas, e por isso o Anki não pode corrigí-los automáticamente. Por favor, procure por 'pasta temporária' no manual do Anki para mais informações.O arquivo fornecido não é um arquivo .apkg válido.A pesquisa não encontrou nenhum cartão. Gostaria de alterá-la?A alteração solicitada exigirá que o banco de dados completo seja enviado na próxima sincronização. Se houver revisões ou outras mudanças em outro aparelho que ainda não tenham sido sincronizadas aqui, elas serão perdidas. Continuar?O tempo gasto para responder às questões.Há mais cartões novos disponíveis, mas o limite diário foi atingido. Você pode aumentar o limite nas opções, porém, tenha em mente que quanto mais cartões novos você estudar, maior será sua carga de revisão a curto prazo.Deve existir ao menos um usuário.Esta coluna não pode ser ordenada, mas você pode pesquisar tipos individuais de cartas, tais como 'card:1'.Não se pode classificar por esta coluna, mas você pode procurar por baralhos específicos clicando em algum à esquerda.Este arquivo não parece ser um arquivo válido .apkg. Se você está recebendo este erro de um arquivo baixado do AnkiWeb, provavelmente o download falhou. Por favor, tente novamente, e se o problema persistir, tente com um navegador diferente.Este arquivo existe. Gostaria de sobreescrevê-lo?Esta pasta armazena todos os seus dados Anki em um único local para facilitar o backup. Se quiser que o Anki use um local diferente, por favor, veja: %s Este é um baralho especial para estudar fora da agenda normal.Isto é uma {{c1::sample}} omissão de palavras.Isto criará %d carta. Continuar?Isto criará %d cartas. Continuar?Isto apagará sua coleção existente e substituirá os dados pelos do arquivo importado. Você tem certeza?TempoTempo limiteA RevisarPara pesquisar complementos, por favor clique no botão abaixo.

Quando você encontrar um complemento de seu agrado, cole o código do mesmo abaixo. Você pode colar múltiplos códigos, separados por espaços.Para omitir palavras em uma nota existente, você precisa mudá-la para o tipo Omissão de Palavras, via Editar>Mudar Tipo de Nota.Para vê-los agora, clique no botão Desocultar abaixo.Para estudar sem interferir na agenda normal, clique no botão Estudo Personalizado abaixo.HojeO limite de revisão de hoje foi alcançado, porém ainda existem cartões a serem revistos. Para melhorar sua memória, considere aumentar o limite diário nas opções.Alternância habilitadoMarca de AlternânciaSuspensão de AlternânciaTotalTempo TotalTotal de cartõesTotal de notasTratar texto como expressão regularTipoTipo de resposta: campo desconhecido %sNão é possível importar de arquivo somente leitura.Não foi possível mover o arquivo existente à lixeira - por favor, tente reiniciar seu computador.DesocultarTexto Sublinhado (Ctrl+U)DesfazerDesfazer %sCódigo de resposta inesperado: %sFormato de arquivo desconhecido.Não vistosAtualizar notas existentes quando o primeiro campo coincidirAtualizar os seguintes complementos?%(a)d de %(b)d notas existentes foram autalizadas.Enviar para o AnkiWebEnviando para o AnkiWeb...Usado em cartões mas faltando na pasta de mídia:Usuário 1Versão %sVer Página de ComplementosVer ArquivosAguardando pela edição para finalizar.Atenção, exclusões cloze não funcionarão até que você mude o tipo no topo de ClozeAo criar, o padrão é o baralho atualColeção inteiraGostaria de fazer o download agora?Escrito por Damien Elmes, com correções, traduções, testes e desenho de:

%(cont)sVocê tem uma exclusão de nota do tipo Close, mas não foram feitas quaisquer exclusões do tipo Close. Confirma?Você tem muitos decks. Por favor, veja %(a)s. %(b)s.Você ainda não gravou sua voz.É preciso ter ao menos uma coluna.JovemJovem+NovoSuas mudanças afetam múltiplos decks. Se você quer modificar apenas o deck atual, por favor, adicione novas opções de grupo primeiro.Parece que seu arquivo de coleção é corrupto. Isso pode acontecer quando o arquivo é copiado ou movido enquanto Anki ainda está aberto, ou quando a coleção é armazenada em uma rede ou na nuvem. Se problemas persistirem após reiniciar seu computador, por favor abra um backup automático pela tela de perfil.Sua coleção está em um estado inconsistente. Por favor, vá até Ferramentas > Verificar Banco de Dados e sincronize novamente.Sua coleção ou um arquivo de mídia é grande demais para sincronizar.Sua coleção foi enviada com sucesso ao AnkiWeb. Se você usa outros aparelhos, por favor, sicronize-os agora e escolha baixar a coleção que você acabou de enviar do seu computador. Depois de fazer isso, as revisões futuras e os cartões adicionados serão incorporados automaticamente.Seus baralhos aqui e no AnkiWeb diferem tanto que não podem ser mesclados, então é necessário que um deles sobrescreva o outro. Se você escolher baixar, o Anki trará a coleção do AnkiWeb e todas as mudanças que você tiver feito desde a última sincronização serão perdidas. Se você escolher enviar, o Anki copiará sua coleção para o AnkiWeb e todas as mudanças que você tenha feito no AnkiWeb ou em outros aparelhos desde a última sincronização serão perdidas. Depois que todos os aparelhos estiverem sincronizados, as futuras revisões e os cartões adicionados serão mesclados automaticamente.Seu firewall ou anti-vírus não permite que Anki crie uma conexão para si. Por favor, adicione uma excessão para Anki.[sem baralho]cópias de segurançacartõescartões do deckcartões selecionados porcoleçãoddiasbaralhosempreduplicataajudaesconderhorashoras além da meia-noiterespostas erradasmenos que 0,1 cartoẽs/minutomapeado para %smapeado para Etiquetasminsminutosmêsrevisõessegundosestatísticasesta páginawcoleção completa~anki-2.1.0+dfsg~b36/locale/ro/000077500000000000000000000000001323611211500157365ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ro/LC_MESSAGES/000077500000000000000000000000001323611211500175235ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ro/LC_MESSAGES/anki.mo000066400000000000000000001246671323611211500210220ustar00rootroot00000000000000P%1 111"11 1118162G2"X2${2$2&2"23"333$P3 u333333344*4 ?4M4^4b4f4j4o4s4 w444 44444 44 44 4455!505A5H50N5 55 5 555555i6k6n6v6}66666T66,6(7@7!_77f78 8#8 58 B8M8]8o88e8979 995:X6:Y:k: U; a;l;p; ; ;; ; ;;;;; ;$;< %<1< A< K<%V<K|<<"<= ==%=R=v=7s> >w>E/?@u????R?'@@#@#@ A,A(EAnA vAA AAAA A AAAAB5B#LPbLL]L M8&M_MfM|MMM MMMM M MM M MM NNN)&N0PNNN4N!NNOO1OJO^OoO vOOOOO O OOO OO OOPPP(Ph>-iCliEii!j76j:nj;j)j'k 7kBk[ktkkk$k klll"l&l+l/l 3l >l Hl Sl`lilqlxl~ll lll!lll mm+m3m8:m sm m m mmmmmmnnnnnnnnn^n'oG)o9qo'o"oo|pppp p ppp q"q6qq6pr rrPrXsonsst tt"t tttu 1u?u Pu ]u iuuu$uuuuuu9ub6vv$vvvvwqw}xHx xxZqyRyz(z {{ { |"|4|K|Z|`| u||||$| ||} } "} -} :}0H};y}}d~l~q~y~~~~~~~ ~~~ :LXc  .-Ft}+̀ Ҁ߀ #=T6Y 14؁ q D5cD!ǃ %07>ELS Z g t  Ƅׄ0,8e jx4݅8=EU ft6Ԇ3 %?$e{y GkO OŊ4 Q\v   ŋϋ - FNL* 0Qp*͍ &* @LS\o Ԏ  #/B\3 5AW]d #.7QXn} ő ܑ %377@o&ВG Spy<Ǔ+ד@)j Ucx(-,, :Ncv F!˘  #7 V%bJ әߙ %5Kb|ɚҚ 5Hdm ě؛ޛ  - :D"Vy%<Ӝ,!.N} )#6 HT[t Ǟ Оܞ! 8(a s} $͟ "A Uc à % -3,a)A-2Edu" ̢֢ 016L%5ǣ+,)(V>G [lt= C N \g 9 ۧ"$%Djqè ب0Jjqx {aO? 2;oD{pu@A6SF{o2-P$n2kI?G V#E*zM7C U>OvNgP0 r1uZe(/l<r%!I/j^d jXB&Mbc=UO]w>=7HL\@f|y/bq!"#91$'A&N'J Q  nx7.4W8N%8,G1E  - [Fi-T3 HFY_S4\Xh65$w~D5+x>:.  ;VgH'CJE^Y!*P0:3C*W}G?6t:<M Ie] i`"D ssQv=.lyLZ0R"dt)(K# R|%&`k(,BK4B))<Lq+~9}p@aKh5T+839Aczf,m_m;[J (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d note%d notes%d note added%d notes added%d note imported.%d notes imported.%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote suspended.NothingOKOnly new cards can be repositioned.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder duePassword:PastePercentagePlease select a deck.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.QuestionQuitRandomRandomize orderRecording...
Time: %0.1fRenameRename DeckRepositionReposition New CardsReposition...RescheduleReverse text direction (RTL)Review CountReview TimeReviewsRightSearchSearch within formatting (slow)SelectSelect &AllShow AnswerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderSize:Some settings will take effect after you restart Anki.Sort FieldSpaceStarting easeStep:Steps (in minutes)Steps must be numbers.Studied TodayStudy DeckStudy Deck...Study NowSupermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing...TagsTextThe default deck can't be deleted.The division of cards in your deck(s).The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.This file exists. Are you sure you want to overwrite it?To ReviewTo study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeUndo %sUnseenUsed on cards but missing from media folder:Version %sWhole CollectionWould you like to download it now?You haven't recorded your voice yet.You must have at least one column.YoungYoung+Learn[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifehelphidehourshours past midnightmapped to %smapped to Tagsminsminutesmoreviewssecondsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:02+0000 Last-Translator: Nicolae Turcan Language-Team: Romanian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 == 0) && (n != 0))) ? 2: 1)); X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: ro (1 din %d) (oprit) (pornit) Are %d card. Are %d carduri. Are %d carduri.%% corecte%(a)0.1f %(b)s/zi%(a)0.1fs (%(b)s)%(a)d din %(b)d note actualizate%(a)d din %(b)d note actualize%(a)d din %(b)d note actualize%(tot)s %(unit)s%d card%d carduri%d carduri%d card șters.%d carduri șterse.%d carduri șterse.%d card export at.%d carduri exportate.%d carduri exportate.%d card important.%d carduri importate.%d carduri importate.%d card studiat în%d carduri studiate în%d carduri studiate în%d pachet actualizat.%d pachete actualizate.%d pachete actualizate.%d grup%d grupuri%d grupuri%d notiță%d notițe%d notițe%d notă adăugată%d note adăugate%d note adăugate%d notă importată.%d note importate.%d note importate.%d notă actualizată%d note actualizate%d note actualize%d repetiție%d repetiții%d repetiții%d selectată%d selectate%d selectateCopie a %s%s zi%s zile%s de zile%s oră%s ore%s de ore%s minut%s minute%s de minute%s minut.%s minute.%s minute.%s lună%s luni%s de luni%s secundă%s secunde%s de secunde%s de șters:%s an%s ani%s de ani%sd%sh%sm%smo%ss%sy&Despre...To&ceală&Editează&Exportă...&Fișier&Caută&Mergi&Ghid&Ghid…A&jutor&Importă...&Inversează selecțiaCartea ur&mătoareDeschide dosarul cu suplimente...&Preferințe...Cartea a&nterioară&Re-planifică&Suport Anki…Unel&teR&efă'%(row)s' are %(num1)d câmpuri, din %(num2)d prevăzute(%s corecte)(sfârșit)(filtrate)(învățare)(nou)(limita părintelui: %d)(te rog să selectezi 1 card)…Fișierele .anki2 nu sunt făcute pentru import. Dacă încercați să restaurați dintr-o copie de siguranță, vă rog să consultați secțiunea 'Backups' a manualului de utilizator./0d1 lună1 an10AM10PM3AM4AM4PMS-a primit eroarea de pauză de intrare 504. Te rog să dezactivezi temporar antivirusul tău.:%d card%d carduri%d carduriDeschide dosar copii de siguranțăAccesează website-ul%(pct)d%% (%(x)s din %(y)s)%Y-%m-%d @ %H:%M Backup
Anki va crea o copie de rezervă a colecției de fiecare dată când este închisă sau sincronizată.Format export:Caută:Mărime font:Font:În:Include:Dimensiunea liniei:Înlocuiește cu:SincronizareSincronizare
În acest moment sincronizarea nu este activată; apasă pe butonul de sincronizare din fereastra principală.

Cont obligatoriu

Un cont gratuit este necesar pentru a păstra sincronizată colecția. Te rog, înscrie-te pentru un cont, apoi introdu detaliile tale.

Anki actualizat

Anki %s a fost lansat.

Mulțumiri tuturor celor care au contribuit cu sugestii, rapoarte de erori și donații.Ușurința unui card este mărimea următorului interval în care ați răspuns "bine" la o repetiție.A apărut o problemă în timp ce se sincronizau fișierele media. Te rog să folosești Instrumente->Verifică media, apoi să sincronizezi din nou pentru a corecta problema.Nereușite: %sDespre AnkiAdaugăAdaugă (scurtătură: ctrl+enter)Adaugă câmpAdaugă fişierul multimediaAdăugă pachet nou (Ctrl+N)Adaugă tip de notăAdaugă versoAdaugă eticheteAdaugă în:Adaugă: %sAdăugat(e)Adăugate astăziAdaugă duplicat cu primul câmp: %sDin nouRepetate astăziNumărate din nou: %sToate pacheteleToate câmpurileToate cardurile într-o ordine aleatoare (modul toceală)Toate cartelele, notele şi fișierele multimedia pentru acest profil vor fi şterse. Eşti sigur?Permite HTML în câmpuriA apărut o eroare la deschiderea %sAnkiPachet Anki 2.0Grup de pachete AnkiAnki n-a putut găsi linia dintre întrebare și răspuns. Te rog să ajustezi manual șablonul pentru a comuta între întrebare și răspuns.Anki este un sistem de învățare spațiată, inteligent și ușor de folosit. Este liber și are surse publice.Anki este licențiat sub licența AGPL3. Pentru mai multe informații, te rog să citești fișierul din distribuția sursă.ID-ul AnkiWeb sau parola au fost incorecte, te rog să încerci din nou.ID-ul AnkiWebAnkiWeb a întâmpinat o eroare. Te rog să încerci din nou în câteva minute, iar dacă problema persistă, te rog să trimiți un raport al erorii.AnkiWeb este prea ocupat în acest moment. Te rog să încerci din nou în câteva minute.AnkiWeb se află sub mentenanță. Te rog să încerci din nou în câteva minute.RăspunsButoane de răspunsRăspunsuriAntivirsul sau programul firewall nu permite lui Anki să se conecteze la internet.Orice card mapat la nimic va fi șters. Dacă o notă nu mai are carduri, va fi ștearsă. Sigur vrei să continui?A apărut de două ori în fișierulȘ %sSigur vrei să ștergi % s?E nevoie de cel puțin un tip de card.Cel puțin o etapă este necesară.Redare automată audioSincronizare automată la deschiderea / închiderea profiluluiMedieMedia de timpTimp mediu de răspunsUșurință medieMedia zilelor studiateInterval mediuVersoPrevizualizare versoȘablon versoSalvări de siguranțăDe bazăDe bază (și cu card întors)De bază (opțional cu card întors)RăsfoireAfișări browserOptiuni browserConstruieşteÎngroapăAscunde cardAscunde notăAscunde cardurile noi până în ziua următoareAscunde recapitulările asociate până în ziua următoareAnki detectează caracterul dintre câmpuri, cum ar fi taburi, virgule, etc. Dacă Anki nu detectează corect caracterul, îl puteți specifica aici. Folosiți \t pentru tab.AnulareCardCard %dCard 1Card 2ID cardListă carduriTip cardTipuri de carduriTipuri de card pentru %sCard ascuns.Card suspendat.Cardul a fost un parazit.CarduriCardurile nu pot fi mutate manual într-un pachet filtrat.Carduri în Plain TextCardurile vor fi automat returnate în pachetul lor original după ce le vei fi repetat.Carduri…CentratModificăSchimbă %s în:Modifică pachetSchimbă tipul noteiSchimbă tipul notei (Ctrl+N)Schimbă tipul notei…Schimbă pachetul în funcție de tipul noteiSchimbatControl & Media...Verifică fișierele din dosarul multimediaSe verifică…AlegeAlege pachetAlege tipul noteiAlege eticheteleClonează: %sÎnchideÎnchid și pierd ce ați introdus?Test cu cuvinte lipsăCod:Colecția este coruptă. Te rog să verifici manualul.Două puncteVirgulăConfigurează limba interfeței și alte opțiuniFelicitări! Ai terminat acest pachet pentru moment.Se conectează...Conexiunea a expirat. Fie ai probleme cu conexiunea la internet, fie ai un fișier foarte mare în dosarul media.ContinuăCopiazaRăspunsuri corecte pentru cardurile mature: %(a)d/%(b)d (%(c).1f%%)Corecte: %(pct)0.2f%%
(%(good)d of %(tot)d)Nu s-a putut conecta la AnkiWeb. Te rog să verifici conexiunea la rețea și să încerci din nou.Nu s-a putut efectua înregistrarea audio. Ai instalat lame şi sox?Nu s-a putut salva fişierul: % sTocealăCreează pachetCreează pachet filtrat…CreatăCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCtrl+ZCumulateCumulate %sRăspunsuri cumulateCarduri cumulatePachetul curentTipul notei curente:Studiu personalizatSesiunea de studiu personalizatTăiereBază de date reconstruită și optimizată.DataZile studiateDezautorizeazăConsolă pentru depanarePachetPachetul va fi importat dacă un profil este deschisPacheteIntervale de scădereImplicitAmână până când repetițiile sunt afișate din nou.ȘtergeȘterge carduriŞtergere pachetȘterge goaleȘterge notițaȘterge notițeleȘterge eticheteȘterge nefolositeȘtergi câmpul de la %s?Ștergi tipul de card '%(a)s' împreună cu %(b)s lui?Ștergi acest tip de notă și toate cardurile lui?Ștergi acest tip de notă nefolosit?Ștergi fișierele media nefolosite?A fost șters %d card cu nota lipsă.Au fost șterse %d carduri cu nota lipsă.Au fost șterse %d carduri cu nota lipsă.A fost șters %d card cu șablonul lipsă.Au fost șterse %d carduri cu șablonul lipsă.Au fost șterse %d carduri cu șablonul lipsă.A fost ștearsă %d notă cu tipul notei lipsă.Au fost șterse %d note cu tipul notei lipsă.Au fost șterse %d note cu tipul notei lipsă.A fost ștearsă %d notă fără carduri.Au fost șterse %d note fără carduri.Au fost șterse %d note fără carduri.A fost ștearsă %d notă cu câmpul de numărare greșit.Au fost șterse %d note cu câmpul de numărare greșit.Au fost șterse %d note cu câmpul de numărare greșit.Şters.Ștergerea acestui pachet din lista de pachete va repune toate cardurile rămase în pachetul lor original.DescriereDescrierea pentru afișarea ecranului de studiu (numai pentru pachetul curent):DialogDescarcă de la AnkiWebDescărcare de la AnkiWeb...ProgramateDoar cardurile programateProgramate pentru mâineIeși&reUșurințăUșorBonus ușorInterval ușorEditeazăEditează curentEditează HTMLModificatEditare fontGoleșteCarduri goale…Numere carduri goale: %(c)s Câmpuri: %(f)s Au fost găsite carduri goale. Te rog să rulezi Unelte>Carduri goale.Golește primul câmp: %sTerminăIntrodu pachetul pentru a plasa cele %s carduri noi sau lasă-l necompletat:Introdu noua poziție a cardului (1...%s):Scrieți etichetele de adăugat:Scrieți etichetele de șters:Eroare la descărcare: %sEroare în timpul pornirii aplicației: %sEroare la execuția %s.Eroare la pornirea %sExportăExportă...ExtraFF1Câmpul %d al fișierului este:Transformare câmpuriNume câmp:Câmp:CâmpuriCâmpuri pentru %sCâmpuri separate de: %sCâmpuri...FiltruFiltru:FiltratePachet filtrat %dGăsește &dubluri...Găsește dubluriCaută și î&nlocuieșteCaută și înlocuieșteSfârșitPrimul cardPrima recapitularePrimul câmp potrivit: %sRezolvat %d card cu proprietăți nevalide.Rezolvate %d carduri cu proprietăți nevalide.Rezolvate %d carduri cu proprietăți nevalide.Rezolvat bug de suprascriere a pachetului AnkiDroidRezolvat tipul notei: %sInverseazăDosarul există deja.Font:SubsolDin rațiuni de securitate, '%s' nu pe permis pe carduri. În schimb poate fi folosit prin plasarea comenzii într-un pachet diferit și apoi prin importarea acelui pachet în antetul LaTeX.PreviziuneFormularGăsite %(a)s prin %(b)s.FațăPrevizualizare fațăȘablon fațăGeneralitățiFișier generat: %sGenerat pe %sObține partajateBineIntervalul de divizareEditor HTMLDificilAntetAjutorCea mai mare ușurințăIstoricAcasăAvarie orarăOreOrele cu mai puțin de 30 de revederi nu sunt afișate.Dacă ați contribuit dar nu sunteți pe listă, contactați-ne.Dacă ai studiat în fiecare ziIgnoră timpul de răspuns mai mare deIgnoră majusculeleIgnoră liniile în care primul câmp se potrivește cu nota existentăIgnoră această actualizareImportăImportă fișierImportă chiar dacă nota existentă are același prim câmpImport eșuat. Import nereușit. Informații de depanare: Opțiuni la importareImport complet.Se află în dosarul media, dar nu sunt folosite de nicio carte:Pentru a te asigura că, atunci când este mutată între dispozitive, colecția ta funcționează corect, Anki are nevoie de setarea corectă a ceasului intern al calculatorului tău. Ceasul intern poate fi eronat, chiar dacă sistemul afișează corect timpul local. Te rog să mergi la setările de timp ale calculatorului tău și să verifici următoarele: - AM/PM - Abaterea ceasului - Ziua, luna și anul - Fusul orar - Salvările zilei Diferența pentru corectarea timpului: %s.Include mediaInclude planificareaInclude eticheteCrește limita cardurilor noi de astăziMărește limita cardurilor noi de astăzi laMărește limita cardurilor repetate astăziMărește limita repetițiilor de astăzi laCreștere intervaleInstalare suplimenteLimba interfeței:IntervalModificator intervalIntervaleCod invalid.Fișier invalid. Te rog să-l restaurezi dintr-o copie de siguranță.Proprietate invalidă găsită pe card. Te rog să folosești Instrumente>Verifică baza de date și, dacă problema revine, te rog să ceri ajutor pe site-ul de suport.Expresie regulată eronată.A fost suspendat.Sări la etichete cu Ctrl+Shift+TPăstreazăLaTeXEcuație LaTeXRateuriUltimul cardUltimele repetițiiUltimele adăugate mai întâiÎnvățateLimita de sus pentru cele învățateÎnvățate: %(a)s, Repetate: %(b)s, Reînvățate: %(c)s, Filtrate: %(d)sÎnvățateAcțiune pentru lipitoarePrag pentru lipitoareStângaLimitează laSe încarcă...Cel mai lung intervalPrivește în câmpul:Cea mai mică ușurințăAdministreazăTipuri de note…Transformă în %sTransformă în eticheteMatur(e)Interval maximRepetiții maxime/ziMediaInterval minimMinuteFă un amestec între cardurile noi și cele repetatePachet Mnemosyne 2.0 (*.db)Mai multCele mai multe greșeliMută carduriMută carduri în pachet:N&otăNumele există.Nume pentru pachet:Nume:RețeaNoiCarduri noiDoar carduri noiCarduri noi/ziNume nou pentru pachet:Interval nouNume nou:Tip de notă nou:Nume nou pentru grupul de opțiuniPoziție nouă (1...%d):Ziua următoare începe laNiciun card nu este programat încă.Niciun card nu s-a potrivit cu criteriul pe care l-ai oferitNiciun card gol.Niciun card matur nu a fost studiat astăzi.Nu s-au găsit fișiere nefolosite sau lipsă.NotăID notăTip notăTipuri notăNotă suspendată.NimicOKDoar cardurile noi pot fi repoziționate.DeschideSe optimizează...Limită opțională:OpțiuniOpțiuni pentru %sGrup de opțiuni:Opțiuni…OrdineOrdine carburi adăugateOrdine dată scadentăParolă:LipeșteProcentajTe rog să selectezi un pachet.PozițiePreferințePrevizualizarePrevizualizare card selectat (%s)Previzualizare carduri noiPrevizualizare carduri noi adăugate în ultima/ultimeleSe procesează...ProfiluriAutentificare proxy necesară.ÎntrebarePărăseșteAleatorOrdine aleatoareSe înregistrează...
Timp: %0.1fRedenumeșteRedenumire pachetRepoziționeazăRepoziționează cardurile noiRepoziționează…Re-planificăDirecție inversată a textuluiNumăr repetițiiTimpul repetărilorRepetițiiDreaptaCautăCaută în formatări (lent)SelecteazăSelecte&ază totArată răspunsArată cardurile noi după repetițiiArată cărțile noi înaintea recapitulăriiArată cărțile noi în ordinea adăugăriiArată cărțile noi în ordine aleatoareMărime:Unele configurări vor intra în vigoare după ce reporniți AnkiSortează câmpSpațiuStart ușurințăPas:Pași (în minute)Pașii trebuie să fie numere.Studiate astăziStudiază pachetStudiază pachet…Studiază acumXML exportat din Supermemo (*.xml)SuspendăSuspendă cardSuspendă notăSuspendateSincronizarea fişierelor audio şi a imaginilorSincronizarea a eşuat: %sSincronixarea a eşuat; conectarea la server a eşuat.Sincronizare...EticheteTextPachetul implicit nu poate fi şters.Împărțirea cardurilor în pachetul/pachetele tale.Numărul de întrebări la care ai răspunsNumărul de repetiții programate în viitorDe câte ori ați apăsat fiecare buton.Timpul de care a fost nevoie pentru a răspunde întrebărilorMai există carduri noi valabile, dar a fost atinsă limita zilnică. În Opțiuni, poți mări limita, dar te rog să ții cont de faptul că, introducând mai multe carduri noi, volumul de muncă al repetițiilor pe termen scurt va deveni mai mare.Fișierul există. Sunteți sigur(ă) că vreți să îl suprascrieți?De revăzutPentru a studia peste programul normal, fă clic pe butonul de mai jos Studiu personalizat.AstăziA fost atinsă limita repetițiilor pentru astăzi, dar încă există carduri care așteaptă să fie repetate. Pentru o memorare optimă, ia în considerare creșterea limitei zilnice în opțiuni.TotalTimp totalTotal carduriTotal noteȘirul este expresie regulatăTipRefă %sNevizualizateFolosite în carduri, dar care lipsesc din dosarul media:Versiunea %sÎntreaga colecțieDoriți să îl descărcați acum?Nu ți-ai înregistrat încă vocea.Trebuie să ai cel puțin o coloană.TinereTinere + învățate[fără pachet]copii de rezervăcarduricarduri din pachetcarduri selectate decolecțiezzilepachetviață pachetajutorascundeoreore trecute de miezul nopțiitransformat în %stransformat în eticheteminuteminutemorepetițiisecundeaceastă paginăwîntreaga colecție~anki-2.1.0+dfsg~b36/locale/ru/000077500000000000000000000000001323611211500157445ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ru/LC_MESSAGES/000077500000000000000000000000001323611211500175315ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ru/LC_MESSAGES/anki.mo000066400000000000000000003165111323611211500210170ustar00rootroot00000000000000d8K K KKK"KK KKL&L88LqLLLL"L$L$L&#M"JMmM4M2MMM"N$9N$^N$N NNNNN OO3OJO]O rOOOOOOOO OOOOOO OOPP P PP #P.P7P IPTP[PsPPPPPPP0P Q QQ "Q -Q8Q>QQQhQlQQQQR RRRRRT#RxR,zR(RR!RSf)SS SS S SSSSTe+TT7;UHsU)W XX5YX9YYY%YkZ ~Z ZZZZ Z ZZ Z Z [ [[&['C[k[s[z[[ [$[[ [[[[ [ \%\K6\\1\\v]"Z_}_ ____`I aRjava4b7b cw"cEc@c!d(d7dR?ddde#9e#]ee ezetPt1u]:u u8uuuuv+v/v >vKvQvVv [v fvtv yv v vv vvv)v0vw4wIw4Mw!www#wwx xxxx x.xy yyy .y SGn ז" $1 9EUe)w4֗/*N'y@68' `!k?M͙! 1 ?JPVi   ƚ Ԛޚ 3Pe m z  ț!ۛd bmq (ߜ X5+"&ݝ+00J+{>F'-*U(1۟,IƠ'(#_8e8.C(F+rr u/3McX gs !ͩҩ'Lelê.ʪ&>P,h  ëU8$W|"ZS 0_$"ح ޭ{f^5U }v   2=?D I S]bgmȴ5I_dlow   ŷ ҷtݷRTk4͸fv;kڹFܺli-fx[1ԽjaqӾ_wj]H5G!W#y-0/3,`x * )I\ z  !.4$c 6&) 5&SzK (5R e*o;0   )/5;AGeVe*$ $%!5Hd}!>JA U_|[}5 $.5?+u$1*#=a}-A!6J_%r@',/ \}Z@R8(-.Cr>ezbj HTS  |DX5<;rE4J)t/z:L&f8 ..@,o6518j)~ "s%+ 8?!Prfpgh,@#^#"#58nt-"9$Y+~'RDUQ,A'n<+" :[u42 9Uiz0Zm |he qq]B<W3@t9\8GNU\c j u         ' 4 ANU\ |#-:.iMz'  1 > ^[  <  E b q      +  G h U [E I B . !k|  &A`Ii,   &+R!o1! % 6CW&>,e=%|c0l!&%#S4:UW#Z,~   {  *!:"X{0J1*|'  / >! M!X! x!*!;! !!"&&"M"\"/q""" "2"#"#%1#W#f#k# #X##4$:$"$%!G%i%:% )&6&N&%&F&!F'h'l'@'.2+Oa++U+I&,Ip,N,< -'F-n--)--g- C.3d.^.o.!g/A0p0<1P1+f1111'11#122:2m2J~22L3C]3R3 334e-4*4!4%45053J5~5455,56/6F6a6)r6166'6 7Q7!i77I7'788=8 8#8%9C9]9 x99b9(:'+:S:n:::7:#:/;I;L[;i;8<XK<f</ = ;=H=X=l==>=>]>)?)?B#@f@ @@!@r@+ATBCD/(DXD$rDDDDDD& E 2ELl7l7.mfmR*nQ}nDn]o!roRo@o(ppOMqQqTqBDr`rJs~3tt43vhvDwBxxhyx {,{p|B$}g}6~ ~0~*q=p3ӂP3%R+x ń[W?^u#* ../]m9FQ eو?]:m!1ʉL^]5wu.X;C9 }_wsEؘҙ"$ATX al~  &0ݚ2<A>~<.)2<#o+ƜΜ֜  %-GcMv{@-!#HOZ2=teMV QXT):WIOh_u^kaI6P&j7bcw0e^`7woKF8sbY*)~p /Q9Ln@_UY}\,^5IEm CT67`8 9]=>?g  ~EkWilvOX(:C}) hPCyo_Fq,![Gk| |jP {|n"(j D*4Mogn 9@}Rn}5DT#SB\tP:\71UfcL9T 0RH !xu+ {,:-O/Sm0>Vhaap?ujol/"Y%e{Axe$v [iQt+qV2'!ZiJV*+b.y&D4gvq_wrX-tzIR N."s'GC H3 2F2$"hdDZza< 6;%&'(*gM|5#/0Uc1 3;458k@A\=^fXmGYb?1L[?'JW[<fx$sG.=N3d>]J,`;U~B>JES +dEl&Fu$KA;ly L<.A%]rq6dy<pB]rSR(1Nm`Z#4%3~KW8NBzfpsizQ)xKr  w-H (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

Error

An error occurred. Please use Tools > Check Database to see if that fixes the problem.

If problems persist, please report the problem on our support site. Please copy and paste the information below into your report.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAlways include question side when replaying audioAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuried SiblingsBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the %(num)d selected add-on?Delete the %(num)d selected add-ons?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEnable second filterEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFile version unknown, trying import anyway.FilterFilter 2Filter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax inlineMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckRepeat failed cards afterReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow cards as white on black (night mode)Show learning cards with larger steps before reviewsShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.Sound and video on cards will not function until mpv or mplayer is installed.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied %(a)s %(b)s today.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.What would you like to unbury?When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightin %s dayin %s daysin %s hourin %s hoursin %s minutein %s minutesin %s monthin %s monthsin %s secondin %s secondsin %s yearin %s yearslapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: 0.9.9.8.4 Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2018-02-02 09:24+0000 Last-Translator: ankitest Language-Team: JKL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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; X-Launchpad-Export-Date: 2018-02-03 04:37+0000 X-Generator: Launchpad (build 18544) Language: ru (1 из %d) (заблокировано) (выкл.) (вкл.) Содержит %d карточку. Содержит %d карточки. Содержит %d карточек.%% правильных%(a)0.1f %(b)s в день%(a)0.1fkB отдано, %(b)0.1fkB получено%(a)0.1fs (%(b)s)%(a)d из %(b)d записей обновлена%(a)d из %(b)d записей обновлены%(a)d из %(b)d записей обновлены%(n)d: %(name)s%(tot)s %(unit)s%.01f карт/мин.%d карточка%d карточки%d карточек%d карточка удалена.%d карточки удалены.%d карточек удалено.%d карточка экспортирована.%d карточки экспортировано.%d карточек экспортированы.%d карточка импортирована.%d карточки импортированы.%d карточек импортировано.%d карточка просмотрена за%d карточки просмотрены за%d карточек просмотрено за%d колода обновлена.%d колоды обновлены.%d колод обновлено.%d группа%d группы%d группзагрузить изменения в %d медиефайлезагрузить изменения в %d медиефайлахзагрузить изменения в %d медиефайлах%d медиафайл загружен%d медиафайлы загружены%d медиафайл загружен%d запись%d записи%d записей%d запись добавлена%d записи добавлено%d записей добавлено%d запись удалена.%d записи удалены.%d записей удалены.%d запись экспортирована.%d записи экспортированы.%d записей экспортированы.%d запись импортирована.%d записи импортированы.%d записей импортировано.%d заметка не изменена%d заметки не изменены%d заметок не изменено%d запись обновлена%d записи обновлены%d записей обновлено% d повторение%d повторения%d повторений%d выбрана%d выбраны%d выбрано%s (копия)%s день%s дня%s дней%s час%s часа%s часов%s минуту%s минуты%s минут%s минуту.%s минуты.%s минут.%s месяц%s месяца%s месяцев%s секунда%s секунды%s секунд%s к удалению:%s год%s года%s лет%s д.%s ч%s мин.%s мес.%s с%s г.&О программе…&Просмотр и установка...&Карточки&Проверить базу данных&Зубрить...&Редактирование&Экспортировать…&Файл&Найти&Переход&Руководство&Руководство…&Помощь&Импортировать…&Справка...&Инвертировать выделение&Следующая карточка&Записи&Открыть папку с дополнениями&Настройки…&Предыдущая карточка&Изменить расписание...&Поддержать Anki…&Переключить профиль&Инструменты&Отменить'%(row)s' содержит %(num1)d полей, ожидающих %(num2)d(%s правильных)(Запись удалена)(конец)(отфильтровано)(обучение)(нов.)(лимит у вышестоящей: %d)(пожалуйста, выберите 1 карточку)...Файлы .anki2 не предназначены для импортирования. Если Вы пытаетесь восстановить из резервной копии, обратитесь, пожалуйста, к разделу «Backups» руководства пользователя./0 д.1 месяц1 год10:0022:0003:0004:0016:00Получена ошибка 504. Время прохождения через шлюз истекло. Попробуйте временно отключить антивирус.:%d карточку%d карточки%d карточекОткрыть папку с резервными копиямиПосетить сайт%(pct)d %% (%(x)s из %(y)s)%Y-%m-%d @ %H:%MРезервные копии
Anki делает резервную копию коллекции при каждом закрытии и синхронизации.Формат экспорта:Что найти:Размер шрифта:Шрифт:Где искать:Содержит:Высота линий:Заменить на:СинхронизацияСинхронизация
Сейчас выключена; для включения кликните кнопку синхронизации в главном окне.

Нужна учётная запись

Для синхронизирования Вашей коллекции необходима учётная запись. Пожалуйста, получите учётную запись, после чего введите ниже её данные.

Anki обновлена

Была выпущена Anki %s.

Ошибка

Произошла ошибка. Пожалуйста, запустите Anki зажав Shift, что временно отключит все установленные дополнения.

Если проблема повторяется только с включенными дополнениями, пожалуйста, используйте Инструменты>Дополнения, чтобы отключить некоторые дополнения и перезапустите Anki. Повторяйте эти действия, пока не найдете проблемное дополнение.

Когда Вы нашли дополнение, бывшее причиной ошибки, пожалуйста, сообщите о случившемся в секции дополнений нашего сайта поддержки.

Отладочная информация:

Ошибка

Произошла ошибка. Пожалуйста, используйте Инструменты > Тест базы данных, чтобы посмотреть, исправит ли это проблему.

Если проблемы остались, пожалуйста, сообщите о них на нашем сайте поддержки. Пожалуйста, скопируйте информацию ниже и вставьте ее в Ваш отчет об ошибке.

<текст не в Unicode><введите сюда условия поиска, или нажмите Ввод, чтобы вывести содержимое текущей колоды>Большое спасибо всем людям, помогавшим проекту идеями, сообщениями об ошибках и пожертвованиями.Лёгкость карточки — размер следующего интервала при оценке «в самый раз» при повторении.Профильтрованная колода не может иметь суб-колод.Возникла проблема при синхронизации медиа-файлов. Пожалуйста, используйте Инструменты>Проверка медиа-файлов, затем синхронизируйтесь вновь для исправления неполадки.Прервано: %sОб AnkiДобавитьДобавить (комбинация: Ctrl + Enter)Добавить тип карточек...Добавить полеДобавить медиа-файлДобавить новую колоду (Ctrl+N)Добавление типа записиДобавить переворотДобавить меткиДобавить метки...Добавить в:Дополнение не настроено.Дополнение не было загружено с AnkiWeb.ДополненияДобавить...Добавить: %sДобавленоДобавленные сегодняДобавлен дубликат с первым полем: %sНе помнюЗабытые сегодняКоличество забытых: %sВсе отложенные карточкиВсе типы карточекВсе колодыВо всех поляхВсе карточки в случайном порядке (режим зубрёжки)Все карточки, записи и медиа-файлы этого профиля будут удалены. Вы уверены?Разрешить использование HTML в поляхПри повторном воспроизведении аудио на оборотной стороне всегда воспроизводить аудио и с лицевой стороны тожеНевозможно загрузить установленное дополнение. Если проблема сохраняется, перейдите в меню Инструменты>Дополнения и запретите или удалите это дополнение. При загрузке '%(name)s': %(traceback)s Произошла ошибка при обращении к базе данных. Возможные причины: - Антивирус, брандмауэр, резервное копирование, или программное обеспечение для синхронизации может быть мешает Анки. Попробуйте отключить такие программы и посмотреть, если проблема исчезнет. - Ваш диск переполнен. - Документы/папка Анки может быть на сетевом диске. - Файлы в документах / папке Анки могут быть не доступнымы к записи. - Ваш жесткий диск может иметь ошибки. Хорошая идея будеть запустить Инструменты(Tools) > Проверти базу данных чтобы обеспечить что ваша коллекция не поврежденa. Возникла ошибка при открытии %sAnkiКолода Anki 2.0Упакованная коллекция AnkiПакет колод AnkiAnki не может переименовать ваш профиль, т.к. не может переименовать папку на диске. Пожалуйста, удостоверьтесь, что у вас достаточно прав для записи в Documents/Anki и ни одна другая программа не использует эту папку, после чего попробуйте снова.Anki не обнаружила линию между вопросом и ответом. Пожалуйста, чтобы поменять их местами, отредактируйте шаблон вручную.Anki не поддерживает файлы в подкаталогах папки collection.mediaAnki — это дружелюбная, интеллектуальная обучающая система, основанная на методе «интервальных повторений». Полностью бесплатная, с открытым исходным кодом.Anki распространяется под лицензией AGPL3. Смотрите файл лицензии в дистрибутиве для более точной информации.Anki не смогла открыть ваш файл коллекции. Если проблема сохраняется и после перезапуска компьютера, пожалуйста, в менеджере профилей воспользуйтесь кнопкой Открыть резервную копию. Информация для отладки: AnkiWeb ID или пароль неверны; пожалуйста, попытайтесь ещё раз.AnkiWeb ID:AnkiWeb обнаружил ошибку. Пожалуйста, попробуйте ещё раз через несколько минут, и если эта проблема повторится, отправьте сообщение об ошибке.AnkiWeb занят в данный момент. Пожалуйста, повторите попытку через несколько минут.На AnkiWeb ведутся профилактические работы. Пожалуйста, попробуйте еще раз через несколько минут.ОтветКнопки ответаОтветыАнтивирус или межсетевой экран не даёт Anki подключиться к Интернету.Любой флагВсе неприкрепленные карты будут удалены. Если запись не имеет карт, она будет потеряна. Вы уверены, что вы хотите продолжить?Дважды встречается в файле: %sВы уверены, что хотите удалить %s?Должен быть хотя бы один тип карточки.Должен быть хотя бы один шаг.Прикрепите изображения / аудио / видео (F3)Автоматическая синхронизация и резервное копирование были отключены при восстановлении. Чтобы включить их снова, закройте профиль или перезапустите Anki.Автоматически озвучиватьАвтоматически синхронизировать при открытии или закрытии профиляВ среднемСреднее времяСреднее время ответаСредняя лёгкостьСреднее по не пропущенным днямСредний интервалОтветПример оборотной стороныШаблон оборотной стороныРезервное копирование...Резервные копииОсновнаяОсновная (+ обратные карточки)Основная (обратные по выбору)Основная (с набором ответа)Синий флагПолужирный текст (Ctrl+B)ОбзорОбзор (%(cur)d карточка показана; %(sel)s)Обзор (%(cur)d карточки показаны; %(sel)s)Обзор (%(cur)d карточек показано; %(sel)s)Вид в обозревателеВид в обозревателе...Настройки обозревателяСборкаОтложеныОтложенные связанные карточкиОтложитьОтложить карточкуОтложить записьОткладывать связанные новые карточки до следующего дняОткладывать повторения связанных карточек до следующего дняПо умолчанию, Anki будет обнаруживать знаки между полями, такие как символ табуляции, запятая, и т.д. Если Anki определит символ неправильно, Вы можете ввести его здесь. Используйте \t для отображения TAB.ОтменитьКарточкаКарточка %dКарточка 1Карточка 2ID карточкиСписок карточекСостояние карточкиТип карточкиТип карточки:Типы карточекТипы карточек для %sКарточка отложена.Карточка исключенаКарточка была «приставучей».КарточекВручную переместить карточки в колоду на основе фильтра нельзяКарточки в простой текстКарточки будут автоматически возвращены в исходные колоды после того, как Вы их просмотрите.Карточки…В центреИзменитьИзменить %s на:В другую колодуВ другую колоду...Поменять тип записиСменить тип записи (Ctrl+N)Поменять тип записи…Изменить цвет (F8)Изменить колоду в зависимости от типа записиИзмененаСледующие изменения затронут %(cnt)d запись, использующую этот тип карточек.Следующие изменения затронут %(cnt)d записи, использующих этот тип карточек.Следующие изменения затронут %(cnt)d записей, использующих этот тип карточек.Изменения вступят в силу при перезапуске Anki.Проверка &медиа-файлов...Проверить обновленияПроверить файлы в медиа-каталогеПроверка медиа-файлов...Проверка...ВыбратьВыбор колодыВыбор типа записиВыберите тэгиСнять флагПочистить от неиспользуемыхСнять неиспользуемые меткиКлонировать: %sЗакрытьЗакрыть и потерять данный ввод?Закрытие...ПропускиПропуск (Ctrl+Shift+C)Код:Коллекция экспортирована.Коллекция повреждена. Пожалуйста, обратитесь к руководству пользователя.ДвоеточиеЗапятаяКонфигКонфигурацияВыбор языка интерфейса и других опций для этой программыПоздравляем! Вы завершили эту колоду на текущий момент.Подключение...Превышено время ожидания подключения. Либо у вас проблемы с интернет-соединением, либо в медиа-папке есть очень большой файл.ПродолжитьКопироватьПравильных ответов на развитые карты: %(a)d/%(b)d (%(c).1f%%)Правильно: %(pct)0.2f%%
(%(good)d из %(tot)d)Невозможно подключиться к AnkiWeb. Пожалуйста, проверьте подключение к сети и повторите попытку.Не удалось записать аудио. Вы установили lame и sox?Не удалось сохранить файл: %sЗубрёжкаСоздать колодуСоздать фильтрованную колоду…Создать масштабируемые изображения с помощью dvisvgmСозданаCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZСовокупное числоВсего %sВсего ответовВсего карточекТекущая колодаТекущий тип записи:Дополнительное обучениеСеанс дополнительного обученияВырезатьБаза данных перестроена и оптимизирована.ДатаДней обученияОтменить авторизациюКонсоль отладкиКолодаЗамена колоды...Колода будет импортирована после открытия профиля.КолодыОт большего интервала к меньшемуПо умолчаниюЗадержки перед следующим повторениемУдалитьУдалить карточкиУдалить колодуУдалить пустыеУдалить записьУдалить записиУдалить меткиУдалить неиспользуемыеУдалить поле из %s?Удалить %(num)d дополнение?Удалить %(num)d дополнения?Удалить %(num)d дополнений?Удалить тип карточек '%(a)s' и соответсвующие %(b)s?Удалить этот тип записи и все карточки этого типа?Удалить этот неиспользуемый тип записи?Удалить неиспользуемые медиа-файлы?Удалена %d карточка с отсутствующей записью.Удалены %d карточки с отсутствующей записью.Удалено %d карточек с отсутствующей записью.Удалена %d карточка с отсутствующим шаблоном.Удалены %d карточки с отсутствующим шаблоном.Удалено %d карточек с отсутствующим шаблоном.Удалена %d запись с отсутствующим типом записи.Удалены %d записи с отсутствующим типом записи.Удалено %d записей с отсутсвующим типом записи.Удалена %d запись без карточек.Удалены %d записи без карточек.Удалено %d записей без карточек.Удалена %d карточка с неверным числом полей.Удалены %d карточки с неверным числом полей.Удалено %d карточек с неверным числом полей.Удалено.Удаление этой колоды из списка колод вернёт все оставшиеся карточки в их исходные колоды.ОписаниеОписание, отображаемое на экране обучения (только для текущей колоды):ДиалогПолучить с AnkiWebЗагружен %(fname)sЗагрузка с AnkiWeb...ПораТолько карточки, которые пора повторятьЗапланировано на завтра&ВыходЛёгк.Очень легкоБонус для лёгкихИнтервал для «легко»РедактированиеРедактирование "%s"Редактирование параметровРедактирование HTMLОтредактированоШрифт в редактореОчиститьПустые карточки…Номера пустых карточек: %(c)s Поля: %(f)s Найдены пустые карточки. Пожалуйста, выберите меню Инструменты > Пустые карточки....Пустое первое поле: %sРазрешить второй фильтрEndУкажите колоду, в которую помещать новые карточки %s, или оставьте поле пустым:Введите новую позицию карты (1...%s):Введите любые метки для добавления их ко всем выделенным карточкам:Введите имя существующей метки для её удаления со всех выделенных карточек:Ошибка загрузки %(id)s: %(error)sОшибка загрузки: %sОшибка при запуске: %sОшибка создания защищенного соединения. Это, как правило, вызвано антивирусом, брандмауэром, VPN программой , или проблемы с вашим провайдером.Ошибка выполнения %s.Ошибка при работе %sЭкспорт, колоды в любой другой удобный форматЭкспорт...Экспортирован %d медиа-файлЭкспортировано %d медиа-файлаЭкспортированы %d медиа-файловДополнительноFF1Поле %d из файла:Составление карты полейИмя поля:Поле:ПоляПоля для %sПоля разделены: %sПоля...Филь&трВерсия файла неизвестна, в любом случае попытайтесь импортировать.ФильтрФильтр 2Фильтр...Фильтр:ОтфильтрованоФильтрованная колода %dНайти &Дубликаты...Найти дубликаты&Найти и заменить...Найти и заменитьЗавершитьПервая карточкаУвидена впервыеСовпадение первого поля: %sИсправлена %d карточка с неправильными свойствами.Исправлены %d карточки с неправильными свойствами.Исправлены %d карточек с неправильными свойствами.Исправлен баг с перезаписью колоды AnkiDroidИсправлен тип записи: %sФлагФлаг карточкиПеревернутьПапка уже существует.Шрифт:Нижняя строкаПо причинам безопасности, '%s' нельзя использовать в карточках. Вы можете вписать комманду в другой пакет, и импортировать этот пакет в заголовок LaTeX.ПрогнозФормаНайдено %(a)s из %(b)sВопросПример лицевой стороныШаблон лицевой стороны (вопроса)ОбщиеСоздан файл: %sСоздан на %sСкачать дополнения...СкачатьВ самый разИнтервал после всех шаговЗелёный флагHTML РедакторТрудноВы установили latex и dvipng/dvisvgm?ЗаголовокСправкаНаибольшая лёгкостьИсторияHomeПо времени сутокЧасовНе показаны часы, когда было меньше 30 повторенийЕсли Вы внесли свой вклад в развитие программы, но не находитесь в этом списке, пожалуйста, свяжитесь с нами.Если бы Вы учились ежедневноНе учитывать время ответа болееБез учёта регистраИгнорировать полеИгнорировать строки, где первое поле соответствует существующей записиПроигнорировать это обновлениеИмпортИмпорт файлаИмпортировать, даже если существующая запись содержит такое же первое полеНеудавшийся импорт. Ошибка иморта. Отладочная информация: Настройки импортаИмпортировано.Есть в медиа-папке, но не используется никакими карточками:Во избежание проблем при переносе коллекции между устройствами, Anki требует, чтобы встроенные часы компьютера были установлены правильно. Даже если система показывает точное местное время, настройки встроенных часов могут быть неверны. Пожалуйста, перейдите к настройкам времени Вашего компьютера и проверьте следующее: - AM/PM, - Отставание/убегание вперёд, - Число, месяц и год, - Часовой пояс, - Настройки летнего времени. Разница с правильным временем: %s.Присоединить медиа-файлыДобавить в экспорт информацию о расписанииВместе с меткамиУвеличить сегодняшний лимит на новые карточкиУвеличить сегодняшний лимит на новые наУвеличить сегодняшний лимит повторенийУвеличить сегодняшний лимит повторений наОт меньшего интервала к большемуУстановка дополненияЯзык интерфейса:ИнтервалМодификатор интервалаИнтервалыНеправильный код либо дополнение не для вашей версии Anki.Недопустимый код.Недопустимая конфигурация: Недопустимое имя файла, пожалуйста, переименуйте: %sФайл повреждён. Пожалуйста, восстановите из резервной копии.Неверная установка найдена на карте. Пожалуйста воспользуйтесь Инструменты>Проверить базу данных, и если неполадка повторилась, спросите на сайте поддержкиНеправильное регулярное выражение.Недопустимый поиск — пожалуйста, проверьте на ошибки набора.Исключено.Курсив (Ctrl+I)Перейти к тегам (Ctrl+Shift+T)Хранить доLaTeXФормула LaTeXВыключная формула LaTeXЗабытыеПоследняя карточкаПоследний ответОбратно порядку добавленияИзучениеЛимит на внеочередное изучение карточекИзучаемых: %(a)s, повторённых: %(b)s, переучиваемых: %(c)s, отфильтрованных: %(d)sОбучениеДействие с "приставучими" карточкамиНеобходимый лимит для "приставучих" карточекСлеваОграничить доЗагрузка...В локальной коллекции нет карточек. Загрузить их с AnkiWeb?Самый длинный интервалПосмотрите в поле:Наименьшая лёгкостьНастроитьУправление типами записейУправление типами записей…Настроить...Отложенные вручную карточкиПодключить к %sОтображение для заметокПометить записьблочный MathJaxстроковый MathJaxРазвитыеМаксимальный интервалМаксимум повторений в деньМедиа-файлыМинимальный интервалМинутПеремешать изучение новых карт и повторенияКолода Mnemosyne 2.0 (*.db)ЕщёНаибольшее количество забытых карточекПереместить карточкиПереместить карточки в колоду:Разделители из нескольких символов не поддерживаются. Пожалуйста, введите только один символ.&ЗаписьИмя уже существует.Название для колоды:Наименование:СинхронизацияНовыеНовые карточкиНовые карточки в колоде сверх дневного ограничения: %sТолько новые карточкиНовых карточек в деньИмя для колодыНовый интервалНовое имя:Новый тип записи:Имя для новой группы настроек:Новая позиция (1…%d):Следующий день начнется сНет флагаПока нет карточек, которые пора повторятьКарточек, соответствующих заданным критериям, не найденоПустых карточек не обнаружено.Сегодня не было выучено ни одной развитой карты.Не обнаружено отсутствующих или неиспользуемых файлов.Доступных обновлений нет.ЗаписьID ЗаписиТип записиТипы записиЗапись и %d карточка удалены.Запись и %d карточки удалены.Запись и %d карточек удалены.Запись отложена.Запись исключенаПримечание: медиа-файлы не резервируются. Пожалуйста, на всякий случай делайте резервные копии своей папки Anki.Примечание: Часть истории отсутствует. Для получения дополнительной информации смотрите документацию браузера.Записи в простой текстЗаписи необходимо хотя бы одно поле.Записи помеченыНичегоОКпросмотрены давноПри следующей синхронизации перезаписать в одном направленииОдна или больше записей не были импортированы, так как они не сгенерировали ни одной карточки. Это может произойти из-за пустых полей, или из-за неправильного указания соответствия содержимого текстового файла и полей.Можно изменять позиции только новых карточек.К AnkiWeb может подключаться только один клиент одновременно. Если недавняя синхронизация была неудачной, подождите, пожалуйста, несколько минут.ОткрытьОткрыть резервную копию...Оптимизация...Опциональный лимит:НастройкиНастройки для %sГруппа настроек:Настройки...Порядокв порядке добавленияOrder dueПереопределить шаблон оборотной стороны:Изменить шрифт:Переопределить шаблон лицевой стороны:Упакованная колода/коллекция Anki (*.apkg *.colpkg *.zip)Пароль:ВставитьВставлять изображения из буфера как PNGУрок Pauker 1.8 (*.pau.gz)ПроцентыПериод: %sПоместить в конец очереди новых карточекПоместить в очередь на повторение с интервалами между:Пожалуйста, сначала добавьте другой тип записи.Пожалуйста, подсоедините микрофон и убедитесь, что другие программы не используют это аудиоустройтво.Пожалуйста, отредактируйте эту запись, добавив несколько пропусков для заполнения. (%s)Убедитесь, что профиль открыт и Anki не занята, затем попробуйте снова.Пожалуйста, задайте ваше название фильтра:Пожалуйста, установите PyAudioПожалуйста, вначале откройте профиль.Пожалуйста, удалите папку %s и попробуйте снова.Пожалуйста, перезагрузите Анки для завершения смены языка.Пожалуйста выполните Инструменты>Пустые карточки...Пожалуйста, выберите колоду.Пожалуйста, выберите карточки только одного типаПожалуйста, выберите что-нибудь.Пожалуйста установите последнюю версию Anki.Для импортирования этого файла, пожалуйста, используйте Файл>Импортировать.Пожалуйста, посетите AnkiWeb, обновите вашу колоду, затем попытайтесь ещё раз.ОчередьНастройкиПоказатьПредпросмотр выбранной карты (%s)Показать новые карточкиПредпросмотр новых карт добавленных в прошломОбработан %d медиафайлОбработано %d медиафайлаОбработаны %d медиафайловОбработка данных...ПрофилиТребуется прокси аутентификация.Фиолетовый флагВопросКонец очереди: %dНачало очереди: %dВыйтиВ случайном порядкеВ случайном порядкеОценкаПерестроитьЗаписать свой голосЗапись аудио (F5)Началась запись...
Время: %0.1fКрасный флагОтносительная просроченностьПереучиваемыеПомнить последние введённые данныеУдалить %s из сохраненных поисков?Удалить тип карточек...Удалить текущий фильтр...Удалить метки...Удалить форматирование (Ctrl+R)Удаление этого типа карточки привело бы к удалению одной или более записей. Пожалуйста, создайте сначала новый тип карточки.ПереименоватьПереименовать тип карточек...Переименовать колодуПовторить забытые карточки послеЗаместить вашу коллекцию более ранней резервной копией?Повторное воспроизведение аудиоВоспроизвести свой голосПереместитьПереместить тип карточек...Переместить новые картыОчередь…Требуется одна или несколько из этих меток:ПеренестиИзменить расписаниеПерепланировать карты на основе моих ответов в этой колодеПродолжить сейчасНаправление текста справа-налевоВозврат к резервной копииВозврат к состоянию до '%s'.ПовторениеКоличество повторенийВремя на повторенияПросмотреть вперед (вне дневного лимита)Просмотреть вперед наПересмотреть карточки, забытые в прошломПовторить забытые карточкиДоля удачных просмотров в определенный часПовторениеПросмотреть в колоде повторяемые карточки сверх дневного лимита: %sСправаСохранитьСохранить текущий фильтр...Сохранить как PDFСохранено.Охват: %sПоискПоиск с форматированием (медленно)Выбрать&Выделить всёВыбрать &записиВыберите исключаемые метки:Выбранный файл не в кодировке UTF-8. Пожалуйста, прочтите раздел об импорте в руководстве.Выборочное обучениеТочка с запятойСервер не найден. Либо соединение разорвано, либо антивирус или файервол блокируют подключение Anki к интернету.Отметить все колоды под %s как эта опциональная группа?Назначить всем подколодамПовторить последний использованный цвет шрифта (F7)Клавиша "шифт" была зажата. Пропускаем автоматическую синхронизацию и загрузку дополнений.Сдвигать позиции других карточекГорячая клавиша: %sГорячая клавиша: Стрелка влевоГорячая клавиша: Стрелка вправо или EnterГорячая клавиша: %sПоказать %sПоказать ответПоказать обе стороныПоказать дубликатыПоказывать время ответаПоказывать карточки белым по чёрному (ночной режим)Показывать разучиваемые карточки с большими интервалами до повторенийПоказывать новые карточки после повторенийПоказывать новые карточки перед повторениямиПоказывать новые карточки в порядке их добавленияПоказывать новые карточки в случайном порядкеПоказывать время следующего повторения над кнопками ответаПоказывать при просмотре число оставшихся карточекБоковая панельРазмер:Некоторые связанные и отложенные карточки задержаны до другого сеанса.Некоторые параметры вступят в силу только после перезапуска Anki.Некоторые обновления проигнорированы, потому что тип записи был изменен:Поле сортировкиСортировать в обозревателе по этому полюСортировка по данной колонке не поддерживается. Пожалуйста, выберите другую колонку.Озвучки и видео на карточках не будут функционировать до установки mpv или mplayer.ПробелПервая позиция:Исходная лёгкостьСтатистикаСтатистикаШаг:Шаги (в минутах)Шаги указываются в виде чисел.Завершение...Просмотрено сегодня %(a)s %(b)sПросмотрено сегодняУчитьУчить колодуУчить колоду...УчитьУчить по состоянию карточки или по меткеТаблица стилейСтиль (используется во всех карточках в записи)Нижний индекс (Ctrl+=)Экспорт в Supermemo XML (*.xml)Верхний индекс (Ctrl++)ИсключитьИсключить карточкуИсключить записьИсключённыеИсключённые + ОтложенныеСинхр.Синхронизировать также звуки и изображенияСинхронизация не удалась: %sСинхронизация не удалась; нет подключения к Интернету.Синхронизация требует правильности часов Вашего компьютера. Пожалуйста, настройте часы и попробуйте снова.Выполняется синхронизация…Символы табуляцииОтметить дупликатытолько пометитьМеткиЦелевая колода (Ctrl+D)Целевое поле:ТекстТекст, разделённый символами табуляции или точками с запятой (*)Колода с таким названием уже есть.Заданное имя уже используетсяЗаданное имя уже используетсяОшибка времени ожидания при подключении к AnkiWeb. Пожалуйста, проверьте ваше соединение и повторите попытку.Стандартные настройки не могут быть удалены.Стандартные настройки не могут быть удаленыРаспределение карточек в колоде (-ах).Загруженные данные повреждены. Попробуйте еще раз.Первое поле пусто.Первое поле записи должно быть прикрепленно.Символ %s не может быть использован.Лицевая сторона этой карточки пуста. Пожалуйста, выполните Инструменты>Пустые карточки...Пустой вопрос будет сгенерирован для всех карт для того, что вы ввели.Количество новых карт, которые вы добавили.Количество вопросов, на которые вы ответили.Число повторений, запланированных на будущее.Сколько раз Вы нажали каждую кнопку.Разрешенния временной папки на вашем компьютере установленны неправильно, и Anki не может автоматически устранить проблему. Пожалуйста, произведите поиск с запросом "temp folder" по документации Anki.Указанный файл должен быть в формате .apkg.Нет карточек, удовлетворяющих условиям поиска. Желаете задать новые?Запрошенное действие потребует полной выгрузки данных при следующей синхронизации коллекции. Просмотры и другие изменения на ваших устройствах, которые не были синхронизированны, будут потеряны. Продолжить?Время, затраченное на ответыЕсть ещё новые карточки, но дневной лимит исчерпан. Вы можете увеличить лимит в настройках, но, пожалуйста, имейте в виду, что чем больше новых карточек вы просмотрите, тем больше вам надо будет повторять в ближайшее время.Должен остаться хотя бы один профиль.Нельзя сортировать по этому столбцу, но вы можете искать конкретный тип карточек, например, 'card:1'.Нельзя сортировать по этому столбцу, но вы можете найти конкретную колоду, щёлкнув по ней слева.Указанный файл должен быть в .apkg формате. Если вы скачали файл с AnkiWeb, то возможно скачивание прервалось или не удалось. Если проблема продолжает появляться, попробуйте использовать другой браузер.Этот файл уже существует. Вы уверены, что хотите перезаписать его?Эта папка содержит всю вашу информацию используемую в Anki, чтобы создавать резервные копии быстрее. Если вы хотите использовать другую папку, прочтите следующее: %s Это специальная колода для обучения вне обычного расписания.Вот {{c1::пример}} заполнения пропуска.Будет создана %d карточка. Продолжить?Будут созданы %d карточки. Продолжить?Будет создано %d карточек. Продолжить?Это действие удалит существующую коллекцию, заменив её данными из импортируемого файла. Вы уверены?ВремяЛимит ограничения времениПроверитьДля просмотра дополнений, кликните по кнопке Обзор ниже.

Когда вы нашли дополнение, которое вам нравится, пожалуйста, вставьте его код ниже. Вы можете вставить несколько кодов, разделяя их пробелом.Чтобы добавить заполнение пропусков к существующей записи, вы прежде должны изменить её тип на «пропуски», выбрав Редактировать>Поменять тип записи.Чтобы увидеть их сейчас, нажмите кнопку «Вернуть отложенные»Для обучения сверх обычного расписания, нажмите кнопку 'Дополнительное обучение' ниже.СегодняСегодняшний лимит просмотров был достигнут, но некоторые карточки ещё не были просмотрены. Для оптимального запоминания подумайте об увеличении дневного лимита просмотров в опциях.Переключить EnabledПереключить ОтметкуПереключить ИсключениеВсегоОбщее времяВсего карточекВсего записейТрактовать текущий ввод как регулярное выражениеТипНапишите ответ: неизвестное поле %sНе удалось импортировать из доступного только для чтения файла.Невозможно переместить существующий файл в корзину — пожалуйста, перезагрузите свой комп.Вернуть отложенныеПодчеркнуть текст (Ctrl+U)ОтменаОтменить - %sНеожиданный код ответа: %sНеизвестный формат файла.Не просмотреноОбновлять существующие записи, когда первое поле совпадаетОбновить следующие дополнения?Обновлено %(a)d из %(b)d имеющихся записей.Загрузить на AnkiWebЗагрузка на AnkiWeb…Использовано в карточках, но отсутствует в медиа-папке:1-й пользовательВерсия %sПосмотреть страницу дополненияПросмотреть файлыОжидание окончания правки.Предупреждение. Заполнение пропусков не будет работать, пока вы не смените тип на «Пропуски» выше.Какие отложенные вам хотелось бы вернуть?По умолчанию помещать создаваемое в текущую колодуВся коллекцияВы желаете скачать её сейчас?Написал Damien Elmes, с патчами, переводами, проверкой и дизайном из:

%(cont)sТип записи - заполнение, но вы не заполнили пропуски. Продолжить?У вас много колод. Пожалуйста, посмотрите %(a)s. %(b)sВы ещё не записали своего голосаВы должны иметь хотя бы один столбец.СвежиеСвежие+ИзучаемыеИзменения затронут несколько колод. Если вы хотите поменять только текущую колоду, пожалуйста, добавьте новую группу настроек.Представляется, что файл вашей коллекции разрушен. Это могло произойти, когда файл скопировали или переместили при работающей Anki, либо когда коллекция хранилась на сетевом или облачном диске. Если проблема сохраняется и после перезапуска вашего компьютера, пожалуйста, откройте автоматическую резервную копию из экрана профилей.Ваша коллекция находится в неопределенном состоянии. Пожалуйста, выберите Инструменты>Тест базы данных. Затем, проведите синхронизацию опять.Ваша коллекция или медиа-файлы слишком велики для синхронизации.Ваша коллекция успешно загружена в AnkiWeb. Если вы используете другие устройства, пожалуйста, синхронизируйте их и скачайте коллекцию, которую вы только что загрузили. После этого информация о просмотрах и новые карточки будут добавляться автоматически.Ваши колоды на AnkiWeb отличаются от локальной копии и не могут быть автоматически совмещены. Необходимо записать онлайн колоды поверх локальных, или наоборот. Если вы выберете загрузку с AnkiWeb, то Anki скачает колоды с AnkiWeb, и все изменения, произведённые на этом компьютере с момента последней синхронизации, будут утеряны. Если вы выберете выгрузку на AnkiWeb, то Anki выгрузит колоды на AnkiWeb, и все изменения, произведённые на AnkiWeb или ваших устройствах с момента последней синхронизации, будут утеряны. После того как все устройства будут синхронизированы, просмотры и добавленные карты на локальных и онлайн копиях будут совмещены автоматически.Ваш брандмауэр или антивирус предохраняет Anki он подключения к самой себе. Пожалуйста, создайте правило исключения для Анки.[нет колоды]резервных копийкарточкикарточки из колодыкарт, выбранныхколлекцияд.днейпакетвсё времядубликатсправкаскрытьчасовчасов после полуночиза %s деньза %s дняза %s днейза %s часза %s часаза %s часовза %s минутуза %s минутыза %s минутза %s месяцза %s месяцаза %s месяцевв %s секундув %s секундв %s секундыза %s годза %s годаза %s летзабыванийменьше, чем 0,1-карты / минутуотображать на %sотображать на меткиминмин.мес.повторенийсекундстатистикаэту страницунед.вся коллекция~anki-2.1.0+dfsg~b36/locale/sco/000077500000000000000000000000001323611211500161025ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/sco/LC_MESSAGES/000077500000000000000000000000001323611211500176675ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/sco/LC_MESSAGES/anki.mo000066400000000000000000000036341323611211500211540ustar00rootroot00000000000000l " (8;t"$&4M^${ $ 6/@T$g&(6$$A f     (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card studied in%d cards studied in%d media change to upload%d media changes to upload%d note%d notes%d note added%d notes added%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviewsProject-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2015-03-07 13:02+0000 Last-Translator: Marco Cafolla Language-Team: Scots MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) 1 0 %d (aff) (on) it haes %d caird it hars %d cairds%% Correct%(a)0.1f %(b)s/day%(a)d o %(b)d note updatit%(a)d o %(b)d notes updatit%(tot)s %(unit)s%.01f cairds/minute%d caird%d cairds%d caird deleted.%d cairds deleted.%d caird exportit.%d cairds exportit.%d caird studied in%d cairds studied in%d media chynge tae upload%d media chynges tae upload%d note%d notes%d note added%d notes added%d note unchynged%d notes unchynged%d note updatit%d notes updatit%d review%d reviewsanki-2.1.0+dfsg~b36/locale/sk/000077500000000000000000000000001323611211500157335ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/sk/LC_MESSAGES/000077500000000000000000000000001323611211500175205ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/sk/LC_MESSAGES/anki.mo000066400000000000000000001676621323611211500210210ustar00rootroot00000000000000-< <<<"<= ==#=85=n=="=$=$=&="$>G>Z>k>$> >>>>??#?8?O?b? w???????? ??? ????? ?? ?@ @"@:@J@Y@h@y@@0@ @@ @ @@@@AAAAAAAAAAATA B,"B(OBxB!BBfB8C NC[C mC zCCCCCeC9D7D E%E58EXnEYEk!F F FFF F FF F FGGG G &G$2GWG ]GiG yG G%GKGH"H8H =HKH]HRHv4I7I IwIEgJ@JJJKR K_KK#K#!LELdL(}LL LL LLLM M M&M.M4MNMmMtMMMM M M)M'MNNNNNNN N N O O O,O[WPWW]W RX8^XXXXXX XXXX Y YY Y +Y5Y [F[O[`[t[[[[ [ [[N[0\D\I\`\f\m\]&]+]E] K]Y]h]p]] ]]] ]]]] ]]]]].^F4^{^^ ^4^^_ _1_M_]_}__*__ iawa aa"a"a b*b?bNbbbkb }b b)bbCc_cvcccccc c cccc< dFd Od\dldqd zddd ddd d ddddee&e.eHebe ge se~ee eeeee ee ee e ff"f:fQfdf+zff#f!ffg g g<g [ghg]xgag8h!Lh nh|hhh,hh#ikij #j1jAjIjXj gjrj xj jjjj jjjj k $k/k,Nk#{kVk8kE/lullll,l m-"m+Pm8|mm mmmm#m #n1n:nYnbn snnnnnnnnnnnioo o oo oo o"op p1p GpRp opp p p pppp-q1q9q ?qIqPqpq wq qqVqr rr,rrGr 'sHs Ysfs nszssssss*t'?tgt@mt6t8t u!)u?Kuuu u uuuu uu u v v!vyFy*z(1z1Zzz,J{Iw{{'||#}e}O~8FC(Sr| u/M  ɂ!Ղ'BINVk.r&ȃڃ, &1UP$˄"܄S0S$"̅ ҅{ޅ^Z5U NX`fz  NJۊ $, 2<>OQ # - :0Fw yv!2>NGGՎ;YY &ԏCR?V)% 9CZx" ܑ&*06<@D U cm}  В( !-EW it? œӓ ܓ 26Ԕ֔ݔclEn6. ;dSЖ $=Of@ ИޘcUי[ܚ & 6Wm  &ț  03>UrȜ# +RKҞ *aZyJ#,$ޡ#<>{Ţߢ) 1"<._  ̣ ֣328k!*2: C Q [gzťA˥ X'Ѧ' 1:*Ozʧ ڧ2 %9+ eo(w7ب l yA5ǩf<d ɪ"ݪ $+29 @ M Z gt{ ȫܫ 3(\cx 2 ݬ 8 AM_u˭+5&,\ @֯s{ { I&p Ҳ 1: M [et}/DM#&q,ش %7 >HNPSn  ŵεյ ݵ*B V `l}' COhpv "-3Ray ʸ߸   9CI^6e>۹&D9~B& 1D:Xp#'), .8gz žϾ-߾ Ϳ)߿ * @K[pH  $1BVg ! (#0Tsx   1K Zh },0.+FBr wawxJ W'v;'   6#W{ &  (3A/u[F_H,5-c,{=P7 @KTq1  !+4 FQaw , dp1 .=< z) *#N.i  #S#w u? "Mcp%  +>S'n&4)=;Z F7C d*rI %+?] q|,. <GXm!~7{p 4#:^Ty.*4(]0u&TO"r +1C(<%9<A'n( FU[ &$2 S] dn ?7 97q Z= DRfm7 "-PWlo X|{    +6Mjnu y Q<"y3(*6=u%a*tF]1PM ;H4\9 Y KBCtN WU;R67Q@,I85oX2dmTK2Cgb@`@{ ,Z?PR=q^mFk|}S3b8xFJ#i)G;4d:UB. g%c +{vzqa!eN UwAYIp.Oe0OR|qy]l dI.sevmj \nX7/j`p> iT"naJ~\w$#s+Db] 89i/<sh*lc h^&zEW<,L^1WBAr0u_lZ-_f%Gk=c_~&VuzEt['yOL>?!PfE  Sg' oCY{hK"#L9$:7T&H'N|~ ->M4DSrJ35)$`w}j?X-V vZMHrnkAG}V+2(op)0D/56x[[!fx:(Q1 (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d note%d notes%d note added%d notes added%d note imported.%d notes imported.%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesmapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-02-13 14:01+0000 Last-Translator: pavuk Language-Team: Slovak MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) (1 z %d) (zakázať) (povoliť) Má %d kariet. Má %d kartu. It has %d karty.%% Správne%(a)0.1f %(b)s/deň%(a)0.1fs (%(b)s)%(a)d z %(b)d poznámok aktualizovaných%(a)d z %(b)d poznámok aktualizovaná%(a)d z %(b)d poznámok aktualizované%(tot)s %(unit)s%d kariet%d karta%d kartyvymazaných %d kariet.vymazaná %d karta.vymazané %d karty.exportovaných %d kariet.exportovaná %d karta.exportované %d karty.Importovaných %d kariet.Importovaná %d karta.Importované %d karty.naučených %d karietnaučená %d kartanaučené %d karty%d balíčkov aktualizovaných.%d balíček aktualizovaný.%d balíčky aktualizované.%d skupín%d skupina%d skupiny%d poznámok%d poznámka%d poznámky%d poznámok pridaných%d poznámka pridaná%d poznámky pridané%d poznámok importovaných.%d poznámka importovaná.%d poznámky importované.%d poznámok aktualizovaných%d poznámka aktualizovaná.%d poznámky aktualizované%d opakovaní%d opakovanie%d opakovania%d vybraných%d vybraná%d vybrané%s kópia%s dní%s deň%s dni%s hodín%s hodina%s hodiny%s minút%s minútu%s minúty%s minút.%s minútu.%s minúty.%s mesiacov%s mesiac%s mesiace%s sekúnd%s sekunda%s sekundy%s na vymazanie:%s rokov%s rok%s roky%sd%shod%smin%smes%ss%sr&O aplikácii...&Drviť sa...&Upraviť&Exportovať...&Súbor&Nájsť&Prejsť na&Príručka&Príručka...&Pomocník&Importovať...&Invertovať výber&Nasledujúca karta&Otvoriť priečinok s rozšíreniami...&NastaveniaPre&dchádzajúca karta&Preplánovať...Podporte &Anki...&Nástroje&Vrátiť späť'%(row)s' malo %(num1)d polí, namiesto očakávaných %(num2)d(%s správne)(koniec)(filtrované)(učí sa)nový(rodičovský limit: %d)(prosím, vyberte si 1 kartu)...Súbory .anki2 nie sú určené na import. Ak sa snažíte obnoviť údaje zo zálohy, prosím nazrite do sekcie 'Zálohovanie' v návode pre používateľa./0 dní1 mesiac1 rok10.0022.003.004.0016.00Vyskytla sa chyba 504 gateway timeout. Prosím, skúste dočasne zakázať antivírovú aplikáciu.:%d kariet%d karta%d kartyOtvoriť priečinok so zálohamiNavštíviť webovú stránku%(pct)d%% (%(x)s z %(y)s)%Y-%m-%d @ %H:%MZálohy
Anki vytvorí zálohu vašej zbierky pri každom zatvorení alebo synchronizácii.Formát exportu:Nájsť:Veľkosť písma:Písmo:V:Zahrnúť:Veľkosť riadku:Nahradiť:SynchronizáciaSynchronizácia
Nie je momentálne povolená. Povolíte ju kliknutním na tlačidlo 'Synchronizácia' v hlavnom okne.

Je potrebný účet

Na synchronizáciu vašej zbierky je potrebný bezplatný účet. Zaregistrujte sa a potom zadajte svoje údaje nižšie.

Anki aktualizované

Vyšla nová verzia Anki %s.

Veľká vďaka všetkým ľuďom, ktorí nám poskytli návrhy na zlepšenie, nahlásili chyby a darovali finančné prostriedky.Jednoduchosť  karty je dĺžka nasledujúceho intervalu (oproti aktuálnemu), pokiaľ pri skúšaní odpoviete "Dobre".Počas synchronizácie médií nastal problém. Prosím použite Nástroje>Kontrola médií..., potom zopakujte synchronizáciu.Prerušené: %sO AnkiPridaťPridať (skratka: ctrl+enter)Pridať polePridať médiáPridať nový balíček (Ctrl+N)Pridať typ poznámkyPridať zadnú stranu kartyPridať štítkyPridať k:Pridať: %sPridanéPridané dnesPridaný duplikát s prvým poľom: %sZnovuDnes znovuPočet stlačení "Znovu": %sVšetky balíčkyVšetky poliaVšetky karty v náhodnom poradí (mód drvenia sa)Všetky karty, poznámky a médiá pre tento profil budú odstránené. Ste si istý?Povoliť HTML v poliachPri otváraní %s sa vyskytla chybaAnkiBalíček Anki 2.0Balíček AnkiAnki nemohol rozoznať otázku od odpovede. Prosím upravte šablónu ručne, aby bolo možné prepínať medzi otázkou a odpoveďou.Anki je prívetivý, inteligentný výukový systém typu rozloženého učenia ("spaced learning"). Je zdarma a má otvorené ("open source") zdrojové kódy.Anki je licencovaný AGPL3 licenciou. Pre viac informácií si prosím prečítajte licenčný súbor v zdrojovej distribúcii.AnkiWeb ID alebo heslo nie sú správne; prosím, skúste ich zadať znovu.AnkiWeb ID:V AnkiWeb sa vyskytla chyba. Prosím skúste to znova o niekoľko minút. Pokiaľ bude problém pretrvávať, vyplňte prosím hlásenie o chybe.AnkiWeb je v tejto chvíli príliš zaneprázdnený. Prosím skúste to znova o niekoľko minút.Na AnkiWeb sa momentálne vykonáva údržba. Prosím skúste to znova o niekoľko minút.OdpoveďTlačidlá odpovedíOdpovedeAntivírový software alebo firewall bráni Anki pripojiť sa na internet.Karty, ktoré nie sú na nič mapované, budú zmazané. Ak už v poznámke nezostávajú žiadne karty, bude poznámka stratená. Skutočne chcete pokračovať?Vyskytuje sa v súbore dvakrát: %sSte si istý, že si prajete odstrániť %s?Je potrebný aspoň jeden typ karty.Je potrebný aspoň jeden krok.Automaticky prehrať audioAutomaticky synchronizovať pri otvorení a zavretí profiluPriemerPriemerný časPriemerný čas odpovedePriemerná jednoduchosťPriemer v dňoch štúdiaPriemerný intervalSpäťNáhľad zadnej stranyŠablóna zadnej stranyZálohyZákladnýZákladný (plus obrátená karta)Základný (plus voliteľná obrátená karta)PrehliadaťZobrazenie v prehliadačiNastavenia prehliadačaZostaviťZahrabaťZahrabať kartuZahrabať poznámkuZahrabať súvisiace nové karty do ďalšieho dňaZahrabať súvisiace hodnotenia do ďalšieho dňaAnki implicitne deteguje znak medzi poliami, ako je tabulátor, čiarka a iné. Ak ho Anki deteguje nesprávne, môžete ho vložiť sem. ako tabulátor použite \t.ZrušiťKartaKarta %dKarta 1Karta 2ID kartyZoznam karietTyp kartyTypy karietTypy kariet pre %sKarta zahrabaná.Kartá odložená bokom.Karta zaradená medzi pijavice.KartyKarty nemôžu byť ručne presunuté do filtrovaného balíčka.Karty ako obyčajný textKarty sa automaticky vrátia do ich pôvodných balíčkov po tom čo si ich zopakujete.Karty...Na stredZmeniťZmeniť %s na:Zmeniť balíčekZmeniť typ poznámkyZmeniť typ poznámky (Ctrl+N)Zmeniť typ poznámky...Zmeniť balíček podľa typu poznámkyZmenenéKontrola &médií...Skontrolovať súbory v priečinku médiíKontrolujem...VybraťVybrať balíčekVybrať typ poznámkyVybrať štítkyNaklonovať: %sZatvoriťZatvoriť a zrušiť momentálne vkladané údaje?DoplňovačkaKód:Balíček je poškodený. Prosím pozrite sa do manuálu.DvojbodkaČiarkaZmeniť jazykové rozhranie a nastaveniaBlahoželáme! Na teraz ste tento balíček dokončili.Pripája sa...Pripojenie zlyhalo. Buď máte problém s pripojením k internetu, alebo váš priečinok s médiami obsahuje veľmi veľký súbor.PokračovaťKopírovaťSprávne odpovede medzi zrelými kartami: %(a)d/%(b)d (%(c).1f%%)Správne: %(pct)0.2f%%
(%(good)d z %(tot)d)Nemôžem sa pripojiť na AnkiWeb. Prosím skontrolujte vaše sieťové pripojenie a skúste to znova.Nemôžem nahrávať zvuk. Máte nainštalovaný lame a sox?Nemôžem uložiť súbor: %sNadrvenéVytvoriť balíčekVytvoriť filtrovaný balíček...VytvorenéCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCtrl+ZKumulatívneKumulatívne %sKumulatívne odpovedeKumulatívne kartyAktuálny balíčekAktuálny typ poznámky:Vlastné štúdiumVlastné štúdiumVystrihnúťDatabáza bola zrekonštruovaná a optimalizovaná.DátumPodiel dní štúdiaZrušiť oprávnenieKonzola na ladenieBalíčekBalíček bude importovaný pri otvorení profilu.BalíčkyKlesajúce intervalyPredvolenýČas, po ktorom budú opakované karty znovu zobrazené.OdstrániťOdstrániť kartyOdstrániť balíčekOdstrániť prázdneOdstrániť poznámkuOdstrániť poznámkyOdstrániť štítkyOdstrániť nepoužitéOdstrániť pole z %s?Odstrániť '%(a)s' typ karty, a jej %(b)s?Odstrániť tento typ poznámky a všetky jeho karty?Odstrániť tento nevyužitý typ poznámky?Odstrániť nevyužité médiá?Odstránených %d kariet s chýbajúcou poznámkou.Odstránená %d karta s chýbajúcou poznámkou.Odstránené %d karty s chýbajúcou poznámkou.Odstránených %d kariet s chýbajúcou šablónou.Odstránená %d karta s chýbajúcou šablónou.Odstránené %d karty s chýbajúcou šablónou.Odstránených %d kariet s chýbajúcim typom poznámky.Odstránená %d karta s chýbajúcim typom poznámky.Odstránené %d karty s chýbajúcim typom poznámky.Odstránených %d poznámok bez kariet.Odstránená %d poznámka bez kariet.Odstránené %d poznámky bez kariet.Odstránených %d poznámok s nesprávnym počtom polí.Odstránená %d poznámka s nesprávnym počtom polí.Odstránené %d poznámky s nesprávnym počtom polí.Odstránené.Po odstránení tohto balíčka zo zoznamu balíčkov sa všetky zostávajúce karty vrátia do ich pôvodných balíčkov.PopisPopis zobrazený na obrazovke pri štúdiu (iba pre aktuálny balíček):Dialógové oknoPrevziať z AnkiWebSťahujem z AnkiWeb...Na skúšanieIba karty na skúšanieNa skúšanie zajtraK&oniecJednoduchosťĽahkéBonus za jednoduchéInterval jednoduchýchUpraviťUpraviť aktuálnuUpraviť HTMLUpravenéÚprava písmaPrázdnyPrázdne karty...Čísla prázdnych kariet: %(c)s Polia: %(f)s Nájdené prázdne karty. Prosím spustite Nástroje>Prázdne karty.Prázdne prvé pole: %sKoniecZadajte balíček pre umiestnenie %s nových kariet, alebo nechajte prázdne:Zadajte pozíciu novej karty (1...%s):Pridajte štítky:Zadajte štítky, ktoré chcete odstrániť:Chyba pri sťahovaní: %sChyba pri spustení: %sChyba pri vykonávaní %s.Chyba pri behu %sExportExport...ExtraFF1Pole %d súboru je:Priraďovanie políNázov poľa:Pole:PoliaPolia pre %sPolia oddelené pomocou: %sPolia...FilterFilter:Filtrované:Filtrovaný balíček %dNájsť &duplikátyNájsť duplikátyNájsť a na&hradiť...Nájsť a nahradiťUkončiťPrvá kartaPrvé opakovaniePrvé zhodné pole: %sOpravených %d kariet s neplatnými vlastnosťami.Opravená %d karta s neplatnými vlastnosťami.Opravené %d karty s neplatnými vlastnosťami.Opravený typ poznámky: %sPrevrátiťPriečinok už existuje.Písmo:PätaZ bezpečnostých dôvodov nie je v kartách povolené '%s'. Môžete ho ale použiť zadaním príkazu v inom balíčku a importovaním toho balíčka do LaTeX záhlavia.PredpoveďFormaNájdených %(a)s medzi %(b)s.Predná stranaNáhľad prednej stranyŠablóna prednej stranyVšeobecnéVygenerovaný súbor: %sVygenerované v %sStiahnuť zdieľanéDobreInterval postupuHTML EditorŤažkéHlavičkaPomocníkNajvyššia jednoduchosťHistóriaDomovHodinové rozdelenieHodinyHodiny s menej ako 30 opakovaniami nie sú zobrazené.Ak ste prispeli a nie ste na tomto zozname, prosím ozvite sa.Pri každodennom štúdiuIgnorovať časy odpovedí dlhšie akoIgnorovať veľkosť písmenIgnorovať riadky, kde prvé pole zodpovedá existujúcej poznámke.Ignorovať túto aktualizáciuImportImportovať súborImportovať, aj keď existujúca poznámka má rovnaké prvé poleImport zlyhal. Import zlyhal. Informácie o ladení: Nastavenia importuImport dokončený.V priečinku s médiami, ale nepoužité v žiadnej karte:Aby ste zaistili, že vaša zbierka bude pracovať správne pri presúvaní medzi zariadeniami, Anki potrebuje aby bol správne nastavený interný čas vášho počítača. Interný čas môže byť nesprávny aj keď váš systém ukazuje správny miestny čas. Prosím choďte do nastavení času vo vašom počítači a skontrolujte nasledovné: - AM/PM - Časový posun - Deň, mesiac a rok - Časové pásmo - Zimný / letný čas Rozdiel oproti správnemu času: %s.Zahrnúť médiáZahrnúť informácie o plánovaníZahrnúť štítkyZvýšiť dnešný limit nových karietZvýšiť dnešný limit nových kariet oZvýšiť dnešný limit opakovaných karietZvýšiť dnešný limit opakovaných kariet oRastúce intervalyInštalovať rozšírenieJazyk rozhrania:IntervalModifikátor intervaluIntervalyNeplatný kód.Neplatný súbor. Prosím obnovte zo zálohy.Neplatná vlastnosť nájdená na karte. Prosím použite Nástroje>Kontrola databázy..., a ak sa problém vyskytne opäť, prosím kontaktujte stránku podpory.Neplatný regulárny výraz.Odložené bokom.Skočiť na štítky pomocou Ctrl+Shift+TPonechaťLaTeXRovnica v LaTeXuMat. prostredie LaTeXZabudnutéPosledná kartaPosledné opakovanieOd poslednej pridanejUčenéUčiť sa skôr, doUčené: %(a)s, Opakované: %(b)s, Zabudnuté: %(c)s, Filtrované: %(d)sNa učenieČo s pijavicouHranica pre pijaviceZostávaObmedziť naNačítava sa...Najdlhší intervalHľadať v poli:Najnižšia jednoduchosťSpravovaťSpravovať typy poznámok...Priradiť k %sPriradiť ku štítkomZreléMaximálny intervalMaximálny počet opakovaní/deňMédiáMinimálny intervalMinútyPomiešať nové karty a opakovanéMnemosyne 2.0 Balíček (*.db)ViacNajviac zabudnutíPresunúť kartyPresunúť karty do balíčka:P&oznámkyNázov už existuje.Názov balíčka:Názov:SieťNovéNové kartyIba nové kartyNové karty na deňNázov nového balíčka:Nový intervalNový názov:Nový typ poznámky:Názov novej skupiny nastavení:Nová pozícia (1...%d):Ďalší deň začína oZatiaľ nie sú žiadne karty na skúšanie.Žiadna karta nezodpovedá zadaným kritériám.Žiadne prázdne karty.Žiadne zrelé karty ste dnes neštudovali.Neboli nájdené žiadne nepoužívané alebo chýbajúce súbory.PoznámkaID poznámkyTyp poznámkyTypy poznámokPoznámka a jej %d kariet odstránených.Poznámka a jej %d karta odstránené.Poznámka a jej %d karty odstránené.Poznámka zahrabaná.Poznámka odložená bokom.Upozornenie: Médiá nie sú zálohované. Prosím vytvorte pre istotu pravidelné zálohovanie vášho Anki priečinka.Poznámka: Časť histórie chýba. Viac info v dokumentácii na stránke.Poznámky ako jednoduchý textPoznámky vyžadujú aspoň jedno pole.Poznámky oštítkované.NičOKOd najdávnejšie zobrazenýchPri ďalšej synchronizácii vynútiť zmeny jedným smeromJedna alebo viac poznámok nebolo importovaných, pretože z nich nevznikli žiadne karty. To sa môže stať, ak máte prázdné polia alebo ak nenamapujete obsah z textového súboru do správnych polí.Iba nové karty môžu byť presunuté.Iba jeden klient môže pristupovať k AnkiWeb v rovnakom čase. Ak predchádzajúca synchronizácia zlyhala, prosím skúste to znovu o pár minút.OtvoriťOptimalizuje sa...Voliteľný limit:NastaveniaNastavenia pre %sSkupina nastavení:Nastavenia...PoradieZoradiť podľa pridaniaZoradiť podľa času opakovaniaPrepísať šablónu zadnej strany:Prepísať typ písma:Prepísať prednú stranu:Heslo:PrilepiťVložiť obrázok zo schránky ako PNGPauker 1.8 lekcia (*.pau.gz)PercentáObdobie: %sUmiestniť na koniec radu nových karietVložiť do radu kariet na opakovanie s rozostupmi:Najprv prosím pridajte ďalší typ poznámky.Prosím pripojte mikrofón a uistite sa, že iné programy nepoužívajú audio zariadenie.Upravte prosím túto poznámku a pridajte nejaké doplňovačky. (%s)Prosím uistite sa, že je profil otvorený a Anki nie je zaneprázdnené, potom skúste znova.Prosím nainštalujte PyAudioProsím otvorte najprv profil.Prosím spustite Nástroje>Prázdne karty...Prosím zvoľte balíček.Prosím vyberte karty iba z jedného druhu poznámok.Prosím vyberte niečo.Stiahnite si prosím najnovšiu verziu Anki.Prosím použite Súbor>Importovať pre import tohto súboru.Prosím navštívte AnkiWeb, aktualizujte váš balíček a potom skúste znova.PozíciaNastaveniaNáhľadNáhľad zvolenej karty (%s)Náhľad nových karietNáhľad nových kariet pridaných za poslednýchSpracováva sa...ProfilyVyžaduje sa proxy autorizácia.OtázkaKoniec radu: %dZačiatok radu: %dUkončiťNáhodneNáhodné poradieHodnotenieZnovu zostaviťNahrať vlastný zvukNahráva sa...
Čas: %0.1fRelatívne oneskorenieZabudnutéPri pridávaní si pamätať posledný vstupOdstránenie tejto karty by spôsobilo vymazanie jednej alebo viacerých poznámok. Prosím vytvorte najskôr nový typ kariet.PremenovaťPremenovať balíčekPrehrať audioPrehrať vlastný zvukZmeniť poradieZmeniť poradie nových karietZmeniť poradie...Vyžadovať jeden alebo viac z týchto štítkov:PreplánovaťPreplánovaťPreplánovať karty podľa mojich odpovedí v tomto balíčkuPokračovaťText sprava doľava (RTL - right to left)Obnovené na stav pred '%s'.OpakovaťPočet opakovaníČas na opakovanieOpakovať dopreduOpakovať dopredu oZopakovať karty zabudnuté za poslednýchOpakovať zabudnuté kartyPercento úspešnosti pre každú hodinu dňa.OpakovaniaVpravoOblasť: %sHľadaťHľadať vo formátovaní (pomalé)VybraťVybrať &všetkoVybrať &poznámkyVynechať štítky:Zvolený súbor nie je vo formáte UTF-8. Prosím pozrite manuál, kapitola Import.Vlastné štúdiumBodkočiarkaServer nebol nájdený. Buď nie ste pripojení, alebo váš antivírus/firewall blokuje Anki pripojenie k internetu.Nastaviť všetky balíčky pod %s do tejto skupiny nastavení?Nastaviť pre všetky podbalíčkyDržali ste tlačidlo Shift. Preskakujem automatickú synchronizáciu a načítavanie rozšírení.Zmeniť pozíciu existujúcich karietKlávesová skratka: %sSkratka: %sZobraziť %sZobraziť odpoveďZobraziť duplikátyZobrazovať čas odpovedíZobraziť nové karty až po opakovaníZobraziť nové karty pred opakovanímZobraziť nové karty v poradí v akom boli pridanéZobraziť nové karty v náhodnom poradíZobraziť čas budúceho opakovania nad tlačidlami odpovedíZobrazovať počet zostávajúcich kariet počas opakovaniaVeľkosť:Niektoré súvisiace alebo zahrabané karty boli posunuté na neskôr.Niektoré nastavenia sa prejavia až po reštarte Anki.Niektoré zmeny boli ignorované, pretože typ poznámky sa zmenil:Zoradiť poleZoradiť podľa tohto poľa v prehliadačiTriedenie podľa tohto stĺpca nie je podporované. Vyberte prosím iný.MedzeraÚvodná pozícia:Úvodná jednoduchosťŠtatistikyKrok:Kroky (v minútach)Kroky musia byť v číslach.Dnes preštudovanéŠtudovaťBalíček na štúdiumŠtudovať balíček...Študovať terazŠtudovať podľa stavu karty alebo štítkuŠtýlNastavenie vzhľadu (zdieľané medzi kartami)Supermemo XML export (*.xml)Dať bokomDať kartu bokomDať poznámku bokomOdložené bokomSynchronizovať audio aj obrázkySynchronizácia zlyhala: %sSynchronizácia zlyhala; internet je v režime offline.Synchronizácia vyžaduje, aby ste mali správne nastavený čas vo vašom počítači. Opravte ho prosím a skúste znova.Synchronizovanie...KartaDuplikáty štítkovIba štítokŠtítkyCieľový balíček (Ctrl+D)Cieľové pole:TextText oddelený tabulátormi alebo bodkočiarkami (*)Taký balíček už existuje.Pole s takým názvom už existuje.Taký názov už existuje.Spojenie s AnkiWeb vypršalo. Prosím skontrolujte svoje pripojenie a skúste znova.Východzia konfigurácia sa nedá odstrániť.Východzí balíček sa nedá odstrániť.Rozdelenie kariet vo vašom balíčku (balíčkoch).Prvé pole je prázdne.Prvé pole typu poznámky musí byť zmapované.Nasledovný znak nemožno použiť: %sPredná strana tejto karty je prázdna. Prosím spustite Nástroje>Prázdne karty...Vstup, ktorý ste zadali, by spôsobil prázdnu otázku na všetkých kartách.Počet zodpovedaných otázok.Počet opakovaní v budúcnosti.Počet stlačení jednotlivých tlačidiel.Povolenia na dočasnom priečinku vášho systému nie sú správne a Anki ich nedokáže automaticky opraviť. Pre bližšie informácie prosím vyhľadajte dočasný priečinok ('temp folder') v manuále Anki.Vybraný súbor nie je platný súbor typu .apkg.Zadaným kritériám nevyhovujú žiadne karty. Chcete ich zmeniť?Požadovaná zmena spôsobí nahranie celej databázy na server pri najbližšej synchronizácii vašej zbierky. Ak máte na inom zariadení opakovanie alebo iné zmeny, ktoré ešte neboli synchronizované, budú stratené. Chcete pokračovať?Čas na zodpovedanie otázok.Dostupné sú aj ďalšie nové karty, ale bol dosiahnutý denný limit. Môžete ho zvýšiť v nastaveniach, ale prosím majte na pamäti, že tým sa v najbližšej dobe zvýši aj počet kariet na opakovanie.Musí existovať aspoň jeden profil.Podľa tohto stĺpca nie je možné karty zoradiť, ale konkrétne balíčky môžete prehľadávať kliknutím na niektorý z nich vľavo.Zdá sa, že tento súbor nie je platný súbor typu .apkg. Ak sa Vám zobrazilo toto upozornenie pre súbor stiahnutý z AnkiWeb, sťahovanie pravdepodobne zlyhalo. Prosím skúste to znova a ak bude problém pretrvávať, skúste to znova v inom prehliadači.Súbor už existuje. Ste si istý, že ho chcete prepísať?V tomto priečinku sú uložené všetky Vaše Anki dáta na jednom mieste, aby sa dali jednoducho zálohovať. Ak chcete aby Anki používalo iný priečinok, pozrite sa sem: %s Toto je špeciálny balíček na štúdium mimo bežného plánu.Toto je {{c1::vzorová}} doplňovačka.Týmto sa vymaže vaša súčasná zbierka a nahradí sa dátami zo súboru, ktorý importujete. Ste si istý?ČasLimit pre časový boxNa opakovanieAk chcete vytvoriť doplňovačku z existujúcej poznámky, musíte najprv zmeniť jej typ na doplňovačku pomocou Upraviť->Zmeniť typ poznámkyAk ich chcete vidieť teraz, kliknite na tlačidlo Vyhrabať nižšie.Ak chcete študovať mimo bežný plán, kliknite na tlačidlo Vlastné štúdium nižšie.DnesBol dosiahnutý denný limit, ale stále zostávajú nejaké karty na opakovanie. Pre optimálne zapamätanie zvážte zvýšenie tohto limitu v nastaveniach.CelkomCelkový časCelkom karietCelkom poznámokPovažovať vstup za regulárny výrazTypNapíšte odpoveď: neznáme pole %sNedá sa importovať - súbor je iba na čítanie.VyhrabaťSpäťSpäť %sNeznámy formát súboru.NevidenéAktualizovať existujúce poznámky, ak je prvé pole rovnaké.Aktualizovaných %(a)d z %(b)d existujúcich poznámok.Nahrať na AnkiWebNahráva sa na AnkiWeb...Použité v kartách, ale chýba v priečinku s médiami:Používateľ 1Verzia %sČaká sa na dokončenie zmien.Upozornenie: doplňovačky nebudú fungovať pokiaľ nezmeníte typ hore na Doplňovačka.Pri pridávaní je automaticky nastavený aktuálny balíčekCelá zbierkaChcete ju stiahnuť teraz?Máte nastavený typ poznámky Doplňovačka, ale nevytvorili ste žiadnu doplňovačku. Pokračovať?Máte veľa balíčkov. Prosím pozrite si %(a)s. %(b)sZatiaľ ste nenahrali svoj hlas.Je potrebný aspoň jeden stĺpec.MladéMladé a študovanéVaše zmeny budú mať vplyv na viacero balíčkov. Ak chcete zmeniť iba nastavenia aktuálneho balíčka, prosím vytvorte najskôr novú skupinu nastavení.Vaša zbierka je nekonzistentná. Prosím spustite Nástroje>Kontrola databázy..., potom synchronizujte znova.Vaša zbierka, alebo niektorý mediálny súbor je pre synchronizáciu príliš veľký.Vaša zbierka bola úspešne nahratá na AnkiWeb. Ak používate nejaké iné zariadenia, prosím zosynchronizujte ich a zvoľte stiahnutie zbierky, ktorú ste práve nahrali z tohto počítača. Potom už budú ďalšie opakovania a pridané karty automaticky zlučované.Vaše balíčky tu a na AnkiWeb sa odlišujú príliš na to, aby boli zlúčené. Je preto nutné prepísať balíčky na jednej strane balíčkami na druhej strane. Ak zvolíte stiahnuť, Anki stiahne zbierku z AnkiWeb a všetky zmeny, ktoré ste vykonali na vašom počítači od poslednej synchronizácie, budú stratené. Ak zvolíte nahrať, Anki nahrá vašu zbierku na AnkiWeb a všetky zmeny, ktoré ste vykonali na AnkiWeb, alebo na inom vašom zariadení od poslednej synchronizácie s týmto zariadením, budú stratené. Keď budú všetky zariadenia zosynchronizované, ďalšie opakovania a pridané karty už budú automaticky zlučované.[žiadny balíček]zálohkarietkariet z balíčkakariet vybraných podľazbierkaddníbalíčekexistencia balíčkaduplikátpomocníkskryťhodínhodín po polnocizabudnutípriradené k %spriradené k Štítkyminminútmesopakovanísekúndstattáto stránkawcelá zbierka~anki-2.1.0+dfsg~b36/locale/sl/000077500000000000000000000000001323611211500157345ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/sl/LC_MESSAGES/000077500000000000000000000000001323611211500175215ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/sl/LC_MESSAGES/anki.mo000066400000000000000000001276711323611211500210160ustar00rootroot00000000000000^ )%2 222"22 228243"E3$h3$3&3"334$,4 Q4r444444445 5)5:5>5B5F5K5O5 S5]5f5 l5w5}555 55 55 55555 66$60*6 [6 h6 s6~6666(7*7-72777;7?7C7(E7n7!77f7.8 D8Q8 c8 p8{8888e8/979 :5:XQ:Y: ;;; .; 8;B; X; f;r;{;; ;; ;; ; ;K;</< 4<B<T<R<7+= c=wo=E=-><>RD>>?#5?Y?x?(?? ?? ?? @ @ '@5@=@W@v@}@@@ @@^AeAjArAyA A A AAA3ASAKBTB[B bB pB|BBB"BB&B CC C,C =CGCMCkCqC-wCCC(C5C DD5#DPYD7DDD D E"E *E5E7HvH]H HHHI "I/I5I :I EISI XI eIoI vIII)III4I!J3JFJ\JrJJJJ JJJJJ J JK K KK 6K@KGKOKXKiK}KKK K KKKKKKLLL LLLLM MM$M 8MDMIMPM UMbMjMoMM.MFMMN 5N4ANvNN N1NNNN O*!O LOZO yOO"O"O O P"P1PEP WP aPoPPPPPP P PPP< QFQVQ[Q dQoQQ QQ Q QQQQQQQRR7R y Py ^yky ty ~yy yy y yPyz.z3z Bz}MzozK;{{{O*|z||^||%w}-}}}7} 7~B~R~m~~~~~~~%9@U\ cq !+ 3 > H R ` lx1IՀ  *4=Lcx# ҁށ ! 4@"Fio:u #2(70fh<σ$ 1 8F a lw~ ȄՄ܄   #9I[/c'ׅ  -!OXi†ن1&"I H^SƉډ !4: IT\ls.ʊ?Њ$5Rn͋ Ӌދ %, 2>R[b juƌ ،  ݍ'7LRhy ʎ*ΎF@8[C <['q>'<)L,v.1ґ+; Q\k ͒ܒI frw   Ɠғ #?S!Z|Ŕ  ' 8 EO`wG47 ? KY,t>l !9[`{'1Y_n  ř ҙ$ ')6QQ "*2]*m-Bƛ (3\k3s՜ ۜ %9n_ Ν؝ 6*B mz8 Ȟ֞ "$4Y%t ҟ ٟ) 13;o$àԠ #$7H/70 E#i{:֢ݢ )G V`q %ȣ ,3Jk~  .<0Ev fȥ,/'\-C*+1V@)BA{^c uEƫ̫s z $ʬά< + 6D ]5h;ĭ ,9fu Ӯ ڮ%,0 ?K`{ (rN3"Rw<c;bE^+AIU:B`&OT|.  G"1!J#$sAyHk*q3>Il428 XQL7s-1@m@ ;)md :tM0k.O v* 7FVet<>CxG;,x~AP59Ju g{MKW+N'[#:QjK<Y\}T9oE[^aPq&]h[e\E?VT3BZ`'P!]4o0+b#,f?~MNR ,84y*&@C/"=LCSh|_JZ (-D)BQ 20rHi7I/6LD6cO8l=FnH]5$% f!UYUG'p=6K%>V/}vFWYZ wd(-_p9 XW?S a1.5)%S^ uD jzn$2\z{RgiX (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d note added%d notes added%d note imported.%d notes imported.%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(filtered)(learning)(new)(parent limit: %d)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d10AM10PM3AM4AM4PM:Open backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.About AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAdded TodayAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAnkiAnki 2.0 DeckAnki Deck PackageAnki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.Answer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBack PreviewBack TemplateBackupsBasic (and reversed card)Basic (optional reversed card)BrowseBrowser OptionsBuildBuryBury NoteBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card ListCard TypeCard TypesCard Types for %sCard was a leech.Cards can't be manually moved into a filtered deck.Cards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...CopyCorrect: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeck will be imported when a profile is opened.DecksDecreasing intervalsDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete this note type and all its cards?Delete this unused note type?Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDialogDownload from AnkiWebDownloading from AnkiWeb...Due tomorrowE&xitEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFirst CardFirst ReviewFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.Front PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:Interval modifierIntervalsInvalid code.Invalid regular expression.It has been suspended.KeepLaTeXLaTeX equationLaTeX math env.Last CardLatest ReviewLatest added firstLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageMap to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name:NetworkNewNew CardsNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards matched the criteria you provided.No empty cards.No unused or missing files found.NoteNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.NothingOldest seen firstOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder duePassword:PastePaste clipboard images as PNGPercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.Queue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Review CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.RightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selective StudySemicolonSet all decks below %s to this option group?Set for all subdecksShift position of existing cardsShortcut key: %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some settings will take effect after you restart Anki.Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The first field is empty.The first field of the note type must be mapped.The input you have provided would make an empty question on all cards.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.When adding, default to current deckWhole CollectionWould you like to download it now?You haven't recorded your voice yet.You must have at least one column.Young[no deck]backupscardscards selected bycollectionddaysdeckhelphourshours past midnightlapsesmapped to %smapped to Tagsminsminutesmoreviewssecondsstatswwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:01+0000 Last-Translator: Ales Primozic Language-Team: Slovenian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0); X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) Language: sl (1 od %d) (izklopljeno) (vklopljeno) Vsebuje %d kartic. Vsebuje %d kartico. Vsebuje %d kartici. Vsebuje %d kartic.%% pravilnih%(a)0.1f %(b)s/dan%(a)d od %(b)d zapiskov posodobljenih%(a)d od %(b)d zapiskov posodobljenih%(a)d od %(b)d zapiskov posodobljenih%(a)d od %(b)d zapiskov posodobljenih%(tot)s %(unit)sIzbrisano %d kartic.Izbrisana %d kartica.Izbrisani %d kartici.Izbrisano %d kartic.Izvoženo %d kartic.Izvožena %d kartica.Izvoženi %d kartici.Izvoženo %d kartic.Uvoženih %d kartic.Uvožena %d kartica.Uvoženi %d kartici.Uvožene %d kartice.%d kartic naštudiranih v%d kartica naštudirana v%d kartici naštudirani v%d kartic naštudiranih v%d paketov posodobljenih.%d paket posodobljen.%d paketa posodobljena.%d paketov posodobljenih.%d skupin%d skupina%d skupini%d skupinDodanih %d zapiskovDodan %d zapisekDodana %d zapiskaDodanih %d zapiskovUvoženih %d zapiskov.Uvožen %d zapisek.Uvožena %d zapiska.Uvoženi %d zapiski.Posodobljenih %d zapiskovPosodobljen %d zapisekPosodobljena %d zapiskaPosodobljeni %d zapiski%d pregledov%d pregled%d pregleda%d pregledi%d izbran%d izbranih%d izbrani%d izbraniKopija %s%s dan%s dneva%s dni%s dni%s ur%s ura%s uri%s ure%s minut%s minuta%s minuti%s minute%s minut.%s minuta.%s minuti.%s minut.%s mesec%s meseca%s mesece%s mesecev%s sekunda%s sekunda%s sekundi%s sekunde%s za izbrisati:%s let%s leto%s leti%s leta%sd%sh%sm%smo%ss%sy&O programu...&Stisni...&Uredi&Izvozi...&Datoteka&Najdi&Pojdi&Vodnik&Vodnik...&Pomoč&Uvozi...Preo&brni izbor&Naslednja kartica&Odpri mapo z dodatki...&Nastavitve...&Prejšnja kartica&Ponovno razvrsti...&Podpri Anki...&Orodja&Razveljavi'%(row)s' je vsebovalo %(num1)d polja, pričakovano pa %(num2)d(%s pravilnih)(filtrirano)(v fazi učenja)(nova)(omejitev nadrejenega: %d)...Datoteke .anki2 niso načrtovane za uvoz. Če želite obnoviti iz varnostne kopije, preverite poglavje 'Varnostne kopije' v uporabniškem vodniku./0d10AM10PM3AM4PM4PM:Odpri mapo z varnostno kopijoObišči spletno stran%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MVarnostne kopije
Anki bo izdelal varnostno kopijo vaše zbirke vsakič, ko se program zapre ali ko se sinhronizirajo podatki.Izvozi format:Poišči:Velikost pisave:Pisava:VVključi:Velikost črteZamenjaj z:SinhronizacijaSinhronizacija
Ni trenutno omogočena; Omogočite jo s klikom na gumb Sinhroniziraj v glavnem oknu.

Zahtevan je račun

Če želite vašo zbirko sinhronizirati, potrebujete brezplačen račun. Prijavite se za brezplačen račun, nato pa spodaj vnesite podatke.

Anki je bil posodobljen

Anki %s je zadnja izdana različica.

Najlepša hvala vsem, ki ste prispevali predloge, opozorila o napakah in donacije.Enostavnost kartice je dolžina naslednjega intervala, ko ob pregledu odgovorite "dobro".O programu AnkiDodajDodaj (bližnjica: Ctrl+Enter)Dodaj poljeDodaj večpredstavnostno datotekoDodaj nov paket (Ctrl+N)Dodaj tip zapiskaDodaj obratnoDodaj oznakeDodaj v:Dodaj: %sDodano danesZnovaPonovno danesPonovno štetje: %sVsi paketiVsa poljaVse kartice, zapiski in mediji tega profila bodo izbrisani. Ali ste prepričani?Dovoli HTML v poljihAnkiPaket Anki 2.0Anki paketPovezave med vprašanjem in odgovorom ni bilo mogoče najti. Za zamenjavo vprašanja in odgovora ročno prilagodite predlogo.Anki je prijazen in inteligenten sistem za časovno razporejeno učenje. Je odprtokoden in brezplačen program.AnkiWeb uporabniško ime ali geslo je nepravilno; prosimo, poskusite znova.AnkiWeb uporabniško ime:AnkiWeb je naletel na težavo. Prosimo, poskusite ponovno čez nekaj minut; če se težava ponovi, prosimo izpolnite poročilo o napaki.AnkiWeb je trenutno preobremenjen. Prosimo, poskusite ponovno čez nekaj minut.Gumbi z odgovoriOdgovoriAnki se ne more povezati v splet, ker mu to preprečuje protivirusni program ali požarni zid.Vse kartice, ki niso povezane, bodo izbrisane. Če zapisek ne vsebuje nobene kartice več, bo izbrisan. Želite vseeno nadaljevati?Se je v datoteki pojavila dvakrat: %sAli ste prepričani, da želite izbrisati %s?Zahtevan je vsaj en korak.Samodejno predvajaj zvokPri odpiranju/zapiranju profila samodejno sinhronizirajPovprečjePovprečni časPovprečen čas za odgovorPovprečna enostavnostPovprečje za dneve študijaPovprečni intervalPredogled zadnje straniPredloga zadnje straniVarnostne kopijeOsnovna (in obrnjena kartica)Osnovna (in izbirno obrnjena kartica)BrskajMožnosti brskalnikaZgradiUmakniSkrij zapisekAnki privzeto zazna znak, ki loči polja med seboj (kot npr. tabulator, vejica, itn.). Če je Anki ta znak narobe razpoznal, ga lahko vnesete tukaj. Za tabulator uporabite /t.PrekličiKarticaKartica %dKartica 1Kartica 2Seznam karticTip karticeTipi karticTipi kartic za %sKartica je bila pijavka.Kartic ni možno ročno dodati v filtriran paket.Kartice bodo samodejno vrnjene v izvirne pakete, ko jih boste pregledali.Kartice...SredinskoSpremeniSpremeni %s v:Spremeni zbirko karticSpremeni tip zapiskaSpremeni tip zapiska (Ctrl+N)Spremeni tip zapiska...Spremeni paket glede na tip zapiskaSpremenjenoPreveri datoteke v mapi medijevPreverjanje...IzberiIzberi paketIzberi tip zapiskaPodvoji: %sZapriZapri in razveljavi trenutni vnos?ZapriKoda:Zbirka je poškodovana. Preverite uporabniški priročnik.DvopičjeVejicaNastavi možnosti in jezik vmesnikaČestitam! S tem paketom ste za sedaj zaključili.Povezovanje ...KopirajPravilnih: %(pct)0.2f%%
(%(good)d od %(tot)d)Ni bilo možno vzpostaviti povezave z AnkiWeb. Prosimo, preverite svojo povezavo in poskusite ponovno.Ni bilo možno posneti zvoka. Ali ste namestili lame in sox?Datoteke %s ni bilo mogoče shranitiStisniUstvari paketUstvari filtriran paket...UstvarjenoCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+ZSkupajSkupaj %sSkupaj odgovorovSkupaj karticTrenutna zbirka karticTrenutni tip zapiska:Študij po meriUčna ura po meriIzrežiZbirka podatkov ponovno zgrajena in optimirana.DatumDnevi študijaOdstrani avtorizacijoKonzola za iskanje napakPaket se bo uvozil, ko bo profil odprt.Zbirke karticPadajoči intervaliOdloži dokler se spet ne pokažejo pregledi.IzbrišiIzbriši karticeIzbriši zbirko karticIzbriši prazneIzbriši zapisekIzbriši zapiskeIzbriši oznakeIzbriši neuporabljeneIzbrišem polje iz %s?Izbrišem ta tip zapiska in vse povezane kartice?Izbrišem ta neuporabljen tip zapiska?Izbrisal %d kartic z manjkajočo predlogo.Izbrisal %d kartico z manjkajočo predlogo.Izbrisal %d kartici z manjkajočo predlogo.Izbrisal %d kartice z manjkajočo predlogo.Izbrisal %d zapiskov z manjkajočim tipom zapiska.Izbrisal %d zapisek z manjkajočim tipom zapiska.Izbrisal %d zapiska z manjkajočim tipom zapiska.Izbrisal %d zapiske z manjkajočim tipom zapiska.Izbrisal %d zapiske brez kartic.Izbrisal %d zapiskek brez kartic.Izbrisal %d zapiska z brez kartic.Izbrisal %d zapiske brez kartic.Izbrisano.Izbris tega paketa iz seznama paketov bo vrnil vse preostale kartice v njihove izvorne pakete.OpisPogovorno oknoNaloži z AnkiWeb-aNalaganje z AnkiWeb-aZapadejo jutriI&zhodEnostavnoDodatek za lahkeEnostaven intervalUrediUredi trenutnoUredi HTMLUrejenoUrejanje pisavePraznoPrazne kartice...Številke praznih kartic: %(c)s Polja: %(f)s Prazno prvo polje: %sKonecUredite zbirko, da umestite %s novih kartic ali pustite prazno:Vnesite mesto nove kartice (1...%s):Vnesite oznake za dodajanje:Vnesite oznake za brisanje:Napaka pri prenosu: %sNapaka med zagonom: %sNapaka pri izvajanju %s.Napaka pri izvajanju %sIzvozIzvozi ...DodatnoFF1Polje %d datoteke je:Usklajevanje poljIme polja:Polje:PoljaPolja za %sPolja ločena z: %sPolja...FilterFilter:FiltriranoFiltriran paket %dPoišči &dvojnike...Poišči dvojnikeNa&jdi in zamenjaj...Najdi in zamenjajPrva karticaPrvi pregledObrniMapa že obstaja.Pisava:&NogaZaradi varnosti '%s' ni dovoljen na kartici. Še vedno ga lahko uporabljate s tem, da postavite ukaz v drug paket, in le-tega potem uvozite v glavo LaTeX.NapovedOblikaNajdenih %(a)s čez %(b)s.Predogled pisavePredloga prednje straniSplošnoGenerirana datoteka: %sGenerirana v %sNaloži javne zbirkeDobroInterval napredovanjaUrejevalnik HTMLZahtevnoGlavaPomočNajvišja enostavnostZgodovinaDomovRazčlenitev po urahUreUre z manj kot 30 pregledi niso prikazane.Če ste sodelovali in niste na tem seznamu, nas prosimo kontaktirajte.Če bi študirali vsak danSpreglej odgovore, za katere je bilo porabljeno več kotVelikost črk ni pomembnaPrezri vse vrstice, kjer se prvo polje ujema z obstoječim zapiskomSpreglej to posodobitevUvozUvozi datotekoUvozi kljub temu, da ima obstoječi zapisek enako prvo poljeUvažanje ni uspelo. Nalaganje ni uspelo. Podatki o napaki: Možnosti uvozaUvoz zaključen.Obstaja v medijski mapi, a ni uporabljeno na nobeni od kartic:Vključi medijske datotekeVključi podatke za časovno planiranjeVključi oznakePovečaj omejitev današnjih novih karticPovečaj omejitev današnjih novih kartic zaPovečaj omejitev današnjih kartic za pregledPovečaj omejitev današnjih kartic za pregled zaVedno večji intervaliNamesti dodatekJezik vmesnika:Modifikator intervalaIntervalieNapačna koda.Nepravilen splošni izraz.Je bila odložena.ObdržiLaTeXLaTeX enačbaLaTeX matematična spr.Zadnja karticaZadnji pregledNajnovejše dodane prveOmejitev učenja vnaprejUčenje: %(a)s, Pregled: %(b)s, Ponovno učenje: %(c)s, Filtrirano: %(d)sPrag pijavkLevoOmeji naNalaganje ...Najdaljši intervalGlej v polju:Najnižja enostavnostUpravljanjePoveži z/s %sPoveži z oznakamiZrelNajvečji intervalMaksimum ponovitev/danVečpredstavnostna datotekaNajmanjši intervalMinutePomešaj nove kartice in pregledePaket Mnemosyne 2.0 (*.db)DodatnoNajveč spodrsljajevPremakni karticePremakni kartice v zbirko:&ZapisekIme obstaja.Ime:OmrežjeNovoNove karticeNovih kartic/danNovo ime zbirke:Nov intervalNovo ime:Nov tip zapiska:Novo ime zbirke opcij:Novo mesto (1...%d):Naslednji dan se začne obGlede na kriterije, ki ste jih vnesli, ni mogoče najti nobene kartice.Ni praznih kartic.Ni najdenih neuporabljenih ali manjkajočih datotek.ZapisekTip zapiskaTipi zapiskovZapisek in njegovih %d kartic je bilo izbrisanih.Zapisek in njegova %d kartica sta bili izbrisana.zapisek in njegovi %d kartici so bili izbrisani.Zapisek in njene %d kartice so bilo izbrisane.Zapisek skrit.Zapisek odložen.Opozorilo: Medijske datoteke nimajo varnostne kopije. Priporočamo, da občasno naredite varnostno kopijo mape Anki.Opozorilo: Nekaj zgodovine ni na voljo. Za več informacij, preverite uporabniško dokumentacijo brskalnika.Zapiski v golem besediluZapiski zahtevajo vsaj eno polje.NičNajprej vidne najstarejšeEn ali več zapiskov ni bil uvožen, ker niso ustvarile nobene kartice. To se lahko zgodi, ko imate prazna polja ali ko niste povezali vsebine iz tekstovne datoteke s pravimi polji.Prerazporedite lahko samo nove kartice.OdpriOptimiranje...Izbirna omejitev:MožnostiMožnosti za %sSkupina možnosti:Možnosti...Vrstni redUredi dodaneUredi zapadleGeslo:PrilepiPrilepi slike z odložišča kot PNGOdstotekObdobje: %sPrestavi na konec čakalne vrste karticPrestavi v čakalno vrsto za pregled z intervalom med:Najprej dodajte tip zapiska.Preverite, da je profil odprt, ter da Anki ni zaseden. Nato poskusite še enkrat.Namestite PyAudio.Najprej odprite profil.Izberite paket.Izberite kartice samo enega tipa zapiskov.Izberite nekaj.Uporabite zadnjo različico programa Anki.Uporabite Datoteka->Uvoz za uvoz te datoteke.Obiščite AnkiWeb, nadgradite vaš paket in poskusite še enkrat.PoložajMožnostiPredogled novih karticPredogled novih kartic dodanih v zadnjemV obdelavi ...ProfiliZahtevano preverjanje prisotnosti proxy strežnika.Dno čakalne vrste: %dVrh čakalne vrste: %dZapriNaključnoNaključno urediOcenaPonovno zgradiPosnemi svoj glasSnemanje...
Čas: %0.1fZapomni si zadnji vnos med dodajanjemZaradi odstranitve tega tipa kartice bi bil en ali več zapiskov izbrisanih. Najprej naredite nov tip kartice.PreimenujPreimenuj paketZnova predvajaj zvokZnova predvajaj svoj glasPrestaviPrestavi nove karticePrestavi...Zahtevaj eno ali več od naslednjih oznak:PrerazporediDoloči nov razporedPrerazporedi kartice glede na moje odgovore v tem paketuNadaljuj zdajObratna smer besedila (RTL)Število pregledovČas pregledaPreglej naprejPreglej naprej zaPreglej pozabljene kartice v zadnjihPreglej pozabljene karticeUspešnost pregleda za vse ure dneva.DesnoObseg: %sIskanjeIšči v oblikovanju (počasno)IzberiIzberi &vseIzberi &zapiskeIzberite oznake, ki naj bodo izključene:Študij po izbiriPodpičjeNastavim vse pakete pod %s za to skupino možnosti?Nastavi za vse podrejene paketeZamakni položaj obstoječih kartic.Bližnjica: %sPrikaži odgovorPrikaži dvojnikePrikaži časomer za odgovorPokaži nove kartice po pregleduPokaži nove kartice pred pregledomPokaži nove kartice v vrstnem redu, kot so bile dodanePokaži nove kartice v naključnem vrstnem reduPokaži čas za naslednji pregled nad gumbi za odgovorePokaži število preostalih kartic med pregledomVelikost:Nekatere nastavitve bodo pričele delovati po ponovnem zagonu Ankija.Polje za urejanjeUredi po tem polju v brskalnikuUrejanje po tem stolpcu ni podprto. Izberite drug stolpec.RazmikZačetni položaj:Začetna dostopnostStatistikaKorak:Koraki (v minutah)Koraki morajo biti številke.Naučene danesŠtudirajPaket za učenjePaket za učenje...Študiraj sedajStiliziranjeStiliziranje (skupno večim karticam)Izvoz Supermemo XML(*.xml)OdložiOdloži karticoOdloži zapisekSinhroniziraj tudi zvok in slikeSinhroniziranje ni uspelo: %sSinhroniziranje ni uspelo; brez povezave do spleta.Sinhroniziranje zahteva, da je čas na računalniku pravilno nastavljen. Nastavite čas in poskusite znova.Sinhroniziranje...ZavihekSamo oznakaOznakeCiljni paket (Ctrl+D)Ciljno polje:BesediloBesedilo ločeno s tabulatorji ali podpičji (*)Ta paket že obstaja.To ime polja je že uporabljeno.To ime je že uporabljeno.Časovna omejitev za povezavo na AnkiWeb se je iztekla. Preverite mrežno povezavo in poskusite znova.Privzeta konfiguracija ne možno odstraniti.Privzetega paketa ni mogoče izbrisati.Delitev kart v vaših paketih.Prvo polje je prazno.Prvo polje tipa zapiska mora biti preslikano.Vaš vnos bi povzročil, da bi vse kartice imele prazno vprašanje.Število vprašanj, ki ste jih odgovorili.Število pregledov, ki bodo na vrsti v prihodnje.Število klikov na vsak gumb.Izraz za iskanje ni našel nobenih kartic. Bi ga radi popravili?Zahtevana sprememba bo zahtevala prenos celotne zbirke podatkov ob naslednji sinhroniziraciji. Pregledi ali druge spremembe na ostalih napravah, ki še niso bile sinhronizirane, bodo izgubljeni. Nadaljujem?Čas porabljen za odgovore na vprašanja.Na voljo je še več novih kartic, vendar ste že dosegli dnevno mejo. Lahko povišate mejo, toda upoštevajte, da s tem ko povečate število kartic, bolj obremenite kratkoročni pregled.Obstajati mora vsaj en profil.Ta datoteka obstaja. Ali ste prepričani, da jo želite prepisati?V tej mapi so na enem mestu shranjeni vsi Anki podatki, da je izdelava varnostne kopije bolj enostavna. Če želite, da Anki uporabi drugo mapo, preverite: %s Ta poseben paket je namenjen za učenje zunaj običajnega urnika.S tem boste izbrisali vašo obstoječo zbirko in jo nadomestili s podatki iz datoteke, ki jo uvažate. Ali ste prepričani?ČasČasovna omejitevZa pregledZa učenje zunaj običajnega urnika, kliknite gumb "Študij po meri".DanesDanašnja meja pregledov je bila dosežena, vendar še vedno ostajajo kartice, ki čakajo na pregled. Za boljši spomin premislite o tem, da bi povečali dnevno mejo.SkupajSkupni časSkupaj karticSkupaj zaznamkovObravnavaj vnos kot običajno izjavoTipVnesi odgovor: neznano polje %sUvoz iz datoteke, ki je označena samo za branje, ni mogoč.RazveljaviRazveljavi %sNeznana oblika datoteke.NeopaženePosodobi obstoječe zapiske, ko se prvi polji ujemataPrenos na AnkiWebPrenos v AnkiWeb...Uporabljeno na karticah, a manjka v mapi medijskih datotek:Uporabnik 1Različica %sČakam na zaključek urejanja.Med dodajanjem naj bo privzet trenutni paketCelotna zbirkaAli ga želite prenesti sedaj?Niste še posneli svojega glasu.Imeti morate vsaj en stolpec.Sveže[ni paketa]varnostne kopijekarticekartice izbrane odzbirkaddnipaketpomočureur od polnočispodrsljajipovezano z %spovezano z Oznakamiminutminutemopregledisekundstatistikawcelotna zbirka~anki-2.1.0+dfsg~b36/locale/sr/000077500000000000000000000000001323611211500157425ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/sr/LC_MESSAGES/000077500000000000000000000000001323611211500175275ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/sr/LC_MESSAGES/anki.mo000066400000000000000000002337441323611211500210230ustar00rootroot00000000000000l.P> Q>\>c>"i>> >>>8>>??"+?$N?$s?&?"??4?2*@]@n@"@$@$@$@ A>ASAkAsAAAAAA AAB BBBBB B)B2B 8BCBIBOBSB ZBdB jBuB BBBBBBBB0B 'C4C :C ECPCVCiCCCDDDD%D*D/D3D7DT;DD,D(DD!E)EfAEE EE E EEFF,FeCFF7SG GG5GXGY7H%HkH #I /I:I>I YI cImI I IIIII I$II II J J%$JKJJJJ"LL LLLMR=NvN7O ?OwKOEO@ PJPQP`PRhPP>Q#YQ#}QQQ(QR RR +R8RQRbR gR tRRRRRRRRRR R S)S'[,T[([[[F[N$\Ps\>\P]T]]]] ]8]^^^9^=^ L^Y^_^d^ i^ t^^ ^ ^^ ^^^)^0^"_8_4<_!q______m``` ````` ` ``` `a a"a)a1a:aKa_aoaaa a aaNa"b>bRbWbnbtb{b+c4c9cSc Ycgcvc~cc ccc cccc cccc d.dFBddd d d4de#e *e16ehexeee*ee gg gg"g"h $hEhZhih}hh h h)hh^iziiiiiii i ii jj<$jaj jjwjjj jjj jjj j jjkk*k0kAkIkck}k k kkk kkkkk kk kl l $l.l=lUllll+ll#l!lmm $m .m<9m vmm]mamSn!gn nnnn,nn#oko9p >pLp\pdpsp pp p pppp pppq 4q ?qJq,iq#qVq8rEJrrr*rr s,"sOs-hs+s8ss ttt3t#Et itwtttt tttttttuu4u| D| O| ]|g||||| | | || }$}!7}dY} }}}}}} } ~(~;~ U~v~X~+~"&9+`0+>FB'*(܀17,I"l'\#pe8*C(r' u/2MbW ] h t!'ʼn.&Ls,ʊ ъ܊U$Qv"S0$/"Tw }{^5dU  % 7BDI N Xbglrґבߑ   +6F?Ɣm~-aǕa)[yea)Ǘ5V^yuemۚIpӛ9D;~!ʜ!-0<-m5ѝ/ ' 2=DKc t Ǟ ٞ7,dy ˟ ؟G* <G ^ k(v!Š ͡ԡۡU\&E#l!g#Ťؤ% 1#Ko7I@ §N٨Nvũ۪ ')(=%f ɫ  :$ _"l%ˬX=6'ñձCa u׶`Mݷs7C?{A:!8eZѺ,78!pۻ-16h${)ʼ ۼNMm.    *8Rf!!!Ŀ. _ #~ #1 ANd${-'C:KDj$ &;*JuP ILES8>`26 iv/    - :GNU ky#( *N5%3OQ%`A $@^|% 9ZLtR k $'LSs "')ARj{Cv"Qtx}=b4(*Gr,m#0  )(;d y' #%Ea~(P&Nu' !7 M)X   '6 MRZ*S>~,*W.>L,C2pG$?DP>C!':b{)aH35i.'!=] y"q *$"Or{79*X%- # <$"a!(!$ ; GR[o#1#K!o;^%,JRS(@%-<'E%1 WbqmMRK   .>!Oq' @ $Mr9V;%ao.=+Hi7S[?zT/&So<  & FQm (*.A$R wPr |7'!? [E|8VR ep ?3EU+1 ] 9 0 L _ q ! . < @ `^ G q Yy  { va g @E\z *Ie z"9  -8;t0})!))@<j6`?#=] s n,,@Y2VeJ9FA$PGxFx?8@xIHL/Uq4k:/j* V!cv"M"(# $'$9$Q$^U%% 5&0@& q'~'''>' (?(mT((((/($)c5)J))")t!***9**W++8+6,G,3-7H- ---l.{+//\155 66,6H6[6]6 f6q66 666$66)6!7+17]7e7m7u7777777O[{4HcOG@i'ARc^{d2yLhk_V*`YJ -Bl%u$\XfSG8`^ DymzK)W B$n5qNB 8WZixn;@RA=  Ns2=tNsQF&3m8,oo{ Pf6I_R.r/g9w#10^-V0czi4TXr+<eJuD<LQU U%"7.d(H)*E},+-bpSUT ]g;jxW r4>|3]h!v&E<l P979 t=o#DFJC~IqxY p&naju:Zpbav/6?Gfek\ :*IqC? m6>T5!CSeL_@sPOg/} yw vtV'M$#H|:w1\0k~XK"%a(F!;5M?M}d"b](|jA`Y[Z+~,El[7K13hz2'.)>Q  (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:01+0000 Last-Translator: Damien Elmes Language-Team: Serbian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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; X-Launchpad-Export-Date: 2018-02-01 05:17+0000 X-Generator: Launchpad (build 18534) (1 од %d) искљ. укљ. Има %d карту. Има %d карте. Има %d карата.%% тачних%(a)0.1f %(b)s/ дневно%(a)0.1fs (%(b)s)%(a)d oд %(b)d белешке је обновљена%(a)d oд %(b)d белешке су обновљене%(a)d oд %(b)d бележака је обновљено%(tot)s %(unit)s%.01f карата/мин.%d карата%d карте%d карата%d карта уклоњена.%d карте уклоњене.%d карата уклоњено.%d карта извезена.%d карте извезене.%d карата извезено.%d карта увезена.%d карте увезене.%d карата увезено.%d карта прегледана за%d карте прегледане за%d карата прегледано за%d шпил обновљен.%d шпила обновљена.%d шпилова обновљено.%d група%d групе%d групаучитај измене у %d медија датотециучитај иземене у %d медија датотекамаучитај иземене у %d медија датотекама%d медија датотека је учитана%d медија датотеке су учитане%d медија датотека је учитана%d белешка%d белешке%d белешки%d белешка додата%d белешке додате%d бележака додато%d белешка је избрисана%d белешке су избрисане%d белешки избрисано.%d белешка је извезена.%d белешке су извезене.%d белешки извезено.%d белешка извезена.%d белешке извезене.%d бележака извезено.%d напомена је неизмењена%d напомене су неизмењене%d напомене су неизмењене%d белешка обновљена%d белешке обновљене%d бележака обновљено%d преглед%d прегледа%d прегледа%d изабрана%d изабране%d изабрано%s копија%s дан%s дана%s дана%s сат%s сата%s сати%s минут%s минута%s минута%s минут.%s минута.%s минута.%s месец%s месеца%s месеци%s секунда%s секунде%s секунди%s за брисање:%s година%s године%s година%s д.%s ч.%s мин.%s мес.%s с.%s г.&О програму...&Бубање...&Уреди&Извези...&Датотека&Нађи&Иди&Упутство&Упутство&Помоћ&Увези...&Инвертуј избор&Следећа карта&Отвори фасциклу са додацима...&Поставке...&Претходна карта&Прераспореди...&Подржи Anki...Алатке&Poništi'%(row)s' садржи %(num1)d поља, очекујућих %(num2)d(%s тачних)(крај)(филтрирано)(учење)(нови)(лимит у надређеном: %d)(изаберите 1 карту)...датотеке .anki2 нису намењене за увоз. Ако желите обнављање из резервне копије "погледајте одељак 'Backups' и упутство за употребу./0 д.1 месец1 година10 ч.22 ч.3 ч.4 ч.16 ч.излаз 504 је добио обавештење о грешци. Покушајте привремено да искључите свој антивирус.:%d карта%d карте%d каратаОтвори фасциклу са резервним копијамаПосети сајт%(pct)d%% (%(x)s из %(y)s)%Y-%m-%d @ %H:%MРезервне копије
Anki ће направити резервну копију колекције при сваком затварању и синхронизацији.Формат извоза:Шта наћи:Величина слова:Слова:Где тражити:садржи:Величина линије:Замени са:СинхронизацијаСинхронизација
Искључена је; да бисте је укључили, кликните на дугме синхронизације у главном прозору.

Потребан је налог

За синхронизацију колекције, потребан вам је налог. Региструјте налог, а затим испод унесите податке из налога.

Anki је ажуриран

Објављен је Anki %s.

<игнорисано><текст није у Unicode><унесите овде услов за претраживање; притисните Еnter за приказ текућег шпила>Велико хвала свима који су давали предлоге, пријављивали грешке и донирали.Лакоћа карте - величина следећег интервала када, при понављању, дате оцену "Добро".Филтрирани шпил не може да има под-шпилове.Дошло је до проблема при синхронизацији медија. Молимо Вас да користите Алатке>Преглед медија, затим да синхронизујете поново да би се проблем уклонио.Неуспео: %sО AnkiДодајДодај (пречица: ctrl+enter)Додај пољеДодај медија датотекуДодај нови шпил (Ctrl+N)Додај тип белешкеДодај повратакДодај ознакеДодај у:Додај: %sДодатоДодато данасДодат дупликат са првим пољем: %sПоновоНе запамћене данасБрој заборављених: %sСви шпиловиУ свим пољимаСве карте у случајном редоследу (режим нагурати)Све карте, белешке и медија датотеке ће бити избрисане. Да ли то желите?Дозволи коришћење HTML у пољимаДошло је до грешке при прегледу базе података. Могући узроци: - Антивирус, фајервол, резервно копирање, или програм за синхронизацију можда смета Anki-ју. Покушајте да искључите такве програме и погледајте да ли ће проблем нестати. - Ваш диск је пун. - Documents/Anki фасцикла је можда на мрежном диску. - Датотеке у Documents/Anki фасцикли могу бити недоступни за записивање. - Ваш хард диск је можда покварен. Добра идеја је да покренете Алатке(Tools)>Провери базу података, да бисте се осигурали да ваша колекција није оштећена. Грешка при отварању %sAnkiШпил Anki 2.0Пакет шпилова AnkiAnki не може да преименује ваш профил, зато што не може да преименује фасциклу на диску. Уверите се да имате довољно права за записивање у Documents/Anki и да ниједан други програм не користи ту фасциклу, а затим покушајте поново.Anki није пронашао линију између питања и одговора. Да бисте заменили њихова места, уредите шаблон ручно.Anki је једноставан, интелигентан програм за учење методом "одложеног понављања". Бесплатан је и са отвореним кодом.Anki поседује AGPL3 лиценцу. За више информација, погледајте датотеку лиценце.AnkiWeb ID или лозинка су били погрешни; покушајте поново.AnkiWeb ID:AnkiWeb је открио грешку. Покушајте поново за неколико минута, и ако се проблем понавља, пошаљите извештај о грешци.AnkiWeb је тренутно презаузет. Покушајте поново за неколико минута.AnkiWeb се обнавља. Покушајте поново за неколико минута.ОдговорДугмета одговораОдговориВаш антивирус или фајервол не дозвољавају да се Anki прикључи на Интернет.Карте на којима нема ништа, биће обрисане. Ако белешка нема више карата, биће избрисана. Да ли желите да наставите?Два пута се среће у датотеци: %sДа ли заиста желите да избришете %s?Мора да постоји бар један тип карте.Мора да постоји бар један корак.Аутоматски озвучиАутоматски синхронизуј при отварању/затварању профилаПросечноПросечно времеПросечно време одговораПросечна лакоћаПросечно за непропуштене данеПросечни интервалНаличјеПреглед наличјаШаблон наличјаРезервне копијеОсновноОсновна (и обратне карте)Основна (обратне по избору)ПрегледајПриказ у прегледачуПодешавања прегледачаПрављењеСакријСачувај картуСакриј белешкуСачувај везане нове карте до следећег данаСачувај везане рецензије до следећег данаПодразумевано, Anki ће открити знакове између поља, таквих као што су табулатор, зарез итд. Ако Anki погрешно препозна знак, можете га унети овде. Користите \t за приказ Tаb.ОткажиКартаКарта %dКарта 1Карта 2ID картеСписак каратаТип каратаТипови каратаТипови карата за %sКарта је сачувана.Карта је одложена.Карта је била "преузимач".КартеКарте се не могу ручно преместити у филтрирани шпил.Карте у прост текстПошто их прегледате, катре ће бити аутоматски враћене у изворни шпил.Карте...У центруИзмениИзмени %s на:У други шпилПромени тип белешкеПромени тип белешке (Ctrl+N)Промени тип белешке...Промени шпил зависно од типа белешкеИзмењениПреглед&Медија...Провери фасциклу с медија датотекамаProvjeravam...ИзабериИзабери шпилИзабери тип белешкеИзабери ознакеКлонирај: %sЗатвориЗатвори и поништи унос?ПропустиКод:Колекција је оштећена. Погледајте упутство.ДвотачкаЗарезИзабери језик сучеља и друге могућностиЧеститамо! Завршили сте овај шпил за сада.Повезивање...Превишено је време за прикључивање. Или имате проблем са интернет везом, или се у медија фасцикли налази веома велика датотека.НаставиКопирајТачни одговори за старије карте: %(a)d/%(b)d (%(c).1f%%)Тачно: %(pct)0.2f%%
(%(good)d of %(tot)d)Није успело повезивање с AnkiWeb. Проверите свој мрежни прикључак и покушајте поново.Неуспело снимање звука. Да ли сте инсталирали lame и sox?Неуспело чување датотеке: %sБубањеНаправи шпилНаправи филтрирани шпил...НаправљенCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+WCtrl+ZУкупан бројСвега %sСвега одговораСвега каратаТекући шпилТекући тип белешке:Додатно учењеСесија додатног учењаИсециБаза података је обновљена и оптимизована.DatumДана учењаОткажи ауторизацијуКонзола за уклањање грешакаШпилШпил ће бити увезен после отварања профила.ШпиловиСмањивање интервалаПодразумеваноПоново се појављује кашњење одзива.ИзбришиИзбриши картеИзбриши шпилИзбриши празнеИзбриши белешкуИзбриши белешкеИзбриши ознакеИзбриши некоришћенеИзбриши поље из %s?Избриши '%(a)s' тип карте и њен %(b)s?Да избришем овај тип белешке и све карте тог типа?Да избришем овај некоришћени тип белешке?Да избришем некоришћени тип медија датотеке?Избрисана %d карта са непостојећом белешком.Избрисане %d карте са непостојећом белешком.Избрисано %d карата са непостојећом белешком.Избрисана %d карта са непостојећим шаблоном.Избрисане %d карте са непостојећим шаблоном.Избрисано %d карата са непостојећим шаблоном.Избрисана %d белешка са непостојећим типом белешке.Избрисане %d белешке са непостојећим типом белешке.Избрисано %d бележака са непостојећим типом белешке.Избрисана %d белешка без карте.Избрисане %d белешке без карата.Избрисано %d бележака без карата.Избрисана %d белешка са погрешним пољем рачуна.Избрисане %d белешке са погрешним пољем рачуна.Избрисано %d бележака са погрешним пољем рачуна.Избрисано.Брисање овог шпила из списка шпилова вратиће све преостале карте у њихове изворне шпилове.ОписОпис се приказује на екрану за учење (само за текуће карте):ДијалогПреузми са AnkiWebПреузимање са AnkiWeb...РокРок само за картеРок сутраИ&злазЛакоћаВеома лакоБонус за лакеИнтервал за лаганоУређивањеУређивање параметараУређивање HTMLИзмењеноМењање фонтаИспразниПразне карте...Бројеви празних карата: %(c)s Поља: %(f)s Пронађене су празне карте. Молимо покрените Алатке>Празне карте.Празно прво поље: %sКрајЗадајте шпил за смештање нових карата %s, или оставите поље празно:Унесите нову позицију карте (1...%s):Унесите ознаке за додавање ка свим изабраним картама:Унесите име постојеће ознаке, за њено удаљавање са свих изабраних карата:Грешка у преузимању: %sГрешка при покретању: %sГрешка у прављењу заштићене конекције. То је, обично, изазвано антивирусом, фајерволом, VPN софтвером или проблемима са вашим провајдером.Грешка при извршавању %s.Грешка током рада %sИзвоз карте у други форматИзвоз...ДодатноFF1Поље %d из датотеке:Састављање карте пољаНазив поља:Поље:ПољаПоља за %sПоља су одвојена са: %sПоља...ФилтерФилтер:ФилтрираноФилтриран је шпил %dНађи &Дупликате...Нађи дупликатеНађи и За&мени...Нађи и замениЗавршетакПрва картаВиђена први путПрво поље подударно: %sФиксирана %d картица са неважећим својствима.Фиксиране %d картице са неважећим својствима.Фиксиране %d картице са неважећим својствима.Исправљено AnkiDroid редефинисање грешке шпила.Фиксни тип белешке: %sПреврниФасцикла већ постоји.Фонт:ZaglavljeИз сигурносних разлога, '%s' није дозвољено на картама. Можете да га користите поставивши команду у други пакет и да увезете тај пакет у заглављу уместо LaTeX.ПрогнозаОбразацНађено %(a)s у %(b)s.ЛицеПример лицаШаблон лицаОпштеНаправљена датотека: %sНаправљена на %sПоделиДоброИнтервалHTML уређивачТешкоЗаглављеПомоћНајлакшеИсторијаПочетнаВреме у дануЧасоваНису приказани часови са мање од 30 понављања.Ако сте придонели развоју програма, а нисте на овом списку, молико вас да нас контактирате.Ако сте учили сваки данИгнориши времена одговора дужа одИгнориши величину словаИгнориши пољеИгнориши линије у којима се прво поље подудара са постојећом белешком.Занемари ово ажурирањеУвозУвези датотекуУвези иако постојећа белешка има исто прво пољеНеуспешан увоз. Неуспео увоз. Информација помоћи: Опције увозаЗавршен увоз.Постоји у фасцикли за медија датотеке, али се не користи у ниједној карти:Да би се обезбедило исправно функционисање ваше колекције при коришћењу на различитим уређајима, Anki захтева да унутрашњи сат рачунара буде правилно постављен. Унутрашњи сат може бити погрешно постављен чак и ако Ваш систем показује тачно локално време. Молимо, идите на временска подешавања на вашем рачунару и проверите следеће: - AM/PM - Кретање сата - Дан, месец и годину - Временску зону - Летње рачунање времена Разлика у корекцији времена: %s.Укључујући медија датотекеУкључи у извоз информацију о распоредуЗаједно са ознакамаУвећај данашњи лимит за нове картеУвећај данашњи лимит за нове карте наУвећај данашњи лимит за понављањаУвећај данашњи лимит за понављања наИнтервали увећањаИнсталирање додатакаЈезик сучеља:ИнтервалМодификатор интервалаИнтервалиНедозвољен код.Датотека је оштећена. Обновите је из резервне копије.Неважећи подаци на картици. Користите Алатке>Провери базу података, а ако се проблем поново појави, консултујте подршку на сајту.Неисправан регуларни израз.Суспендована је.Пређи на ознаке са Ctrl+Shift+TСачувај доLaTeXLaTeX формулаИскључена формула LaTeXПромашајиПоследња картаПоследњи прегледПрво најновијеУчењеНаучи да ограничишУчених: %(a)s, поновљених: %(b)s, поново учених: %(c)s, филтрираних: %(d)sУчењеПоступак за прилепљенеПраг за прилепљенеЛевоОграничи доУчитавање...Најдужи интервалТражи у пољу:НајлакшеУправљајУправљање типовима бележака...Пресликавање у %sПресликавање за ознакеРазвијенМаксимални интервалМаксимум прегледа у дануНосачМинимални интервалминутаПремештај нове карте и поновљенеШпил Mnemosyne 2.0 Deck (*.db)ЈошНајвише промашајаПремести картеПремести карте у шпил:&БелешкаНазив већ постоји.Назив шпила:Назив:МрежаНовоНове картеСамо нове картеНових карата у дануНазив за шпил:Нови интервалНови назив:Нови тип белешке:Назив за нову групу опција:Нова позиција (1...%d):Нови дан почиње одНикакве карте још нису обавезне.Нема карата које одговарају задатим критеријумима.Нема празних карата.Нема доспелих карата за изучавање данас.Нема некоришћених или непостојећих датотека.БелешкаID белешкеТип белешкеТип бележакаБелешка и %d карта су обрисане.Белешка и %d карте су обрисане.Белешка и %d карата је обрисано.Белешка је скривена.Белешка је суспендована.Пажња: датотеке стављене на карте се не копирају. За сваки случај, повремено направите резервне копије своје фасцикле Anki.Напомена: Недостаје део историје. За више информација погледајте документацију прегледача.Белешке у прост текстЗа белешку је потребно бар једно поље.Белешке су означене.ништаПотврдиПрво најстаријеПри следећој синхронизацији, значење се мења у једном смеруЈедна или више бележака нису увезене, јер не генеришу ниједну карту. То се може десити ако имате празна поља или ако нисте мапирали садржај одговарајућих поља у текстуланој датотеци.Само новим картама можете променити положај.Само један клијент може да приступи AnkiWeb у једном тренутку. Ако претходна синхронизација није успела, молимо покушајте поново за неколико минута.ОтвориОптимизација...Опционални лимит:ОпцијеОпције за %sГрупа опција:Опције...РедоследРедослед додатакаРедослед обавезаЗамена шаблона:Замена фонта:Замена шаблона фонта:Лозинка:НалепиНалепи слику из међумеморије као PNGЛекција Pauker 1.8 (*.pau.gz)ПроценатПериод: %sСтави на крај реда нових каратаСтави у ред за понављање са интервалима између:Најпре додај нову врсту белешке.Повежите микрофон и обезбедите да други програми не користе аудио уређај.Молимо уредите ову белешку, додајући неколико пропуста за попуњавање. (%s)Уверите се да је профил отворен и да Anki није заузет, а затим покушајте поново.Молимо, инсталирајте PyAudioНа почетку, прво отворите профил.Уклоните фасциклу %s и покушајте поново.Покрените Алатке>Празне картеИзаберите шпил.Одаберите карте из само једне врсте бележака.Одаберите нешто.Ажурирајте Anki до последње верзије.За увоз ове датотеке, користите Датотека>Увоз.Молимо, посетите AnkiWeb, надоградите свој шпил,а затим покушајте поново.ПозицијаПодешавањаПрегледПреглед изабране карте (%s)Преглед нових каратаПреглед нових карата, које су додате последњеОбрада...ПрофилиПрокси тражи потврду идентитета.ПитањеКрај реда: %dПочетак реда: %dИзлазСлучајноСлучајни поредакОценаПоново изградиСними свој гласСнимање...
Time: %0.1fRelative overduenessПоновно учењеЗапамти последњи уносУклањањем ове врсте карата, избрисаћете једну или више бележака. Направите прво нову врсту карата.ПреименујПреименуј шпилПоново репродукуј звукРепродукуј властити гласПреместиПремести нове картеРед...Потребна је једна или неколико ових ознака:ПрерасподелиИзмени редоследИзмени редослед картица на основу мојих одговора у овом шпилу.Настави садСмер текста с десна на лево (RTL)Врати на стање пре '%s'.ПонављањеБрој понављањаВреме понављањаПреглед спредаПреглед спреда заПонављање последње заборављене картеПонављање заборављених каратаПрегледајте свој успех за сваки сат у току данаПонављањаДесноЗахват: %sТражиПретражи унутар обликовања (споро)ИзабериИзабери &свеИзабери &белешкеИзабери искључујуће ознаке:Изабрана датотека није у UTF-8 формату. Молимо, погледајте одељак за увоз у упутству.Селективно учењеТачка-зарезСервер није пронађен. Или је веза прекинута, или антивирус или фајервол блокира да се Anki прикључи на Интернет.Све шпилове испод %s постави у ову групу опција?Задај за све подшпиловеShift типка је притиснута. Прескакање аутоматске синхронизације и учитавање додатка.Промени позицију других каратаНа тастатури: %sПречица: %sПрикажи %sПрикажи одговорПрикажи дупликатеПрикажи време одговарањаПрикажи нове карте пре понављањаПрикажи нове карте после понављањаПрикажи нове карте према редоследу њиховог додавањаПрикажи нове карте у случајном пореткуПрикажи време следећег понављања над дугмадима са одговоримаПриказуј број преосталих карата током понављањаВеличина:Неке повезане или сачуване карте ће бити обрисане после ове сесије.Нека подешавања ће почети деловати тек када поново покренете Anki.Неке исправке су игнорисане јер се променио тип белешке:Поље сортирањаСортирај према овом пољу у прегледачуСортирање према овој колони није подржано. Изаберите другу колону.РазмакПочетни положај:Почетна лакоћаСтатистикаКорак:Корака (у минутима)Кораке наводити у виду бројева.Прегледано данасУчиУчи шпилУчи шпил...Учи садПреглед стања карте или ознакеСтилСтил (дели се мођу картама)Супермемо XML извоз (*.xml)ОбуставиСуспендуј картуСуспендуј белешкуОбустављеноСуспендовано+СачуваноСинхронизуј такође звуке и сликеСинхронизација није успела: %sСинхронизација није успела; нема везе са Интернетом.За синхронизацију, сат на вашем рачунару мора бити исправно подешен. Подесите сат и покушајте поново.Синхронизација...Симболи табулацијеДупликати ознакаСамо ознакаОзнакеЦиљни шпил (Ctrl+D)Циљно поље:ТекстТекст, одељен симболима табулације или тачкама са зарезом (*)Овакав шпил већ постоји.Тај назив за поље је већ у употреби.Тај назив је већ у употреби.Истекло је време за спајање са AnkiWeb. Проверите мрежни прикључак и покушајте поново.Подразумевана подешавања се не могу избрисати.Подразумевани шпил се не може избрисати.Распоред карата у шпилу (-овима)Грешка у преузимању. Покушајте поново.Прво поље је празно.Прво поље у типу белешке мора бити мапирано.Следећи симбол не може бити коришћен: %sПредња страна ових карата је празна. Идите на Алатке>Празне карте.Ваша улазна информација би генерисала празно поље у свим картама.Број нових карата, које сте додали.Број питања на која сте одговорили.Број понављања планираних у будућности.Колико пута сте притиснули свако дугме.Дозволе у систему привремених фасцикли су погрешне, а Anki није у стању да их исправи аутоматски. Потражите више информација у Anki 'temp folder" упутству.Датотека .apkg није валидна.Нема картица које задовољавају упит. Желите ли да задате нове?Измена, коју сте затражили, захтеваће учитавање целе базе података приликом следеће синхронизације ваше колекције. Ако на другом уређају имате измене које још нису синхронизоване, изгубићете их. Да ли желите да наставите?Време потрошено на одговоре.Доступне су нове карте, али је већ достигнут дневни лимит. Можете да увећате лимит у опцијама, али имајте у виду, да што више нових карата наведете, то ћете имати веће оптерећење у каткорочном приказу.Мора да остане бар један профил.Ова колона не може бити сортирана, али можете тражити специфичан шпил, кликнувши на један са леве стране.Ова датотека не изгледа као исправна .apkg датотека. Ако добијате ову грешку из датотеке, преузете с AnkiWeb, велике су шансе да преузимање није успело. Покушајте поново, а ако се проблем настави, покушајте поново помоћу другог прегледача.Ова датотека већ постоји. Да ли сте сигурни да желите да је презапишете?У овој фасцикли се на једном месту чувају сви ваши подаци за Anki како би се олакшало резервно копирање. Ако желите да Anki користи другу локацију, погледајте:: %s Ово је специјални шпил за учење ван обичног распореда.Ево га {{c1::пример}} попуњавања пропуштеног.Ово ће обрисати вашу постојећу колекцију и заменити је подацима из датотеке, коју увозите. Да ли сте сигурни да то желите?времеВременско ограничењеЗа понављањеДа бисте додали попуњавање пропуста у постојећој белешци, потребно је да јој прво измените тип у "пропуст" (cloze), преко Уреди>Измени тип белешкеДа бисте их видели, кликните испод на дугме Прикажи.За учење ван обичног распореда, кликните на дугме Додатно учење испод.ДанасДанашњи лимит за преглед је достигнут, али још увек постоје картице које чекају да буду прегледане. За оптимизацију меморије, размислите о повећању лимита у опцијама.укупноУкупно времеУкупно каратаУкупно бележакаТретирај унос као регуларан изразТипНапишите одговор: непознато поље %sНије успео увоз из датотеке која је доступна само за читање.ОдвезаноОпозовиОпозови %sНепознат формат датотеке.НевиђеноАжурирај постојеће белешке када се прво поље подудараАжурирано %(a)d од %(b)d постојећих бележака.Учитај на AnkiWebУчитавање на AnkiWeb...Коришћено на картама, али недостаје у фасцикли за слике и звуке:Корисник 1Верзија %sОчекивање завршетка уређивања.Упозорење, пропуштање неће радити док не укључите тип на врху за пропуштање (Cloze).Подразумевано ставити направљено у текући шпилЦела колекцијаЖелите ли да га преузмете сада?Имате "пропуст" (cloze) тип белешке, али нисте попунили ниједан пропуст. Да наставите?Имате много шпилова. Погледајте %(a)s. %(b)sЈош нисте снимили свој глас.Морате имати бар једну колону.СвежеСвеже-ученоПромена ће утицати на више шпилова. Ако желите да промените само тренутни шпил, додајте прво нову групу опција.Ваша колекција је у лошем стању. Молимо, покрените Алатке>Провера базе података, и синхронизујте поново.Ваша колекција или медија датотека су превелики за синхронизацију.Ваша колекција је успешно учитана у AnkiWeb. Ако користите неке друге уређаје, молимо да их сада синхронизујете преузмете колекцију, коју сте управо учитали са свог рачунара. Након што то урадите, будући прегледи и додавање карата ће бити обједињени аутоматски.Ваши шпилови овде и на AnkiWeb се разликују, тако да не могу бити обједињени, и неопходно је да замените шпилове на једној страни шпиловима са друге стране. Ако се одлучите за преузимање, Anki ће преузети колекцију из AnkiWeb и све промене, које сте урадили на рачунару од момента последње синхронизације, биће изгубљене. Ако се одлучите за отпремање, Anki ће учитати своју колекцију у AnkiWeb, и све промене, које сте урадили на AnkiWeb или другим уређајима, од мемента последње синхронизације за тај уређај, биће изгубљене. Након што синхронизујете све уређаје, будући прегледи и додавања карата могу бити обједињени аутоматски.[нема шпилова]резервекартекарте из шпилаизабране картеколекцијаdданипакетсве времедупликатпомоћhideсатачасова после поноћипромашајимање од 0.1 карте/минутупресликано у %sпресликано у ознакемин.мин.мес.поновљенисекундестатистикаова страницаwцела колекција~anki-2.1.0+dfsg~b36/locale/sv/000077500000000000000000000000001323611211500157465ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/sv/LC_MESSAGES/000077500000000000000000000000001323611211500175335ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/sv/LC_MESSAGES/anki.mo000066400000000000000000002110411323611211500210110ustar00rootroot00000000000000P5G G $G0G7G"=G`G bGlGGG8GGG HH".H$QH$vH&H"HH4H2-I`IqI"I$I$I$I JAJVJnJvJJJJJJ JJ K KKKKK "K,KCKJKSK YKdKjKpKtK {KK KKK KKKKKK LL!L0'L XLeLtL zL LLLLL>M@MCMKMRMWM\M`MdMhM,jM(MM!MNfNN NN N NNNNOeOO7+P cPmP5PXPYQ%iQkQ Q RRR1R BR LRVR lR zRR RR'RRRRR R$RS S+S;S JS TS%_SKSSS"TT TTTURAVvV W7W WwWEqX@XXXYRYiYrYY#Z#4ZXZ wZzZ[(,[U[ ][j[ ~[[[[ [ [ [[[[ \*\ E\O\b\Ji\\\\\ \ \)\']<]]]^ ^^^ "^ ,^ 7^ A^ L^W^ i^v^^^3^^S^:_C_J_ Q_ __k_z____"___0```&` `a aa +a 7a BaOa aakaqa aaaa-aaa(a5'b ]bkbbb8b56cPlc7cc d dd#5dYdadhdodvd}d d d dddddddddd d d e e e 'e 4e Ae Ne [eheoe ve eee ee eeeef f +f 7fEfJf/[ffff%ff f f f g g g &g4g,Jg(wgggFgNhPih>hPhJi]Si i8iiij(jDjHj Wjdjjjoj tj jj j j jj jjj)j0k7kMk4Qk!kkk#kk l$llll l.l mmmm 2m @mLmSm Zmhm mmm mmmmmmmmn n !n.nNFn"nnn nnnnnooooo ooopp*p 9pDp Ip Tp`p,eppp ppppp.pFpEq^q ~q q4qqq q1q$r4rTrcr*wrr @tNt mtzt"t"t tuu%u9u Bu?Lu u)uu2uv*v?v^vcvivxvv v vvvv<vw w%w5w:w Cw5Nwww www w w w wwwx"x(x9xAx[xux zx xxNxx xyyy$y (y&2yYy hyvy y yyyyyy+y!z#1z!Uzwzzz z z<z zz] {ag{{!{ { |||,*|W|#}kC}}} }}}} }~ ~ ~~6~E~ ^~h~n~~ ~ ~~,~# V/8E%<*Y0Ҁ,-.+\8 ʁցށ# 0/ `nw ǂ΂ւ&#Fj~i+2 F/R   "΄ 1 6A^ o ͅ-19?D[ dnu VΆ% 5?,‡Ggx"  ɈՈ2P*o'‰ʉ@Љ68H !?  #)< S _m s ~ ؋ % 2 ?IZ _!d %)27 LZ(_ ÍXލ+7"c&+َ0+$>PF'֏*()1R,BIo'ђ#_eA8וCg(FԖr uf/ܘM Z` + 1 < H!Tv{'L-2:O.V&ʛܛ,! (3 DOUn$Ĝ"ZSx0̝$""E K{WӞ^5NU} aksy  ʤϤԤڤ$:?GJRZ `jl} {#Ƨ ȧӧ>Vfw"((* 08i?}- "(?&h*&)<Pf| ƫ˫ҫ٫   '. 5? FP Xfo ɬܬ= LZj q }<>AJPW^djq+s9 ٮ!4 ѯޯ $9Mfcʰ8m FƱU fc0ʲ  ų۳!1DY q+} ϴ ش' /> M2XPܵ"Ӷض {~y I;M>l P»$!ۼ)'Fc-2 `k}!; 2CRiMĿ&+1 6@)I,st{  9$^av  )@Q"`:1l~&   6@,G t+ 26 NZ 53&UZ:  !7Y`gnu|   & 3 @ M Zgn u& 39 KYmu3 ) ( 8 E Q_q,-$73GkM7_9 Y C NYq   "0 C Q\p u&6?"=#`+( 1$*,/J Zel r  +4CXWt/ % <FM ,5Ren  ,&/3N1UD @.o ?.* ;8H;%Kq%)15=Qe ~ R 0%1Bt"  .!8IZ! DM `n  ( 0!Qsw L*09=(Fo   *G W,x% A. @Nb7Pp 4#OV p } 4 T _j %6"^:*^#<Y#r7!$'8D3}D <-V/  ! '2J]x)p54  >Me'w6  !%Bhq&9 7DKQ j t! R: LV<"&IZd #  '6 F g)$.. 5?EHE?$>> }   ! 4*?jo!  "=3W]   "--2`we0$I7n31,*BW<3*It/:<j;,"`8wFBJ1.U`r)- JW;Y7< ,KRas--R Ua{ <+,C+^   *V;FVe 2i &     + a ; I e J"$*2AIPV]r{!   5s _ w 0WV2+ El$ SN=p\<U6`UC @}el !"H]-.*Om$Pqx!Jd!i/gG4OO~ Di?*DgVAc>yX"b>%QDf,;a X"6V2~b5zZu Xm2#9[)Nn]Co8J 3T`wAP:YCuFY4N(EtNufvHKjw=Pk*6;0rjqJ3L {rn23KM,GB|od(1r|6) ez.  U\1eo?4Rl#$%'()9Zh_WxFv7`B1 Qm} pK]aB9|vIGH07%3!K-@\RI&M)pk* @A,=-F: s9>7^t{4FzB#I8 hDf{[1>S&'T/_sth5}k^:: &<S8bJEjZcR+WLMnO&(LI .ayM"^;?5H.8'<y/;iC7Q'c+Y,P-~d/@0x<+?G #[q$= g%TELA (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.Anki was unable to open your collection file. If problems persist after restarting your computer, please use the Open Backup button in the profile manager. Debug info: AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browser OptionsBuildBuriedBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFilterFilter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid file. Please restore from backup.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note Types...Manage...Map to %sMap to TagsMark NoteMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightSaveSave Current Filter...Save PDFScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.Toggle EnabledToggle MarkToggle SuspendTotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection file appears to be corrupt. This can happen when the file is copied or moved while Anki is open, or when the collection is stored on a network or cloud drive. If problems persist after restarting your computer, please open an automatic backup from the profile screen.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki 0.9.9.8.4 Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-08-28 21:44+0000 Last-Translator: Stefan Kangas Language-Team: Swedish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) X-Poedit-Country: SWEDEN Language: sv X-Poedit-Language: Swedish (1 av %d) (inaktiverad) (av) (på) Den har %d kort. Den har %d kort.%% Korrekta%(a)0.1f %(b)s/dag%(a)0.1fkB upp, %(b)0.1fkB ned%(a)0.1fs (%(b)s)%(a)d av %(b)d not uppdaterad%(a)d av %(b)d noter uppdaterade%(n)d: %(name)s%(tot)s %(unit)s%.01f kort/minut%d kort%d kort%d kort raderat.%d kort raderade.%d kort exporterat.%d kort exporterade.%d kort importerat.%d kort importerade.%d kort studerat i%d kort studerade under%d kortlek uppdaterad.%d kortlekar uppdaterade.%d grupp%d grupper%d mediaändring att ladda upp%d mediaändringar att ladda upp%d mediafil nerladdad%d mediafiler nerladdad%d not%d noter%d not tillagd%d noter tillagda%d not raderad.%d noter raderade.%d not exporterad.%d noter exporterade.%d not importerad%d noter importerade%d not oförändrad%d noter oförändrade%d not uppdaterad%d noter uppdaterade%d repetition%d repetitioner%d vald%d valda%s-kopia%s dag%s dagar%s timme%s timmar%s minut%s minuter%s minut.%s minuter.%s månad%s månader%s sekund%s sekunder%s att ta bort:%s år%s år%s dag%s tim.%s min%smo%s sek%s år&Om...&Bläddra och installera...&Kort&Hårdplugga&Redigera&Exportera...&Arkiv&Hitta&Gå till&Guide&Guide...&Hjälp&Importera...&Info...&Invertera markering&Nästa kort&Noter&Öppna mapp för tillägg...&Inställningar...&Föregående kort&Ändra schema...&Stöd Anki...&Verktyg&Ångra'%(row)s' hade %(num1)d fält, förväntat antal är %(num2)d(%s korrekta)(Not borttagen)(slut)(filtrerad)(inlärning)(ny)(välj ett kort)....anki2-filer är inte till för importering. Om du försöker återställa från en säkerhetskopia, vänligen leta upp 'Backups'-sektionen i manualen./0d1 månad1 årkl. 10kl. 22kl. 3kl. 4kl. 16:%d kort%d kortÖppna mappen för säkerhetskopiorBesök webbsajt%(pct)d%% (%(x)s av %(y)s)%Y-%m-%d @ %H:%MSäkerhetskopior
Anki kommer att skapa en säkerhetskopia av din samling varje gång programmet avslutas eller synkroniseras.Exportformat:Sök:Typsnittsstorlek:Typsnitt:I:Inkludera:Linjestorlek:Ersätt med:SynkroniseringSynkronisering
Inte aktiverat; klicka på knappen Synka i huvudfönstret för att aktivera.

Konto krävs

Ett gratis konto krävs för att hålla din samling synkroniserad. Registrera ett konto och ange sedan dina detaljer nedan.

Ny version av Anki

Anki %s har släppts.

Ett stort tack till alla som har bidragit med förslag, buggrapporter och donationer.Ett korts lätthet är storleken på nästa intervall när du svarar "bra" under en repetition.En filtrerad kortlek kan inte ha underkortlekar.Ett problem uppstod när media synkroniserades. Använd Verktyg->Granska media och synkronisera sedan igen för att korrigera detta fel.Avbröts: %sOm AnkiLägg tillLägg till (genväg: ctrl+enter)Lägg till korttyp...Lägg till FältLägg till mediaLägg Till En Ny Kortlek (Ctrl+N)Lägg till nottypLägg till OmväntLägg till etiketterLägg till etiketter...Lägg till:Tillägget laddades inte ned från AnkiWeb.TilläggLägg till...Lägg till: %sTillagdaTillagt idagLade till dublett med första fält: %sIgenIgen idagFelaktiga svar: %sAlla korttyperAlla kortlekarAlla fältAlla kort i slumpmässig ordning (råpluggs-läge)Alla kort, noter och media för denna profil kommer att tas bort. Är du säker?Tillåt HTML i fältenEtt tillägg du installerad kunde inte laddas. Om problemet kvarstår, gå till Verktyg>Tillägg i menyn och inaktivera eller ta bort tillägget. Medan '%(name)s' laddades: %(traceback)s Ett fel uppstod vid öppning av %sAnkiKortlek för Anki 2.0Paket för Anki-kortlekAnki kunde inte byta namnet på din profil eftersom den inte kunde byta namnet på profilmappen på hårddisken. Säkerställ att du har skrivbefogenheter till Dokument/Anki och att inga andra program försöker komma åt dina profilmappar, och försök sedan igen.Anki kunde inte hitta linjen mellan frågan och svaret. Anpassa mallen manuellt för att byta plats på frågan och svaret.Anki är ett användarvänligt, intelligent system för inlärning genom spaced repetition. Det är fritt med öppen källkod.Anki är licensierat under AGPL3-licensen. Se filen med licensinformation i källkodsdistributionen för mer information.Anki kunde inte öppna filen med din samling. Om problemet kvarstår när du startat om din dator, vänligen använd "Öppna säkerhetskopia" i profilhanteraren. Debuginformation: ID:t eller lösenordet för AnkiWeb var felaktigt; var god försök igen.ID för AnkiWeb:AnkiWeb stötte på ett problem. Vänligen försök igen om några minuter. Om problemet kvarstår, vänligen skicka in en buggrapport.AnkiWeb är för upptaget just nu. Vänligen försök igen om några minuter.AnkiWeb uppdateras. Vänligen försök igen om några minuter.SvarSvarsknapparSvarAnki kommer inte åt internet på grund av antivirus- eller brandväggsmjukvara.Alla märkningarAlla kort som inte är parade ihop med någonting kommer att raderas. Om en anteckning inte har några kvarvarande kort kommer den att tas bort. Är du säker att du vill fortsätta?Hittades två gånger i filen: %sÄr du säker på att du vill ta bort %s?Åtminstone en korttyp krävs.Åtminstone ett steg krävs.Bifoga bilder/ljud/video (F3)Automatisk synkning och säkerhetskopiering har inaktiverats under återställning. För att aktivera dem igen, stäng profilen eller starta om Anki.Spela upp ljud automatisktSynka automatiskt när profil öppnas/stängsGenomsnittGenomsnittlig TidGenomsnittlig svarstidGenomsnittlig lätthetGenomsnitt för dagar med studierGenomsnittligt intervallBaksidaFörhandsvisning av baksidaMall för BaksidaSäkerhetskopierar...SäkerhetskopiorGrundläggandeBas (och omvänt kort)Bas (valbart omvänt kort)Bas (skriv in svaret)Blå märkningFet text (Ctrl+B)BläddraBläddra (%(cur)d kort visas; %(sel)s)Bläddra (%(cur)d kort visas; %(sel)s)BläddraralternativByggGömtGömGöm kortGöm notGöm relaterade nya kort tills nästa dagGöm relaterade repetitioner till nästa dagSom förval identifierar Anki vilket tecken som används för att skilja fält åt, som tabbsteg, komma osv. Om Anki gör ett felaktigt val av tecken, så kan du ange rätt tecken här. Använd \t för tabbsteg.AvbrytKortKort %dKort 1Kort 2Kort-IDKortlistaKortstatusKorttypKorttyp:KorttyperKorttyper för %sKortet är gömt.Kort uteslutet.Kortet var en energislukare.KortKort kan inte flyttas manuellt till en filtrerad kortlek.Kort i oformaterad textKorten kommer automatiskt att återföras till sina originalkortlekar efter att du repeterat dem.Kort...CentreraÄndraÄndra %s till:Byt kortlekByt kortlek...Ändra nottypÄndra Nottyp (Ctrl+N)Ändra nottyp...Byt färg (F8)Ändra kortlek beroende på nottypÄndradeÄndringar nedan kommer att påverka den %(cnt)d not som använder denna korttyp.Ändringar nedan kommer att påverka de %(cnt)d noter som använder denna korttyp.Ändringar kommer att träda i kraft när Anki startas om.Granska &media...Sök efter uppdateringarKontrollera filerna i mediebiblioteketKontrollerar...VäljVälj KortlekVälj NottypVälj taggarRensa märkningRensa oanvändaRensa oanvända etiketterKlona: %sStängStäng och gå miste om nuvarande inmatning?Stänger...LucktextLucktest (Ctrl+Shift+C)Kod:Samlingen korrupt. Var vänlig se manualen.KolonKommateckenAnpassa gränssnittets språk och andra alternativGrattis! Du är klar med den här kortleken för idag.Ansluter...Uppkopplingen avbröts. Antingen har du problem med din internetuppkoppling, eller så har du en väldigt stor fil i din mediamapp.FortsättKopieraKorrekta svar på mogna kort: %(a)d/%(b)d (%(c).1f%%)Rätt: %(pct)0.2f%%
(%(good)d av %(tot)d)Kunde inte ansluta till AnkiWeb. Kontrollera nätverksanslutningen och försök igen.Kunde inte spela in ljud. Har du installerat lame och sox?Kunde inte spara fil: %sRåpluggaSkapa kortlekSkapa en filtrerad kortlekSkapa skalbara bilder med dvisvgmSkapadCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZSammanlagtSammanlagt antal %sSammanlagt antal svarSammanlagt antal kortAktuell kortlekAktuell nottyp:Anpassade studierAnpassat studiepassKlippDatabasen återuppbyggd och optimerad.DatumDagar med studierAvauktoriseraFelsökningskonsollKortlekÅsidosätt kortlek...Kortleken kommer importeras när en profil öppnas.KortlekarMinskande intervallerStandardTid tills du får repetera ett kort igen.Ta bortTa bort kortTa bort kortlekRadera tommaTa bort notTa bort noterTa bort etiketterTa bort oanvändaRadera fält från %s?Radera korttypen ”%(a)s” och dess %(b)s?Ta bort den här nottypen och alla dess kort?Ta bort den här oanvända nottypen?Ta bort oanvända media?Tog bort %d kort utan not.Tog bort %d kort utan noter.Tog bort %d kort som saknade mall.Tog bort %d kort som saknade mallar.Tog bort %d noter som saknade nottyp.Tog bort %d noter som saknade nottyper.Tog bort %d not utan kort.Tog bort %d noter utan kort.Raderade %d not med ett felaktigt antal fält.Raderade %d noter med ett felaktigt antal fält.Borttaget.Raderas denna kortlek returneras alla kvarstående kort till sina ursprungliga kortlekar.BeskrivningBeskrivning att visa på studieskärmen (endast nuvarande kortlek):DialogrutaLadda ner från AnkiWebLaddade ned %(fname)sLaddar ner från AnkiWeb...AktuellaEndast kort som ska repeterasSchemalagda imorgon&AvslutaInlärningsgradLättEnkel bonusLätt intervallRedigeraRedigera "%s"Redigera NuvarandeRedigera HTMLRedigeradeRedigeringstypsnittTömTomma kort...Antal tomma kort: %(c)s Fält: %(f)s Hittade tomma kort. Vänligen kör Verktyg>Tomma kort.Tomt första fält: %sSlutSkriv in kortlek att lägga nya %s-kort i, eller lämna blankt:Skriv in ny kortposition (1...%s):Skriv in etiketter att lägga till:Skriv in vilka etiketter som skall tas bortFel vid nedladdning av %(id)s: %(error)sFel vid nedladdning: %sFel under uppstart: %sKunde inte upprätta en säker uppkoppling. Detta beror ofta på antivirus-, brandväggs- eller VPN-program, eller på problem med din internetleverantör.Fel vid exekvering av ‌%s.Fel vid körning av ‌%sExporteraExportera...Exporterade %d mediafilExporterade %d mediafilerExtraFF1Fält %d i fil är:FälthopparningFältnamn:Fält:FältFält för %sFält separerade av: %sFält...Fil&treraFilterFiltrera...Filtrera:FiltreradFiltrerad kortlek %dSök &dubbletterSök dubbletterSök och &ersättSök och ersättSlutförFörsta kortetFörsta repetitionenFörsta matchande fält: %sÅtgärdade %d kort med ogiltiga egenskaperÅtgärdade %d kort med ogiltiga egenskaperKorrigerade åsidosatt kortlek-bugg i AnkiDroidFixade nottyp: %sMärkMärk kortVändKatalogen finns redan.Typsnitt:SidfotAv säkerhetsskäl tillåts inte ”%s” i kort. Du kan använda det ändå genom att placera kommandot i ett annat paket, och importera det paketet i LaTeX-sidohuvudet i stället.PrognosFormulärHittade %(a)s i %(b)s.FramsidaFörhandsvisning av framsidaMall för FramsidaAllmäntGenererad fil: %sGenererad %sHämta tillägg...Hämta deladBraGrön märkningHTML-redigerareSvårtHar du installerat latex och dvipng/dvisvgm?SidhuvudHjälpHögsta lätthetHistorikHemSammanställning per timmeTimmarTimmar med mindre än 30 repetitioner visas inte.Om du har bidragit men inte finns med på denna lista, kontakta oss.Om du skulle studera varje dagIgnorera svarstider längre änIgnorera skiftlägeIgnorera fältIgnorera rader där det första fältet matchar existerande noteHoppa över denna uppdateringImporteraImportera filImportera även om redan existerande not har samma förstafältImport misslyckades. Import misslyckades. Felsökningsinformation: ImportalternativImport klar.Finns i mediakatalogen men används inte av något kort:För att Anki ska kunna säkerställa att din samling fungerar korrekt när den flyttas mellan enheter, måste din dators interna klocka vara korrekt inställd. Den interna klockan kan gå fel även om ditt system visar rätt lokal tid. Vänligen öppna tidsinställningar på din dator och kontrollera följande: - fm/em (AM/PM) - Klockförskjutning - Dag, månad och år - Tidszon - Sommar- eller vintertid Skillnad till korrekt tid: %sInkludera mediaInkludera schemaläggningsinformationInkludera etiketterÖka gränsen för nya kort för idagÖka gränsen för nya kort för idag medÖka gränsen för antalet repetitioner för idagÖka gränsen för antalet repetitioner för idag medÖkande intervallerInstallera tilläggSpråk för gränssnitt:IntervallIntervallerOgiltig kod, eller så är tillägget inte tillgängligt för din version av Anki.Ogiltig kod.Fil ogiltig. Vänligen återställ från backup.Ogiltigt reguljärt uttryck.Ogiltig sökning - kolla om du har skrivit rätt.Det har uteslutits.Kursiv text (Ctrl+I)Hoppa till taggar med Ctrl+Shift+TLagraLaTeXLaTeX-ekvationLaTeX math env.BortglömdaSista kortetSenaste repetitionSenast tillagda förstAtt läraGräns för inlärning i förvägAtt lära: %(a)s, Repetera: %(b)s, Att lära om: %(c)s, Filtrerade: %(d)sNyaAtt göra med energislukareTröskelvärde för energislukareVänsterBegränsa tillLaddar...Den lokala samlingen har inga kort. Vill du ladda ned från AnkiWeb?Längsta intervallSök i fält:Lägsta lätthetHanteraHantera nottyper...Hantera...Mappa till %sPara ihop med etiketterMarkera notMognaStörsta intervallMaximalt antal repetitioner/dagMediaMinsta intervallMinuterBlanda nya kort och repetitionerKortlek för Mnemosyne 2.0 (*.db)MerFlest försökFlytta kortFlytta kort till kortlek:Separatorer med fler än ett tecken stöds inte. Skriv in endast ett tecken.N&otNamnet existerar redan.Namn på kortleken:Namn:NätverkNyaNya kortNya kort i leken över dagens gräns: %sEndast nya kortNya kort/dagNamn på ny kortlek:Nytt intervallNytt namn:Ny nottyp:Namn på ny alternativgrupp:Ny position (1...%d):Nästa dag börjarIngen märkningInga kort matchade de kriterier du uppgav.Inga tomma kortInga mogna kort studerades idag.Inga oanvända eller saknade filer hittades.Inga uppdateringar är tillgängliga.NotNoterings-IDNottypNottyperNot och dess %d kort togs bort.Noter och dess %d kort togs bort.Noten har gömts.Not uteslutenObservera: Media har inte säkerhetskopierats. Vänligen skapa återkommande säkerhetskopior av din Anki-mapp för säkerhets skull.Observera: En del av historiken saknas. För mer information, se dokumentationen för bläddraren.Noter i oformaterad textNoter behöver minst ett fält.Noter har taggats.IngentingOKÄldsta sedda förstVid nästa synkning, tvinga ändringar i en riktningEn eller flera noter importerades inte eftersom de inte genererade några kort. Detta kan hända när man har tomma fält eller när man inte har parat ihop innehållet i textfilen med de rätta fälten.Endast nya kort kan positioneras omEndast en klient kan komma åt AnkiWeb åt gången. Om en tidigare synkning har misslyckats kan du försöka igen om några minuter.ÖppnaÖppna säkerhetskopia...Optimerar...AlternativAlternativ för %sAlternativgrupp:Alternativ...OrdningOrdnade efter tilläggsdatumOrdnade efter nästa repetitionÅsidosätt mall för baksida.Åsidosätt typsnitt:Åsidosätt mall för framsida:Lösenord:Klistra inKlistra in bilder som PNGPauker 1.8-lektion (*.pau.gz)ProcentandelPeriod: %sPlacera i slutet av kön med nya kortPlacera i kön för repetitioner med intervall mellan:Lägg till en annan nottyp först.Vänligen koppla in en mikrofon och säkerställ att inga andra program använder ljudenheten.Redigera noten och lägg till luckor. (%s)Säkerställ att en profil är öppen och att Anki inte är upptaget, och försök sedan igen.Ge ditt filter ett namn:Vänligen installera PyAudioÖppna en profil först.Radera mappen %s och försök igen.Starta om Anki för att slutföra ändringen av språk.Vänligen kör Verktyg>Tomma kortVälj en kortlek.Välj kort från endast enda nottyp.Du måste välja någonting.Vänligen uppgradera till den senaste versionen av Anki.Använd Fil>Importera för att importera denna fil.Vänligen besök AnkiWeb, uppgradera din kortlek, och försök igen.PositionInställningarFörhandsvisaFörhandsgranska valt kort (%s)Förhandsgranska nya kortFörhandsgranska nya kort tillagda de senasteBearbetade %d mediafilBearbetade %d mediafilerBehandlar...ProfilerProxy-autentisering krävs.Lila märkningFrågaAvslutaSlumpmässigtSlumpa ordningBetygÅterskapaSpela in din egen röstSpela in ljud (F5)Spelar in...
Tid: %0.1fRöd märkningLär omKom ihåg senaste inmatningTa bort %s från dina sparade sökningar?Ta bort korttyp...Ta bort aktuellt filter...Ta bort etiketter...Ta bort formatering (Ctrl+R)Att ta bort detta kort innebär att en eller flera noter också kommer att tas bort. Skapa en ny korttyp först.Byt namnDöp om korttyp...Byt namn på kortlekErsätt din samling med en tidigare säkerhetskopia?Spela upp ljud igenSpela upp din egen röst igenPositionera omPositionera om nya kortPositionera om...Kräv en eller fler av dessa etiketter:Schemalägg på nyttSchemalägg igenSchemalägg kort baserat på mina svar i denna kortlekÅteruppta nuByt textriktning (RTL)Återställ till säkerhetskopiaÅterställde till status innan '%s'.RepeteraAntal repetitionerRepetitionstidRepetera i förvägRepetera i förväg förRepetera glömda kort från de senasteRepetera glömda kortHur ofta du svarar rätt beroende på tidpunkt på dagen.RepetitionerHögerSparaSpara aktuellt filter...Spara PDFOmfång: %sSökSök inom formatering (långsamt)VäljMarkera &allaVälj ¬erVälj etiketter att exkludera:Den valda filen var inte i UTF-8-format. Se avsnittet i manualen om att importera.Selektiva studierSemikolonServern hittades inte. Antingen är din anslutning nedkopplad, eller så blockerar ditt antivirus/brandvägg Anki från att ansluta till internet.Låt alla kortlekar under %s använda denna alternativgrupp?Ställ in för alla underkortlekarSätt förgrundsfärg (F7)Shift-knappen hölls ned. Hoppar över automatisk synkronisering och laddning av tillägg.Genväg: %sKortkommando: VänsterpilKortkommando: Högerpil eller EnterGenväg: %sVisa %sVisa svarVisa dubletterVisa svarstimerVisa nya kort efter repetitionerVisa nya kort innan repetitionerVisa nya kort i den ordning de lades tillVisa nya kort i slumpmässig ordningVisa ny repetitionstid ovanför svarsknapparnaVisa återstående antal kort under repetitionSidopanelStorlek:Vissa relaterade eller gömda kort sköts upp till en senare session.Vissa inställningar blir aktiva först efter att du startat om Anki.Vissa uppdateringar ignorerades eftersom nottypen har ändrats:SorteringsfältSortera efter detta fältDen här kolumnen går inte att sortera efter. Välj en annan.MellanslagStartposition:Ursprunglig lätthetStatistikStatistikSteg:Steg (i minuter)Steg måste vara siffrorStoppar...Studerat idagStuderaStudera kortlekStudera kortlek...Studera nuStudera efter korttillstånd eller etikettStilStil (delas mellan kort)Nedsänkt (Ctrl+=)XML-export för Supermemo (*.xml)Upphöjd (Ctrl++)UteslutenUteslut kortUteslut notUteslutetUteslutna+GömdaSynkroniseraSynkronisera även ljud och bilderSynkning misslyckades: %sSynkningen misslyckades; ej ansluten till Internet.Synkning kräver att klockan i din dator ställs om korrekt. Ställ om den och försök igen.Synkar...TabbTagga baraEtiketterMålkortlek (Ctrl+D)Målfält:TextText separerad med tabbar eller semikolon (*)Kortleken finns redan.Det fältnamnet används redan.Det namnet används redan.Tidsgräns överskriden vid anslutning till AnkiWeb. Kolla din nätverksanslutning och försök igen.Den förvalda konfigurationen kan inte tas bort.Standardkortleken kan inte tas bort.Hur korten är fördelade i din kortlek/dina kortlekar.Nedladdningen var korrupt. Vänligen försök igen.Det första fältet är tomt.Det första fältet i nottypen måste paras ihop.Det följande tecknet kan inte användas: %sFramsidan av detta kort är tom. Vänligen kör Verktyg>Tomma kortDet du skrivit skulle göra att alla kort har en tom fråga.Antalet nya kort du lagt till.Antalet repetitioner du gjort.Hur många repetitioner som du måste göra senare.Antalet gånger du tryckt på varje knapp.Rättigheterna på ditt systems tillfälliga mapp är felaktiga, och Anki kan inte korrigera dem automatiskt. Vänligen sök efter "temp folder" (på engelska) i Anki-manualen för mer information.Den angivna filen är inte en giltig .apkg-fil.Den givna sökningen matchade inga kort. Vill du ändra den?De ändringar du försöker göra kommer att kräva en fullständig uppladdning av databasen när du synkroniserar din samling nästa gång. Om du har gjort repetitioner eller har andra ändringar som väntar på andra enheter som inte har synkroniserats hit ännu, kommer de att gå förlorade. Vill du fortsätta?Hur lång tid det tagit att repetera korten.Det finns flera nya kort tillgängliga, men gränsen för antalet nya kort per dag är nådd. Du kan ändra detta i inställningarna, men kom ihåg att ju fler nya kort du för in, desto tyngre blir arbetsbördan med fler repetitioner under den närmsta tiden.Det måste finnas minst en profil.Du kan inte sortera på denna kolumn, men du kan söka efter enskilda korttyper såsom "card:1".Denna kolumn kan inte sorteras efter, men du kan söka efter specifika kortlekar genom att klicka på en till vänster.Denna fil verkar inte vara en giltig .apkg-fil. Om du får detta fel med en fil du laddat ned från AnkiWeb, har nedladdningen troligtvis misslyckats. Försök igen, och om problemet kvarstår, försök igen med en annan webbläsare.Denna fil finns redan. Är du säker på att du vill skriva över den?Denna mapp sparar all din Anki-data på en plats, för att underlätta säkerhetskopior. För att säga åt Anki att använda en annan plats, vänligen se: %s Detta är en specialkortlek för att studera utanför det vanliga schemat.Det här är ett {{c1::exempel}} på en lucktext.Detta kommer att skapa %d kort. Fortsätt?Detta kommer att skapa %d kort. Fortsätt?Detta kommer att ta bort din nuvarande samling och ersätta den med data från filen du importerar. Är du säker?TidTidsgräns för tidsfönsterAtt repeteraFör att utforska tillägg, klicka på bläddra-knappen nedan.

När du hittat ett tillägg som du tycker om, klistra in dess kod nedan. Du kan klistra in flera koder, avskiljda med mellanslag.För att göra en existerande not till en lucktext måste du ändra korttypen till 'Lucktext' först, via Redigera>Ändra nottyp.För att se dem nu, klicka på knappen "Visa gömda" nedan.För att studera utanför det vanliga schemat, tryck på knappen Anpassade studier nedan.IdagGränsen för hur många kort du får repetera per dag är nådd, men det finns fortfarande kort att repetera. För optimal inlärning överväg att öka gränsen i inställningarna för den här gruppen.Växla aktiveradeVäxla markeradeÄndra status för uteslutningTotaltSammanlagd TidTotalt antal kortTotalt antal noterBehandla inmatning som ett reguljärt uttryckTypSkriv svar: okänt fält %sKan inte importera från en skrivskyddad fil.Kan inte flytta existerande fil till papperskorgen - prova att starta om din datorVisa gömdaStryk under text (Ctrl+U)ÅngraÅngra %sOkänt filformat.OseddaUppdatera existerande noter när det första fältet matcharUppdatera följande tillägg?Uppdaterat %(a)d av %(b)d befintliga noter.Ladda upp till AnkiWebLaddar upp till AnkiWeb...Används på kort men saknas i mediamappen:Användare 1Version %sVisa sida med tilläggVisa filerVäntar på att redigeringen ska avslutas.Varning, luckorna visas bara som en lucktext om korttypen är inställd på 'Lucktext'När du lägger till, använd nuvarande kortlek som förvalHela samlingenVill du hämta hem den nu?Skrivet av Damien Elmes, med patchar, översättningar, test och design av:

%(cont)sDu använder korttypen 'Lucktext' men har inte lagt till några luckor. Vill du verkligen fortsätta?Du har många kortlekar. Vänligen se %(a)s. %(b)sDu har inte spelat in din röst ännu.Du måste ha minst en kolumn.UngaUnga+NyaDina ändringar kommer påverka flera kortlekar. Om du endast vill ändra nuvarande kortlek, vänligen lägg till en ny alternativgrupp först.Filen med din samling verkar vara korrupt. Detta kan inträffa när filen kopieras eller flyttas medan Anki är öppet, eller när samlingen lagras på en nätverks- eller molnenhet. Om problemet kvarstår efter att ha startat om din dator, öppna en automatisk säkerhetskopia från profilskärmen.Din samling är i ett inkonsekvent skick. Kör Verktyg>Kontrollera databas, och synka sedan igen.Din samling eller en mediafil är för stor för att synka.Din samling laddades framgångsrikt upp till AnkiWeb. Om du använder några andra enheter, synka dem nu och välj att ladda ned den samling du just har laddat upp från denna dator. Efter att du gjort det, kommer framtida repetitioner och tillagda kort att införlivas automatiskt.Dina kortlekar här och på AnkiWeb skiljer sig från varandra på ett sådant sätt att de inte kan sammanfogas, och det är nödvändigt att skriva över kortlekarna på den ena sidan med kortlekarna på den andra. Om du väljer ladda ned, kommer Anki att ladda ned samlingen från AnkiWeb, och alla ändringar du har gjort på din dator sedan den synaste synkningen kommer att gå förlorade. Om du väljer ladda upp, kommer Anki att ladda upp samlingen till AnkiWeb, och alla ändringar du har gjort på AnkiWeb eller på dina andra enheter sedan den synaste synkningen till den enheten kommer att gå förlorade. När alla enheter är synkade, kommer framtida repetitioner och tillagda kort automatiskt att sammanfogas med varandra.Din brandvägg eller ditt antivirusprogram förhindrar Anki från att ansluta till sig självt. Lägg till ett undantag för Anki.[ingen kortlek]säkerhetskopiorkortkort från kortlekenoch använd urvalsamlingddagarkortlekkortlekens livdubletthjälpdöljtimmartimmar efter midnattförsökmindre än 0,1 kort/minutparades ihop med %sparades ihop med etiketterminminutermånrepetitionersekunderstatistikdenna sidawhela samlingen~anki-2.1.0+dfsg~b36/locale/szl/000077500000000000000000000000001323611211500161265ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/szl/LC_MESSAGES/000077500000000000000000000000001323611211500177135ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/szl/LC_MESSAGES/anki.mo000066400000000000000000000010241323611211500211670ustar00rootroot00000000000000$,89Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-08-28 20:38+0000 Last-Translator: FULL NAME Language-Team: Silesian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>=2 && n<=4 ? 1 : 2; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) anki-2.1.0+dfsg~b36/locale/th/000077500000000000000000000000001323611211500157315ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/th/LC_MESSAGES/000077500000000000000000000000001323611211500175165ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/th/LC_MESSAGES/anki.mo000066400000000000000000000200261323611211500207750ustar00rootroot000000000000004L  $ & 0 C 8U   " $ $ & "F i z " $ $ $ ) J _ w         %+/6 <G Yd|  $-4; COU[ aot |         *17<AGK_ fpvy    #%*08:&  $=`O%(((>.g4""5:X<%1(( Q^w   1CTqF"L@+Z!- (*<>Nj3$!$2W jw0'  (-;i|     $ )3$Fk{!!  ,NB3F bo!   , B!Ln   y$hR,/ST{Z-oAk+G.CDsJ_mw\3q f%5NFcr O :Q&;<VK'ge~H@)^t0]u(!8I42l Y6}`9i[BW?Pj|*>Uva#LE "1n=Xx bpzM7d (1 of %d)%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s year%s years&About...&Edit&Export...&File&Find&Go&Guide&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Support Anki...&Tools&Undo(%s correct)(end)/1 month:AddAdd TagsAgainAll FieldsAnkiAverageBackBackupsBrowseBuildCancelCards...CenterChangeChangedChecking...CloseColonCommaConnecting...CopyCreatedCtrl+Alt+FCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+ZCumulativeCutDateDeauthorizeDecksDeleteDelete NoteDescriptionDialogE&xitEasyEditEmptyEndError executing %s.ExportExport...ExtraF1FieldsFilter:Find DuplicatesForecastFrontHoursIntervalLearningLeftMinutesPercentagePositionRandomReviewReviewsRightSuspendedTextTotalTotal TimeUnseenddayshoursminuteswProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:01+0000 Last-Translator: Damien Elmes Language-Team: Thai MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) Language: th (1 จากทั้งหมด %d)%% ถูกต้อง%(a)0.1f %(b)s/วัน%(a)0.1fs (%(b)s)การบันทึก %(a)d จาก %(b)d ได้ปรับปรุงแล้ว%.01f บัตรคำ/นาที%d บัตรคำลบแล้ว %d บัตรคำส่งออก %d บัตรคำนำเข้า %d บัตรคำิเรียน %d บัตรคำในอัพเดต %d ชุดคำศัพท์%d โน๊ตเพิ่ม %d โน๊ตลบ %d โน๊ตส่งออก %d โน๊ตนำเข้า %d โน๊ต%d โน๊ต ไม่เปลี่ยนแปลง%d โน๊ตได้รับการอัพเดตทบทวน %d รายการเลือกอยู่ %d รายการคัดลอก %s รายการ%s วัน%s ชั่วโมง%s นาที%s นาที%s เดือน%s วินาที%s ปี&เกี่ยวกับ...&แก้ไข&ส่งออก...&แฟ้ม&ค้นหา&ไ&ปยัง&แนะนำ&ช่วยเหลือ%นำเ&ข้า...%กลับการเลือกเป็นตรงข้าม&บัตรคำถัดไป&เปิดโฟล์เดอร์โปรแกรมเสริมตั้&งค่า...&บัตรคำก่อนหน้า&สนับสนุน Anki...&เครื่องมือ&เลิกทำ(ถูกต้อง %s บัตรคำ)(เสร็จสิ้น)/1 เดือน:เพิ่มเพิ่มแท็กอีกครั้งช่องข้อมูลทั้งหมดAnkiต้นทุนเฉลี่ยย้อนกลับสำรองข้อมูลเรียกดูสร้างโปรแกรมยกเลิกไพ่...กึ่งกลางเปลี่ยนมีการเปลี่ยนแปลงกำลังตรวจสอบ...ปิดมหัพภาคคู่จุลภาคกำลังเชื่อมต่อ...คัดลอกสร้างเมื่อCtrl+Alt+FCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+Zการเพิ่มสะสมตัดวันที่ยกเลิกอนุญาตสำรับลบออกลบบันทึกย่อคำอธิบายกล่องโต้ตอบ&ออกง่ายแก้ไขว่างเปล่าสิ้นสุดเกิดข้อผิดพลาดขณะเรียกใช้ %sส่งออกหมดอายุ...เพิ่มเติมF1ช่องข้อมูลตัวกรอง:ค้นหาภาพที่ซ้ำกันประมาณการหน้าชั่วโมงช่วงเวลาการเรียนรู้ซ้ายนาทีร้อยละตำแหน่งสุ่มบทวิจารณ์ตรวจทานขวาถูกแขวนแล้วข้อความทั้งหมดเวลารวมยังไม่อ่านงวันชั่วโมงนาทีสัปดาห์anki-2.1.0+dfsg~b36/locale/tlh/000077500000000000000000000000001323611211500161055ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/tlh/LC_MESSAGES/000077500000000000000000000000001323611211500176725ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/tlh/LC_MESSAGES/anki.mo000066400000000000000000000013521323611211500211520ustar00rootroot00000000000000 l    %%sd%sh%sm%smo%ss%syBackCancelProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2014-04-08 07:51+0000 Last-Translator: Damien Elmes Language-Team: Klingon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n > 1; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) Language: %%sd%sh%sm%smo%ss%syDoHmevanki-2.1.0+dfsg~b36/locale/tr/000077500000000000000000000000001323611211500157435ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/tr/LC_MESSAGES/000077500000000000000000000000001323611211500175305ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/tr/LC_MESSAGES/anki.mo000066400000000000000000001561741323611211500210250ustar00rootroot00000000000000\,; ;;;";; ;;;8;&<7<J<"[<$~<$<&<"<=4%=2Z==="=$=$>$(> M>n>>>>>>>>? ?%?6?:?>?B?G?K? O?Y?p?y? ????? ?? ?? ???@@@0@7@0=@ n@{@@ @ @@@@@@gAiAlAtA{AAAAATAA,A(B>B!]BBfBB C!C 3C @CKC[CmCCeCC7D DD5DX4EYE%Ek F yF FFF F FF F FFFG G G$GCG IGUG eG oG%zGKGGH"IJ JJ-JKRKvK7]L LwLEM@_MMMMRMNN#N#NNO(/OXO `OmO OOOO O OOOOPP&P9PIPOP TP ^P)hP'PPvQ}QQQQQ Q Q QQ QQQR3R:RSNRRRR R RRRR"S5S=S&MS tSS SS S SSSSS-STT($T5MT TTUU8#U5\UPU7UV2V 7VCV[V cVnVuV|VVVV V V V V V VVV V V W W 1W>W QW^WsWwWW W W WW/WWWX%XAX HX UX aX nX zX X XX,X(X Y+YF@YNYPY>'ZPfZZ]Z [8*[c[j[[[[ [[[[ [ [[ [ [ \ \ \\%\)4\0^\\\4\!\]]#)]M]c]|]]^#^ *^.4^c^i^k^n^ ^ ^^^ ^^ ^^^^^ __/_D_U_ \_ g_t_N____ ``````` `aaa.a >aIaNa banasaza aaaaa.aFa&b?b _b kb4xbbb b1bcc5cDc*Xc cc cc"c"d #dDdYdhd|dd d d)dd]e2yeeeeeee f f f+f>fDf<Vff ffff f5fgg (g4g;g Pg Zgfgmg~ggggggg g ghNhdh jhwhhhh hh hh h hhh i#i6i+Lixi#i!iii i i<i -j:j]Jjaj k!k @kNkVkYk,kkk#`lkll lmmm*m 9mDm Jm Vm`mxmm mmmm m mn, n#MnVqn8nEoGo^o*{o0ooo, p7p-Pp+~p8pp ppqq#-q0Qq qqqqq qqqqqr rr8r@ri`rr r rr rs s")s Ls1Ws ss ss s s sst-5tctktqtvt tttt t ttVt@u PuZuuGu :v[vlv"v vv vvvvw&wDw*cw'ww6w8w ,x!7x?Yxxx xxxxx xx y y'yFycy ky xy yy yy!ydy OzZz^zgzlz zz(zz zzX{+l{"{+{{0|+2|'^|*|(|1| },}I}A~'1#Y}8tr= M  ł т݂'(-5JQc{ "$σ"5SX]bgmDŽτ Մ߄ Æ'͆[.!7߇3CK-]͈9+ es51()Bl! ŠҊ  )9=AEJN R` s } Ƌ֋  ,:P fp9y ͌ ӌ  %)͍ύҍ׍ލti+k-Ŏ( l"$ Տ 5iF=QPgi4-ѓ!  5 ER bnw!Ҕ 9T>"i AFWiy|NzEL mG>՛*W3g#1Ii:ڝ 8IN `mv|Ȟ  .37k*16>EL T a kxϠ<נT+  ӡ#"1)Gq ¢2Ȣ-4J,R/ǣQZBb4Xڤ03d| ťХץޥ   ! . ;HOV ]gw Φ2Ҧ !1H8N 3  )8P/m3*Ѩ$9!F[RDK:e RS[o  ëɫ ث ,8PX-jG >%Dj+έ$ۮKNQSVr  ˯֯ݯ  ,BT ZdzW %18ر߱  &< PZbr Ʋ3βQ!T(v8ų #=<z=մB NYv&&6ص6FW iw ,նp;Ʒ*׷ 3<EZ jtX  "91 kyƹ׹)20c~Sĺ  )59= BOcu ƻ߻ +E'\+  ʼ?ּ%m;[8 KW]=s*z9=R jv  # +#7[w ~(1/`=vX '0HAy-14.MF|M  #-J"a9 *06?P_p Wi /$G5} # *%!P5r  #!]> XRy$" > KXh~33)')BQ4C?T#eC">NW)g/$ $#,P6pz"2 8 FP eq;w"n*t1.*-&X(,#3M4*Gr;kp WGN  #. 2.S   !!>]{F36 >KRajzKZ'i{A'h:M39$NFG=>kP_\Dkv,FU8B;GCX/ .fUdu96>ZS"]{3L[y  yg E*4m D%5eQ+:.Hz&vtp}xB@2>3z-;K@<O$py^PR6du<a Pr.GXLRA` Z:"~76jm1Cu|c1eg%\r_ `~SE?xh14J9~5<a=pvs50VN0 Yoj cs&!2qk}amw^nwWx\Wb^_bNqK?/2 RlI]ftFg8XQ[ JYM,T;7Wih4+ $U[%fLJn)=0er*Q  V so(V-H#oAD{lzB+)I T]El@` jOq/HSnMT8O"wc!b?&##}|t()|!I(*YC7,di-' (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:RescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightSaveSave PDFScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:StatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...StudyStudy NowStudy by card state or tagStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There must be at least one profile.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTo ReviewTo study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTypeType answer: unknown field %sUnable to import from a read-only file.UndoUndo %sUnknown file format.UnseenUpload to AnkiWebUploading to AnkiWeb...User 1Version %sWaiting for editing to finish.Would you like to download it now?You haven't recorded your voice yet.You must have at least one column.YoungYour collection or a media file is too large to sync.daysdeckhelphidehoursless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesreviewssecondsstatsthis pagewhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-07-05 16:58+0000 Last-Translator: Uygar Demir Koç Language-Team: Turkish MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) Language: tr (%d taneden: 1) (kapalı) (açık) %d kart bulunuyor. %d kart bulunuyor.%Doğru yüzdesi.%(a)0.1f %(b)s/gün%(a)0.1fs (%(b)s)Toplam %(a)d içinden %(b)d not güncellendi.Toplam %(a)d içinden %(b)d not güncellendi.%(tot)s %(unit)s%.01f kart/dakika%d kart%d kart%d kart silindi.%d kart silindi.%d kart dışa aktarıldı.%d kart dışa aktarıldı.%d kart içe aktarıldı.%d kart içe aktarıldı.%d kartın çalışılma süresi:%d kartın çalışılma süresi:%d deste güncellendi.%d deste güncellendi.%d grup%d grup%d medya değişikliği karşıya yükleniyor%d medya değişiklikleri karşıya yükleniyor%d medya dosyası indirildi%d medya dosyaları indirildi%d not%d not%d not eklendi%d not eklendi%d not silindi.%d not silindi.%d not dışa aktarıldı.%d not dışa aktarıldı.%d not içe aktarıldı.%d not içe aktarıldı.%d not değişmedi%d notlar değişmedi%d not güncellendi.%d not güncellendi.%d inceleme%d inceleme%d seçili öğe%d seçili öğe%s kopyası%s gün%s gün%s saat%s saat%s dakika%s dakika%s dakika.%s dakika.%s ay%s ay%s saniye%s saniye%s silinecek%s yıl%s yıl%sd%sh%sm%smo%ss%sy&Hakkında...&Göz at ve Yükle&Ezber...Dü&zenle&Dışa Aktar...&Dosya&Bul&Git&Kılavuz&Kılavuz&Yardım&İçe Aktar...S&eçimi Tersine ÇevirSonraki &Kart&Eklentiler Klasörünü Aç...&Seçenekler...&Önceki Kart&Yeniden Planlamak...&Anki'ye Destek Ol...&Araçlar&Geri Al'%(row)s' içinde %(num1)d alan vardı, beklenen %(num2)d(%s doğru)(Not silindi)(son)(süzgeçli)(öğreniyor)(yeni)(ana kaynak limiti: %d)(lütfen 1 kart seçin)....anki2 dosyaları içe aktarılacak şekilde oluşturulmamıştır. Bir yedeklemeyi geri yüklemeye çalışıyorsanız, kılavuzun "Yedekleme" bölümüne bakın./0d1 ay1 yıl10AM10PM3AM4AM4PM504 ağ geçidi zaman aşımı hatası alındı. Lütfen antivirüs uygulamanızı devre dışı bırakarak deneyin.:%d kart%d kartYedek klasörünü açSiteye git%(pct)d%% (%(y)s içinden %(x)s )%Y-%m-%d @ %H:%MYedekler
Anki her kapandığında ya da senkronize edildiğinde koleksiyonunuzun yedeğini alacak.Dışarıya Aktarım Biçimi:Bul:Yazı BüyüklüğüYazıtipi:İçeride:Dahil:Çizgi Tipi:...İle DeğiştirEşitlemeEşitleme
Henüz etkin değil. Ana pencerede eşitleme düğmesine tıklayarak etkinleştirin.

Hesap Gerekli

Koleksiyonunuzun eşitlenmesi için ücretsiz hesap açmanız gerekiyor. Lütfen hesap açın ve bilgilerinizi yazın.

Anki Güncellendi

Anki %s sürümü çıktı.

Önerileri, hata raporları ve bağışları ile katkı sağlayan herkese büyük teşekkür ediyoruz.Bir kartın kolaylığı gözden geçirirken "iyi" cevabını verdiğinizde belirecek bir sonraki tekrar süresinin büyüklüğüdür.Filtrelenmiş bir deste, alt destelere sahip olamaz.Veritabanı eşitlenirken bir sorun oluştu. Lütfen Araçlar>Veritabanını Kontrol Et'i kullanın, sonra gerçek sorun için tekrar eşitleyin.İptal Edildi: %sAnki HakkındaEkleEkle (kısayol tuşu: ctrl+enter)Alan EkleMedya EkleYeni Deste Ekle (Ctrl+N)Not Türü EkleTersini EkleEtiketleri ekleŞuna ekle:Ekle: %sEklendiBugün Eklenenlerİlk alanın aynısı eklendi: %sTekrarBugün tekrar edilenlerTekrar sayısı: %sBütün DestelerTüm AlanlarTüm kartlar rastgele sıralı (yoğun çalışma tarzı)Bu profil için bütün kartlar, notlar ve medya dosyaları silinecek. Emin misiniz?Alanlarda HTML kodlarına izin verVeritabanına ulaşırken bir hata gerçekleşti. Muhtemel sebepler:: - Antivirus, firewall, yedekleme yada senkronizasyon uygulaması Anki ile çakışıyor olabilir. Söz konusu yazılımı devre dışı bırakmayı deneyin ve problemin çözülüp çözülmediğini gözlemleyin. - Hafızanız dolu olabilir. - Dökümanlar/Anki klasörü ağ sürücüsü üzerinde olabilir. - Dökümanlar/Anki klasöründeki dosyalar yazılabilir olmayabilir. - Hard diskiniz hata veriyor olabilir. Koleksiyonunuzun bozulmadığına emin olmak için Araçlar>Veritabanını Kontrol Et'i çalıştırmak faydalı olacaktır. %s 'i açarken bir hata oluştu.AnkiAnki 2.0 DestesiAnki deste paketiAnki, disk üzerindeki profil klasörünü yeniden adlandıramadığı için profilinizi yeniden adlandıramadı. Lütfen Documents / Anki'ye yazma izninizin olduğundan ve diğer hiçbir programın profil klasörünüze erişemediğinden emin olduktan sonra tekrar deneyin.Anki, soruyla cevap arasında bağlantı kuramadı. Soru ve cevabın yerini değiştirmek için şablonu elle ayarlayın.Anki arkadaştır, akıllı öğrenme sistemidir. Bedava ve açık kaynaktır.Anki AGPL3 lisansı ise lisanslanmıştır. Daha fazla bilgi için lütfen kaynak dağıtımdaki lisans dosyasına bakın.AnkiWeb kullanıcı adı ya da şifresi hatalıydı. Lütfen tekrar deneyin.Kullanıcı Adı:AnkiWeb bir sorunla karşılaştı. Birkaç dakika sonra tekrar deneyin. Sorun devam ederse hatayı bildirin.AnkiWeb sunucusu şu anda meşgul. Birkaç dakika sonra tekrar deneyin.AnkiWeb bakımda. Lütfen birkaç dakika sonra tekrar deneyin.CevapCevap TuşlarıCevaplarBir Antivirus ya da Firewall programı, Anki'nin internete bağlanmasına engel oluyor.İçi boş kartlar silinecek. Bir notun içinde hiç kart yoksa silinecek. Devam etmek istiyor musunuz?Dosya %s içinde çifte giriş var.%s girdisini silmek istediğinizden emin misiniz?En az bir kart tipi gereklidir.En az bir adım gereklidir.Sesi otomatik olarak çalAçma/kapama anında profili otomatik olarak senkronize etOrtalamaOrtalama ZamanOrtalama cevap süresiOrtalama kolaylıkOrtalama çalışılan günOrtalama aralıkGeriArka GörünümüArka ŞablonYedeklerTemelTemel (ve ters kart)Temel (seçimli ters kart)AçTarayıcı GörünümüTarayıcı SeçenekleriYapılandırBuryGizli KartNotu GizleBir sonraki güne kadar ilgili kartları gizleErtesi güne kadar gizli kartlar gözden geçirilirVarsayılan, Anki karakter arasında boş alan tespit ettiğinde, örneğin tab, virgül vb. Eğerr Anki yanlış karakter tespit ettiyse buraya girebilirsiniz. tab tuşunu \t ile kullanın.İptalKartKart %dKart 1Kart 2Kart IDKart ListesiKart tipiKart Tipleri%s için Kart TipleriKart Gizlendi.Kart askıya alındı.Kart bir sömürücüydü.KartlarKartlar filtrelenmiş bir desteye manuel olarak taşınamaz.Düz Metindeki KartlarKartlar incelemenizden sonra otomatik olarak orjinal destelerine döndürülecekler.Kartlar...OrtalaDeğiştir%s değişti :Desteyi DeğiştirNot Tipi DeğiştirNot Tipi DeğiştirNot Tipi Değiştir...Not tipine göre desteyi değiştirDeğiştirildiKontrol & VeritabanıMedya dizinindeki dosyaları kontrol edinKontrol ediliyor...SeçDeste SeçinNot Tipi SeçinEtiketleri SeçinKlon: %sKapatKapatmak ve geçerli veri girişini kaybetmek mi ?KapatKod:Koleksiyon bozuldu. Lütfen kılavuzu okuyun.İki nokta üst üsteVirgülDil ve seçenekler arayüzünü yapılandırTebrikler! Bu desteyi şimdilik tamamladınız.Bağlantı kuruluyor...Bağlantı zaman aşımına uğradı. İnternet bağlantınızda problem olabilir veya ortam dosyanızda çok büyük bir dosya olabilir.Devam EtKopyalaTamamlanmış kartlardaki doğru cevaplar: %(a)d/%(b)d (%(c).1f%%)Doğru: %(pct)0.2f%%
(%(good)d of %(tot)d)AnkiWeb'e bağlanılamadı. Lütfen ağ bağlantınızı kontrol edin ve tekrar deneyin.Ses kaydedilemedi. Lame ve sox'u yüklediniz mi?Dosya kaydedilemedi: %sYoğun ÇalışmaDeste OluşturFiltreli Deste Yaratın...OluşturulduCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZToplamToplam %sToplam CevaplarToplam KartlarMevcut DesteMevcut not tipi:Özel ÇalışmaÖzel Çalışma OturumuKesVeritabanı yapılandırıldı ve optimize edildi.TarihÇalışılan günlerYetkiyi KaldırHata Ayıklama KonsoluDesteBir oturum açıldığında deste içe aktarılacaktır.DestelerAralığı azaltmaÖntanımlıGözden geçirme tekrar gösterilene kadar erteler.SilKartları SilDesteyi kaldırİçeriksizi silNotu SilNotu SilEtiketleri silKullanılmayanları sil%s dan itibaren haneleri sil'%(a)s' kart tipi ve ona ait %(b)s silinsin mi?Bu not kategorisini ve içindeki tüm kartları silKullanılmayan bu not kategorisini kaldırKullanılmayan ortamlar silinsin mi?İçeriksiz %d kart silindi.İçeriksiz %d kart silindi.Şablonu olmayan %d kart silindi.Şablonu olmayan %d kartlar silindi.Not tipi belirlenmemiş %d not silindi.Not tipi belirlenmemiş %d notlar silindi.Kart içermeyen %d not silindi.Kart içermeyen %d notlar silindi.Hatalı alan sayılı %d not silindi.Hatalı alan sayılı %d not silindi.Silindi.Bu desteyi deste listesinden sildiğinizde geri kalan tüm kartlar orijinal desteye geri dönecektir.AçıklamaÇalışma ekranı üzerinde gösterilecek açıklama(sadece mevcut deste için) :PencereAnkiWeb'den indirinAnkiWeb'den indiriyor...VadeSadece geçmiş kartlarYarına kadarKapatKolaylıkKolayKolay ikramiyeKolay süreDüzenle"%s" ögesini düzenleMevcut olanı düzenleHTML'yi düzenleDüzenlendiYazı tipi düzenlemesiBoşaltKartları kaldırBoş kart numaraları: %(c)s Alanlar: %(f)s Boş kartlar bulundu. Lütfen Araçlar>Boş Kartlar'ı çalıştırın.İlk alanı boşalt :% sSonlandırDesteye yeni % s kartları yerleştirin, ya da boş bırakın:Yeni kart sırasını girin (1...%s):Eklenecek etiketleri girin :Silinen etiketleri girin :%(id)s indirilirken hata oluştu: %(error)sİndirme hatası: %sBaşlatılma hatası: %sGüvenli bir bağlantı kurulurken hata oluştu. Buna genellikle antivirüs, güvenlik duvarı veya VPN yazılımı veya İSS'nizle ilgili sorunlar neden olur.%s çalıştırırken bir hata oldu.%s çalıştırma hatasıDışarıya AktarDışarıya Aktar...%d medya dosyası dışa aktarıldı%d medya dosyaları dışa aktarıldıEkFF1Dosyanın %d alanıAlan eşleştirmeAlan adı:Alan:Alanlar%s için alanlarİle ayrılmış alanlar: %sAlanlar...FiltreFiltre:FiltrelenmişFiltrelenmiş Deste %d&Kopyaları Bul...Kopyaları BulBul ve Değ&iştir...Bul ve DeğiştirBitirİlk Kartİlk Gözden Geçirmeİlk alan eşleşti: %sGeçersiz özelliklerle %d kart onarıldı.Geçersiz özelliklerle %d kart onarıldı.Onarılan not türü: %sÇevirDosya önceden bulunmakta.Yazı tipi:DipnotGüvenlik sebebiyle, '%s' kartlarda izin verilmemektedir. Komutu farklı pakete taşıyarak ve bu paketi LaTeX başlığında içe aktararak kullanabilirsiniz.TahminForm%(b)s içinde %(a)s bulundu.ÖnÖn GörünümÖn ŞablonGenelÜretilmiş dosya: %sÜretildiği yer %sDeste BulİyiydiSüreyi bitirmeHTML DüzenleyiciZorduBaşlıkYardımEn kolayGeçmişAna SayfaSaatlik AnalizSaatler30 gözden geçirmeden daha az gösterilen saatler.Eğer katkıda bulunmuş ve listede yoksanız, lütfen bizimle iletişim kurunuz.Eğer her gün çalıştıysanızCevap süresinden uzun olanları yok sayYok sayma durumuAlanı gözardı et.İlk alanı mevcut not ile eşleşen satırları yok sayBu güncelemeyi yoksayİçeri AktarDosyayı İçeriye AktarMevcut not aynı ilk alana sahip olmasına rağmen içe aktarİçe Aktarma başarısız. İçe aktarma gerçekleştirilemedi. Hata ayıklama bilgisi: İçe aktarma seçenekleriİçe aktarma tamamlandı.Medya dosyasında, ancak hiçbir kart tarafından kullanılmıyor:Ortam EkleZamanlama bilgisini dahil etEtiketleri dahil etBugünün yeni kart limitini artırınBugünün yeni kart limitini artırınBugünün gözden geçirilmiş kart limitini artırınBugünün gözden geçirilmiş kart limitini artırınSüreyi artırmaEklenti yükleyinArayüz dili:AralıkSüre ayarlayıcıSürelerHatalı kod.Geçersiz dosya. Lütfen yedekten yükleyin.Kartınızda geçersiz özellik bulundu. Lütfen Araçlar>Veritabanını Kontrol Et'i kullanın, ve problem tekrarlanırsa, lütfen destek sitesine sorun.Geçersiz düzenli ifade.Geçersiz arama - lütfen yazım hatalarını kontrol edin.Durdurulmuştur.Ctrl+Shift+T ile etiketlere geçiş yapınKoruLaTeXLaTeX eşitliğiLaTeX matematik ort.SapmalarSon KartSon Gözden GeçirmeSon eklenen ilkÖğrenmeİleri limiti öğrenmeÖğrenme: %(a)s, Gözden Geçirme: %(b)s, Tekrar Öğrenme: %(c)s, Filtrelenmiş: %(d)sÖğrenmeSömürü hareketiSömürü eşiğiSolSınırlaYükleniyor...Yerel koleksiyonun kartları yok. AnkiWeb'den indirilsin?En uzun süreAlanda bakın:En düşük kolaylıkYönetNot Tiplerini Yönet...Eşle %sEtiketleri EşleGeçmişEn fazla süreEn fazla gözden geçirme/günİçerikEn düşük süreDakikaYeni kartları ve gözden geçirmeleri karıştırMnemosyne 2.0 Deste (*.db)DiğerEn yüksek sapmalarKartları TaşıKartları desteye taşı:Çok karakterli ayırıcılar desteklenmiyor. Lütfen yalnızca bir karakter girin.N&oteAd mevcut.Deste adı:Ad:AğYeniYeni KartlarSadece yeni kartlarYeni kartlar/günYeni deste adı:Yeni süreYeni ad:Yeni not tipi:Yeni seçenekler grubu adı:Yeni sıralama (1...%d):Bir sonraki gün başlarHenüz zamanı gelmiş kart yok.Girdiğiniz kritere uygun kart bulunamadı.Boş kart bulunamadı.Bugün çalışılan geçmiş kart yok.Kullanılmayan ya da eksi belge bulunmadı.NotNot KimliğiNot TipiNot TipleriNot ve ona ait %d kart silindi.Not ve ona ait %d kart silindi.Not saklandı.Not askıya alındı.Not: İçerik yedeklenmedi. Güvenlik için lütfen Anki klasörünüzün periyodik yedeklemesini oluşturun.Not: Bazı tarihçeler eksik. Daha fazla bilgi için lütfen tarayıcı belgelerine bakın.Düz Metinli NotlarEn az bir alan gereken notlar.Notlar etiketlndi.HiçbirşeyTamamEn eski görülen ilkBir sonraki senkronizasyonda değişiklikleri tek yönlü yapBir ya da daha fazla not içe aktarılamadı, çünkü kart oluşturmadılar. Bu boş alanlar olduğundan ya da metin dosyasındaki içeriğin doğru alanlarla eşleştirilmediğinden kaynaklanabilir.Sadece yeni kartlar tekrar sıralanabilir.Sadece bir alıcı aynı anda AnkiWeb'e ulaşabilir. Eğer önceki bir eşitleme başarısız olduysa, lütfen birkaç dakika sonra tekrar deneyin.AçOptimize ediliyor...İsteğe bağlı limit:Seçenekler%s için seçeneklerSeçenekler grubu:Seçenekler...SıralamaSıralama eklendiSıralama sonuArka şablonu değiştir:Yazi tipini değiştir:Ön şablonu değiştir:Şifre:YapıştırPano resmini PNG olarak yapıştırPauker 1.8 Dersi (*.pau.gz)YüzdePeriyot: %sYeni kart sırasının sonuna yerleştirGözden geçirme sırasına aralıkla yerleştir:Lütfen ilk olarak başka bir not tipi ekleyin.Lütfen mikrofon bağlayın ve diğer uygulamaların ses cihazını kullanmadığına emin olun.Lütfen bu notu düzenle ve biraz boşluk doldurma ekle. (%s)Lütfen bir profil açıkken ve Anki meşgul değilken sağlayın, sonra tekrar deneyin.Lütfen PyAudio yükleyinLütfen önce bir profil açın.Lütfen %s klasörünü kaldır ve yeniden dene.Dil değişimin tamamlamak için lütfen Anki'yi yeniden başlat.Lütfen Araçlar>Boş Kartlar çalıştırınLütfen bir deste seçinLütfen sadece bir not türünden kartlar seçin.Lütfen bir şey seçin.Lütfen Anki'nin son sürümüne güncelleyin.Lütfen bu dosyayı içe aktarma için Dosya>İçe Aktar'ı kullanın.Lütfen AnkiWeb'i ziyaret edin, destenizi güncelleyin, sonra tekrar deneyin.KonumSeçeneklerÖnizlemeSeçilen Kartı Önizle (%s)Yeni kartları önizleSon eklenen yeni kartları önizle%d medya dosyası işlendi.%d medya dosyaları işlendi.İşleniyor...ProfillerVekil sunucu kimlik doğrulaması gerekli.SoruAşağı sırala: %dYukarı sırala: %dÇıkRastgeleKarışık SıraDeğerlendirmeYeniden oluşturKendi Sesiniz KaydedinKayıtediliyor...
Zaman:%0.1fTekrar ÖğrenEklerken son girişi hatırlaBu kart türünü kaldırmak bir veya daha fazla notun silinmesine neden olabilir. Lütfen önce yeni bir kart türü oluşturun.Yeniden AdlandırDesteyi Yeniden AdlandırSesi TekrarlaKendi Sesinizi TekrarlayınYeniden KonumlandırYeni kartları yerleştirYeniden konumlandır...Bu etiketlerden bir veya daha fazlası gerekli:Yeniden PlanlamaBu destedeki cevaplarım üzerine dayanarak kartları yeniden programlaDevam etYazı yönünü değiştir (RTL)'%s' öncesi duruma geri çevrildi.Gözden GeçirGözden Geçirme SayısıGözden Geçirme Zamanıİleride gözden geçirÖnceden unutulan kartları gözden geçirUnutulan kartları gözden geçirGünün her saati için başarı oranını inceleyin.TekrarlarSağKaydetPDF KaydetKapsam: %sAraBiçimlemeyi içererek ara (yavaş)Seç&Tümünü SeçSeçim & NotlarGeride kalan etiketleri seçSeçilen dosya UTF-8 biçiminde değildi. Lütfen klavuzdaki içe aktarma bölümüne bakın.Seçmeli ÇalışmaNoktalı VirgülSunucu bulunamadı. Bağlantınız kapalı veya virüs korucucu/güvenlik duvarı yazılımı Anki'nin internete bağlanmasına engel oluyor olabilir.Bütün alt destler için uygulaShift tuşu basılı tutuldu. Otomatik sekronu ve eklenti yüklemesini atlanıyor.Varolan kartların yerini değiştirKısayol tuşu: %sKısayol tuşu: Sol okKısayol tuşu: Sağ ok yada EnterKısayol: %s%s'i GösterCevabı GösterYinelenenleri GösterCevap zamanını gösterYeni kartları gözden geçirmelerden sonra gösterYeni kartları gözden geçirmelerden önce gösterYeni kartları eklendiği sırada gösterYeni kartları rastgele sırada gösterYanıt düğmelerinin üstünde sonraki inceleme süresini gösterİnceleme sırasında kalan kart sayısını gösterBoyut:Bazı ayarlar Anki yeniden başlatıktan sonra geçerli olacaktır.Not türü değiştiğinden bazı güncellemeler yok sayıldı:Sıralama AlanıTarayıcıda bu alana göre sıralaBu sütunda sıralama desteklenmiyor. Lütfen başka birini seçin.BoşlukBaşlangıç konumuİstatistiklerİstatistiklerAdım:Adımlar (dakikada)Adımlar sayı olmalıdır.Durduruluyor...ÇalışŞimdi ÇalışKart durumuna veya etikete göre çalışŞekillendirme (kartlar arasında paylaşılan)Supermemo XML dışa aktarma (*.xml)Askıya AlKartı Askıya AlNotu Askıya AlAskıya AlındıEşitleSes ve resimleri de senkronize edinEşitleme başarısız oldu: %sEşitleme başarısız oldu; İnternet çevrimdışı.Eşitleme, bilgisayarınızdaki saatin doğru şekilde ayarlanmasını gerektirir. Lütfen saati düzeltip tekrar deneyin.Eşitleniyor...SekmeSadece EtiketEtiketlerHedef Deste (Ctrl+D)Hedef alan:MetinSekmeler veya noktalı virgüllerle ayırılmış metin (*)O deste zaten var.Bu alan adı zaten kullanılmış.Bu ad zaten kullanılmış.AnkiWeb ile bağlantı zaman aşımına uğradı. Lütfen ağ bağlantınızı kontrol edin ve tekrar deneyin.Varsayılan yapılandırma kaldırılamaz.Varsayılan deste silinemez.İndirme işlemi bozuldu. Lütfen tekrar deneyin.İlk alan boş.Not türünün ilk alanı eşleştirilmelidir.Aşağıdaki karakter kullanılamıyor: %sEklediğiniz yeni kartların sayısı.Yanıtladığınız soruların sayısı.Gelecekte yapılacak incelemelerin sayısı.Her düğmeye bastığınız sayı.Sisteminizin geçici klasörü üzerindeki izinler yanlış ve Anki bunları otomatik olarak düzeltemiyor. Daha fazla bilgi için lütfen Anki el kitabında 'geçici klasör' arayın.Sağlanan dosya geçerli bir .apkg dosyası değil.Sağlanan arama, hiçbir kartla eşleşmedi. Gözden geçirmek ister misiniz?İstenen değişiklik, koleksiyonunuzu bir sonraki senkronize ettiğinizde veritabanının tam bir şekilde yüklenmesini gerektirir. Başka bir cihazda henüz senkronize edilmemiş bekleyen incelemeler veya diğer değişiklikleriniz varsa, bunlar kaybolacaktır. Devam et?Soruları cevaplamak için harcanan süre.En az bir profil olmalı.Bu dosya geçerli bir .apkg dosyası gibi görünmüyor. Bu hatayı AnkiWeb'den indirilen bir dosyadan alıyorsanız, indirme başarısız olmuş olabilir. Lütfen tekrar deneyin ve sorun devam ederse lütfen farklı bir tarayıcıyla yeniden deneyin.Bu dosya var. Üzerine yazmak istediğinizden emin misiniz?Bu klasör, yedeklemeleri kolaylaştırmak için tüm Anki verilerinizi tek bir yerde depolar. Anki'ye farklı bir yer kullanmasını söylemek için, lütfen bakın: %s Bu, mevcut koleksiyonunuzu silecer ve içe aktardığınız dosyadaki verilerle değiştirir. Emin misiniz?ZamanİncelenecekNormal programın dışında çalışmak için aşağıdaki Özel Eğitim'i tıklayın.BugünBugünün inceleme sınırına ulaşıldı, ancak gözden geçirilmek için bekleyen kartlar var. Optimum hafıza için, seçeneklerdeki günlük limiti arttırmayı düşünün.ToplamToplam SüreToplam kartToplam notTipCevap yazın: bilinmeyen alan %sSalt okunur bir dosyadan içe aktarılamıyor.Geri alGeri al %sBilinmeyen dosya biçimi.OkunmamışAnkiWeb'e yükleAnkiWeb'e yükleniyor...Kullanıcı 1Versiyon %sDüzenlemenin bitmesi bekleniyor.Şimdi indirmek istermisin ?Sesinizi henüz kaydetmediniz.En az bir sütun olmalıdır.GençKoleksiyonunuz veya bir medya dosyası eşitlenemeyecek kadar büyük.günlerdesteyardımgizlesaatDakikada 0,1'den az karteşlenmiş %sEşlenmiş Etiketlerdkdakîkaİncelemelersaniyeİstatistiklerbu sayfatüm koleksiyon~anki-2.1.0+dfsg~b36/locale/uk/000077500000000000000000000000001323611211500157355ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/uk/LC_MESSAGES/000077500000000000000000000000001323611211500175225ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/uk/LC_MESSAGES/anki.mo000066400000000000000000002575531323611211500210220ustar00rootroot00000000000000%l1B B BBB"%BHB JBTBgBB8BBBB"C$)C$NC&sC"CC4C2D8DID"fD$D$D$D DE.EFENE]EnEEEE EEEEEEEE EFF"F2F;F AFLFRFXF\F cFmF sF~FF FFFFFFFGGG0G PG]GlG rG }GGGGGGIHKHNHVH]HbHgHkHoHTsHH,H(H I!?IaIfyII IJ J "J-J=JOJdJe{JJ7KHK NN5)NX_NYN%Ok8O O OOO O OO P PP'P/P6P>P DP$PPuP {PPP P P%PKP-Q1BQtQ"XS{S SSSTRUvYU7U VwVEV@VWW)WR1WWX#"X#FXjX XX(XX XY Y"Y;YLY QY ^YlYtYzYYYYYYY Y Y)Y'&ZNZ [[[[%[,[ 4[ >[ I[ S[ ^[i[ {[[[[3[[S[L\U\\\ c\ q\}\\\\\"\] ]&] @]L] S]_] p]|] ]]] ]]]]-]^^"^ )^(7^5`^ ^^(_1_86_5o_P_7_.`E` J`V`n`v`}```` ` ` `````````` ` a a "a /a dPdNe]We e8eeff3f7f FfSfYf^f cf nf|f f ff fff)f0fg2g46g!kgggggggh{hh h.hhhhh h i ii i)i AiKiRiZicitiiiii i iiNi"Djgj{jjjjjTk]kbk|k kkkkk kkk kkkl ll l%l6l.ʈF 'P*x(1̉,I3'#K#7e[8C(ŏraf yu/M)w} $ / ;!Gin'Ȓݒ.&:L,d U“$="NSq0Ŕ$"> D{P^̕5+aUj ʙҙؙ     ).39MTo ɚ˚ܚޚ ݜ b{ }B~!/e}G`şi&a% "5XkC}3ehC5ĥ !-*3X413'#Cgkosz~ 4 ħ)ҧ) F P^n ¨"Ϩ0!R iéGV!n Ѫ9۪!7C;jnlMۭ:)!d&m!˯ ޯ"!@b5Qϲ! #,_TD^  <(e {+"Ȼ,6IY jwO #H]zX+32;ns X.W+__{N3V=C8 <E4k#2*JuP! =(Qz 7T04C-xY jdW' :GWfu"<+_ p; E 7$V-{'RC.R]$ E4_ =" -*5m` Oka_8F`1|=,3:AH O Z epw  &3:AP(b"'#2IJZ+) !]. #zGXv3 @>a[KBHlG=} O!\'~(!  #.!Jl#.  C?& 0~==^VY+/7 %D j6h{}!%   $ 0 =K,h#$ 2J(h j.6M i!uV )EG,%:K)[ # # =cJ'xG,3,  f! 9QZ&A;hKP \]K%9,f)QJ@0/ -7et!0 Cp235 ):#Vz!3(  G )R X|  '  B" e    # 4   0  I U p y   !   !$ 6F !} = 4 V 'i W V @Ok M$n=DH! 4|2{P+| ""7$F&kF B =JZ[E_;J(2IUZPWYLu!Ps52A"ZB}Aezh = M \ x  ! = !!*)!1T!'!!D! ""'# )#:J#'#?#*#A$Z$x$v$ %6-%5d%%%%%!%&&A8&,z&_&' ')' <'CG''''>'(#(((d)5a**C++4,C5,y,,),#,0,^,-J-T-S+.p.s. d/r/s/xn00C1|I1 1"1#12 /2 92.Z2!2 2222=2 =31H30z333!34%4=;42y4c4561656S6 g6/r66 6]6($7<M7877Ze8N8:9NJ9#9^9R:o:j!;;;E;V<Pe<><H=>>>N}@@<BBCoE'Et G=GGH.HH.HlIeJ K!K >LIL0cL2LJLMZMptMMM N+#NONaiNJN!O%8Oc^OOO:O$POPQ6)Q`Q[!R2}RGRRS!S TjU>U8W]] 4]A]^]~]]] ],]]]] ^*^>^*M^)x^1^^^^^_#_8_N_Q_i_JdqviaZ)Q,eU&? Aup=.w8b#,2n@rad_ t"_gnfy2q:zFgqH;p}B=P: 6-mY``U| -^ +dc<>6=L&) $||x!5NYms"iM  '-f<T9%T[]#T'D/Rr5ZGptMO l N$y9'kP "# B%wj{<*ueb287?I~:SvJv8>VF(FXk)X{*j3\}Wh;owQc1 cPIW[HO\5ugU / zEE+VaV7ts K00(@ y^[CGN@kbsLMO&K.Qh6l ? 4o%+E,j.>C/_G *lY14 \C3x]{rS0D94xoH!zX}~Zh3R^1`nAAmef$(!B iKJDWRL~I7;] S (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

Error

An error occurred. Please start Anki while holding down the shift key, which will temporarily disable the add-ons you have installed.

If the issue only occurs when add-ons are enabled, please use the Tools>Add-ons menu item to disable some add-ons and restart Anki, repeating until you discover the add-on that is causing the problem.

When you've discovered the add-on that is causing the problem, please report the issue on the add-ons section of our support site.

Debug info:

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAlways include question side when replaying audioAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCode:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: 1.0.1 Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-10-23 22:05+0000 Last-Translator: SteppenwolfUA Language-Team: Ukrainian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) Language: ua (1 з %d) (вимкнено) (вимк) (увімкн) Містить %d картку. Містить %d карток. Містить %d карток.%% Вірно%(a)0.1f %(b)s/день%(a)0.1fкБ відправлено, %(b)0.1fкБ отримано%(a)0.1fs (%(b)s)%(a)d з %(b)d картки оновлено%(a)d з %(b)d карток оновлено%(a)d з %(b)d карток оновлено%(tot)s %(unit)s%.01f карток/хвилину%d картка%d карток%d карток%d картку видалено.%d карток видалено.%d карток видалено.%d картку експортовано.%d карток експортовано.%d карток експортовано.%d карку імпортовано.%d карток імпортовано.%d cards imported.%d катка вивчена за%d картки вивчені за%d картки вивчені за%d колоду оновлено.%d колод оновлено.%d колод оновлено.%d група%d груп%d груп%d зміна у медіафайлах для завантаження на сервер%d змін у медіафайлах для завантаження на сервер%d змін у медіафайлах для завантаження на серверзавантажено %d медіа-файлзавантажено %d медіа-файлівзавантажено %d медіа-файлів%d нотатка%d нотатки%d нотатки%d нотатку додано%d нотток додано%d нотток додано%d нотатку вилучено.%d нотаток вилучено.%d нотаток вилучено.%d нотатку експортовано.%d нотаток експортовано.%d нотаток експортовано.%d нотатку імпортовано.%d нотаток імпортовано.%d нотаток імпортовано.%d нотатка без змін%d нотаток без змін%d нотаток без змін%d нотатку оновлено%d нотаток оновлено%d нотаток оновлено%d повторення%d повторень%d повторень%d вибрано%d вибрано%d вибранокопія %s%s день%s дні%s днів%s година%s години%s годин%s хвилина%s хвилини%s хвилин%s хвилина.%s хвилин.%s хвилин.%s місяць%s місяці%s місяців%s секунда%s секунди%s секунд%s до видалення:%s рік%s роки%s років%sd%sh%sm%sмі%ss%sy&Про Anki&Продивитися та Встановити...&Картки&Перевірити базу даних&Зубріння...&Редагування&Експортувати...&Файл&Знайти&Перейти&Довідник&Довідник...&Допомога&Імпортувати…&Інфо...&Інвертувати вибір&Наступна Картка&Нотатки&Відкрити теку розширень...&Параметри...&Попередня картка&Перемістити...&Підтримати Anki...&Змінити профіль&Інструменти&Скасувати'%(row)s' вміщує %(num1)d полів, очікуючих %(num2)d(%s правильно)(Нотатку видалено)(кінець)(відфільтровано)(вивчення)(новi)(ліміт колоди вищого порядку: %d)(виберіть 1 картку)...Файли .anki2 не придатні для імпортування. Якщо ви намагаєтеся відновити інформацію з резервної копії, ознайомтеся, будь ласка, з розділом "Ререзвні копії" інструкції користувача./0d1 місяць1 рік10:0022:0003:0004:0016:00Отримано помилку таймаута шлюзу 504. Спробуйте тимчасово призупинити вашу антивірусну програму.:%d картку%d карток%d картокВідкрити теку резервних копійВідвідати вебсторінку%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MРезервні копії
Anki створюватиме резервну копію вашої колекції кожного разу при закритті або синхронізації.Формат експорту :Знайти:Розмір шрифту:Шрифт:В:Включити:Розмір рядка:Замінити на:СинхронізаціяСинхронізація
В даний момент не включена; для включення клацніть на кнопку синхронізації в головному вікні.

Необхідно Обліковий запис

Для підтримки синхронізації вашої колекції колод треба мати безкоштовний обліковий запис. Зареєструйтеся для отримання облікового запису, а потім внизу введіть Ваш логін та пароль.

Anki оновлено

Вийшла нова версія Anki %s.

Помилка

Виникла помилка. Необхідно запустити Anki, утримуючи клавішу "шифт", що дозволить тимчасово відключити встановлені вами додатки.

Якщо проблема виникає лише, коли увімкнено додатки, виберіть меню Інструменти>Додатки, щоб відключити деякі додатки та перезапустити Anki, повторюючи цю процедуру, поки ви не виявите додаток, що спричиняє проблему.

Коли ви виявили додаток, що спричиняє проблему, повідомте про неї розділі "Додатки" нашого сайту техпідтримки.

Інформація для відладки:

<текст не в юнікоді><для пошуку наберіть запит тут; натисніть ввід, щоб показати поточну колоду>Дуже дякуємо всім за ваші пропозиції, повідомлення про вади, а також матеріальну підтримку.Легкість картки - це інтервал, через який цю картку знову буде показано, якщо ви дали відповідь "добре" під час повторення.Відфільтрована колода не може мати підколоди.Під час синхронізації медіа-файлів виникла помилка. Будь ласка, скористайтеся командою Інструменти>Перевірити медіа-файли, а потім проведіть повторну синхронізацію для виправлення помилки.Відхилено: %sПро AnkiДодатиДодати (скорочення клавіш: Ctrl+Enter)Додати полеДодати медіа-файлДодати нову колоду (Ctrl+N)Додати тип нотатокДодати зворотню сторонуДодавання мітокДодати до:Додати…Додати: %sДоданоДодано сьогодніДодано дублікат з однаковим першим полем: %sЗновуПовторити сьогодніКількість карток з відповіддю "Знову": %sУсі типи картокУсі колодиВсі поляУсі картки у довільному порядку (режим зубріння)Всі картки, записи та медіа-файли для цього профілю будуть видалені. Ви певні?Допускається HTML у поляхЗавжди показувати сторону картки з питанням під час відтворення аудіоПід час доступу до бази дних сталася помилка. Можливі причини: - Антивірусна програма, фаєрвол, програма створення резервних копій або синхронізації даних може заважати роботі Anki. Спробуйте зупинити такі програми і перевірити, чи проблема не зникла. - Можливо заповнився жорсткий диск. - Тека Документи/Anki можливо розташована на віддаленому диску в мережі. - Можливо немає дозволу на запис файлів у теці Документи/Anki. - Можлво є помилки на жорсткому диску. Ви можете скористатися Інструменти>Перевірити базу даних, щоб переконатися, що ваша колекція не пошкоджена. Помилка під час відкриття %sAnkiКолода Anki 2.0Сторінка колод AnkiAnki не вдалося перейменувати ваш профіль, оскільки не вдалося перейменувати теку профілю на диску. Переконайтеся, що у вас є дозвіл на запис до теки Документи/Anki і що інші програми не мають доступ до тек ваших профілів і спробуйте знову.Анкі не вдалося знайти межу між питанням і відповіддю. Налаштуйте шаблон вручну, щоб розділити питання та відповідь.Anki - це зручна в користуванні, розумна система навчання з перервами. Вона безкоштовна та має відкритий код.Anki доступна по ліцензії AGPL3. Додаткову інформацію можна отримати з файла з текстом ліцензії, який входить до дистрибуційного комплекту вихідного коду.Невірні логін AnkiWeb або пароль; повторіть спробу.Обліковий запис на AnkiWeb:AnkiWeb зустріла помилку. Повторіть через декілька хвилин, і, якщо проблема не зникне, відправте повідомлення про ваду.AnkiWeb надто перевантажена в даний момент. Спробуйте ще рез через декілька хвилин.AnkiWeb на технічному обслуговуванні. Спробуйте ще рез через декілька хвилин.ВідповідьКнопки відповідіВідповідіАнтивірусна програма або файервол не дозволяє Anki підключитися до інтернету.Картки, у яких нема відповідників, будуть видалені. Якщо нотатка більше не містить карток, вона буде втрачена. Ви впевнені, що хочете продовжити?Повторилося двічі у файлі: %sВи впевнені, що хочете видалити %s?Необхідно принаймні один тип карток.Необхідно принаймні один крок.Додати зображення/аудіо/відео (F3)Автоматично програвати звукАвтоматична синхронізація при відкритті/закритті профілюСереднєСередній часСередній час відповідіСередня легкістьСередній показник за дні роботи з програмоюСередній інтервалНазадЗворотній бік - попередній виглядЗворотній бік - шаблонРезервні копіїБазоваБазова (із зворотньою карткою)Базова (із необов'язковою зворотньою карткою )НавігаторЗовнішній вигляд НавігатораНалаштування НавігатораПобудуватиПоховатиПоховати карткуПоховати нотаткуПоховати пов'язані нові картки до наступного дняПоховати пов'язані картки на повторення до наступного дняЗа замовчуванням, Anki буде знаходити знаки між полями, такі як символ табуляції, кома, и т.д. Якщо Anki визначить символ невірно, ви можете ввести його тут. Використовуйте \t для відображення TAB.ВідмінитиКарткаКартка %dКартка 1Картка 2Індекс карткиСписок картокСтан карткиТип карткиТип картки:Типи картокТипи карток для %sКартку похованоКартку відкладено.Картка була приставуча.КарткиКартки не можна вручну переміщати до відфільтрованої колоди.Картки з неформатованим текстомПісля повторення картки автоматично повертаються до своєї оригінальної колоди.Картки...ЦентрЗмінитиЗмінити %s на:Змінити колодуЗмінити колоду...Змінити тип нотаткиЗмінити тип нотатки (Ctrl+N)Змінити тип нотатки...Змінити колір (F8)Змінити колоду в залежності від типу нотаткиЗміненоПеревірити &медіа-файли...Перевірити директорію з аудіо-візуальними файламиПеревірка…ВибратиОберіть КолодуОберіть Тип НотаткиВибрати міткиОчистити невикористані теґиКлон: %sЗакритиЗакрити та втратити поточні дані?Закривається...Картка з пробіламиКод:Колекцію експортовано.Колекція пошкоджена. Зверніться до інструкції користувача.ДвокрапкаКомаНалашт.НалаштуванняВибіо мови інтерфейсу та інших налаштуваньВітаємо! В даний момент ви закінчили роботу з цією колодою.Підключення...Вийшов час з'єднання. Причина або в проблемі підключення до інтернету, або у вашій теці медіа-файлів є завеликий файл.ПродовжитиКопіюватиПравильні відповіді по зрілим карткам: %(a)d/%(b)d (%(c).1f%%)Вірно: %(pct)0.2f%%
(%(good)d з %(tot)d)Не вдалося зв'язатися з AnkiWeb. Перевірте підключення до інтернету та повторіть спробу.Не вдалося записати аудіо. У вас встеновлені lame та sox?Не вдалося зберегти файл: %sЗубрінняСтворити колодуСтворити відфільтровану колоду...СтвореноCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZСукупноСумарно %sСумарно по відповідяхСумарно по карткахПоточна колодаПоточний тип нотатки:Додаткове навчанняСесія додаткового навчанняВирізатиБаза даних перебудована та оптимізованаДатаДнів роботи з програмоюДеавторизуватиКонсоль зневаджуванняКолодаКолоду буде імпортовано під час відкриття профілю.КолодиНисхідні інтервалиТиповийЧас, через який будуть знову показуватися картки для повторювання.ВидалитиВидалити карткиВидалити колодуВидалити пустіВидалити нотаткуВидалити нотаткиВидалити міткиВидалити невикористовуваніВидалити поле з %s?Видалити тип картки '%(a)s', та її %(b)s?Видалити цей тип нотатки та всі картки цього типу?Видалити цей невикористаний тип нотаток?Видалити невикористані медіа-файли?Вилучено %d картка з відсутньою нотаткою.Вилучено %d карток з відсутньою нотаткою.Вилучено %d карток з відсутньою нотаткою.Вилучено %d картку з відсутнім шаблоном.Вилучено %d карток з відсутнім шаблоном.Вилучено %d карток з відсутнім шаблоном.Вилучено %d картку з відсутнім типом нотатки.Вилучено %d карток з відсутнім типом нотатки.Вилучено %d карток з відсутнім типом нотатки.Вилучено %d нотатку без карток.Вилучено %d нотаток без карток.Вилучено %d нотаток без карток.Вилучено %d нотатку з невірною кількістю полів.Вилучено %d нотаток з невірною кількістю полів.Вилучено %d нотаток з невірною кількістю полів.Вилучено.Після видалення цієї колоди з переліку колод усі залишкові картки буде повернуто до їхньої оригінальної колоди.ОписОпис, для відображення на екрані навчання (лише для поточної колоди):ДіалогЗавантажити з AnkiWebЗавантаження з AnkiWeb...ОчікуєтьсяЛише очікувані карткиОчікуються завтра&ВихідЛегкістьЛегкоБонус легкостіІнтервал легкостіРедагуванняРедагувати поточнуРедагувати HTMLВідредагованоШрифт режиму редагуванняСпорожнитиПорожні картки...Номери порожніх карток: %(c)s Поля: %(f)s Знайдено порожні картки. Виконайте команду "Інструменти>Порожні картки".Порожнє перше поле: %sКінецьВкажіть колоду, до якої помістити нові %s картки або залиште порожнім:Введіть нову позицію картки (1...%s):Введіть мітки, які треба додати до виділених картокВведіть мітки для видалення з виділених картокПомилка завантаження: %sПомилка під час запуску: %sПомилка при вставновленні надійного зв'язку. Вона, як правило, викликана антивірусними програмами, файєрволом, програмами VPN або проблемами з вашим інтернет-провайдером.Помилка виконання %s.Помилка запуску %sЕкспорт колоди в інший форматЕкспорт ...Експортовано %d медіафайлиЕкспортовано %d медіафайлиЕкспортовано %d медіафайлиДодатковоFF1Поле %d з файлу:Відповідність полівНазва поля:Поле:ПоляПоля для %sПоля, розділені: %sПоля...ФільтрФільтр:ВідфільтрованіВідфільтрована колода %dПошук &дублікатів...Пошук дублікатів&Знайти і замінити...Знайти і замінитиЗавершеноПерша карткаВперше побаченаПерше поле співпало: %sВиправлено %d картку з недійсними властивостями.Виправлено %d карток з недійсними властивостями.Виправлено %d карток з недійсними властивостями.Виправлено помилку блокування налаштувань колоди в AnkiDroid.Виправлено тип нотаток: %sПеревернутиТека вже існує.Шрифт:Нижній колонтитулЗ метою безпеки, '%s' не дозволяється зазначати на картках. Ви все ще можете використовувати це шляхом розміщення даної команди в іншому пакеті та імпортування цього пакету у заголовок LaTeX.ПрогнозФормаЗнайдено %(a)s в %(b)s.Лицьова сторонаПопередній перегляд Лицьової сторониШаблон Лицьової сторониЗагальнеЗгенерований файл: %sЗгенеровано на %sКолоди загального користуванняПам'ятаюГрадуйований інтервалРедактор HTMLтяжкоВерхній колонтитулДопомогаНайвища легкістьІсторіяДомівкаПогодинна розбивкаГодиниГодини з менше ніж 30 повтореними картками не показано.Якщо ви зробили свій внесок у розвиток програми, але не зазначені в цьому списку, будь ласка, зв'яжіться з нами.Якби ви вчились щодняНе враховувати час відповіді довше ніжБез урахування регіструІгнорувати полеІгнорувати рядки, в яких перше поле має відповідник в існуючій нотатціІгнорувати це оновленняІмпортІмпортувати файлІмпортувати, навіть якщо існуюча нотатка містить однакове перше полеІмпорт не вдався. Імпортування не вдалося. Інформація для зневаджування: Параметри імпортуІмпорт завершено.В медіа теці не використовується жоден файл:Щоб забезпечити правильну роботу вашої колекції при переміщенні між пристроями, Anki вимагає, щоб внутрішній годинник вашого комп'ютера був правильно налаштований. Внутрішній годинник може йти неправильно, навть якщо ваша система показує правильний місцевий час. Перейдіть до налаштувань годинника на вашому комп'ютері і перевірте наступне: - час вказано до полудня чи після полудня - помилка годинника - день, місяць та рік - часовий пояс - перехід на літній/зимовий час Різниця з правильним часом: %s.Включити медіа-файлиВключити інформацію про розкладВключити міткиЗбільшити ліміт нових карток на сьогодніЗбільшити ліміт нових карток на сьогодні наЗбільшити ліміт карток для повторення на сьогодніЗбільшити ліміт повторень на сьогодні наЗростаючі інтервалиВстановити додаток до програмиМова інтерфейсу:ІнтервалМодифікатор інтервалуІнтервалиНедійсний код.Недійсний файл. Відновіть з резервної копії.У картці знайдено недійсну властивість. Будь ласка, виконайте команду Інструменти>Перевірити базу даних, а при повторній появі проблеми поставте про це питання на сайті підтримки.Невірний регулярний виразВідкладено.Перейти до міток з Ctrl+Shift+TЗберігати доLaTeXРівняння LaTeXМатематичне оточення LaTeXНевдачіОстання карткаОстанній переглядСпочатку додані останнімиВчитиЛіміт карток для вивчення наперед наВивчити: %(a)s, Повторити: %(b)s, Перевчити: %(c)s, Відфільтровано: %(d)sНавчанняДія щодо приставучих картокПоріг для приставучих картокЗліваОбмежитиЗавантаження...Найдовший інтервалШукати в полі:Найменша легкістьУправлінняУправління типами нотаток...Підмапитись до %sСпівставити з міткамиЗріліМаксимальний інтервалМаксимальна кількість повторених карток в день.Медіа-файлиМінімальний інтервалХвилиниЗмішати нові картки з переглянутимиMnemosyne 2.0 Deck (*.db)БільшеНайбільше невдачПеремістити карткиПеремістити картки в колоду:Н&отаткаІм'я вже існує.Назва колоди:Назва:СинхронізаціяНовіНових картокЛише нові карткиНових карток/деньНова назва колоди:Новий інтервалНова назва:Новий тип нотаток:Нова назва групи налаштувань:Нова позиція (1...%d):Наступний день починається черезПоки нема очікуваних карток.Жодна картка не відповідає вказаним критеріям.Нема порожніх карток.Сьогодні не було пройдено жодної зрілої картки.Жодного невикористовуваного файлу не знайденоНотаткаІндекс нотаткиТип нотатокТипи нотатокНотатку та її %d картку видалено.Нотатку та її %d карток видалено.Нотатку та її %d карток видалено.Нотатку поховано.Нотатку відкладено.Увага: Медіа-файли не включено до резервної копії. Для певності періодично робіть резервну копію вашої теки з файлами Anki самостійно.Увага: Не вистачає деякої історії. Для подальшої інформації звертайтеся до документації до Навігатора.Нотатки у неформатованому текстіУ нотатках необхідно мінімум одне поле.Нотатки з мітками.НічогоOKСпочатку найраніше побаченіПовна примусова одностороння синхронізація при наступному запускуОдну або декілька нотаток не було імпортовано, бо на їх основі не було згенеровано жодних карток. Це може статися, коли у вас є порожні поля або коли ви не вказали, в які поля записувати вміст текстового файлу.Можна змінити черговість лише нових карток.Лише один клієнт за раз може мати доступ до AnkiWeb. Якщо попередня синхронізація була невдалою, повторіть, будь ласка, спаробу через кілька хвилин.ВідкритиОптимізую...Довільний ліміт:ОпціїНалаштування для %sГрупа налаштувань:Налаштування...ПорядокВ порядку додаванняВ порядку очікуванняІгнорувати шаблон зворотньої сторони:Ігнорувати шрифт:Ігнорувати шаблон лицьової сторони:ПарольВставитиВставити зображення із буфера обміну у форматі PNGPauker 1.8 Lesson (*.pau.gz)ВідсотокПеріод: %sПомістити в кінець черги нових картокПомістити у чергу карток на повтор з інтервалом між:Спочатку треба додати інший тип нотаток.Будь ласка, під'єднайте мікрофон і переконайтеся, що інші програми не використовують аудіо-пристрій.Відредагуйте цю нотатку та додайте кілька карток для тесту з пробілами. (%s)Переконайтеся, будь ласка, що профіль відкритий та програма Anki не зайнята, а потім спробуйте знову.Встановіть, будь ласка, PyAudioСпочатку відкрийте, будь ласка, профіль.Будь ласка, видаліть теку %s і повторіть спробу.Перезапустіть Anki для завершення зміни мови.Виконайте команду " Інструменти>Порожні картки"Оберіть колодуВиберіть картки лише одного типу нотаток.Оберіть що-небудь.Будь ласка, оновіть Anki до найновішої версії.Щоб імпортувати цей файл, виконайте команду "Файл>Імпортувати".Відвідайте, будь ласка, AnkiWeb, оновіть вашу колоду, а потім повторіть спробу.ПозиціяНалаштуванняПопередній виглядПопередній вигляд обраної картки (%s)Попередньо переглянути нові карткиПопередньо переглянути нові картки, додані за останніхОброблено %d медіафайлОброблено %d медіафайлОброблено %d медіафайлОбробка даних...ПрофіліНеобхідна автентифікація проксі.ПитанняКінець черги: %dПочаток черги: %dВийтиДовільний порядокРозташувати у довільному порядкуРейтингПеребудуватиЗаписати власний голосЗапис розпочато...
Час: %0.1fВідносне просроченняВчити зновуЗапам'ятовувати останні внесені даніВидалення даного типу картки призведе до видалення однієї або кілька нотаток. Спочатку треба створити новий тип карток.ПереіменуватиПереіменувати колодуПрослухати ще разПрослухати ще раз власний голосЗмінити розташуванняЗмінити розташування нових картокЗмінити розташування...Потрібно одна чи кілька з цих міток:Змінити розкладЗмінити розкладЗмінити розклад карток, спираючись на мої відповіді у цій колодіПродовжити заразЗворотній напрямок тексту (RTL)Повернення до стану перед '%s'.ПроглянутиКількість повтореньЧас повтореньПовторити напередПовторити наперед наПовторити картки, забуті за останніПовторити забуті карткиПродивитися процент успішності на кожну годину дня.ПовторенняЗправаМасштаб: %sПошукШукати серед форматування (повільно)Вибрати&Виділити всеВибрати &нотаткиВибрати мітки, які слід виключити:Обнаний файл не був у форматі UTF-8. Перегляньте розділ "Імпортування" в інструкції користувача.Вибіркове навчанняКрапка з комоюСервер не знайдено. Або у вас відсутнє з'єднання з інтернетом, або антивірусна програма чи фаєрвол не дозволяють Anki з'єднатися з інтернетом.Віднести усі колоди нижче %s до цієї групи налаштувань?Встановити для усіх підколодПід час запуску програми було утримано клавішу "Shift". Відключено автоматичну синхронізацію та підключення розширень програми під час запуску.Зсунути розташування наявних картокГаряча клавіша: %sГаряча клавіша: Ліва стрілкаГаряча клавіша: Права стрілка або EnterГаряча клавіша: %sПоказати %sВІДОБРАЗИТИ ВІДПОВІДЬПоказати дублікатиПоказати таймер відповідіПоказувати нові картки після карток для повторенняПоказувати нові картки перед переглядомПоказувати нові картки в порядку їх додаванняПоказувати нові картки у випадковому порядкуПоказувати час наступного повторення над кнопками відповідіПоказувати кількість карток, що залишилися, під час повторенняРозмір:Деякі пов'язані або поховані картки було відкладено до наступного сеансу.Деякі налаштування вступлять в силу лише після перезапуску Anki.Деякі данні не було актуалізовано, оскільки змінився тип нотатки:Поле сортуванняСортувати по цьому полю у навігаторіСортування в цій колонці не підтримується. Будь ласка, оберіть іншу.ПробілПочаткова позиція:Початкова легкістьСтатистикаКрок:Кроки (у хвилинах)Кроки мають бути числами.Пройдено сьогодніВчитиВчити колодуВчити колоду...Вчити заразВчити за станом картки або міткоюСтильСтиль (спільний для карток)Файл Supermemo у форматі XML (*.xml)ВідкластиВідкласти карткуВідкласти нотаткуВідкладеніВідкладені+похованіСинхронізувати також медіа-файлиСинхронізація не вдалася: %sСинхронізація не вдалася; нема з'єднання з інтернетом.Для сихнронізації необхідно, щоб годинник на вашому комп'ютері був правильно налаштований. Будь ласка, налагодьте годинник і повторіть спробу.Синхронізую...TabДублікати мітокЛише міткаМіткиКолода, в яку додаємо (Ctrl+D)Цільове поле:ТекстТекстовий файл, розділений TAB або крапкою з комою (*)Така колода вже існує.Назва поля вже використовується.Ця назва вже використовується.Вийшов час з'єднання з AnkiWeb. Будь ласка, перевірте з'єднання з мережею і повторіть спробу.Конфігурацію за замовчуванням не можна видаляти.Колоду за замовчуванням не можна видаляти.Поділ карток у вашій колоді (ах).Завантаження не вдалося. Повторіть спробу.Перше поле порожнє.Для першого поля типу нотатки має бути відповідник.Не можна використовувати наступний символ: %sЛицьова сторона цієї картки порожня. Виконайте, будь ласка, команду "Інструменти>Порожні картки".Вказана вами інформація очистить питання на всіх картках.Число доданих вами нових карток.Кількість питань, на які ви відповіли.Кількість повторень, очікуваних у майбутньому.Кількість разів, що ви натисли кожну кнопку.Дозволи до тимчавової теки вашої системи неправильні, а Anki не взмозі виправити їх автоматично. Більше інформації можна знайти, пошукавши 'temp folder' в інструкції користувача Anki.Вибраний файл не є справжнім файлом .apkg.По вказаним критеріям пошуку не знайшлося карток. Ви хочете ії змінити?Бажані зміни вимагатимуть повної відправки бази даних під час наступної синхронізації вашої колекції. Якщо у Вас була статистика повторених карток або інші зміни на інших приладах, які ще не було синхронізовано, їх буде втрачено. Продовжити?Час, витрачений, щоб відповісти на питання.У колоді ще є нові картки, але денний ліміт вже вичерпано. Ви можете збільиши ліміт у налаштуваннях, але, будь ласка, не забувайте: чим більше нових карток ви запровадите у навчальний цикл, тим більше карток вам доведеться повторювати за короткий період.Має бути як мінімум один профіль.По цій колонці не можна проводити сортування, але ви можете обирати окремі колоди, клацаючи на їхні назви на панелі зліва.Файл, здається, не є справжнім файлом .apkg. Якщо ви отримуєте помилку з файлу, завантаженого з AnkiWeb, існує вірогідність, що скачування файлу не пройшло успішно. Будь ласка, повторіть спробу, і якщо проблема не зникне, спробуйте скачати файл в іншому браузері.Цей файл вже існує. Ви впевнені що бажаєте перезаписати його?У цій теці в одному місці зберігаються усі ваші дані для роботи з Anki, щоб полегшити створення ререзвних копій. Щоб вказати інше місце зберігання, ознайомтеся: %s Це - спеціальна колода для навчання поза встановленим графіком.Це - {{c1::зразок}} тесту з пробілами.Це видалить вашу існуючу колекцію колод та замінить дані у файлі, що ви імпортуєте. Ви впевнені?ЧасВстановити ліміт таймераПовторитДля створення картки з тестом з пробілами по існуючій нотатці, спочатку потрібно змінити її тип на тип тесту з пробілами командою "Редагування>Змінити тип нотатки..."Щоб побачити їх зараз, клацніть внизу на кнопку "Розкопати".Для навчання за межами звичайного графіка, натисніть на кнопку "Додаткове навчання" внизу.СьогодніЛіміт повторень на сьогодні вичерпано, але ще є картки, які можна повторити. Для оптимального запам'ятовування можна збільшити денний ліміт у налаштуваннях.РазомЗагальний часЗагальна кількість картокЗагальна кількість нотатокРозглядати введення як регулярний виразТипВведення відповіді з клавіатури: невідоме поле %sНеможливо імпортувати файл, призначений лише для зчитування.РозкопатиСкасуватиВідмінити - %sНевідомий формат файлу.Не проглянутіОновити існуючі нотатки, коли співпадають перше полеАктуалізовано %(a)d з %(b)d існуючих нотаток.Відправити на AnkiWebВідправляю на AnkiWeb...Використовується в картках, але відсутнє в медіа теці:Користувач 1Версія %sЧекаю на звершення редагування.Увага! Тести з пробілами не спрацюють, поки ви не зміните тип вгорі на Тест з пробілами.Додавати у поточну колоду за замовчуваннямВся колеціяВи бажаєте завантажити зараз?У вас тип нотатки з тестом з пробілами, але ви не створили жодних тестових карток з пробілами. Продовжити?У вас багато колод. Прогляньте, будь ласка, %(a)s. %(b)sВи ще не записали ваш голос.Треба, щоб була принаймні одна колонка.НезріліНезрілі+ВчитиВаші зміни вплинуть на кілька колод. Якщо ви хочете змінити лише поточну колоду, спочатку треба додати нову групу налаштувань.Ваша колекція перебуває у невпорядкованому стані. Будь ласка, виконайте команду "Інструменти>Перевірити базу даних", а потім повторіть синхронізацію.Ваша колекція або медіа-файли завеликі для синхронізації.Ваша колода була успішно відправлена на сервер AnkiWeb. Якщо ви користуєтеся програмою на інших пристроях, синхронізуйте їх зараз і завантажте із сервера колоду, яку ви щойно відправили з цього комп'ютера. Після цього, статистика перглянутих карток та додані картки в усіх копіях колоди будуть об'єднані автоматично.Ваші колоди тут та на сервері AnkiWeb відрізняются настільки, що не можуть бути об'єднані автоматично, тому необхідно замінити копію колоди на даному пристрою тією, що на сервері, або навпаки. Якщо ви оберете варіант завантаження із сервера, Anki завнтажить колекцію колод із сервера AnkiWeb, при цьому будь-які зміни, зроблені в колодах на цьому пристрої після останньої синхронізації, буде втрачено. Якщо ви оберете відправку на сервер, Anki відправить вашу колекцію колод на сервер AnkiWeb, при цьому будь-які зміни, зроблені в колодах на сервері AnkiWeb або інших пристроях після останньої синхронізації, буде втрачено. Після синхронізації усіх пристроїв, статистика наступних переглядів карток та додані картки будуть об'єднані автоматично.[нема колоди]резервні копіїкарткикартки з колодикартки, обрані заколекціяднднівколодатривалість життя колодидублікатдопомогасховатигодингодин(и) після опівночіневдачіменше 0.1 карток/хвилинувідображувати на %sспівставлено з міткамихвилин(а)хвилин(и)місповтореннясекунд(и)статистикацю сторінкутвся колекція~anki-2.1.0+dfsg~b36/locale/ur/000077500000000000000000000000001323611211500157445ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ur/LC_MESSAGES/000077500000000000000000000000001323611211500175315ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/ur/LC_MESSAGES/anki.mo000066400000000000000000000007761323611211500210220ustar00rootroot00000000000000$,89Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-10-28 21:09+0000 Last-Translator: Waqar Ahmed Language-Team: Urdu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) anki-2.1.0+dfsg~b36/locale/vi/000077500000000000000000000000001323611211500157345ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/vi/LC_MESSAGES/000077500000000000000000000000001323611211500175215ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/vi/LC_MESSAGES/anki.mo000066400000000000000000002017771323611211500210160ustar00rootroot00000000000000l.P> Q>\>c>"i>> >>>8>>??"+?$N?$s?&?"??4?2*@]@n@"@$@$@$@ A>ASAkAsAAAAAA AAB BBBBB B)B2B 8BCBIBOBSB ZBdB jBuB BBBBBBBB0B 'C4C :C ECPCVCiCCCDDDD%D*D/D3D7DT;DD,D(DD!E)EfAEE EE E EEFF,FeCFF7SG GG5GXGY7H%HkH #I /I:I>I YI cImI I IIIII I$II II J J%$JKJJJJ"LL LLLMR=NvN7O ?OwKOEO@ PJPQP`PRhPP>Q#YQ#}QQQ(QR RR +R8RQRbR gR tRRRRRRRRRR R S)S'[,T[([[[F[N$\Ps\>\P]T]]]] ]8]^^^9^=^ L^Y^_^d^ i^ t^^ ^ ^^ ^^^)^0^"_8_4<_!q______m``` ````` ` ``` `a a"a)a1a:aKa_aoaaa a aaNa"b>bRbWbnbtb{b+c4c9cSc Ycgcvc~cc ccc cccc cccc d.dFBddd d d4de#e *e16ehexeee*ee gg gg"g"h $hEhZhih}hh h h)hh^iziiiiiii i ii jj<$jaj jjwjjj jjj jjj j jjkk*k0kAkIkck}k k kkk kkkkk kk kl l $l.l=lUllll+ll#l!lmm $m .m<9m vmm]mamSn!gn nnnn,nn#oko9p >pLp\pdpsp pp p pppp pppq 4q ?qJq,iq#qVq8rEJrrr*rr s,"sOs-hs+s8ss ttt3t#Et itwtttt tttttttuu4u| D| O| ]|g||||| | | || }$}!7}dY} }}}}}} } ~(~;~ U~v~X~+~"&9+`0+>FB'*(܀17,I"l'\#pe8*C(r' u/2MbW ] h t!'ʼn.&Ls,ʊ ъ܊U$Qv"S0$/"Tw }{^5dU  % 7BDI N Xbglrґבߑ  Ɠԓݓ +,Xi}Ɣ / /: juؕ! 4AJS \ fpyϖ ޖ  $ 1< K&W ~ Ǘ ӗ9ߗ*3 ;I"QtZ\`ipv|.,%[$u 4 Ubu 'қ{{JY [˝s'9"\#2KQq!Ǡܠ 82kqIv"|#ä$5|N5 J!El  ϩ]۩9)'-+U2 #=!Tv ɬ Ҭ ܬ&$,Hc iuEI+$, 4? P]o ASjs z߰* #/:N ̱ٱ3$:R? 3E*?G<=hz<# DPa {  ȵ յ  #:Kc9 /7: r} E  - :E];|< /$F(k,'* rY # BO`w »Ȼ  &+7Gc& ҼJ޼&)Pj-ƽj ¾(ž  (&6$] տ  !08R/  "> Zg  -9?UV[24O#U 29QJ,N>U%!+1/J5z $3LJ+Gs& !9?:[ 4 M!Xz,;[a}"  *A P\r#9685o+ '<#`- QS/Hx * DQk~ "' *8+= i +?4HI]!p+-+&;?){>AL& s } '-$! FQi  "% "1.` 1Dc-yT"/:/j  8 FP We"j  YrD<$c1 <L \fw+'.25ADw1LJAD4Qn   /(@i,x, +;7Y$: >K]c~ E,/pN3+!;A#}J'O_d"!4 >\<Ww& #30W%6OPZ<+  Ei s|mt@29(b s ~- O9Qd^ !J6+b8(6_ eq2[n9  */5 KXs  O[{4HcOG@i'ARc^{d2yLhk_V*`YJ -Bl%u$\XfSG8`^ DymzK)W B$n5qNB 8WZixn;@RA=  Ns2=tNsQF&3m8,oo{ Pf6I_R.r/g9w#10^-V0czi4TXr+<eJuD<LQU U%"7.d(H)*E},+-bpSUT ]g;jxW r4>|3]h!v&E<l P979 t=o#DFJC~IqxY p&naju:Zpbav/6?Gfek\ :*IqC? m6>T5!CSeL_@sPOg/} yw vtV'M$#H|:w1\0k~XK"%a(F!;5M?M}d"b](|jA`Y[Z+~,El[7K13hz2'.)>Q  (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStep:Steps (in minutes)Steps must be numbers.Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?You have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:01+0000 Last-Translator: Damien Elmes Language-Team: Vietnamese MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) Language: vi (1 trên %d) (tắt) (bật) Có %d thẻ.%% Chính xác%(a)0.1f %(b)s/ngày%(a)0.1fs (%(b)s)Đã cập nhật %(a)d trên %(b)d phiếu%(tot)s %(unit)s%.01f thẻ / phút%d thẻĐã xóa %d thẻ.Đã xuất %d thẻ.Đã nhập %d thẻ.Đã học %d thẻ trongĐã cập nhật %d bộ thẻ.%d nhóm%d thay đổi phương tiện chờ tải lên%d tập tin phương tiện đã tải xuống%d phiếuĐã thêm %d phiếuĐã xóa %d phiếu.Đã trích xuất %d phiếu.Đã nhập %d phiếu.%d phiếu không đổiĐã cập nhật %d phiếu%d thẻ ôn tập%d được chọnbản sao %s%s ngày%s giờ%s phút%s phút.%s tháng%s giây%s chờ xóa:%s năm%sng%sg%sph%sth%sgi%sn&Giới thiệu...&Luyện thi...&Chỉnh sửa&Xuất...&Tập tin&Tìm&Tới&Hướng dẫn&Hướng dẫn...&Giúp đỡ&Nhập...Đả&o Chọn&Thẻ Kế&Mở Thư mục phần Gắn thêm...&Tùy chỉnh&Thẻ Trước&Lập lịch lại...&Ủng hộ Anki...&Công cụ&Hoàn tác'%(row)s' có %(num1)d trường tin, yêu cầu %(num2)d(chính xác %s)(cuối)(lọc)(đang học)(mới)(giới hạn ở cấp trên: %d)(vui lòng chọn 1 thẻ)...Tập tin .anki2 không được thiết kế cho mục đích nhập vào. Nếu bạn muốn phục hồi từ bản sao lưu, xin vui lòng xem phần 'Sao lưu' trong hướng dẫn sử dụng./0ng1 tháng1 năm10 SA10 CH3 SA4 SA4 CHNhận được lỗi quá hạn cổng truy cập 504. Xin vui lòng thử tạm thời vô hiệu hoá trình quét virus của bạn:%d thẻMở thư mục sao lưuGhé thăm trang web%(pct)d%% (%(x)s trên %(y)s)%d-%m-%Y @ %H:%MSao lưu
Anki sẽ sao lưu bộ sưu tập của bạn mỗi khi thoát hoặc thực hiện đồng bộ.Định dạng xuất ra:Tìm:Cỡ chữ:Kiểu chữ:Trong:Bao gồm:Kích thước đường gạch:Thay Bằng:Đồng bộ hóaĐồng bộ hóa
Hiện đang tắt; nhấp nút đồng bộ trong cửa sổ chính để bật đồng bộ.

Yêu cầu tài khoản

Bạn cần có tài khoản (miễn phí) để đồng bộ bộ sưu tập. Xin vui lòng đăng ký tài khoản rồi nhập thông tin chi tiết vào phía dưới.

Bản Cập nhật Anki

Anki %s đã được phát hành.

Xin cảm ơn tất cả những bạn đã đưa đến cho chúng tôi gợi ý, báo cáo lỗi và đóng góp.Độ dễ của thẻ là kích thước của khoảng cách tiếp theo khi bạn trả lời "Tốt" trong lần ôn tập,Bộ thẻ lọc không được có các bộ thẻ con.Có vấn đề xảy ra khi đồng bộ dữ liệu đa phương tiện. Vui lòng đến Công cụ > Kiểm tra Dữ liệu đa phương tiện, rồi đồng bộ lại để sửa vấn đề.Đã huỷ: %sGiới thiệu về AnkiThêmThêm (phím tắt: Ctrl+Enter)Thêm Trường tinThêm dữ liệu Phương tiệnThêm Bộ thẻ Mới (Ctrl+N)Thêm Kiểu PhiếuThêm Thẻ ngượcThêm NhãnThêm vào:Thêm: %sĐã thêmĐã thêm Hôm nayĐã thêm thẻ trùng với trường đầu tiên: %sLạiHọc lại Hôm nayHọc lại: %sMọi Bộ thẻMọi Trường tinTất cả thẻ với thứ tự ngẫu nhiên (chế độ luyện thi)Mọi thẻ, phiếu và dữ liệu phương tiện cho hồ sơ này sẽ bị xóa. Bạn có chắc chắn không?Cho phép HTML trong trường tinCó lỗi xảy ra khi truy cập cơ sở dữ liệu. Nguyên nhân có thể là: - Trình quét virus, tường lửa, sao lưu hoặc đồng bộ hoá can thiệp vào Anki. Thử vô hiệu hoá các chương trình đó xem còn gặp vấn đề không. - Đĩa cứng hết chỗ. - Thư mục Documents/Anki nằm trên ổ đĩa mạng. - Tập tin trong Documents/Anki không ghi được. - Đĩa cứng bị lỗi. Bạn nên chạy Công cụ > Kiểm tra CSDL để bảo đảm bộ sưu tập của bạn không bị hỏng. Có lỗi xảy ra khi mở %sAnkiBộ thẻ Anki 2.0Gói Bộ thẻ AnkiAnki không đổi tên hồ sơ của bạn được vì không thể đổi tên thư mục hồ sơ trên đĩa. Vui lòng bảo đảm rằng bạn có quyền ghi vào Documents/Anki và không có chương trình nào khác truy cập thư mục hồ sơ của bạn, rồi thử lại.Anki không tìm thấy đường gạch giữa câu hỏi và câu trả lời. Xin vui lòng tự điều chỉnh lại kiểu mẫu để chuyển đổi giữa câu hỏi và câu trả lời.Anki là hệ thống học tập cách khoảng thông minh và thân thiện. Anki là một phần mềm mở và miễn phí.Anki được cấp quyền sử dụng theo giấy phép AGPL3. Vui lòng tham khảo tập tin giấy phép sử dụng trong bộ phân phối nguồn để biết thêm thông tin.ID hoặc mật khẩu Anki Web không chính xác; xin vui lòng thử lại.ID AnkiWeb:AnkiWeb gặp lỗi. Xin vui lòng thử lại sau ít phút. Nếu vấn đề vẫn không khắc phục, xin vui lòng gửi báo cáo lỗi.AnkiWeb hiện đang rất bận. Xin vui lòng thử lại sau ít phút.AnkiWeb hiện đang bảo trì. Vui lòng thử lại sau ít phút.Trả lờiNút Trả lờiTrả lờiPhần mềm chống virus hoặc tường lửa đang ngăn cản Anki kết nối Internet.Tất cả những thẻ không được ánh xạ sẽ bị xóa. Nếu một phiếu không còn thẻ nào thì phiếu đó cũng sẽ bị xóa. Bạn có chắc chắn muốn tiếp tục không?Xuất hiện 2 lần trong tập tin: %sBạn có chắc chắn muốn xóa %s?Cần chọn ít nhất một kiểu thẻ.Cần ít nhất một bước.Tự động phát âm thanhTự động đồng bộ khi đóng/mở hồ sơTrung bìnhThời lượng Trung bìnhThời gian trả lời trung bìnhĐộ dễ trung bìnhSố ngày trung bình đã họcKhoảng cách trung bìnhMặt sauXem trước Mặt sauKiểu mẫu Mặt sauSao lưuCơ bảnCơ bản (với thẻ ngược)Cơ bản (thẻ ngược tùy chọn)DuyệtThể hiện Trình duyệtTùy chọn Trình duyệtTạoTạm hoãnTạm hoãn ThẻTạm hoãn PhiếuTạm hoãn các thẻ mới có liên quan cho đến ngày hôm sauTạm hoãn nội dung ôn tập có liên quan cho đến ngày hôm sauMặc định, Anki sẽ phát hiện ký tự giữa các trường tin, ví dụ như tab, phẩy...v.v Nếu Anki phát hiện không chính xác, bạn có thể nhập vào đây. Dùng \t để biểu diễn ký tự tab.HủyThẻThẻ %dThẻ 1Thẻ 2Số ThẻDanh sách ThẻKiểu ThẻCác Kiểu ThẻKiểu Thẻ %sĐã giấu thẻ.Đã dừng thẻ.Thẻ bám.ThẻKhông thể di chuyển thủ công thẻ vào bộ thẻ lọc.Thẻ dạng Văn bản ThôThẻ sẽ được tự động chuyển lại bộ thẻ gốc sau khi ôn tập.Thẻ...GiữaThay đổiĐổi %s thành:Đổi Bộ thẻĐổi Kiểu PhiếuĐổi Kiểu Phiếu (Ctrl+N)Đổi Kiểu Phiếu...Đổi bộ thẻ theo như kiểu phiếuĐã đổiKiểm tra &Phương tiện...Kiểm tra các tập tin trong thư mục phương tiệnĐang kiểm tra...ChọnChọn Bộ thẻChọn Kiểu PhiếuChọn NhãnNhân bản: %sĐóngĐóng và bỏ qua các nhập liệu hiện hànhĐiền chỗ trốngMã:Bộ sưu tập bị hỏng. Xin vui lòng tham khảo tài liệu hướng dẫn.Dấu hai chấmDấu phẩyCấu hình ngôn ngữ và tùy chọn giao diệnXin chúc mừng! Hiện giờ bạn đã học xong bộ thẻ này.Đang kết nối...Hết thời gian kết nối. Kết nối internet của bạn đang bị trục trặc, hoặc bạn có một tập tin rất lớn trong thư mục phương tiện.TiếpChépSố trả lời đúng thẻ trưởng thành: %(a)d/%(b)d (%(c).1f%%)Chính xác: %(pct)0.2f%%
(%(good)d trên %(tot)d)Không kết nối đến AnkiWeb được. Xin vui lòng kiểm tra kết nối mạng và thử lại.Không thu âm được. Bạn đã cài lame và sox chưa?Không lưu tập tin được : %sLuyện thiTạo Bộ thẻTạo Bộ thẻ Lọc...Đã tạoCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+WCtrl+ZTích lũy%s Tích lũyTrả lời Tích lũyThẻ Tích lũyBộ Thẻ Hiện hànhKiểu phiếu hiện hành:Học Tùy biếnPhiên Học Tùy biếnCắtĐã tái dựng và tối ưu hóa cơ sở dữ liệu.NgàySố ngày đã họcBỏ ủy quyềnMàn hình Gỡ lỗiBộ thẻBộ thẻ sẽ được nhập vào khi mở hồ sơ.Bộ thẻKhoảng cách giảm dầnMặc địnhThời gian giãn cách đến khi hiện thẻ ôn tập lần nữaXóaXóa ThẻXóa Bộ thẻXóa Thẻ trốngXóa PhiếuXóa PhiếuXóa NhãnXóa dữ liệu ThừaXóa trường tin khỏi %s ?Bạn muốn xoá kiểu thẻ '%(a)s' và %(b)s của nó?Xóa kiểu phiếu này và tất cả các thẻ đi kèm?Xóa kiểu phiếu thừa này?Xoá dữ liệu phương tiện không dùng ?Đã xóa %d thẻ thiếu ghi chú.Đã xóa %d thẻ thiếu kiểu mẫu.Đã xóa %d phiếu thiếu kiểu phiếu.Đã xóa %d ghi chú không có thẻ.Đã xoá %d thẻ sai số trường tin.Đã xóa.Khi xóa bộ thẻ này khỏi danh sách, toàn bộ thẻ còn lại sẽ được trả về bộ thẻ gốc.Mô tảMô tả hiển thị trên màn hình học tập (chỉ với bộ thẻ hiện tại):Hộp thoạiTải xuống từ AnkiWebĐang tải xuống từ AnkiWeb...Đến hạnChỉ thẻ nợĐến hạn ngày mai&ThoátĐộ dễDễPhần chênh mức DễKhoảng cách mức DễSửaSửa Ghi chú Hiện hànhSửa HTMLĐã sửaKiểu chữ khi Chỉnh sửaLàm trốngThẻ Trống...Thẻ trống: %(c)s Trường tin: %(f)s Tìm thấy thẻ trống. Vui lòng chạy Công cụ > Thẻ Trống.Trống trường tin đầu tiên: %sKết thúcNhập bộ thẻ để thêm thẻ mới kiểu %s, hoặc để trống:Nhập vị trí thẻ mới (1...%s):Nhập nhãn cần thêm:Nhập nhãn cần xóa:Tải bị lỗi: %sCó lỗi trong quá trình khởi chạy: %sCó lỗi khi thiết lập kết nối bảo mật. Thường là do trình quét virus, tường lửa, VPN hoặc có vấn đề với nhà mạng của bạn.Gặp lỗi khi thực thi %s.Gặp lỗi khi chạy %sXuấtXuất...Phụ thêmFF1Trường %d của tập tin là:Ánh xạ trường tinTên trường tin:Trường tinTrường tinCác trường tin của bộ thẻ %sTrường tin phân cách bằng: %sTrường tin...LọcLọc:Đã lọcBộ thẻ Lọc %dTìm Thẻ t&rùng...Tìm Thẻ trùngTìm và Th&ay...Tìm và ThayXongThẻ ĐầuÔn tập Lần đầuTrường đầu tiên khớp: %sĐã sửa %d thẻ có thuộc tính không hợp lệ.Đã sửa lỗi ghi đè bộ thẻ AnkiDroid.Kiếu phiếu cố định: %sLậtThư mục đã tồn tại.Kiểu chữ:Chân trangVì lý do an ninh, bạn không được dùng '%s' trên thẻ. Bạn vẫn có thể dùng nó bằng cách đặt lệnh trong một gói khác, rồi nhập gói đó vào đầu đề LaTeX.Dự báoBiểu mẫuTìm thấy %(a)s trên %(b)s.Mặt trướcXem trước Mặt trướcKiểu mẫu Mặt trướcTổng quátTập tin đã phát sinh: %sĐã phát sinh vào %sLấy Bộ thẻ Chia sẻĐượcKhoảng cách mức ĐượcTrình soạn thảo HTMLKhóĐầu trangTrợ giúpĐộ dễ cao nhấtLịch sửGốcChia nhỏ Theo giờGiờNhững mốc giờ có ít hơn 30 thẻ ôn tập sẽ không được hiển thị.Xin vui lòng liên lạc với chúng tôi nếu bạn có tham gia đóng góp mà không thấy tên mình trên danh sách.Nếu học hàng ngày thìBỏ qua mỗi khi thời gian trả lời lâu hơnBỏ qua phân biệt hoa thườngBỏ qua trườngBỏ qua những dòng mà trường tin đầu tiên trùng với phiếu hiện cóBỏ qua bản cập nhật nàyNhậpNhập Tập tinNhập vào ngay cả khi phiếu hiện có có cùng trường tin đầu tiênNhập thất bại. Nhập thất bại. Thông tin gỡ lỗi: Tùy chọn nhậpNhập hoàn tất.Nằm trong thư mục phương tiện nhưng chưa được thẻ nào dùng:Để bảm đảm rằng bộ sưu tập của bnạ hoạt động đúng đắn khi chuyển thiết bị, Anki yêu cầu đồng hồ bên trong máy tính của bạn phải được đặt chính xác. Đồng hồ bên trong có thể sai ngay cả khi hệ thống của bạn hiện thời gian nội bộ chính xác. Vui lòng đến thiết lập thời gian trên máy tính của bạn và kiểm tra các phần sau: - Sáng/Chiều - Độ lệch giờ - Ngày, tháng, năm - Múi giờ - Tiết kiệm giờ theo mùa Sai biệt với giờ đúng: %s.Bao gồm dữ liệu phương tiệnBao gồm thông tin lập lịchBao gồm nhãnTăng giới hạn thẻ mới cho hôm nayTăng giới hạn thẻ mới cho hôm nay vớiTăng giới hạn thẻ ôn tập cho hôm nayTăng giới hạn thẻ ôn tập cho hôm nay vớiKhoảng cách tăng dầnCài Phần gắn thêmNgôn ngữ Giao diện:Khoảng cáchHệ số khoảng cáchKhoảng cáchMã không hợp lệ.Tập tin không hợp lệ. Xin vui lòng phục hồi từ bản sao lưu.Tìm thấy thuộc tính không hợp lệ trên thẻ. Vui lòng dùng Công cụ > Kiểm tra CSDL và nếu vẫn có vấn đề, vui lòng hỏi trên trang hỗ trợ.Biểu thức chính quy không hợp lệ.Thẻ đã bị dừng.Nhảy đến nhãn với Ctrl+Shift+TGiữLaTeXPhương trình LaTeXMôi trường toán LaTeXHỏngThẻ CuốiÔn tập Sau cùngThẻ thêm mới nhất trướcHọcGiới hạn học trướcHọc: %(a)s, Ôn: %(b)s, Học lại: %(c)s, Lọc: %(d)sĐang họcHành động với thẻ bámNgưỡng thành thẻ bámTráiGiới hạn trongĐang nạp...Khoảng lâu nhấtTìm trong trường tin:Độ dễ thấp nhấtQuản lýQuản lý các Kiểu Phiếu...Ánh xạ với %sÁnh xạ với NhãnTrưởng thànhKhoảng tối đaÔn tập tối đa/ngàyPhương tiệnKhoảng tối thiểuPhútTrộn lẫn thẻ mới và thẻ ôn tậpBộ thẻ Mnemosyne 2.0 (*.db)ThêmNhiều lần hỏng nhấtDi chuyển ThẻDi chuyển thẻ vào bộ thẻ:&Ghi chúTrùng tên đã có.Tên cho bộ thẻ:Tên:MạngMớiThẻ MớiChỉ thẻ mớiThẻ mới/ngàyTên bộ thẻ mới:Khoảng mớiTên mới:Kiểu phiếu mới:Tên nhóm tùy chọn mới:Vị trí mới (1...%d):Ngày kế tiếp bắt đầu lúcChưa có thẻ nợ.Không có thẻ ứng với tiêu chí bạn đã đưa.Không có thẻ trống.Chưa có thẻ trưởng thành học trong hôm nay.Không tìm thấy tập tin thiếu hay thừa nào.PhiếuMã số PhiếuKiểu PhiếuCác Kiểu PhiếuĐã xóa phiếu và %d thẻ liên kết.Đã tạm hoãn phiếu.Đã dừng phiếu.Lưu ý: Dữ liệu phương tiện sẽ không được sao lưu. Xin vui lòng sao lưu định kỳ thư mục Anki của bạn để phòng xa.Lưu ý: Một vài thông tin lược sử bị thiếu. Để biết thêm chi tiết, xin vui lòng tham khảo tài liệu trình duyệt.Các phiếu dạng Văn bản ThôPhiếu cần ít nhất một trường tin.Đã gắn nhãn cho phiếu.Không gìĐồng ýThẻ lâu nhất trướcỞ lần đồng bộ kế tiếp, bắt buộc thay đổi trong một hướngKhông nhập phiếu được vì nó không phát sinh thẻ nào cả. Điều này có thể xảy ra khi bạn có trường tin trống hay bạn chưa ánh xạ nội dung trong tập tin văn bản vào các trường tin tương ứng.Chỉ có thể định vị lại thẻ mới.Chỉ một trình khách có thể truy xuất AnkiWeb một lúc. Nếu lần đồng bộ trước hỏng, vui lòng thử lại trong ít phút.MởĐang tối ưu hóa...Giới hạn tùy chọn:Tuỳ chọnTùy chọn bộ thẻ %sNhóm tùy chọn:Tùy chọn...Thứ tựThứ tự thêm vàoThứ tự đến hạnThay thế kiểu mẫu mặt sau:Thay thế kiểu chữ:Thay thế kiểu mẫu mặt trước:Mật khẩu:DánDán hình ảnh clipboard với dạng PNGBài học Pauker 1.8 (*.pau.gz)Phần trămThời gian: %sĐặt vào cuối hàng đợi thẻ mớiĐặt vào hàng đợi ôn tập với khoảng cách giữa:Xin đưa thêm một kiểu phiếu khác trước.Xin vui lòng gắn micro vào, và chắc chắn rằng những chương trình khác đang không dùng thiết bị tiếng.Xin vui lòng sửa phiếu này và tạo một vài chỗ trống. (%s)Xin vui lòng đảm bảo rằng hồ sơ đã mở và Anki đang rỗi, rồi thử lại.Xin vui lòng cài đặt PyAudioXin vui lòng mở một hồ sơ trước.Vui lòng bỏ thư mục %s và thử lại.Vui lòng chạy Công cụ > Thẻ TrốngXin vui lòng chọn một bộ thẻ.Vui lòng chọn thẻ chỉ thuộc một kiểu ghi chú.Xin vui lòng chọn một cái gì đó.Xin vui lòng nâng cấp lên phiên bản Anki mới nhất.Xin vui lòng dùng Tập tin>Nhập để nhập tập tin này.Xin vui lòng ghé thăm AnkiWeb, nâng cấp bộ thẻ, rồi thử lại.Vị tríTùy chỉnhXem trướcXem trước Thẻ Được chọn (%s)Xem trước thẻ mớiXem trước thẻ mới thêm vào sau cùngĐang xử lý...Hồ sơYêu cầu xác thực ủy nhiệm.Câu hỏiCuối hàng đợi: %dĐầu hàng đợi: %dThoátNgẫu nhiênTrộn ngẫu nhiên thứ tựĐánh giáTái tạoThu TiếngĐang thu...
Thời gian:%0.1fTình trạng đến hạn liên quanHọc lạiGhi nhớ nhập liệu sau cùng khi thêm mớiLoại bỏ kiểu thẻ này sẽ khiến cho một hoặc nhiều phiếu bị xóa. Xin tạo một kiểu thẻ mới trước.Đổi tênĐổi tên Bộ thẻPhát lại Âm thanhPhát lại TiếngĐịnh vị lạiĐịnh vị lại Thẻ MớiĐịnh vị lại...Yêu cầu một hoặc một số nhãn sau:Lập lịch lạiLập lịch lạiLập lịch lại thẻ các dựa trên cách tôi trả lời ở bộ thẻ nàyTiếp tục Bây giờHướng văn bản ngược (phải qua trái)Phục hồi lại trạng thái trước '%s'.Ôn tậpSố Ôn tậpThời gian Ôn tậpÔn trướcÔn trướcÔn thẻ quên sau cùngÔn thẻ quênTỷ lệ ôn tập thành công mỗi giờ trong ngàyÔn tậpPhảiPhạm vi: %sTìmTìm trong định dạng (chậm)ChọnChọn &HếtChọn &PhiếuChọn nhãn để loại trừ:Tập tin được chọn không có định dạng UTF-8. Vui lòng tham khảo phần nhập vào của tài liệu hướng dẫn.Học tập Lựa chọnDấu chấm phẩyKhông tìm thấy máy chủ. Hoặc là bạn đã bị mất kết nối, hoặc có phần mềm chống virus/tường lửa đang ngăn chặn Anki kết nối với internet.Đặt tất cả bộ thẻ dưới %s vào nhóm tùy chọn này?Đặt cho tất cả bộ thẻ conPhím Shift được nhấn giữ. Bỏ qua đồng bộ tự đồng và nạp phần gắn thêm.Dịch chuyển vị trí các thẻ hiện hữuPhím tắt: %sPhím tắt: %sHiện %sHiện Đáp ánHiện Thẻ trùngHiện đồng hồ bấm giờ trả lờiHiện thẻ mới sau phần ôn tậpHiện các thẻ mới trước khi ôn tậpHiện các thẻ mới theo thứ tự thêm vàoHiện các thẻ mới theo thứ tự ngẫu nhiênHiện thời gian ôn tập kế tiếp trên các nút trả lờiHiện số thẻ còn lại trong lúc ôn tậpCỡ:Vài thẻ liên quan hoặc thẻ chôn bị hoãn lại đến phiên sau.Một số thiết lập chỉ có hiệu lực sau khi chạy lại Anki.Vài cập nhật bị bỏ qua vì kiểu phiếu đã thay đổi:Trường Sắp xếpSắp xếp theo trường này trong trình duyệtKhông hỗ trợ sắp xếp trên cột này. Xin vui lòng chọn cột khác.Khoảng trắngVị trí bắt đầu:Độ dễ ban đầuThống kêBước:Bước (phút)Bước phải là sốĐã học Hôm nayHọc tậpHọc Bộ thẻHọc Bộ thẻ...Học Bây giờHọc theo trạng thái thẻ hay nhãnĐịnh kiểuĐịnh kiểu (chia sẻ giữa các thẻ)Tập tin xuất XML của Sumermemo (*.xml)DừngDừng ThẻDừng PhiếuDừngDừng+Tạm hoãnĐồng bộ cả âm thanh và hình ảnhĐồng bộ thất bại: %sĐồng bộ thất bại; kết nối ngoại tuyến.Để tiến hành đồng bộ, đồng hồ máy tính phải được đặt chính xác. Xin vui lòng chỉnh đồng hồ rồi thử lại.Đang đồng bộ...TabNhãn TrùngChỉ gắn NhãnNhãnBộ thẻ Đích (Ctrl+D)Trường tin đích:Văn bảnVăn bản ngăn cách bởi ký tự Tab hay Dấu chấm phẩy (*)Bộ thẻ đã tồn tại.Tên trường tin này đã được dùng.Tên này đã được dùng.Kết nối đến AnkiWeb bị quá thời gian. Xin vui lòng kiểm tra kết nối mạng rồi thử lại.Không thể loại bỏ cấu hình mặc định.Không thể xóa bộ thẻ mặc định.Sự phân chia thẻ trong bộ.Bản tải xuống bị hỏng. Xin vui lòng thử lại.Trường tin đầu tiên trống.Trường tin đầu tiên của kiểu phiếu phải được ánh xạ.Không dùng được ký tự này: %sMặt trước thẻ này trống. Vui lòng chạy Công cụ > Thẻ Trống.Phần nhập liệu bạn cung cấp sẽ tạo ra một câu hỏi trống trên mọi thẻ.Số thẻ mới bạn đã thêm.Số câu hỏi đã trả lời.Số thẻ ôn tập đến hạn trong tương lai.Số lần nhấn mỗi nút.Phân quyền trên thư mục tạm thời trên hệ thống của bạn không chính xác, và Anki không thể chỉnh nó tự động được Vui lòng tìm 'thư mục tạm' trong hướng dẫn sử dụng Anki để có thêm thông tin.Tập tin đã cho không phải tập tin .apkg hợp lệ.Yêu cầu tìm kiếm bạn cung cấp không khớp với bất kỳ thẻ nào. Bạn có muốn sửa lại không?Thao tác thay đổi này yêu cầu tải lên toàn bộ cơ sở dữ liệu trong lần đồng bộ bộ sưu tập kế tiếp. Nếu bạn có phần ôn tập hoặc thay đổi khác trên thiết bị khác chưa được đồng bộ thì chúng sẽ bị mất. Tiếp tục chứ?Thời gian trả lời câu hỏi.Vẫn còn nhiều thẻ nữa, nhưng đã đến giới hạn hàng ngày. Bạn có thể tăng thêm giới hạn trong phần tùy chọn, nhưng cần nhớ rằng bạn càng đưa ra nhiều thẻ mới thì gánh nặng ôn tập trong thời gian ngắn đối với bạn ngày càng cao hơn.Phải có ít nhất một hồ sơ.Cột này không dùng để sắp thứ tự được, nhưng bạn có thể nhấp vào một bộ thẻ bên trái để tìm kiếm bộ thẻ cụ thể.Tập tin này dường như không phải tập tip .apkg hợp lệ. Nếu bạn gặp lỗi này với tập tin tải xuống từ AnkiWeb, có khả năng bản tải của bạn đã hỏng. Vui lòng thử lại, và nếu vấn đề vẫn tồn tại, vui lòng thử lại với trình duyệt khác.Tập tin này đã tồn tại. Bạn có chắc chắn muốn ghi đè không?Thư mục này lưu trữ tất cả dữ liệu Anki vào một vị trí duy nhất, để dễ sao lưu. Nếu muốn Anki dùng một vị trí khác, xin vui lòng tham khảo: %s Đây là bộ thẻ đặc biệt để học ngoài thời khóa biểu bình thường.Đây là phần điền vào chỗ trống {{c1::sample}}.Thao tác này sẽ xóa bộ sưu tập bạn đang có và thay thế bằng dữ liệu trong tập tin bạn định nhập. Bạn có chắc chắn không?Thời gianGiới hạn khung thời gianCần ÔnĐể tạo chỗ điền trống trong phiếu hiện có, trước tiên cần chuyển nó sang kiểu phiếu điền chỗ trống, bằng cách chọn Chỉnh sửa>Đổi Kiểu Phiếu.Để xem ngay bây giờ, nhấp nút Bỏ tạm hoãn bên dưới.Để học thêm ngoài thời khóa biểu bình thường, nhấp nút Học Tùy biến bên dưới.Hôm nayĐã đến giới hạn trong ngày hôm nay, nhưng vẫn còn nhiều thẻ đang chờ ôn tập. Để giúp trí nhớ hoạt động hiệu quả hơn, bạn có thể xem xét tăng giới hạn hàng ngày trong phần tùy chọn.TổngTổng Thời gianTổng số thẻTổng số phiếuXử lý dữ liệu nhập theo dạng biểu thức chính quyKiểuKiểu trả lời: trường tin không biết %sKhông thể nhập được từ tập tin chỉ đọc.Bỏ tạm hoãnHoàn tácHoàn tác %sĐịnh dạng tập tin không xác định.Chưa thấyCập nhật các phiếu hiện tại khi so khớp trường tin đầu tiênĐã cập nhật %(a)d trong %(b)d phiếu hiện tại.Tải lên AnkiWebĐang tải lên AnkiWeb...Phương tiện được thẻ sử dụng nhưng không có trong thư mục phương tiện:Người dùng 1Phiên bản %sChờ hoàn tất chỉnh sửa.Cảnh báo, nút tạo chỗ trống sẽ không hoạt động được cho đến khi bạn chuyển kiểu phiếu ở trên cùng sang kiểu Điền chỗ trống.Khi thêm mới, mặc định thực hiện với bộ thẻ hiện hànhCả Bộ sưu tậpBạn có muốn tải xuống ngay bây giờ không?Bạn có một kiểu Phiếu Điền chỗ trống nhưng chưa tạo chỗ trống nào. Bạn có muốn tiếp tục không?Bạn có nhiều bộ thẻ. Vui lòng xem %(a)s. %(b)sBạn chưa thu tiếng.Bạn phải có ít nhất một cột.TrẻTrẻ+HọcThay đổi của bạn sẽ tác động đến nhiều bộ thẻ. Nếu bạn chỉ muốn thay đổi bộ thẻ hiện tại, vui lòng thêm vào một nhóm tuỳ chọn mới trước.Bộ sưu tập thẻ của bạn đang trong tình trạng thiếu nhất quán. Vui lòng chạy Công cụ > Kiểm tra Cơ sở dữ liệu, rồi đồng bộ lại.Bộ sưu tập hoặc tập tin phương tiện của bạn quá lớn để đồng bộ.Bộ sưu tập của bạn đã được tải lên AnkiWeb thành công. Nếu có dùng thiết bị nào khác, xin vui lòng đồng bộ hóa nó ngay, và chọn tải về bộ sưu tập mà bạn vừa tải lên từ máy này. Sau đó, những bước ôn tập và thẻ mới thêm vào trong tương lai sẽ được tự động kết hợp lại.Bộ thẻ của bạn ở đây và trên AnkiWeb khác nhau đến nỗi không thể kết hợp với nhau được, vì vậy cần phải ghi đè một bộ lên bộ còn lại. Nếu chọn tải xuống, Anki sẽ tải xuống bộ sưu tập trên AnkiWeb, và mọi thay đổi trên máy tính từ lần đồng bộ trước sẽ bị mất. Nếu chọn tải lên, Anki sẽ tải bộ sưu tập của bạn lên AnkiWeb, và mọi thay đổi trên AnkiWeb hoặc các thiết bị khác từ lần đồng bộ trước sẽ bị mất. Sau khi mọi thiết bị đã được đồng bộ, những lần ôn tập và thêm thẻ mới trong tương lai sẽ được tự động kết hợp với nhau.[không có bộ thẻ]sao lưuthẻthẻ từ bộ thẻthẻ được chọn theobộ sưu tậpngngàybộ thẻdòng đời bộ thẻtrùngtrợ giúpẩngiờgiờ qua nửa đêmlần hỏngít hơn 0.1 thẻ / phútánh xạ với %sánh xạ với Nhãnphútphútththẻ ôn tậpgiâythống kêtrang nàytcả bộ sưu tập~anki-2.1.0+dfsg~b36/locale/wo/000077500000000000000000000000001323611211500157435ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/wo/LC_MESSAGES/000077500000000000000000000000001323611211500175305ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/wo/LC_MESSAGES/anki.mo000066400000000000000000000053061323611211500210130ustar00rootroot000000000000002C<H"Il nx"&7 =HW n{%   17KT Yfk| t   , 8 = K Z j w           ! 5 = V a g s x          1-&!"2#%+  0' *( , $./ ) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%d card%d cards%d card deleted.%d cards deleted.%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s year%s years&Find&Next Card&Previous Card(please select 1 card)Find:Replace With:AddAdd (shortcut: ctrl+enter)Add to:Add: %sAll cards in random order (cram mode)CardCard %dCard 1Card 2Card ListCard TypeCard TypesCard Types for %sCardsCards in Plain TextCards...CopyDelete CardsEasyFind and ReplaceGoodHardOpenShow %sShow AnswerhelphidehoursminutesmoProject-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2014-04-08 07:36+0000 Last-Translator: Damien Elmes Language-Team: Wolof MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n > 1; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) Am na %d kart. Am na %d kart.%% Baax%(a)0.1f %(b)s/bés%d kart%d kart%d kart%s duppi%s fan%s fan%s waxtu%s waxtu%s simili%s simili%s simili.%s simili.%s weer%s weer%s at%s at&Wut&Kart ci topp&Kart bi jiitu(tannal 1 kart)Wut :Wuutal Ag :DolliDolli (gattal : ctrl + enter)Dolli ci biir :Dolli : %sKart yi yëpp ci mbetteelKartKart %dKart 1Kart 2Limu KartGiiru KartGiiru Kart yiGiiru Kart yi bu %sKart yiKart yi ci Mbindu CosaanKart yi...DuppiFar ay KartYombWut ag WuutalBaaxJafeUbbiWon %sWon wuyu bindimbalnëbbwaxtusimilimoanki-2.1.0+dfsg~b36/locale/zh_CN/000077500000000000000000000000001323611211500163175ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/zh_CN/LC_MESSAGES/000077500000000000000000000000001323611211500201045ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/zh_CN/LC_MESSAGES/anki.mo000066400000000000000000002027221323611211500213700ustar00rootroot00000000000000gT6H H HHH"HI I II>I8PIIIII"I$I$J&;J"bJJ4J2JKK".K$QK$vK$K KKKLL%L6LKLbLuL LLLLLLLL LLLLLM MMM M$M +M5M ;MFMOM aMlMsMMMMMMMM0M N%N4N :N ENPNVNiNNNOOOO%O*O/O3O7OT;OO,O(OO!P)PfAPP PP P PPQQ,QeCQQ7SR RR5RXRY7S%SkS #T /T:T>TYT jT tT~T T TT TTT'TUUU'U -U$9U^U dUpUU U U%UKUV+VV"XX XXYYIjZRZv[7~[ [w[E:\@\\\\R\2];]]#]#]!^ @^za^^(^_ &_3_ G_T_m_~_ _ _ _____ __``*`@`P`V`]` b` l`)v`'``aaaaaa a a a a aa abb$b3*b^bSrbbbb b bbcc1cEc"Xc{cc0 d>dNd&`d dd dd d d dd ddd e&e,eJePe-eeeee e(e5e f!fff8f5fP"g7sggg gg#ghhh%h,h3h :h Eh Ph[hbhkhrhyhhhhh h h h h h h h h i ii%i ,i 7iEiXi iivi iiiii i i iij/jAjGj\j%djj j j j j j j jj,k(-kVktkFkNkPl>plPlm] m gm8smmmmmmm nn n%n *n 5nCn Hn Rn _nin pn}nn)n0nno4o!FV'*ŕ(1K, I6'p#_en8eC.(rFrUZ mwu-/MӞ!'ȟ Ο ٟ !'6L^ʠϠנ."&@gy, šС U $a"ZS0i$" {^p5ϤU}d  +-2 7 AKPU[ovȩ˩ө۩  ѫӫܫ$%)O_p Ϭ $3 P\q­ ׭  (/>DJS Yci o}  Ʈ Ѯ ߮  % 0 >IZn}ӯ 4DM] fp`!&. 3 ? K V aMl+ֱ% FQ^ IJҲ , ;HI2$W`;sN['Zf ") ?Lbu  ض  0 KYl} 0]޷<Y8 "Bej}Rh>XWS' Ӽjݼ4H1} ý:ʽ o׾9P!c   Ϳ Կ ! !+ MZmt     % 2? O\n'? )3:AP`s 8.J ^$k  $& K Xb~'3-]=54R7g $ %,3: A L Wbiry %,3 : D Q^n$  9! [ er!y 3(I"r'##&#,)P zZ;#*=Ukr   ,"1O4 *K\p  !+ FPRU u     $1 BOV fs$  &-  (/@T d q  -  2&]Y '+> E3R 0X[n !!$  ) 6DK[5b#$z}!  !.AQjqC B" er     "/6Okr 9  ,' T ao  %'!8'Z $TM]0I%d*   +-> lv} "" K0=|[2%C"i$( #.D.s  "/B Vc j u   !"(Dml /9R-b + 4A9T   4!Jl5s   #.?MX|3:n; $ @ N X e r--< j tE~+0 !$.*S~   )$6[!b (KD  +$6[Hu0(Aj/6!2Qn+B4w *7(N!Gp#{6".Y1`" ;E3B! 61 hu ').-Hv ~ $< anGg37kk[)-`R  '. 5 BOj} fv&?OX? dbOkv@\zVk+`l)1l7fjH/879Y"P?UV{M_ZEbCN5 p vm-T!:Xl<SY,-.6/#023a\5KH`[sHIe"9` G.$CB& R@ DTsuR)<>.1(  } Lh[w1I~pJJN+6W(*ALQDg<2$NDrJ3xWP{MS] U,8Qg:~#[uDS@aG  6rXZRo4"'QXECR<]}(BOZ c|]_ct#8 wx]Ao90  4TxqL;o_;5^^fB/*m:S a#te$2Ud{q2Agd$`E@~ P%&'()*+gri!7HId=,ypUn5W k%F*i9Gb|jccyiYz0 >T}GquMn.F=+),-t="/-wV!04MA |_;z7W'QF=s!\e8h?Z%yFK YCm&Vn>>'3I^ 1J:46 [aK;fKNbPLe%\^hO3EjB (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fkB up, %(b)0.1fkB down%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(n)d: %(name)s%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media change to upload%d media changes to upload%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note unchanged%d notes unchanged%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Browse and Install...&Cards&Check Database&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Switch Profile&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd...Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn add-on you installed failed to load. If problems persist, please go to the Tools>Add-ons menu, and disable or delete the add-on. When loading '%(name)s': %(traceback)s An error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki does not support files in subfolders of the collection.media folder.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any FlagAny cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Attach pictures/audio/video (F3)Automatic syncing and backups have been disabled while restoring. To enable them again, close the profile or restart Anki.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Blue FlagBold text (Ctrl+B)BrowseBrowser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)Change deck depending on note typeChangedChanges below will affect the %(cnt)d note that uses this card type.Changes below will affect the %(cnt)d notes that use this card type.Changes will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClear FlagClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCloze deletion (Ctrl+Shift+C)Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloaded %(fname)sDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFilterFilter...Filter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet Add-ons...Get SharedGoodGraduating intervalGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid file name, please rename: %sInvalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Italic text (Ctrl+I)Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note TypesManage Note Types...Manage...Map to %sMap to TagsMark NoteMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards in deck over today limit: %sNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo FlagNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOpen Backup...Optimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please give your filter a name:Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.Purple FlagQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecord audio (F5)Recording...
Time: %0.1fRed FlagRelative overduenessRelearnRemember last input when addingRemove %s from your saved searches?Remove Card Type...Remove Current Filter...Remove Tags...Remove formatting (Ctrl+R)Removing this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename Card Type...Rename DeckReplace your collection with an earlier backup?Replay AudioReplay Own VoiceRepositionReposition Card Type...Reposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Revert to backupReverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsReviews due in deck over today limit: %sRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow Both SidesShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSidebarSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Subscript (Ctrl+=)Supermemo XML export (*.xml)Superscript (Ctrl++)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will create %d card. Proceed?This will create %d cards. Proceed?This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo browse add-ons, please click the browse button below.

When you've found an add-on you like, please paste its code below. You can paste multiple codes, separated by spaces.To make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.UnburyUnderline text (Ctrl+U)UndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?Updated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sView Add-on PageView FilesWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.Your firewall or antivirus program is preventing Anki from creating a connection to itself. Please add an exception for Anki.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-10-01 02:16+0000 Last-Translator: Robert Windy Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) Language: zh_CN (%d分之1) (已禁用) (关) (开) 有 %d张卡片%% 正确%(a)0.1f %(b)s/天上传 %(a)0.1fkB, 下载 %(b)0.1fkB%(a)0.1f 秒 (%(b)s)更新了%(b)d条笔记中的%(a)d条%(n)d: %(name)s%(tot)s %(unit)s%.01f 卡片/分钟%d张卡片删除了%d张卡片导出了%d张卡片导入了%d张卡片学习了%d张卡片,用时上传了%d个牌组%d种组合%d 多媒体文件更改需要上传已下载 %d 多媒体文件%d条笔记添加了%d条笔记删除 %d 处附注导出了%d处附注导入了%d条笔记%d 处附注不变更新了%d条笔记%d 次复习选中 %d 个%s 复制%s 天%s小时%s分钟%s 分钟%s个月%s 秒将要删除%s%s年%s天%s小时%s分%s 个月%s秒%s年关于(&A)...浏览&安装(&B)卡片(&C)检查数据库 (&C)强记所选卡片(&C)编辑(&E)导出(&E)...文件(&F)查找(&F)选择(&G)用户手册(&G)用户手册(&G)...帮助(&H)导入(&I)...关于(&I)反向选择(&I)下一张卡片(&N)笔记(&N)打开插件文件夹(&O)首选项(&P)...前一张卡片(&P)重设学习进度(&R)支持Anki(&S)切换配置方案(&S)工具(&T)撤销(&U)'%(row)s' 行有 %(num1)d 个字段, 预期 %(num2)d%s正确笔记已删除(完成)已过滤正在进行的课程(新)(父牌组限制: %d)(请选择一张卡片)....anki2文件不能用来导入,如果你想恢复备份,请查看用户手册的备份部分/0天1个月1年上午10点下午10点上午3点上午4点下午4点收到错误:504 网关超时。 请尝试暂时禁用你的杀毒软件。:%d 卡片打开备份文件夹访问网页%(pct)d%% (%(x)s 源于 %(y)s)%Y-%m-%d @ %H:%M备份
每次关闭和同步之后Anki都会对你的数据进行备份导出格式查找字体大小:字体:选择字段:包含:行大小:替换:同步同步
尚未启用,点击主界面的同步按钮启用。

需先注册

你需要一个免费帐号来同步你的数据. 请注册 一个帐号,并在下方填写详细资料。

Anki有更新

Anki %s 发布了。

<忽略><非unicode文本><在这里输入进行搜索,点击回车键显示牌组>向所有提出过建议,报告过bug以及提供过捐助的人们致谢。卡片的难易程度衡量了你再次回答“犹豫/想起”的时间间隔的大小。经过滤的牌组不能有子牌组。同步媒体文件时出现问题。请使用 工具>检查媒体 后再次同步以纠正这种情况失败: %s关于Anki添加添加(快捷键:ctrl+enter)添加卡片类型…添加字段添加多媒体文件添加新的牌组添加笔记类型反向添加添加标签添加标签...添加到:插件没有配置界面插件不是来自 AnkiWeb附加组件添加…添加:%s已添加今天添加的添加首字段%s的副本生疏/错误今天再来一次重复计数: %s所有卡片类型所有的牌组所有字段所有卡片的顺序为随机的 (补习模式)该本地帐户下所有的卡片、笔记、多媒体文件都会被删除,你确定么?允许在字段中使用HTML您安装的某个插件加载失败。如果此问题仍无法解决,请移步 工具-插件 菜单,并禁用或者删除插件。 When loading '%(name)s': %(traceback)s 访问数据库时出现错误,可能的原因是: - 反病毒、防火墙、备份或数据同步软件可能干扰了Anki。试着禁用这些软件,看看问题是否消失。 - 磁盘容量满了。 - 文档/Anki 文件夹可能是网络硬盘。 - 文档/Anki 文件夹不可写. - 硬盘出错了。 当打开 %s 时出现一个错误AnkiAnki 2.0 版牌组Anki 牌组包因为Anki不能重命名你的配置文件夹,所以不能重命名你的配置文件。请确定你有文档/Anki文件夹的写权限,同时没有其它程序正在访问你的配置文件目录后,再重试。Anki无法区分问题与答案。请手动调整模版以明确问题与答案。Anki 不支持 collection.media 目录下二级目录的文件Anki是一个基于重复学习原理的记忆软件,简单易用,免费并开源。Anki以AGPL3协议发布. 请查看源代码分布中的协议文件获得更多信息.用户名或密码错误,请重试。用户名Anki网络遇到了一个错误,请稍后重试。如果问题仍然存在,请填写一份bug报告。Anki服务器目前十分繁忙,请稍后重试。AnkiWeb在维护中,请几分钟后再试一遍答案回答按钮答案杀毒软件或防火墙正在阻止Anki连接到因特网任何标注所有孤立的卡片都会被删除,没有保存到卡片中的笔记也会丢失,您确定要继续么?在文件%s中出现了两次您确定要删除%s?至少需要一个卡片类型请至少选择一个难易度附加图片/音频/视频 (F3)自动同步和备份已关闭,重启 Anki 以启用。自动播放音频打开本地帐户时自动同步平均平均用时平均回答用时平均难度平均平均间隔背面背面预览背面模版备份中…备份基础基础的(和相反的卡片)基础(任意相反的卡片)蓝色标注加粗(Ctrl+B)浏览浏览器外观浏览器偏好…浏览器选项Build被占用本次不复习搁置卡片搁置笔记搁置相关新卡片到隔日搁置相关复习到隔日默认情况下,Anki将会检测各字段之间的字符,例如 制表符,逗号等等。如果Anki未能正确检测字符,你 可以在这里输入字符。用“\t“代表制表符。取消卡片卡片 %d卡片1卡片2卡片 ID卡片列表窗口卡片状态卡片类型卡片类型:卡片类型%s的卡片类型已搁置的卡片暂停的卡片子卡片为记忆难点卡片不能手动移动卡片到过滤牌组纯文本卡片卡片在复习完后将会自动回到原始的记忆库中。卡片…居中更改将%s改为:改变记忆库改变记忆库…改变笔记类型改变笔记类型(Ctrl+N)改变笔记类型…改变颜色(F8)根据笔记类型改变牌组已更改%(cnt)d 张使用此卡片类型的笔记将会受影响重启 Anki 以应用更改检查媒体(&M)...检查更新检查媒体文件目录中的文件正在检查...选择选择记忆库选择笔记类型选择标签清除标注清除未使用的删除未被使用的标签克隆:%s关闭关闭并放弃当前的输入吗?关闭中…填空题创建填空 (Ctrl+Shift+C)代码:集合导出成功集合已经损坏。请查阅手册。冒号逗号设置设置设置界面语言和选项恭喜!你目前已经完成了这个记忆库。正在连接...连接超时。可能是网络连接有问题,或者在媒体目录里有很大的文件。继续复制熟练卡片的正确答案:%(a)d/%(b)d (%(c).1f%%)正确: %(pct)0.2f%%
(%(good)d of %(tot)d)无法连接到AnkiWeb。请确认你的网络连接没问题,然后再试一遍我发记录语音。你已经安装过lame和sox吗?不能保存文件: %s强记模式创建记忆库创建筛选的牌组…用 dvisvgm 创建可缩放的图片创建时间Ctrl+0Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+ZCtrl+DCtrl+DelCtrl+ECtrl+FCtrl+JCtrl+KCtrl+NCtrl+PCtrl+QCtrl+Shift+ACtrl+Shift+DCtrl+Shift+FCtrl+Shift+ICtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+RCtrl+Shift+SCtrl+WCtrl+Z累计总和 %s累计回答累计卡片当前记忆库当前笔记类型:自定义学习自定义学习进程剪切数据库已重建并且被优化。日期打卡天数解除授权调试控制台:牌组集合覆盖…当一个配置文件打开时记忆库将会被导入。记忆库降低间隔默认延迟直到复习再次出现。删除删除卡片删除牌组删除空白删除笔记删除笔记删除标签删除未使用从 %s 删除字段?确定删除'%(a)s'卡片类型和它的%(b)s吗?删除该笔记类型及其所有卡片?删除该未使用的笔记类型?确定删除未用多媒体文件吗?已删除 %d 没有笔记的卡片.已删除 %d 模板丢失的卡片.已删除 %d 条缺失类型的笔记.已删除 %d 没有卡片的笔记.删除了 %d 个有错误统计的笔记.已删除.从牌组列表删除这个牌组将会把所有剩余卡片移动回原始牌组中去。描述用以显示在学习屏幕上的描述(仅限当前牌组)对话从 AnkiWeb 下载下载 %(fname)s 成功从 AnkiWeb 下载...到期仅到期卡片明天到期退出(&X)难度系数顺利/正确简单奖励简单间隔编辑编辑 "%s"编辑当前编辑HTML已编辑编辑字体空空卡片...空卡片数量: %(c)s\n 字段: %(f)s\n\n 发现了空卡片。请运行工具>空卡片。首字段: %s 为空结束打开牌组以放入 %s 张新卡片, 或者留空:键入新卡片位置 (1...%s):输入要添加的标签:输入要删除的标签:下载 %(id)s 错误:%(error)s下载错误: %s启动时出错: %s建立安全连接出错。这可能是反病毒、防火墙或VPN软件导致的,或者是你的网络服务提供商的问题。执行 %s 错误。运行 %s 出错导出导出...导出了%d个媒体文件额外的FF1文件的第%d字段是:字段对应字段名称:字段:字段%s 的字段字段由%s分割字段...过滤器 (&T)过滤器过滤...过滤器:已过滤筛选牌组%d查找重复(&D)查找重复查找替换(&P)查找替换结束第一张卡片首次学习首字段匹配的: %s修正了%d 张无效属性的卡片修正AnkDroid牌组覆盖问题固定的笔记种类: %s标注已标注的卡片翻文件夹已存在.字体:底部出于安全考虑, '%s' 不允许出现在卡片中. 你依然可以通过把命令放在不同的包中使用, 然后通过在LaTeX文件头中导入包的方式来替代.预测表格在 %(b)s 中找到 %(a)s 。正面正面预览正面模版总体生成文件: %s已在 %s 上生成获取插件…获取牌组犹豫/想起毕业间隔绿色标注HTML编辑器困难/模糊您是否安装了 Latex 和dvipng/dvisvgm?头部帮助最高减轻历史首页每小时的分析小时少于 30 次/h 复习的小时数将不会显示.如果你做出了贡献而你的名字却没有出现在这个列表里,请联系我们。如果你每天学习忽略回答时间长于忽略大小写忽略字段当首字段匹配时忽略现有笔记忽略这次更新导入导入文件即使现有笔记含有相同首字段亦导入。导入失败。 导入失败. 调试信息: 导入选项导入成功。在媒体文件夹但没有被任何卡片使用为了保证你的集合在不同设备间工作正常, Anki 需要计算机内部时钟被正确设置。 即使系统显示正确的当地时间,内部时钟依旧可能是错的。 请进入计算机的时间设置并检查以下选项: - 上午/下午 - 时钟漂移 - 年,月,日 - 时区 - 夏时制 和正确时间的差异: %s.包含媒体文件包含学习进度信息包含标签增加今天的新卡片上限增加了今天的新卡片上限增加今天的复习卡片上限增加了今天的复习卡片上限增加间隔安装插件界面语言:间隔间隔修饰符间隔无效代码,或该插件不支持此版本的 Anki代码非法。配置无效: 非法文件名,请重命名:%s文件不合法. 请从备份恢复.在卡片中发现无效属性。请使用 工具>检查数据库,如果该问题仍存在,请到网站寻求帮助。无效的正则表达式非法的搜索 - 请检查拼写已经被暂停.斜体 (Ctrl+I)用Ctrl+Shift+T跳到标签保留LaTeXLaTeX 公式LaTeX数学环境失误次数最后一张卡片最近的复习最后添加的先复习学习先学习的上限学习: %(a)s, 复习: %(b)s, 重新学习: %(c)s, 已过滤: %(d)s正在进行的课程记忆难点动作难点阈值左对齐限制为正在载入...本地集合没有任何卡片,您需要从 AnkiWeb 下载吗?最长间隔寻找栏目:最低简化管理管理笔记类型管理笔记类型…管理...对应到 %s对应到标签标注笔记熟练最大间隔最大复习数/天媒体最小间隔分钟混合新卡片和复习Mnemosyne 2.0 牌组 (*.db)更多最多失误数移动卡片移动卡片到牌组:不支持分隔多个字符,请只输入一个字符。笔记(N&)姓名存在.牌组名字:名称:网络新建新卡片集合中的新卡片超出今日上限:%s仅新卡片新卡片/天新牌组名称:新间隔新名称:新笔记类型:新选项组名称:新位置 (1...%d):下一天开始无标注还没有卡片到期.没有卡片满足你提供的标准.没有空卡片.今天没有到期卡片被学习没有找到未使用或缺失的文件没有可用更新笔记笔记 ID笔记类型笔记类型笔记及它的%d张卡片被删除.已搁置的笔记暂停的笔记注意: 媒体文件没有被备份. 为了安全请定期备份你的Anki文件夹.注意: 部分历史已经丢失. 更多详细信息请查看浏览器文档.纯文本格式的笔记笔记需要至少一个字段.已标注的笔记无确定优先查看最旧的在下一次同步时, 强制单方向的改变.因其无法生成卡片,一个或多个笔记没有导入。这种情况通常是因为您把卡片的一栏空了出来或相应的文字无法映射到对应的卡片的栏目中。只有新卡片可以被重新定位.一次只能用一个用户登录AnkiWeb,如果之前的同步失败,请在几分钟后重试。打开打开备份...优化中...可选限制:选项%s 选项选项组:选项...顺序增加顺序到期顺序忽略背面模版覆盖字体:忽略正面模版打包的 Anki 集合 (*.apkg *.colpkg *.zip)密码:粘贴把剪切板图像保存为PNGPauker 1.8 课件 (*.pau.gz)百分比周期: %s放到新卡片队列队尾放入复习队列的时间间隔:请先加入另一个笔记类型.请连接一个麦克风, 并保证其他程序没有在使用音频设备.请编辑这个笔记并且添加一些填空的留白。(%s)请确保打开了一个配置文件并且Anki没有处于繁忙中,然后再试一次。请命名您的过滤器:请安装PyAudio请先打开一个个人配置文件.请删除目录 %s 后再重试。请重启 Anki 以完成语言切换请运行 工具>空卡片请选择一个牌组.请选择同一种笔记类型的卡片.请选择一些东西.请升级到最新版本的Anki.请使用 文件>导入 来导入这个文件.请访问AnkiWeb, 升级你的牌组并重试.位置偏好设置预览预览选择的卡片 (%s)预览新卡片预览加到最后的新卡片已处理%d个媒体文件处理中...个人配置文件需要代理授权.紫色标注问题队尾: %d队首: %d退出随机随机顺序评分重建录制自己的声音录制音频 (F5)录音中...
时间: %0.1f红色标注按照相对过期程度重新学习当添加时记住上一次输入将 %s 从您保存的搜索中移除?移除卡片类型…移除当前过滤器…移除标签…清除格式 (Ctrl+R)移除这个卡片类型将会导致一个或多个卡片被删除。请先建立一个新的卡片类型。重命名重命名卡片类型…重命名牌组用较早的备份替换现有的集合吗?重新播放音频重新播放自己的声音重新定位改变卡片类型…重新定位新卡片重新定位...需要这些标签中的一个或者多个:重新计划重新安排进度基于我在此牌组中的回答重新定制卡片计划现在恢复文字反向(RTL)恢复备份返回到"%s"之前的状态。复习复习数量复习时间提前复习提前复习按复习最后忘记的卡片复习忘记的卡片当天每小时的复习成功率复习集合中到期的复习数量超出今日上限:%s右对齐保存保存当前过滤器…保存为 PDF已保存范围: %s搜索用格式搜索(耗时长)选择全选(&A)选择笔记(&N)选择排除的标签:选择的文件不是UTF-8格式的。请查看帮助文档的导入部分。选择性学习分号服务器没有找到。或者你的链接是中断的,或者杀毒软件/防火墙软件正在阻止Anki链接Internet。将所有%s下的子牌组设置到这个选项组?对所有子牌组设置设置前景色 (F7)Shift键被按住。跳过自动同步以及插件加载。改变已存在卡片状态快捷键: %s快捷键:左方向键快捷键:右方向键或回车键快捷键: %s显示 %s显示答案显示双面显示重复显示回答计时器在复习后显示新卡片先学习新卡片,再复习按创建顺序学习新卡片按随机顺序学习新卡片在回答按钮上显示下一次复习时间在复习的时候显示剩余的卡片计数侧边栏大小:一些相关或搁置卡片会被推迟到下一学习周期进行。某些设置将在Anki重新启动后生效某些更新因笔记类型更改已被忽略:排序字段在浏览器中按照此字段排序不支持该列排序, 请选择另一列.间隔开始位置:开始简化统计统计步幅:步伐 (以分钟计)步伐必须是数字.正在停止...今天学习的学习学习牌组学习牌组...现在学习按照卡片状态或者标签学习样式格式刷(卡片格式共享)下标(Ctrl+=)Supermemo XML (*.xml)上标(Ctrl++)暂停暂停卡片暂停笔记已暂停暂停+搁置的同步同时同步音频和图像同步失败: %s同步失败; 网络离线.同步需要计算机的时钟设置正确. 请检查时钟设置并重试.正在同步...制表符复制标签仅标记标签目标牌组 (Ctrl+D)目标栏目:文字按制表符或者分号分隔的文本 (*)这个牌组已存在.卡片该面的文字已被使用。这个名字已被使用.链接到AnkiWeb 超时。 请检查你的网络连接,再试一次。默认配置不能被删除.默认牌组不能被删除.牌组中的卡片分布下载失败了。请重试。首字段为空.笔记类型的首字段必须被映射.下列字符不能被使用: %s卡片正面为空, 请运行 工具>空卡片.您的输入可能会使所有卡片的问题为空。您添加的卡片的数目。已经回答的问题的数量。将来到期的复习的数目按下每个按钮的次数.系统临时文件夹的权限设置不正确,Anki不能自动更改他们。请搜索在帮助手册中搜索"临时文件夹"以获取更多信息。提供的文件不是正确 . apkg文件。您的搜索不能匹配任何卡片。您愿意修改一下您的请求的改变需要在下次同步你的集合时上传整个数据库. 如果你还有在其他设备上未同步的复习或者其他改变, 他们将会丢失, 是否继续?答题用时您仍有新的卡片可以学习,但是已经达到 当日限值。您可以在选项中增加限值,但请 注意,您学习的新卡片越多,您所需的短期 复习量就越大。必须有至少一个个人配置文件.无法以该字段排序,但可用卡片类型来筛选(如“card:1”)本列不能被排序, 但是你能单击左侧搜索指定的牌组。这个文件不是可用的.apkg文件。如果您是从AnkiWeb下载的这个文件,有可能是您的下载失败了,请重试。如果问题依旧存在,请换一个不同的浏览器重试。文件已存在.确定要覆盖吗?包含您所有Anki数据的文件夹只存放在单一位置 以便备份。若需Anki使用其他位置, 请看: %s 这是一个在正常计划外学习的特殊牌组。这是一个 {{c1::示例}} 的完形填空。本次操作将创建 %d 张卡片,继续吗?这将会删除你现有的集合并将它替换为你导入的文件中的集合. 是否确认?时间时间框的时间限制待复习浏览插件请点击下方的“浏览”按钮。

如果您找到适合您的插件,请将插件代码粘贴到下方的文本框中。您可以输入多个代码,请将代码之间用空格隔开。要为现存的笔记制作一个完形填空,你需要先把笔记更改成完形填空的类别,通过编辑>更改笔记类型。欲现在查看,请点击“取消搁置”按钮在正常计划外学习, 请单击下面的自定义学习按钮.今天达到了今天的复习限制, 但是仍有卡片等待被复习. 为了最佳化记忆, 可以考虑在设置中增大每日限制.总计总计用时所有卡片所有笔记以正则表达式输入类型键入答案:未知域 %s不能从只读文件中导入.无法删除现存的文件 - 请重启您的电脑。取消搁置下划线 (Ctrl+U)撤销撤销 %s未知的文件格式.未看当首字段匹配时更新现有笔记更新以下插件?更新了 %(b)d 中 %(a)d 的已有笔记上传到AnkiWeb正在上传到AnkiWeb...卡片中有使用但媒体文件夹未找到用户1版本 %s浏览插件页面查看文件等待编辑完成.警告,在你把上方的笔记类型改成 "完形填空" 之前,你的完形填空的填空内容将不会发挥功能。当添加时,默认是当前牌组全部集合你想现在就下载?作者:Damien Elmes,补丁﹑翻译、测试及设计:

%(cont)s你有一个完形填空类型的笔记,但是还没有制作任何填空内容。仍然要继续吗?您有许多牌组尚未学习,请看%(a)s. %(b)s你还没有录制你的声音.必须至少有一列.新的新的+学习中的你的改变将会影响到很多牌组. 如果你只想要改变当前牌组, 请先添加一个选项组.你的集合处于不一致的状态. 请运行 工具>检查数据库, 然后再次同步.集合或者媒体文件过大而不能同步你的集合成功上传到了 AnkiWeb. 如果你使用任何其他设备的话, 请现在同步他们, 并选择下载你刚刚从这台电脑上上传的集合. 将来的复习和和加入的卡片将会自动合并.您的牌组与Ankiweb上的牌组存在不能合并的差异,所以必须覆盖其中之一。 如果您选择下载,那么Anki会从Ankiweb下载牌组,而您电脑上最后一次同步后的更改将会丢失。 如果您选择上传,那么Anki会上传牌组至Ankiweb,而您Ankiweb或其他设备上最后一次同步后的更改将会丢失。 当所有设备完成同步后,将来复习和新增的卡片将会被自动合并。您的防火墙或杀毒软件阻止了 Anki 创建连接,请将 Anki 添加到白名单中。[没有牌组]备份卡片牌组中的卡片卡片选择按集合天天牌组牌组使用期复制帮助隐藏小时点 (凌晨)失误次数小于 0.1张卡片/分钟对应到%s对应到标签分钟分钟月复习秒状态此页周全部集合~anki-2.1.0+dfsg~b36/locale/zh_HK/000077500000000000000000000000001323611211500163215ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/zh_HK/LC_MESSAGES/000077500000000000000000000000001323611211500201065ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/zh_HK/LC_MESSAGES/anki.mo000066400000000000000000000071531323611211500213730ustar00rootroot00000000000000Qm, -7 =HNTX ^iy   & ,:? GRY`gn u       ! , 5 < C P X ^ h m s z    L N _ i s z     . : E R T ] a h u              ! ( / 6 = D Q ^ k x                ,37>E LV]d5QAO, C=?G@!P$J K-.<I L"B2;& ')7%M3NF (:># 8D/01H+E*469%%d selected%d selected%s copy%s minute%s minutes%s second%s seconds&About...&Edit&Export...&File&Find&Go&Help&Next Card&Preferences...&Previous Card&Reschedule...&Tools&Undo(new)/1 month:AddAdd MediaAdd TagsAnkiAverageBackBrowseBuildCancelCardCenterChangeChangedChecking...CloseCode:ColonConnecting...CopyCreatedCtrl+Alt+FCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+ZDefaultDueError executing %s.Error running %sExtraForecastFrontHoursIntervalLearnLearningLeftMinutesPercentagePositionRandomReviewReview CountReviewsRightSuspendedTextTotalUnseenYounghoursminutesProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2016-06-30 19:01+0000 Last-Translator: Damien Elmes Language-Team: Chinese (Hong Kong) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) Language: zh_HK %已選擇 %d 個%s 複本%s 分鐘%s 秒關於 &A ...編輯 (&E)匯出(&E)...檔案 (&F)尋找 (&F)移至 (&G)說明 (&H)下一張名片(&N)偏好設定(&P)...上一張名片(&P)重新排程採購項目 &R ...工具 (&T)復原(&U)(新增)/1 個月:新增新增媒體加入標籤Anki平均上一頁瀏覽製造取消信用卡中心更改已更改檢查中...關閉編碼:冒號正在連接...複製建立日期Ctrl+Alt+FCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+Z預設值到期執行 %s 發生錯誤。執行 %s 時發生錯誤額外預測前小時間隔學習學習左側分鐘百份比職稱隨機檢閱評論計數評論右暫停文字全部未閱讀年輕小時分鐘anki-2.1.0+dfsg~b36/locale/zh_TW/000077500000000000000000000000001323611211500163515ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/zh_TW/LC_MESSAGES/000077500000000000000000000000001323611211500201365ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/locale/zh_TW/LC_MESSAGES/anki.mo000066400000000000000000001651541323611211500214310ustar00rootroot00000000000000/? ???"?? ??@8@N@_@r@"@$@$@&@"A:A2MAAA"A$A$A BWJW [W gWqWwWWW-WWW(W5X :XHXXX8X5YPIY7YYY YY#Z6Z >ZIZPZWZ^ZeZlZ sZ Z Z Z Z ZZZ Z ZZZ [[ ,[9[N[R[r[ w[ [ [[/[[[[%[\ #\ 0\ <\ I\ U\ b\ n\|\,\(\\]F]Nb]P]>^PA^^]^ ^8_>_E_[_w_{_ ____ _ __ _ _ __ __`)`09`j``4`!```aa3aaaa a.ab b"b%b Ab Ob[bbb ibwb bbbbbbbbb c c c+cNCcccccccdddd ddddd dee e%e,*eWe^e cepexe}ee.eFe f#f Cf Of4\fff f1fffg(g*F>'*(؃13,Ih'X#l_eV8MC(Zr u/M  Č Ќ!܌'!IPU]r.y&ύ,& -8UW$Ҏ"ZSa0$" . 4{@^5QUZ ”Ȕܔ   #)=DXns{~  \ j t~(× 4G[v  ؘ6 F T^ dp y  șΙԙ    &1B S ^iz"š֚ 4 AM_ h t y57 <FMRW[_Jc+͜!9TQ ˝$5ZI3;oxNZܟp7'eР6 FQX w  С ݡ ' 4>!Z | &E"&ڤߤ bΥY1V1 h ;;ŧ ?cYΨ30d kx ĩ ˩ ة #8?Uk r$'ʪ ī ͫ ګ 2B*It< ĬάҬ٬ #!9 [e!y   խ   **U\c! c 3#4WM5گ " /<"Ux  ΰ ۰    ! .;K d q~ űձ'ܱ $+J Q ^k { <в0 $>!c""(˳"' ?fI6  %, ? L Wah  ʵ յ ߵ -A.pB#Ѷ-@\ & -7PWY#\    θ ظ )<Scjz"̹ ĺ ˺ غ(/ KY0] Ż#̻B3On ~9 żҼ ټ9 / O \0id  $,'Qy'ٿ'*tR-9@ FSfm J . M W aFn *@ GT[t < . >H O Y cp ";Z!m$ 4)T?c *@DK0[8tT   '.>Ndt! - !9H[1T+<%U%{('$-C;q ! 1 >Kel  ']:   $3 C9P $)$? d nx   IAQX7E.t% .Ji*! E1D9v '- -=D KXm  ! ;H[ n{] 9FJiy* G%m!-'GF6!8"?. P)`z36{#]4; KUKN-|  ) 6Cb!i  -/L].w Z*-XhMN)IY xcdB\{ fsz (/6:AE LVZjF?rG,onf58K LdQTUzltMj( e }M[Or/t:F~|+_VheONZU9RR3.N7`{>d^&i'(\7*:+P {7MZB4o.%Sl<h^XUm |bu@wI*i*;< "P]?YI "-] XXA$#S<}!`1)[R,D6)i ;Cc fCa/Lo02SA2 v1p8Q)5rJ =gjD! 0-~YFV3h[D.bl%>~ 0&N>+qxmPWn=sd,wKgk3EsfE% pmIycO$H@#\x/n9#T}5A6ZuVv2"YW9{Cjtk&`HaJzy_EqT]s;'H@LazK_w $ye :B-1^(QW?Bkg!Gb4xG6='p\u|v8Jc 4q (1 of %d) (off) (on) It has %d card. It has %d cards.%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)s)%(a)d of %(b)d note updated%(a)d of %(b)d notes updated%(tot)s %(unit)s%.01f cards/minute%d card%d cards%d card deleted.%d cards deleted.%d card exported.%d cards exported.%d card imported.%d cards imported.%d card studied in%d cards studied in%d deck updated.%d decks updated.%d group%d groups%d media file downloaded%d media files downloaded%d note%d notes%d note added%d notes added%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%d note updated%d notes updated%d review%d reviews%d selected%d selected%s copy%s day%s days%s hour%s hours%s minute%s minutes%s minute.%s minutes.%s month%s months%s second%s seconds%s to delete:%s year%s years%sd%sh%sm%smo%ss%sy&About...&Cram...&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Invert Selection&Next Card&Open Add-ons Folder...&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(Note deleted)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card)....anki2 files are not designed for importing. If you're trying to restore from a backup, please see the 'Backups' section of the user manual./0d1 month1 year10AM10PM3AM4AM4PM504 gateway timeout error received. Please try temporarily disabling your antivirus.:%d card%d cardsOpen backup folderVisit website%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MBackups
Anki will create a backup of your collection each time it is closed or synchronized.Export format:Find:Font Size:Font:In:Include:Line Size:Replace With:SynchronisationSynchronization
Not currently enabled; click the sync button in the main window to enable.

Account Required

A free account is required to keep your collection synchronized. Please sign up for an account, then enter your details below.

Anki Updated

Anki %s has been released.

A big thanks to all the people who have provided suggestions, bug reports and donations.A card's ease is the size of the next interval when you answer "good" on a review.A filtered deck cannot have subdecks.A problem occurred while syncing media. Please use Tools>Check Media, then sync again to correct the issue.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd ReverseAdd TagsAdd to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll DecksAll FieldsAll cards in random order (cram mode)All cards, notes, and media for this profile will be deleted. Are you sure?Allow HTML in fieldsAn error occurred while accessing the database. Possible causes: - Antivirus, firewall, backup, or synchronization software may be interfering with Anki. Try disabling such software and see if the problem goes away. - Your disk may be full. - The Documents/Anki folder may be on a network drive. - Files in the Documents/Anki folder may not be writeable. - Your hard disk may have errors. It's a good idea to run Tools>Check Database to ensure your collection is not corrupt. An error occurred while opening %sAnkiAnki 2.0 DeckAnki Deck PackageAnki could not rename your profile because it could not rename the profile folder on disk. Please ensure you have permission to write to Documents/Anki and no other programs are accessing your profile folders, then try again.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.Anki is a friendly, intelligent spaced learning system. It's free and open source.Anki is licensed under the AGPL3 license. Please see the license file in the source distribution for more information.AnkiWeb ID or password was incorrect; please try again.AnkiWeb ID:AnkiWeb encountered an error. Please try again in a few minutes, and if the problem persists, please file a bug report.AnkiWeb is too busy at the moment. Please try again in a few minutes.AnkiWeb is under maintenance. Please try again in a few minutes.AnswerAnswer ButtonsAnswersAntivirus or firewall software is preventing Anki from connecting to the internet.Any cards mapped to nothing will be deleted. If a note has no remaining cards, it will be lost. Are you sure you want to continue?Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.At least one step is required.Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage for days studiedAverage intervalBackBack PreviewBack TemplateBackupsBasicBasic (and reversed card)Basic (optional reversed card)BrowseBrowser AppearanceBrowser OptionsBuildBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayBy default, Anki will detect the character between fields, such as a tab, comma, and so on. If Anki is detecting the character incorrectly, you can enter it here. Use \t to represent tab.CancelCardCard %dCard 1Card 2Card IDCard ListCard TypeCard TypesCard Types for %sCard buried.Card suspended.Card was a leech.CardsCards can't be manually moved into a filtered deck.Cards in Plain TextCards will be automatically returned to their original decks after you review them.Cards...CenterChangeChange %s to:Change DeckChange Note TypeChange Note Type (Ctrl+N)Change Note Type...Change deck depending on note typeChangedCheck &Media...Check the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?ClozeCode:Collection is corrupt. Please see the manual.ColonCommaConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Connection timed out. Either your internet connection is experiencing problems, or you have a very large file in your media folder.ContinueCopyCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed lame and sox?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+ZCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDecreasing intervalsDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete UnusedDelete field from %s?Delete the '%(a)s' card type, and its %(b)s?Delete this note type and all its cards?Delete this unused note type?Delete unused media?Deleted %d card with missing note.Deleted %d cards with missing note.Deleted %d card with missing template.Deleted %d cards with missing template.Deleted %d note with missing note type.Deleted %d notes with missing note type.Deleted %d note with no cards.Deleted %d notes with no cards.Deleted %d note with wrong field count.Deleted %d notes with wrong field count.Deleted.Deleting this deck from the deck list will return all remaining cards to their original deck.DescriptionDescription to show on study screen (current deck only):DialogDownload from AnkiWebDownloading from AnkiWeb...DueDue cards onlyDue tomorrowE&xitEaseEasyEasy bonusEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...Empty card numbers: %(c)s Fields: %(f)s Empty cards found. Please run Tools>Empty Cards.Empty first field: %sEndEnter deck to place new %s cards in, or leave blank:Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading: %sError during startup: %sError establishing a secure connection. This is usually caused by antivirus, firewall or VPN software, or problems with your ISP.Error executing %s.Error running %sExportExport...Exported %d media fileExported %d media filesExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...FilterFilter:FilteredFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFinishFirst CardFirst ReviewFirst field matched: %sFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed note type: %sFlipFolder already exists.Font:FooterFor security reasons, '%s' is not allowed on cards. You can still use it by placing the command in a different package, and importing that package in the LaTeX header instead.ForecastFormFound %(a)s across %(b)s.FrontFront PreviewFront TemplateGeneralGenerated file: %sGenerated on %sGet SharedGoodGraduating intervalHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.If you have contributed and are not on this list, please get in touch.If you studied every dayIgnore answer times longer thanIgnore caseIgnore fieldIgnore lines where first field matches existing noteIgnore this updateImportImport FileImport even if existing note has same first fieldImport failed. Import failed. Debugging info: Import optionsImporting complete.In media folder but not used by any cards:In order to ensure your collection works correctly when moved between devices, Anki requires your computer's internal clock to be set correctly. The internal clock can be wrong even if your system is showing the correct local time. Please go to the time settings on your computer and check the following: - AM/PM - Clock drift - Day, month and year - Timezone - Daylight savings Difference to correct time: %s.Include mediaInclude scheduling informationInclude tagsIncrease today's new card limitIncrease today's new card limit byIncrease today's review card limitIncrease today's review limit byIncreasing intervalsInstall Add-onInterface language:IntervalInterval modifierIntervalsInvalid code.Invalid file. Please restore from backup.Invalid property found on card. Please use Tools>Check Database, and if the problem comes up again, please ask on the support site.Invalid regular expression.Invalid search - please check for typing mistakes.It has been suspended.Jump to tags with Ctrl+Shift+TKeepLaTeXLaTeX equationLaTeX math env.LapsesLast CardLatest ReviewLatest added firstLearnLearn ahead limitLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLeech actionLeech thresholdLeftLimit toLoading...Local collection has no cards. Download from AnkiWeb?Longest intervalLook in field:Lowest easeManageManage Note Types...Map to %sMap to TagsMatureMaximum intervalMaximum reviews/dayMediaMinimum intervalMinutesMix new cards and reviewsMnemosyne 2.0 Deck (*.db)MoreMost lapsesMove CardsMove cards to deck:Multi-character separators are not supported. Please enter one character only.N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew cards/dayNew deck name:New intervalNew name:New note type:New options group name:New position (1...%d):Next day starts atNo cards are due yet.No cards matched the criteria you provided.No empty cards.No mature cards were studied today.No unused or missing files found.NoteNote IDNote TypeNote TypesNote and its %d card deleted.Note and its %d cards deleted.Note buried.Note suspended.Note: Media is not backed up. Please create a periodic backup of your Anki folder to be safe.Note: Some of the history is missing. For more information, please see the browser documentation.Notes in Plain TextNotes require at least one field.Notes tagged.NothingOKOldest seen firstOn next sync, force changes in one directionOne or more notes were not imported, because they didn't generate any cards. This can happen when you have empty fields or when you have not mapped the content in the text file to the correct fields.Only new cards can be repositioned.Only one client can access AnkiWeb at a time. If a previous sync failed, please try again in a few minutes.OpenOptimizing...Optional limit:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder dueOverride back template:Override font:Override front template:Password:PastePaste clipboard images as PNGPauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlace in review queue with interval between:Please add another note type first.Please connect a microphone, and ensure other programs are not using the audio device.Please edit this note and add some cloze deletions. (%s)Please ensure a profile is open and Anki is not busy, then try again.Please install PyAudioPlease open a profile first.Please remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please select something.Please upgrade to the latest version of Anki.Please use File>Import to import this file.Please visit AnkiWeb, upgrade your deck, then try again.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessed %d media fileProcessed %d media filesProcessing...ProfilesProxy authentication required.QuestionQueue bottom: %dQueue top: %dQuitRandomRandomize orderRatingRebuildRecord Own VoiceRecording...
Time: %0.1fRelative overduenessRelearnRemember last input when addingRemoving this card type would cause one or more notes to be deleted. Please create a new card type first.RenameRename DeckReplay AudioReplay Own VoiceRepositionReposition New CardsReposition...Require one or more of these tags:ReschedRescheduleReschedule cards based on my answers in this deckResume NowReverse text direction (RTL)Reverted to state prior to '%s'.ReviewReview CountReview TimeReview aheadReview ahead byReview cards forgotten in lastReview forgotten cardsReview success rate for each hour of the day.ReviewsRightSaveSave PDFScope: %sSearchSearch within formatting (slow)SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.Selective StudySemicolonServer not found. Either your connection is down, or antivirus/firewall software is blocking Anki from connecting to the internet.Set all decks below %s to this option group?Set for all subdecksShift key was held down. Skipping automatic syncing and add-on loading.Shift position of existing cardsShortcut key: %sShortcut key: Left arrowShortcut key: Right arrow or EnterShortcut: %sShow %sShow AnswerShow DuplicatesShow answer timerShow new cards after reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderShow next review time above answer buttonsShow remaining card count during reviewSize:Some related or buried cards were delayed until a later session.Some settings will take effect after you restart Anki.Some updates were ignored because note type has changed:Sort FieldSort by this field in the browserSorting on this column is not supported. Please choose another.SpaceStart position:Starting easeStatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied TodayStudyStudy DeckStudy Deck...Study NowStudy by card state or tagStylingStyling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSynchronize audio and images tooSyncing failed: %sSyncing failed; internet offline.Syncing requires the clock on your computer to be set correctly. Please fix the clock and try again.Syncing...TabTag DuplicatesTag OnlyTagsTarget Deck (Ctrl+D)Target field:TextText separated by tabs or semicolons (*)That deck already exists.That field name is already used.That name is already used.The connection to AnkiWeb timed out. Please check your network connection and try again.The default configuration can't be removed.The default deck can't be deleted.The division of cards in your deck(s).The download was corrupt. Please try again.The first field is empty.The first field of the note type must be mapped.The following character can not be used: %sThe front of this card is empty. Please run Tools>Empty Cards.The input you have provided would make an empty question on all cards.The number of new cards you have added.The number of questions you have answered.The number of reviews due in the future.The number of times you have pressed each button.The permissions on your system's temporary folder are incorrect, and Anki is not able to correct them automatically. Please search for 'temp folder' in the Anki manual for more information.The provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?The requested change will require a full upload of the database when you next synchronize your collection. If you have reviews or other changes waiting on another device that haven't been synchronized here yet, they will be lost. Continue?The time taken to answer the questions.There are more new cards available, but the daily limit has been reached. You can increase the limit in the options, but please bear in mind that the more new cards you introduce, the higher your short-term review workload will become.There must be at least one profile.This column can't be sorted on, but you can search for individual card types, such as 'card:1'.This column can't be sorted on, but you can search for specific decks by clicking on one on the left.This file does not appear to be a valid .apkg file. If you're getting this error from a file downloaded from AnkiWeb, chances are that your download failed. Please try again, and if the problem persists, please try again with a different browser.This file exists. Are you sure you want to overwrite it?This folder stores all of your Anki data in a single location, to make backups easy. To tell Anki to use a different location, please see: %s This is a special deck for studying outside of the normal schedule.This is a {{c1::sample}} cloze deletion.This will delete your existing collection and replace it with the data in the file you're importing. Are you sure?TimeTimebox time limitTo ReviewTo make a cloze deletion on an existing note, you need to change it to a cloze type first, via Edit>Change Note Type.To see them now, click the Unbury button below.To study outside of the normal schedule, click the Custom Study button below.TodayToday's review limit has been reached, but there are still cards waiting to be reviewed. For optimum memory, consider increasing the daily limit in the options.TotalTotal TimeTotal cardsTotal notesTreat input as regular expressionTypeType answer: unknown field %sUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdated %(a)d of %(b)d existing notes.Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1Version %sWaiting for editing to finish.Warning, cloze deletions will not work until you switch the type at the top to Cloze.When adding, default to current deckWhole CollectionWould you like to download it now?Written by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYou have a cloze deletion note type but have not made any cloze deletions. Proceed?You have a lot of decks. Please see %(a)s. %(b)sYou haven't recorded your voice yet.You must have at least one column.YoungYoung+LearnYour changes will affect multiple decks. If you wish to change only the current deck, please add a new options group first.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.Your collection or a media file is too large to sync.Your collection was successfully uploaded to AnkiWeb. If you use any other devices, please sync them now, and choose to download the collection you have just uploaded from this computer. After doing so, future reviews and added cards will be merged automatically.Your decks here and on AnkiWeb differ in such a way that they can't be merged together, so it's necessary to overwrite the decks on one side with the decks from the other. If you choose download, Anki will download the collection from AnkiWeb, and any changes you have made on your computer since the last sync will be lost. If you choose upload, Anki will upload your collection to AnkiWeb, and any changes you have made on AnkiWeb or your other devices since the last sync to this device will be lost. After all devices are in sync, future reviews and added cards can be merged automatically.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehourshours past midnightlapsesmapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: PACKAGE VERSION1 Report-Msgid-Bugs-To: POT-Creation-Date: 2018-01-31 16:01+1000 PO-Revision-Date: 2017-08-06 18:42+0000 Last-Translator: Victor Lo Language-Team: LANGUAGE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Launchpad-Export-Date: 2018-02-01 05:18+0000 X-Generator: Launchpad (build 18534) (%d分之 1) (關閉) (開啟) 有 %d 張卡片%% 正確%(a)0.1f %(b)s/天%(a)0.1f 秒 (%(b)s)在%(b)d 筆筆記中更新了 %(a)d 筆%(tot)s %(unit)s%.01f 卡片/分鐘%d 張卡片刪除了%d 張卡片匯出%d 張卡片匯入 %d 張卡片學習%d張卡片:花費已更新 %d 牌組%d 種組合已下載 %d 個媒體檔案%d 筆筆記已新增 %d 筆筆記刪除了%d筆筆記。匯出了%d筆筆記。匯入了 %d 筆筆記更新了 %d 筆資料%d 張複習卡選了 %d 張%s 複本%s天%s個小時%s分鐘%s 分鐘%s個月%s秒鐘刪除 %s :%s年%s天%s小時%s分%s 個月%s秒%s年關於Anki(&A)填鴨式學習(&C)...編輯(&E)匯出(&E)檔案(&F)尋找(&F)前往(&G)用戶指南(&G)用戶指南(&G)說明(&H)匯入(&I)反向選擇(&I)下一張卡片(&N)開啟附加元件檔案夾...(&O)偏好設定(&P)上一張卡片(&P)重新排程(&R)資助Anki(&S)工具(&T)復原(&U)'%(row)s' 行有 %(num1)d 個欄位, 預期 %(num2)d(%s 正確)(筆記已刪除)(結束)(已篩選)(學習中)(新卡片)(母牌組限制: %d)(請選擇一張牌)....anki2 檔案並不是用來匯入用的。如果您想要從備份中回復,請察看用戶手冊中'Backups'一章。/0天一個月一年10AM10PM3AM4AM4PM遇到錯誤:504 gateway timeout。 請暫時關閉您的防毒軟體。:%d 張卡片開啟備份資料夾造訪網站%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%M備份
Anki在您每次關閉或是同步時,都會備份您的收藏。匯出格式搜尋字型大小:字型:位於:包括線條粗細:取代為同步處理同步處理
現在尚未啟用;請按一下主視窗的同步鈕來啟用。

需要有帳號

要讓您的收藏同步需要一個免費的帳號,請註冊一個帳號,並且在下方輸入資料。

Anki 已更新

Anki %s 已經發佈

<忽略><非 unicode 文字><在此處輸入文字以搜尋,或按下 Enter 鍵來顯示目前的牌組>謹向所有曾提供建議、回報錯誤與贊助資金的各位致以莫大的感謝。一張卡片的難易度是當你在複習時回答「中等」時,卡片下次出現的時間間隔。篩選過的牌組不可擁有子牌組同步媒體時發生錯誤,請用 工具>檢查媒體,然後再同步一次來更正此問題。已終止: %s關於Anki新增新增 (快速鍵: ctrl+enter)新增欄位新增媒體新增牌組 (Ctrl+N)新增筆記類型新增反向的資料新增標籤新增至:新增: %s已新增今日新增新增了重複的第一個欄位: %s再一次今日按「再一次」的按了幾次「再一次」: %s全部牌組全部欄位隨機出現所有卡片(填鴨模式)確定要刪除該個人檔案的所有卡片、筆記、媒體檔?允許在欄位中使用HTML語法存取資料庫時發生錯誤。 可能的原因: - 防毒軟體﹑防火牆或某些同步軟體和Anki發生沖突。請嘗試停用以上軟體後重試。 - 你的硬碟沒有多餘的空間 - 資料夾 "Document/Anki" 位於網路硬碟上 - 無法覆寫資料夾 "Document/Anki"中的檔案 - 你的硬碟可能發生錯誤 你可以執行 工具>檢查資料庫 以確認資料庫沒有損毀。 打開 %s 時發生錯誤AnkiAnki 2.0 牌組Anki牌組包由於無法重新命名硬碟上個人檔案的資料夾,所以無法重新命名個人檔案。請在確認你擁有寫入到Document/Anki的權限以及沒有其他程式在讀取該資料夾後重試。Anki 找不到問題和答案之間的水平線,請手動調整樣板以交換問題和答案。Anki 是個好用的智慧型間隔式學習系統,是開放原始碼的自由軟體。Anki 採用AGPL-3.0 授權條款。更多資訊請見軟體原始碼的授權檔案。AnkiWeb ID或者密碼錯誤;請再試一次。AnkiWeb ID:AnkiWeb 發生錯誤,請幾分鐘後再試一次,如果問題依舊存在,請提交錯誤報告。AnkiWeb 現在相當忙碌,請幾分鐘後再試一次。AnkiWeb 正在進行維護,請幾分鐘後重試一次。答案答題鈕答案防毒軟體或防火牆導致 Anki 無法連至網際網路。空白卡片會被刪除,而筆記如果沒有在卡片上也會遺失。您確定要繼續嗎?出現兩次: %s您確定您要刪除 %s?需要至少一個卡片類型至少要有一步自動播放聲音檔在開啟或關閉個人檔案時自動進行同步平均平均時間平均答題時間平均難易度只算學習天數的平均平均間隔背面背面預覽背面樣板備份基本型基本型(含反向的卡片)基本型(可選用反向的卡片)瀏覽卡片瀏覽器外觀卡片瀏覽器選項建立暫時隱藏暫時隱藏卡片暫時隱藏筆記今日暫時隱藏相關的新卡片暫時隱藏相關複習卡直到隔天Anki 會自動偵測欄位間的間隔字元,像是定位字元(tab)或是逗點。 假如 Anki 偵測錯誤的話,您可以在此輸入。 用 \t 以代表 tab。取消卡片卡片 %d卡片 1卡片 2卡片ID卡片清單卡片類別卡片類型%s的卡片類型已暫時隱藏卡片卡片已長久擱置這是榨時卡卡片卡片無法手動移到篩選過的牌組純文字的卡片卡片在您複習完以後會自動回歸原本的牌組。卡片...中變更改變 %s 到:改變牌組改變筆記類型改變筆記類型(Ctrl+N)改變筆記類型...依照筆記類型來更改牌組已改變檢查媒體檔(&M)檢查多媒體資料夾的檔案檢查中...選擇選擇牌組選擇「筆記類型」選取標籤複製: %s關閉關閉並放棄目前的輸入?克漏題代碼:收藏已損毀,請查看用戶手冊。冒號逗號設定介面語言與選項恭喜!您完成本牌組了。連線中...連線逾時,可能是網路連線問題,也可能是你的媒體資料夾有過大的檔案。下一步複製熟練卡片的正確答案 %(a)d/%(b)d (%(c).1f%%)正確: %(pct)0.2f%%
(%(good)d of %(tot)d)無法連接上 AnkiWeb。請檢查您的網路連線,然後再試一次。無法錄音喔,您是否有安裝 lame 和 sox ?無法存檔:%s填鴨模式建立牌組建立篩選過的牌組以dvisvgm創建可縮放的圖像建立Ctrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCtrl+Z累計累計 %s累計題數累計卡片目前的牌組目前的筆記類型:自訂學習自訂學程剪下已重整資料庫並最佳化日期學習天數解除授權除錯指令列牌組牌組將在個人檔案開啟後匯入牌組間隔由大至小排列預設延遲至複習卡再度出現刪除刪除卡片刪除牌組刪除空卡片刪除筆記刪除筆記刪除標籤刪除未使用的要刪除%s的欄位嗎?刪除 「%(a)s」 卡片類型,以及其 %(b)s 張卡片?刪除此筆記類型,及其中所有卡片?刪除此未使用的筆記類型?要刪除未使用的媒體嗎?刪除 %d 張遺失筆記的卡片刪除 %d 張遺失樣板的卡片刪除 %d 筆遺失筆記類型的資料刪除 %d 筆缺少卡片的筆記刪除%d 有錯誤欄位數量的筆記已刪除如果在牌組列表中刪除這個牌組,其他剩下的卡片也會回歸它們原本的牌組。敘述學習畫面上所顯示的敘述 (僅當前牌組):對話視窗從AnkiWeb下載從 AnkiWeb 下載中...到期僅到期的卡片明日到期結束(&x)難易度簡單簡單卡片的間隔倍率簡單卡片晉階的間隔編輯編輯 "%s"編輯目前的卡片編輯HTML已編輯編輯字型清空空白卡片空的卡片數量: %(c)s 欄位: %(f)s 找到空白卡片,請執行 「工具」>「空白卡片」。清空第一個欄位: %sEnd您想將新的 %s 卡片放在哪個牌組(此欄位可留白):輸入新的卡片順序(1...%s):輸入要添加的標籤:輸入要刪除的標籤:下載錯誤: %s開啟時發生錯誤: %s建立安全連線時發生錯誤。這可能是由防毒軟體﹑防火牆﹑虛擬私人網路(VPN)﹑或網路服務供應商的問題所引起的,執行 %s 發生錯誤執行 %s 時發生錯誤匯出匯出...己匯出%d 個媒體檔註記FF1檔案的第 %d 個欄位:欄位對應欄位名稱:欄位:欄位%s 的欄位%s 分隔各欄位欄位...篩選器篩選器:已篩選篩選過的牌組 %d尋找重複項目(&D)...尋找重複項目搜尋並取代(&P)...搜尋並取代完成第一張卡片首次復習日期符合第一個欄位: %s修復屬性無效的卡片 %d 張修復筆記類型: %s反轉資料夾已存在字型:頁腳基於安全性理由,卡片上不可出現〔%s〕。但您仍可將指令放在其他的套件中,並將其匯入LaTeX 標頭中。預測表單在 %(b)s 中找到 %(a)s 。正面正面預覽正面樣板一般生成檔案: %s建立日期: %s取得共享的牌組中等晉階成複習卡的間隔HTML編輯器難你已經安裝了latex 和 dvipng/dvisvgm嗎?頭部說明最簡單歷史Home每小時的分析小時未顯示少於30次複習的時段如果您有貢獻但是未列於清單中,請跟我們聯絡。如果您每天學習的話忽略答題時間,若超過忽略大小寫忽略欄位忽略那些第一個欄位與現有筆記吻合的行數忽略更新匯入匯入檔案即使第一個欄位與現有筆記相同,也要匯入匯入失敗. 匯入失敗,除錯資訊: 匯入選項匯入完成在媒體資料夾但未被任何卡片使用:為了確保您的收藏能在不同裝置中運作,Anki 要求您電腦的內部時鐘設定正確。即使系統顯示的當地時間是對的,內部時鐘還是有可能有錯。 請在電腦上的時間設定中確定下列幾點: - 上午 / 下午 - 時間飄移(Clock drift) - 年月日 - 時區 - 日光節約 與正確時間的差異: %s包含媒體包含排程資訊包含標籤增加今日新卡片的數量上限增加今日新卡片的數量上限:增加今日複習卡的上限增加今日複習卡的數量上限:間隔由小至大排列安裝附加元件介面語言:間隔間隔調節器間隔無效的代碼檔案錯誤,請使用備份回復。卡片上有無效的屬性,請按 工具>檢查資料庫。如果問題再次出現,請至支援網站提問。無效的正規表達式無效的搜尋 - 請檢查有否輸入錯誤已長久擱置跳至標籤(Ctrl+Shift+T)保留LaTeXLaTeX 公式LaTeX 數學環境忘記最後一張卡片最近的複習最後加入的先新學習的卡超前進度學習:%(a)s 複習:%(b)s 重複學習:%(c)s 已篩選:%(d)s學習中針對榨時卡的動作成為榨時卡片的門檻為左對齊上限為讀取中...此裝置上的收藏沒有任何卡片,是否要從AnkiWeb下載?最長的間隔尋找欄位:最難管理管理筆記類型對應到 %s對應到標籤熟練最長間隔為每天最大複習量媒體至少間隔分鐘新卡與複習卡混合Mnemosyne 2.0 的牌組 (*.db)其他最常忘記移動卡片卡片移動到牌組:無法使用多字符的分隔,請只輸入一個字符。筆記(&O)已經有這個名字了牌組名稱:名字:網路新卡片新卡片僅新卡片每天的新卡片數量輸入新的牌組名稱:設定新的間隔為新名稱:新的筆記類型:新選項組的名稱:新的順序(1...%d):次日始於凌晨卡片都尚未到期。沒有卡片符合您的標準沒有空的卡片今天沒有學習熟練的卡片找不到未使用或遺失的檔案筆記記事ID筆記類型筆記類型已刪除一筆筆記以及相關的 %d 張卡片。筆記已暫時隱藏筆記已長久擱置注意:媒體並不會被備份,保險起見,請定期備份 Anki 資料夾。注意:有些歷史紀錄遺失了。請查看卡片瀏覽器說明文件以獲得更多資訊。純文字的筆記筆記至少要有一個欄位記事加上了標籤無確定舊卡先出現下次同步時,進行單方面的強制變更某些筆記沒有產生任何卡片,因此未被匯入。這可能是由於有些欄位是空白的,或是您沒有將文字檔中的內容對應至正確的欄位。僅新卡片能調整順序同一時間內僅容許一個裝置來存取 AnkiWeb,如果之前的同步失敗,請幾分鐘後再試一次。開啟最佳化中...可選用的限制條件:選項%s 的選項選項組:選項...順序依新增順序依到期順序覆寫背面樣板:覆寫字型:覆寫正面樣板:密碼:貼上把剪貼簿圖像存為PNG格式Pauker 1.8 課程 (*.pau.gz)百分比期間: %s排到新卡片佇列之後移到下列期間的複習卡片佇列中:請先新增另一個筆記類型請連接麥克風,並且確保沒有其他程式佔用音效裝置。請編輯此筆記,加上一些克漏字。(%s)請確定已開啟個人檔案,而且 Anki 不在忙碌中,然後再試一次。請安裝PyAudio請先打開個人檔案請移除資料夾 %s 然後重試。請重啟Anki以完成語言變更。請執行「工具」>「空白卡片」請選擇一個牌組請僅從一種筆記類型選出卡片請選擇一個牌組請把 Anki 升級到最新版本。請點擊 檔案>匯入 來匯入這個檔案請拜訪 AnkiWeb,升級您的牌組之後再試一次。位置偏好設定預覽預覽選取的卡片(%s)預習新的卡片預習這幾天新增的卡片:己處理 %d 個媒體檔處理中...個人檔案需要 Proxy 的授權。問題佇列底端: %d佇列頂端: %d離開隨機隨機順序評等重建錄下自己的聲音錄音中...
時間: %0.1f依相對過期程度重複學習新增時,記住上次輸入的內容移除此卡片類型也同時會刪除幾個筆記,因此請先新建一個卡片類型。重新命名重新命名牌組重播聲音重播自己的聲音移動順序調整新卡片順序移動順序...需要其中一個以上的標籤:重新排程的重新排程依據我在本牌組的回答狀況來重新排程卡片繼續文字反向(RTL)回復至 「%s」 狀態以前複習複習的次數複習的時間提早複習提早複習複習幾天以內忘記的卡片:複習忘記的卡片當日每小時的複習成功率。複習卡右對齊儲存儲存PDF範圍: %s搜尋搜尋(含格式,較慢)選擇全選(&A)選擇筆記(&N)選出要排除的標籤:此檔案並非 UTF-8 格式,請參考說明書的〔匯入〕部分。選擇性學習分號找不到伺服器。有可能是您的連線中斷了,或是 Anki 被防毒軟體或防火牆擋住,所以無法連線到網路。要將 %s 裡所有的牌組都設定為此選項組?設定所有子牌組已按下Shift 鍵,略過自動同步,略過載入附加元件。移動現有卡片的順序快速鍵: %s快速鍵:左方向鍵快速鍵:右方向鍵 或 Enter鍵快捷鍵:%s顯示 %s顯示答案顯示重複項目顯示回答計時器複習後再顯示新卡片在複習前先學習新卡片按創建順序學習新卡片按隨機順序學習新卡片在答案按鈕上顯示下次複習時間複習時顯示剩餘卡片數量大小:有些相關的卡片或埋藏的卡片被延遲到下一個階段。部分設定在重新啟動 Anki 後才會生效.忽略了某些更新,因為筆記類型已經改變:排序欄位依此欄位在卡片瀏覽器中排序無法用此欄位排序,請選另一個。空白鍵起始順序:起始難易度統計統計間隔值:步(單位是分鐘)步必須是數字。正在停止…今日已學習學習學習牌組快速跳到牌組開始學習依卡片狀態或標籤來學習樣式樣式(適用所有卡片)Supermemo XML 匯出檔 (*.xml)長久擱置長久擱置卡片長久擱置筆記長久擱置擱置+暫時隱藏同步同步聲音與影像同步失敗: %s同步失敗;網路離線您電腦上的時鐘必須正確設定才能同步。請先設定時鐘然後再試一次。同步中...Tab把重複的卡片加上標籤只附上標籤標籤目標牌組(Ctrl+D)目標欄位:文字Tab字元或分號所分隔的文字檔(*)該牌組已存在已經有這個欄位名稱了已經用過這個名字了AnkiWeb 的連接已逾時,請檢查您的網路並且再試一次。無法刪除預設的設定無法刪除預設牌組您牌組中的卡片分類圖表下載失敗,請重試。第一個欄位是空的筆記類型的第一個欄位必須相符。不可使用下列字元: %s本卡片的正面是空的,請執行「工具」->「空白卡片」您輸入的內容會清空所有卡片上的問題。己新增的新卡片的數量您已經回答的題數將來會到期的複習卡數量各按鈕已按鍵次數您的系統暫存資料夾權限錯誤,Anki 無法自動更正此問題。請在Anki 說明書中搜尋"temp folder"以獲得進一步資訊。此檔案並非有效的 .apkg 檔無任何卡片符合此搜尋條件,您要試著修改嗎?此變動會使您下一次同步您的收藏時,需要完整上傳您的資料庫。如果同步的話,您其他的裝置上尚未同步的複習卡片或其他變動的部分將會遺失,您是否要繼續?答題佔用的時間牌組裡還有其他新的卡片,只是您已經達到今天的進度了。您可以 在選項中增加每日卡片數量上限,但請注意,如果您設定更多新 卡片,那麼您短期複習量的負荷就會隨之增加。至少要有一個個人檔案無法以此欄排序,不過你可以用卡片類型來篩選,如"card:1"。此欄位無法進行排序,不過您可以點一下左側的牌組,以搜尋特定牌組。此檔案看來不是有效的 apkg 檔,如果您是從 AnkiWeb 下載檔案後收到此錯誤訊息,那有可能是下載失敗。請再試一次,如果又發生錯誤,請換另一個網頁瀏覽器再試一次。檔案已經存在了, 請問您要覆蓋檔案嗎?為了方便您備份, Anki 將您所有的 資料都存在此一資料夾中。 如果要更改 Anki 資料夾的位置 請參考: %s 這是專門用來進行額外學習進度的牌組。這是克漏字的{{c1::範}}例。這樣會刪除您原本的收藏,並以現在要匯入的檔案覆蓋之。您確定嗎?時間計時器設定待複習若要在現有的筆記上做出克漏字,您必須先將其改變成克漏字類型。按一下「編輯」>「改變筆記類型」。若現在要查看那些卡片,請按下方的取消暫時隱藏按鈕。如果要有額外的學習進度,請按下方的「自訂學習」按鈕。今天今天的複習上限已經達到了,但還有卡片尚待複習。 為達最佳記憶效果,可考慮在選項中增加每日複習上限。全部總計時間卡片總數筆記總數以正規表達式處理輸入類型輸入答案:未知的欄位 %s無法匯入唯讀檔案。取消暫時隱藏復原復原 %s未知的檔案格式尚未看過第一個欄位相符時,更新現有筆記更新 %(a)d 張現有的卡片,共 %(b)d 張上傳到AnkiWeb正在上傳到AnkiWeb...有卡片使用但在媒體資料夾找不到:個人檔案 1版本 %s等待編輯完成警告,除非您將上方的類型改成克漏字,不然無法進行克漏字練習。新增的筆記自動歸類到當前牌組所有的收藏您想要現在下載嗎?作者:Damien Elmes。更新檔﹑翻譯﹑測試及設計由:

%(cont)s您有克漏字筆記類型,但還沒有任何克漏字,確定要繼續?您有許多牌組,請看 %(a)s. %(b)s您尚未錄音您至少需要有一個欄位年輕卡年輕+學習中此變動會影響許多牌組,若您只想更動當前的牌組,請先新增一個選項組。您的收藏狀態不一致,請執行「工具」>「檢查資料庫」,然後再同步一次。您的收藏或媒體檔太過龐大,所以無法進行同步。您的收藏已成功上傳至AnkiWeb。 如果您也使用其他裝置,請現在進行同步,並選擇下載您剛剛從電腦上傳的您的收藏。以後您的複習卡片和新增的卡片都會自動合併。您本地的牌組與 AnkiWeb 牌組之間的差異無法合併,因此需要以某一方的牌組來覆寫另一方的牌組。 如果您選的是下載, Anki 會從 AnkiWeb 下載您的收藏,而您電腦上次同步以後的變動將會遺失。 如果您選的是上傳, Anki 會上傳您的收藏至 AnkiWeb,而您的AnkiWeb 或其他裝置上次同步以後的變動將會遺失。 當所有的裝置都同步以後,新增的卡片和複習的卡片都能自動合併。沒有牌組備份卡片張牌組中的卡片張卡片,選擇方式為收藏日天牌組全部時間重複說明隱藏小時點忘記對應到%s對應到 標籤分鐘分鐘月複習秒統計本頁面周所有的收藏~anki-2.1.0+dfsg~b36/requirements.txt000066400000000000000000000000741323611211500173440ustar00rootroot00000000000000bs4 send2trash httplib2 pyaudio requests decorator markdown anki-2.1.0+dfsg~b36/runanki000077500000000000000000000000551323611211500154540ustar00rootroot00000000000000#!/usr/bin/env python3 import aqt aqt.run() anki-2.1.0+dfsg~b36/tests/000077500000000000000000000000001323611211500152215ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/tests/__init__.py000066400000000000000000000000001323611211500173200ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/tests/shared.py000066400000000000000000000023611323611211500170430ustar00rootroot00000000000000import tempfile, os, shutil from anki import Collection as aopen def assertException(exception, func): found = False try: func() except exception: found = True assert found # Creating new decks is expensive. Just do it once, and then spin off # copies from the master. def getEmptyCol(schedVer=1): if len(getEmptyCol.master) == 0: (fd, nam) = tempfile.mkstemp(suffix=".anki2") os.close(fd) os.unlink(nam) col = aopen(nam) col.db.close() getEmptyCol.master = nam (fd, nam) = tempfile.mkstemp(suffix=".anki2") shutil.copy(getEmptyCol.master, nam) from anki.collection import _Collection _Collection.defaultSchedulerVersion = schedVer col = aopen(nam) _Collection.defaultSchedulerVersion = 1 return col getEmptyCol.master = "" # Fallback for when the DB needs options passed in. def getEmptyDeckWith(**kwargs): (fd, nam) = tempfile.mkstemp(suffix=".anki2") os.close(fd) os.unlink(nam) return aopen(nam, **kwargs) def getUpgradeDeckPath(name="anki12.anki"): src = os.path.join(testDir, "support", name) (fd, dst) = tempfile.mkstemp(suffix=".anki2") shutil.copy(src, dst) return dst testDir = os.path.dirname(__file__) anki-2.1.0+dfsg~b36/tests/support/000077500000000000000000000000001323611211500167355ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/tests/support/anki12-broken.anki000066400000000000000000001760001323611211500221500ustar00rootroot00000000000000SQLite format 3@ ?6N  - ?/Cindexsqlite_autoindex_deckVars_1deckVars{tablestatsstatsCREATE TABLE stats ( id INTEGER NOT NULL, type INTEGER NOT NULL, day DATE NOT NULL, reps INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "distractedTime" FLOAT NOT NULL, "distractedReps" INTEGER NOT NULL, "newEase0" INTEGER NOT NULL, "newEase1" INTEGER NOT NULL, "newEase2" INTEGER NOT NULL, "newEase3" INTEGER NOT NULL, "newEase4" INTEGER NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "mature>00*%#  <q<3 !   2011-03-18@x@2ڀ" !2011-03-073 ! 2011-03-06? @ 4!   2011-03-06@@5(;s !revSpacing0.1 )latexPost\end{document}> qlatexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \setlength{\parindent}{0in} \begin{document}  mediaURL!newSpacing60.0# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspe: 9  pcXJ:+ ) suspendLeeches sortIndex!revSpacing #revInactive revActive perDay pageSize!newSpacing#newInactive newActive mediaURL 'mediaLocation!leechFails latexPre latexPost hexCache cssCache JJ[F{tablestatsstatsCREATE TABLE stats ( id INTEGER NOT NULL, type INTEGER NOT NULL, day DATE NOT NULL, reps INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "distractedTime" FLOAT NOT NULL, "distractedReps" INTEGER NOT NULL, "newEase0" INTEGER NOT NULL, "newEase1" INTEGER NOT NULL, "newEase2" INTEGER NOT NULL, "newEase3" INTEGER NOT NULL, "newEase4" INTEGER NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, PRIMARY KEY (id) )r7tabledeckVarsdeckVarsCREATE TABLE "deckVars" ( "key" TEXT NOT NULL, value TEXT, PRIMARY KEY ("key") )/Cindexsqlite_autoindex_deckVars_1deckVars y8=    -'.rA`0@&,@@@"9P .>A`8?U+@2\ս~@$-@@@|?  х.)A`\@&ֈ0:@@@eF   .>A\A`8.>A\< WWPS;''5tablereviewHistoryreviewHistoryCREATE TABLE "reviewHistory" ( "cardId" INTEGER NOT NULL, time FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, "nextInterval" FLOAT NOT NULL, ease INTEGER NOT NULL, delay FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "nextFactor" FLOAT NOT NULL, reps FLOAT NOT NULL, "thinkingTime" FLOAT NOT NULL, "yesCount" FLOAT NOT NULL, "noCount" FLOAT NOT NULL, PRIMARY KEY ("cardId", time) )9M'indexsqlite_autoindex_reviewHistory_1reviewHistoryJktablesourcessources CREATE TABLE sources ( id INTEGER NOT NULL, name TEXT NOT NULL, created FLOAT NOT NULL, "lastSync" FLOAT NOT NULL, "syncPeriod" INTEGER NOT NULL, PRIMARY KEY (id) )`tablemediamedia CREATE TABLE media ( id INTEGER NOT NULL, filename TEXT NOT NULL, size INTEGER NOT NULL, created FLOAT NOT NULL, "originalPath" TEXT NOT NULL, description TEXT NOT NULL, PRIMARY KEY (id) )   5Вɞ  A\ }A\ tJJapaneseJapanese?%(Meaning)sArial#000000Arial#000000Arial#FFFFFFeȏЍ   k. Reverse%(Back)s%(Front)sArial#000000Arial#000000Arial#FFFFFFeЍ  k. Forward%(Front)s%(Back)sArial#000000Arial#000000Arial#FFFFFFi ɞ  ## .IRecall%(Meaning)s%(Reading)sArial#000000Arial#000000Arial#FFFFFFT NULL, "modelId" INTEGER NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, active BOOLEAN NOT NULL, qformat TEXT NOT NULL, aformat TEXT NOT NULL, lformat TEXT, qedformat TEXT, aedformat TEXT, "questionInAnswer" BOOLEAN NOT NULL, "questionFontFamily" TEXT, "questionFontSize" INTEGER, "questionFontColour" VARCHAR(7), "questionAlign" INTEGER, "answerFontFamily" TEXT, "answerFontSize" INTEGER, "answerFontColour" VARCHAR(7), "answerAlign" INTEGER, "lastFontFamily" TEXT, "lastFontSize" INTEGER, "lastFontColour" VARCHAR(7), "editQuestionFontFamily" TEXT, "editQuestionFontSize" INTEGER, "editAnswerFontFamily" TEXT, "editAnswerFontSize" INTEGER, "allowEmptyAnswer" BOOLEAN NOT NULL, "typeAnswer" TEXT NOT NULL, PRIMARY KEY (id), CHECK ("allowEmptyAnswer" IN (0, 1)), CHECK ("questionInAnswer" IN (0, 1)), CHECK (active IN (0, 1)), FOREIGN KEY("modelId") REFERENCES models (id) )=)eЩ( eg>c. . A\ A`helloworldA`NA\@@A\%N@cF`@cF`A`NFо' cc    .)ԭ. A\ 9A`foobarA`cV@@A`c^A`cV@χ˲Һj' cc .*' }. A\PA\P_321123A\P@@A\P@ӲҺd' cc .*. A\PA\Pp123321A\P@@<Щ !!aM5ItablecardscardsCREATE TABLE cards ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "cardModelId" INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, ordinal INTEGER NOT NULL, question TEXT NOT NULL, answer TEXT NOT NULL, priority INTEGER NOT NULL, 8KtablefieldsfieldsCREATE TABLE fields ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "fieldModelId" INTEGER NOT NULL, ordinal INTEGER NOT NULL, value TEXT NOT NULL, PRIMARY KEY (id), FOREIGN KEY("fieldModelId") REFERENCES "fieldModels" (id), FOREIGN KEY("factId") REFERENCES facts (id) ).%%tablefactsDeletedfactsDeletedCREATE TABLE "factsDeleted" ( "factId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("factId") REFERENCES facts (id) )0%%#tablemediaDeletedmediaDeletedCREATE TABLE "mediaDeleted" ( "mediaId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("mediaId") REFERENCES cards (id) )interval FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, due FLOAT NOT NULL, "lastDue" FLOAT NOT NULL, factor FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "firstAnswered" FLOAT NOT NULL, reps INTEGER NOT NULL, successive INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, "yesCount" INTEGER NOT NULL, "noCount" INTEGER NOT NULL, "spaceUntil" FLOAT NOT NULL, "relativeDelay" FLOAT NOT NULL, "isDue" BOOLEAN NOT NULL, type INTEGER NOT NULL, "combinedDue" INTEGER NOT NULL, PRIMARY KEY (id), FOREIGN KEY("cardModelId") REFERENCES "cardModels" (id), CHECK ("isDue" IN (0, 1)), FOREIGN KEY("factId") REFERENCES facts (id) ) *Z7\*(Dž/.UҰ.I今日[きょう]ו .Uj0q.ImeaningۜЩ .)-. bar.Um-.I今日ݲҪ  .*-. 321Р >c. -. world䘇Ҫ .*i. 123݆Щ.)i. fooݲР>c. i. hello    DD1~T.%%tablecardsDeletedcardsDeletedCREATE TABLE "cardsDeleted" ( "cardId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("cardId") REFERENCES cards (id) ) tabletagstagsCREATE TABLE tags ( id integer not null, tag text not null collate nocase, priority integer not null default 2, primary key(id))!tablecardTagscardTagsCREATE TABLE cardTags ( id integer not null, cardId integer not null, tagId integer not null, src integer not null, primary key(id))K%%[tablesqlite_stat1sqlite_stat1CREATE TABLE sqlite_stat1(tbl,idx,stat)n7indexix_cards_typeCombinedcards CREATE INDEX ix_cards_typeCombined on cards (type, combinedDue, factId)d9indexix_cards_relativeDelaycards!CREATE INDEX ix_cards_relativeDelay on cards (relativeDelay)T/qindexix_cards_modifiedcards"CREATE INDEX ix_cards_modified on cards (modified)T/qindexix_facts_modifiedfacts#CREATE INDEX ix_facts_modified on facts (modified) || #Recognition Japanese Reverse Forward Basic-PriorityVeryHigh%PriorityHigh# PriorityLow :|l[K: [.:j  [.:j r.:d  r.:d-'.r  -'.rW.? W.?.> .>х.) х.) hK, r_;dWD8'modelsDeleted0-fieldsix_fields_factId9 3#9fieldsix_fields_fieldModelId9 2+fieldsix_fields_value9 1 decks1%factsDeleted0 models26'MreviewHistorysqlite_autoindex_reviewHistory_15 2 1 media0!cardModels4 sources0+CdeckVarssqlite_autoindex_deckVars_116 1-statsix_stats_typeDay4 2 1%3cardTagsix_cardTags_tagCard12 3 1"1cardTagsix_cardTags_cardId12 2%mediaDeleted0 /factsix_facts_modified4 1 #fieldModels5% 7cardsix_cards_typeCombined6 2 1 1" 9cardsix_cards_relativeDelay6 2 /cardsix_cards_modified6 1/cardsix_cards_priority6 6+cardsix_cards_factor6 2 2+cardsix_cards_factId6 2*9#cardsix_cards_intervalDesc26 2 2 2 2 1$-#cardsix_cards_dueAsc26 2 2 1 1 1'cardsix_cards_sort6 1%cardsDeleted0#tagsix_tags_tag8 1 IhIA`.)W.?A\P .*[.:jA\P .*r.:d A`cV.).>A`.U-'.rA`N>c. х.)  W.? [.:j r.:d  .> -'.r х.) A`W.?A`.>A`m-'.rA`х.)A\P_[.:jA\Ppr.:d A`V`.)A]%9ɐ>c. A\a.U  -'.r W.? х.) .> [.:j r.:d __ [k!O +iindexix_fields_valuefields+CREATE INDEX ix_fields_valuT/qindexix_cards_prioritycards$CREATE INDEX ix_cards_priority on cards (priority)T+uindexix_cards_factorcards&CREATE INDEX ix_cards_factor on cards (type, factor)N+iindexix_cards_factIdcards'CREATE INDEX ix_cards_factId on cards (factId)S-qindexix_stats_typeDaystats(CREATE INDEX ix_stats_typeDay on stats (type, day)R-mindexix_fields_factIdfields)CREATE INDEX ix_fields_factId on fields (factId)e9indexix_fields_fieldModelIdfields*CREATE INDEX ix_fields_fieldModelId on fields (fieldModelId)O +iindexix_fields_valuefields+CREATE INDEX ix_fields_value on fields (value)a!7indexix_media_originalPathmedia,CREATE INDEX ix_media_originalPath on media (originalPath)k"9%indexix_cardsDeleted_cardIdcardsDeleted-CREATE INDEX ix_cardsDeleted_cardId on cardsDeleted (cardId)r#=' indexix_modelsDeleted_modelIdmodelsDeleted.CREATE INDEX ix_modelsDeleted_modelId on modelsDeleted (modelId) @W.?@[.:j@r.:d @.>@-'.r@х.) >c. х.) .*[.:j .*r.:d.U-'.r.)W.?.).>  !2011-03-18 !2011-03-07 !2011-03-06! 2011-03-06 Lt`L>c. ). >c. :.  .*z.* .*`9.*.Uw-.U.U)\.U.U.U.)#l.).)ԺS.) Lt`Lm-.I.Uj0q.I)\.Ui. `9.*i. S.)i. :. -. #l.)-. z.*-. ). .Iw-.U PA2/今日[きょう]w-.U今日.Uworld). meaning)\.UfooS.)bar#l.)ԁhello:. 321z.*123`9.*     g;([+/indexix_media_filenamemedia7CREATEk$9%indexix_factsDeleted_factIdfactsDeleted/CREATE INDEX ix_factsDelek$9%indexix_factsDeleted_factIdfactsDeleted/CREATE INDEX ix_factsDeleted_factId on factsk$9%indexix_factsDeleted_factIdfactsDeleted/CREATE INDEX ix_factsDeleted_factId on factsDeleted (factId)l%9%indexix_mediaDeleted_factIdmediaDeleted1CREATE INDEX ix_mediaDeleted_factId on mediaDeleted (mediaId)d&3indexix_cardTags_tagCardcardTags2CREATE INDEX ix_cardTags_tagCard on cardTags (tagId, cardId)Z'1uindexix_cardTags_cardIdcardTags3CREATE INDEX ix_cardTags_cardId on cardTags (cardId)(9Yindexix_cards_intervalDesc2cards4CREATE INDEX ix_cards_intervalDesc2 on cards (type, priority desc, interval desc, factId, combinedDue)x)-9indexix_cards_dueAsc2cards5CREATE INDEX ix_cards_dueAsc2 on cards (type, priority desc, due, factId, combinedDue)\*'indexix_cards_sortcards6CREATE INDEX ix_cards_sort on cards (question collate nocase)  Mzk\M -'.r-'.rW.?[.:j х.).>r.:d W.?  х.).>[.:j r.:d ere -'.r -'.r W.? W.? х.)  х.) .> .> [.:j [.:j r.:d r.:d 7{Y7! .*A\P[.:j! .*A\Pr.:d!.)A`W.?  .)A`cV.> >c. A`Nх.) .UA`-'.r [1)A\P .*A\P[.:j)A\P .*A\Pr.:d)A\ 9Ű.)A`W.?( A`cV.)A`cV.>(A`.UA`-'.r(A`N>c. A`Nх.) 0g06cbarW.?6c321[.:j9i今日-'.r6cfoo.>8ehelloх.)6c123r.:d   Reverse#Recognition -PriorityVeryHigh# PriorityLow%PriorityHigh Japanese Forward Basic s !revSpacing0.1 )latexPost\end{document}> qlatexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \setlength{\parindent}{0in} \begin{document}  mediaURL!newSpacing60.0# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspendLeeches1 VV' CcssCache.fmb0999d2e8be8499e {font-family:"Arial";font-size:50px;white-space:pre-wrap;} .fmff152d2e8be80d02 {font-family:"Arial";font-size:20px;white-space:pre-wrap;} .fm12e6692e8be80d02 {font-family:"Arial";font-size:20px;white-space:pre-wrap;} .fm6a30712e8be8499e {font-family:"Arial";font-size:20px;white-space:pre-wrap;} .fm6d852d2e8be8499e {font-family:"ヒラギノ明朝 Pro W3";font-size:50px;white-space:pre-wrap;} #cmq8481c72e8be8499e {text-align:center;} #cmqad9ecf2e8be80d02 {text-align:center;} #cmq27207d2e8be80d02 {text-align:center;} #cmq32cfd92e8be8499e {text-align:center;} #cma8481c72e8be8499e {text-align:center;} #cmaad9ecf2e8be80d02 {text-align:center;} #cma27207d2e8be80d02 {text-align:center;} #cma32cfd92e8be8499e {text-align:center;} .cmb8481c72e8be8499e {background:#FFFFFF;} .cmbad9ecf2e8be80d02 {background:#FFFFFF;} .cmb27207d2e8be80d02 {background:#FFFFFF;} .cmb32cfd92e8be8499e {background:#FFFFFF;}  sortIndex0.'ImediaLocation/Users/dae/Dropbox/Public/AnkipageSize4096iGhexCache{"3661383816014481822": "32cfd92e8be8499e", "-66096941588017918": "ff152d2e8be80d02", "7651740211632163230": "6a30712e8be8499e", "-5936079460005049086": "ad9ecf2e8be80d02", "-8505492998582694654": "89f66b2e8be80d02", "-8898612385977710178": "8481c72e8be8499e", "-3822851096768394850": "caf2812e8be8499e", "2819391005603138818": "27207d2e8be80d02", "7891763599975664030": "6d852d2e8be8499e", "-5721369028356191842": "b0999d2e8be8499e", "1361891585962806530": "12e6692e8be80d02"} )5j)eЩ( eg>c. . A\ A`helloworldA`NA\@@A\%N@cF`@cF`A`NFо' cc    .)ԭ. A\ 9A`foobarA`cV@@A`c^A`cV@χ˲Һj' cc .*' }. A\PA\P_321123A\P@@A\P@ӲҺd' cc .*. A\PA\Pp123321A\P@@A\P 5ѕr( ie   .U2.IA\A`m今日今日[きょう]
meaningA`@@A`\@"8jp@"8jpA`@п' cc.)' }. A\ 9A`barfooA\ 9@@A` uPuJ@0##[2##[viewacqCardsOldacqCardsOldCREATE VIEW acqCardsOld as select * from cards where type = 2 and isDue = 1 order by priority desc, dueH,#gindexix_tags_tagtags8CREATE UNIQUE INDEX ix_tags_tag on tag[+/indexix_media_filenamemedia7CREATE UNIQUE INDEX ix_media_filename on media (filename)H,#gindexix_tags_tagtags8CREATE UNIQUE INDEX ix_tags_tag on tags (tag)-##gviewfailedCardsfailedCardsCREATE VIEW failedCards as select * from cards where type = 0 and isDue = 1 order by type, isDue, combinedDue.##oviewrevCardsOldrevCardsOldCREATE VIEW revCardsOld as select * from cards where type = 1 and isDue = 1 order by priority desc, interval desc /##eviewrevCardsNewrevCardsNewCREATE VIEW revCardsNew as select * from cards where type = 1 and isDue = 1 order by priority desc, interval0##[viewrevCardsDuerevCardsDueCREATE VIEW revCardsDue as select * from cards where type = 1 and isDue = 1 order by priority desc, due EEp1))yviewrevCardsRandomrevCardsRandomCREATE VIEW revCardsRandom as select * from cards where type = 1 and isDue = 1 order by priority desc, factId, ordinal2##[viewacqCardsOldacqCardsOldCREATE VIEW acqCardsOld as select * from cards where type = 2 and isDue = 1 order by priority desc, due 3##eviewacqCardsNewacqCardsNewCREATE VIEW acqCardsNew as select * from cards where type = 2 and isDue = 1 order by priority desc, due descanki-2.1.0+dfsg~b36/tests/support/anki12-due.anki000066400000000000000000001660001323611211500214440ustar00rootroot00000000000000SQLite format 3@ ;2N - ;JktablesourcessourcesCREATE TABLE sources ( id INTEGER NOT NULL, name TEXT NOT NULL, created FLOAT NOT NULL, "lastSync" FLOAT NOT NULL, "syncPeriod" INTEGER NOT NULL, PRIMARY KEY (id) );''5tablereviewHistoryreviewHistoryCREATE TABLE "reviewHistory" ( "cardId" INTEGER NOT NULL, time FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, "nextInterval" FLOAT NOT NULL, ease INTEGER NOT NULL, delay FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "nextFactor" FLOAT NOT NULL, reps FLOAT NOT NULL, "thinkingTime" FLOAT NOT NULL, "yesCount" FLOAT NOT NULL, "noCount" FLOAT NOT NULL, PRIMARY KEY ("cardId", time) )9M'indexsqlit6--'!     " !2012-04-06"!2012-04-06 ::3J;''5tablereviewHistoryreviewHistoryCREATE TABLE "reviewHistory" ( "cardId" INTEGER NOT NULL, time FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, "nextInterval" FLOAT NOT NULL, ease INTEGER NOT NULL, delay FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "nextFactor" FLOAT NOT NULL, reps FLOAT NOT NULL, "thinkingTime" FLOAT NOT NULL, "yesCount" FLOAT NOT NULL, "noCount" FLOAT NOT NULL, PRIMARY KEY ("cardId", time) )9M'indexsqlite_autoindex_reviewHistory_1reviewHistoryJktablesourcessourcesCREATE TABLE sources ( id INTEGER NOT NULL, name TEXT NOT NULL, created FLOAT NOT NULL, "lastSync" FLOAT NOT NULL, "syncPeriod" INTEGER NOT NULL, PRIMARY KEY (id) )  {tablestatsstatsCREATE TABLE stats ( id INTEGER NOT NULL, type INTEGER NOT NULL, day DATE NOT NULL, reps INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "distractedTime" FLOAT NOT NULL, "distractedReps" INTEGER NOT NULL, "newEase0" INTEGER NOT NULL, "newEase1" INTEGER NOT NULL, "newEase2" INTEGER NOT NULL, "newEase3" INTEGER NOT NULL, "newEase4" INTEGER NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, PRIMARY KEY (id) )`tablemediamediaCREATE TABLE media ( id INTEGER NOT NULL, filename TEXT NOT NULL, size INTEGER NOT NULL, created FLOAT NOT NULL, "originalPath" TEXT NOT NULL, description TEXT NOT NULL, PRIMARY KEY (id) )  /Ӵ]  AߘG ͟AߘG ͫBasicBasic?< e]tablemodelsmodels CREATE TABLE models ( id INTEGER NOT NULL, "deckId" INTEGER, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, features TEXT NOT NULL, spacing FLOAT NOT NULL, "initialSpacing" FLOAT NOT NULL, source INTEGER NOT NULL, PRIMARY KEY (id) )r7tabledeckVarsdeckVars CREATE TABLE "deckVars" ( "key" TEXT NOT NULL, value TEXT, PRIMARY KEY ("key") )/Cindexsqlite_autoindex_deckVars_1deckVars  !!tablecardModelscardModels CREATE TABLE "cardModels" ( id INTEGER NOT NULL, ordinal INTEGER NOq AtabledecksdecksCREATE TABLE decks ( id INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, description TEXT NOT NULL, version INTEGER NOT NULL, "currentModelId" INTEGER, "syncName" TEXT, "lastSync" FLOAT NOT:s( EcssCache.fm967d613685ab575d {font-family:"Arial";font-size:20px;white-space:pre-wrap;} .fm9d82d13685ab575d {font-family:"Arial";font-size:20px;white-space:pre-wrap;} #cmqf4bb473685ab575d {text-align:center;} #cmq518bc13685ab575e {text-align:center;} #cmaf4bb473685ab575d {text-align:center;} #cma518bc13685ab575e {text-align:center;} .cmbf4bb473685ab575d {background:#FFFFFF;} .cmb518bc13685ab575e {background:#FFFFFF;}  !revSpacing0.1 )latexPost\end{document}> qlatexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \setlength{\parindent}{0in} \begin{document}  mediaURL!newSpacing60.0# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspendLee9 8wiYJ8) suspendLeeches!revSpacing #revInactive revActive perDay!newSpacing#newInactive newActive mediaURL !leechFails latexPre latexPost hexCache cssCache ""e^   fU6W]Reverse%(Back)s%(Front)sArial#000000Arial#000000Arial#FFFFFFe]  fU6W]Forward%(Front)s%(Back)sArial#000000Arial#000000Arial#FFFFFFT NULL, "modelId" INTEGER NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, active BOOLEAN NOT NULL, qformat TEXT NOT NULL, aformat TEXT NOT NULL, lformat TEXT, qedformat TEXT, aedformat TEXT, "questionInAnswer" BOOLEAN NOT NULL, "questionFontFamily" TEXT, "questionFontSize" INTEGER, "questionFontColour" VARCHAR(7), "questionAlign" INTEGER, "answerFontFamily" TEXT, "answerFontSize" INTEGER, "answerFontColour" VARCHAR(7), "answerAlign" INTEGER, "lastFontFamily" TEXT, "lastFontSize" INTEGER, "lastFontColour" VARCHAR(7), "editQuestionFontFamily" TEXT, "editQuestionFontSize" INTEGER, "editAnswerFontFamily" TEXT, "editAnswerFontSize" INTEGER, "allowEmptyAnswer" BOOLEAN NOT NULL, "typeAnswer" TEXT NOT NULL, PRIMARY KEY (id), CHECK (active IN (0, 1)), CHECK ("questionInAnswer" IN (0, 1)), CHECK ("allowEmptyAnswer" IN (0, 1)), FOREIGN KEY("modelId") REFERENCES models (id) ) {%   -%#  AߘGhAߘPfoobarAߘP;@@AߘP;@γ' ccx6Q6W^AߘP;AߘPbarfooAߘP;@@AߘP;interval FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, due FLOAT NOT NULL, "lastDue" FLOAT NOT NULL, factor FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "firstAnswered" FLOAT NOT NULL, reps INTEGER NOT NULL, successive INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, "yesCount" INTEGER NOT NULL, "noCount" INTEGER NOT NULL, "spaceUntil" FLOAT NOT NULL, "relativeDelay" FLOAT NOT NULL, "isDue" BOOLEAN NOT NULL, type INTEGER NOT NULL, "combinedDue" INTEGER NOT NULL, PRIMARY KEY (id), CHECK ("isDue" IN (0, 1)), FOREIGN KEY("cardModelId") REFERENCES "cardModels" (id), FOREIGN KEY("factId") REFERENCES facts (id) )  bbw tabletagstagsCREATE TABLE tags ( id integer not null, tag text nK.%%tablefactsDeletedfactsDeletedCREATE TABLE "factsDeleted" ( "factId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("factId") REFERENCES facts (id) ).%%tablecardsDeletedcardsDeletedCREATE TABLE "cardsDeleted" ( "cardId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("cardId") REFERENCES cards (id) )0%%#tablemediaDeletedmediaDeletedCREATE TABLE "mediaDeleted" ( "mediaId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("mediaId") REFERENCES cards (id) ) tabletagstagsCREATE TABLE tags ( id integer not null, tag text not null collate nocase, priority integer not null default 2, primary key(id))!tablecardTagscardTagsCREATE TABLE cardTags ( id integer not null, cardId integer not null, tagId integer not null, src integer not null, primary key(id))K%%[tablesqlite_stat1sqlite_stat1CREATE TABLE sqlite_stat1(tbl,idx,stat)    Reverse Forward Basic-PriorityVeryHigh%PriorityHigh# PriorityLow 6 6Ns6 Ns6 wiZN:- decks1%factsDeleted0!cardModels0 media0+CdeckVarssqlite_autoindex_deckVars_112 1 models0 'reviewHistory0 stats0 cardTags0 sources0%mediaDeleted0#fieldModels0'modelsDeleted0 fields0 facts0 cards0%cardsDeleted0#tagsix_tags_tag3 1 AߘP;x6Ns6AߘP;x66 rrHJEn7indexix_cards_typeCombinedcards CREATE INDEX ix_cards_typeCombined on can7indexix_cards_typeCombinedcards CREATE INDEX ix_cards_typeCombined on cards (type, combinedDue, factId)d9indexix_cards_relativeDelaycards"CREATE INDEX ix_cards_relativeDelay on cards (relativeDelay)T/qindexix_cards_modifiedcards#CREATE INDEX ix_cards_modified on cards (modified)T/qindexix_facts_modifiedfacts$CREATE INDEX ix_facts_modified on facts (modified)T/qindexix_cards_prioritycards%CREATE INDEX ix_cards_priority on cards (priority)T+uindexix_cards_factorcards&CREATE INDEX ix_cards_factor on cards (type, factor)N+iindexix_cards_factIdcards'CREATE INDEX ix_cards_factId on cards (factId)S-qindexix_stats_typeDaystats(CREATE INDEX ix_stats_typeDay on stats (type, day)R-mindexix_fields_factIdfields)CREATE INDEX ix_fields_factId on fields (factId)e9indexix_fields_fieldModelIdfields*CREATE INDEX ix_fields_fieldModelId on fields (fieldModelId)  6 Ns6 AߘP=0l%9%inde(9Yindexix_cards_intervalDesc2cards4CREATE INDEX ix_cards_intervalDesc2 ona!7indexix_media_originalPathmedia,CREATE INDEX ix_media_oO +iindexix_fields_valuefields+CREATE INDEX ix_fields_value on fields (value)a!7indexix_media_originalPathmedia,CREATE INDEX ix_media_originalPath on media (originalPath)k"9%indexix_cardsDeleted_cardIdcardsDeleted.CREATE INDEX ix_cardsDeleted_cardId on cardsDeleted (cardId)r#=' indexix_modelsDeleted_modelIdmodelsDeleted/CREATE INDEX ix_modelsDeleted_modelId on modelsDeleted (modelId)k$9%indexix_factsDeleted_factIdfactsDeleted0CREATE INDEX ix_factsDeleted_factId on factsDeleted (factId)l%9%indexix_mediaDeleted_factIdmediaDeleted1CREATE INDEX ix_mediaDeleted_factId on mediaDeleted (mediaId)d&3indexix_cardTags_tagCardcardTags2CREATE INDEX ix_cardTags_tagCard on cardTags (tagId, cardId)Z'1uindexix_cardTags_cardIdcardTags3CREATE INDEX ix_cardTags_cardId on cardTags (cardId)     Ns666  Ns6  6 6 Ns6  Ns6 !x6AߘP;Ns6!x6AߘP;6 )AߘP;x6AߘP;Ns6)AߘP;x6AߘP;6 ((3kf-##oviewrevCardsOldrevCardsOldCREATE VIEW revCards/##[viewrevCardsDuerevCardsDueCREATE VIEW revCardsDue as select * from cards where type = 1 and isDue = 1 order by priority desc, du(9Yindexix_cards_intervalDesc2cards4CREATE INDEX ix_cards_intervalDesc2 on cards (type, priority desc, interval desc, factId, combinedDue)x)-9indexix_cards_dueAsc2cards5CREATE INDEX ix_cards_dueAsc2 on cards (type, priority desc, due, factId, combinedDue)[*/indexix_media_filenamemedia7CREATE UNIQUE INDEX ix_media_filename on media (filename)H+#gindexix_tags_tagtags8CREATE UNIQUE INDEX ix_tags_tag on tags (tag),##gviewfailedCardsfailedCardsCREATE VIEW failedCards as select * from cards where type = 0 and isDue = 1 order by type, isDue, combinedDue-##oviewrevCardsOldrevCardsOldCREATE VIEW revCardsOld as select * from cards where type = 1 and isDue = 1 order by priority desc, interval desc   Reverse-PriorityVeryHigh# PriorityLow%PriorityHigh Forward Basic s( EcssCache.fm967d613685ab575d {font-family:"Arial";font-size:20px;white-space:pre-wrap;} .fm9d82d13685ab575d {font-family:"Arial";font-size:20px;white-space:pre-wrap;} #cmqf4bb473685ab575d {text-align:center;} #cmq518bc13685ab575e {text-align:center;} #cmaf4bb473685ab575d {text-align:center;} #cma518bc13685ab575e {text-align:center;} .cmbf4bb473685ab575d {background:#FFFFFF;} .cmb518bc13685ab575e {background:#FFFFFF;}  !revSpacing0.1 )latexPost\end{document}> qlatexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \setlength{\parindent}{0in} \begin{document}  mediaURL!newSpacing60.0# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspendLeeches1 fAhexCache{"5876002578749937502": "518bc13685ab575e", "-811977008313837731": "f4bb473685ab575d", "-7602813709132802211": "967d613685ab575d", "-5087285036409202851": "b966553685ab575d", "-7096880030681442467": "9d82d13685ab575d"} *E`* 2##eviewacqCardsNewacqCardsNewCREATE VIEW acqCardsNew as select * from cards where type = 2 and isDue = 1 order by priority desc, due desc1##[viewacqCardsOldacqCardsOldCREATE VIEW acqCardsOld as select * from cards where type = 2 and isDue = 1 order by priority desc, due .##eviewrevCardsNewrevCardsNewCREATE VIEW revCardsNew as select * from cards where type = 1 and isDue = 1 order by priority desc, interval/##[viewrevCardsDuerevCardsDueCREATE VIEW revCardsDue as select * from cards where type = 1 and isDue = 1 order by priority desc, due0))yviewrevCardsRandomrevCardsRandomCREATE VIEW revCardsRandom as select * from cards where type = 1 and isDue = 1 order by priority desc, factId, ordinalanki-2.1.0+dfsg~b36/tests/support/anki12.anki000066400000000000000000001760001323611211500206720ustar00rootroot00000000000000SQLite format 3@ ?4N - ?/Cindexsqlite_autoindex_deckVars_1deckVars{tablestatsstatsCREATE TABLE stats ( id INTEGER NOT NULL, type INTEGER NOT NULL, day DATE NOT NULL, reps INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "distractedTime" FLOAT NOT NULL, "distractedReps" INTEGER NOT NULL, "newEase0" INTEGER NOT NULL, "newEase1" INTEGER NOT NULL, "newEase2" INTEGER NOT NULL, "newEase3" INTEGER NOT NULL, "newEase4" INTEGER NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "mature>00*%#  <q<3 !   2011-03-18@x@2ڀ" !2011-03-073 ! 2011-03-06? @ 4!   2011-03-06@@5(;s !revSpacing0.1 )latexPost\end{document}> qlatexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \setlength{\parindent}{0in} \begin{document}  mediaURL!newSpacing60.0# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspe: 9  pcXJ:+ ) suspendLeeches sortIndex!revSpacing #revInactive revActive perDay pageSize!newSpacing#newInactive newActive mediaURL 'mediaLocation!leechFails latexPre latexPost hexCache cssCache JJ[F{tablestatsstatsCREATE TABLE stats ( id INTEGER NOT NULL, type INTEGER NOT NULL, day DATE NOT NULL, reps INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "distractedTime" FLOAT NOT NULL, "distractedReps" INTEGER NOT NULL, "newEase0" INTEGER NOT NULL, "newEase1" INTEGER NOT NULL, "newEase2" INTEGER NOT NULL, "newEase3" INTEGER NOT NULL, "newEase4" INTEGER NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, PRIMARY KEY (id) )r7tabledeckVarsdeckVarsCREATE TABLE "deckVars" ( "key" TEXT NOT NULL, value TEXT, PRIMARY KEY ("key") )/Cindexsqlite_autoindex_deckVars_1deckVars y8=    -'.rA`0@&,@@@"9P .>A`8?U+@2\ս~@$-@@@|?  х.)A`\@&ֈ0:@@@eF   .>A\A`8.>A\< WWPS;''5tablereviewHistoryreviewHistoryCREATE TABLE "reviewHistory" ( "cardId" INTEGER NOT NULL, time FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, "nextInterval" FLOAT NOT NULL, ease INTEGER NOT NULL, delay FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "nextFactor" FLOAT NOT NULL, reps FLOAT NOT NULL, "thinkingTime" FLOAT NOT NULL, "yesCount" FLOAT NOT NULL, "noCount" FLOAT NOT NULL, PRIMARY KEY ("cardId", time) )9M'indexsqlite_autoindex_reviewHistory_1reviewHistoryJktablesourcessources CREATE TABLE sources ( id INTEGER NOT NULL, name TEXT NOT NULL, created FLOAT NOT NULL, "lastSync" FLOAT NOT NULL, "syncPeriod" INTEGER NOT NULL, PRIMARY KEY (id) )`tablemediamedia CREATE TABLE media ( id INTEGER NOT NULL, filename TEXT NOT NULL, size INTEGER NOT NULL, created FLOAT NOT NULL, "originalPath" TEXT NOT NULL, description TEXT NOT NULL, PRIMARY KEY (id) )   5Вɞ  A\ }A\ tJJapaneseJapanese?%(Meaning)sArial#000000Arial#000000Arial#FFFFFFeȏЍ   k. Reverse%(Back)s%(Front)sArial#000000Arial#000000Arial#FFFFFFeЍ  k. Forward%(Front)s%(Back)sArial#000000Arial#000000Arial#FFFFFFi ɞ  ## .IRecall%(Meaning)s%(Reading)sArial#000000Arial#000000Arial#FFFFFFT NULL, "modelId" INTEGER NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, active BOOLEAN NOT NULL, qformat TEXT NOT NULL, aformat TEXT NOT NULL, lformat TEXT, qedformat TEXT, aedformat TEXT, "questionInAnswer" BOOLEAN NOT NULL, "questionFontFamily" TEXT, "questionFontSize" INTEGER, "questionFontColour" VARCHAR(7), "questionAlign" INTEGER, "answerFontFamily" TEXT, "answerFontSize" INTEGER, "answerFontColour" VARCHAR(7), "answerAlign" INTEGER, "lastFontFamily" TEXT, "lastFontSize" INTEGER, "lastFontColour" VARCHAR(7), "editQuestionFontFamily" TEXT, "editQuestionFontSize" INTEGER, "editAnswerFontFamily" TEXT, "editAnswerFontSize" INTEGER, "allowEmptyAnswer" BOOLEAN NOT NULL, "typeAnswer" TEXT NOT NULL, PRIMARY KEY (id), CHECK ("allowEmptyAnswer" IN (0, 1)), CHECK ("questionInAnswer" IN (0, 1)), CHECK (active IN (0, 1)), FOREIGN KEY("modelId") REFERENCES models (id) )=)eЩ( eg>c. . A\ A`helloworldA`NA\@@A\%N@cF`@cF`A`NFо' cc    .)ԭ. A\ 9A`foobarA`cV@@A`c^A`cV@χ˲Һj' cc .*' }. A\PA\P_321123A\P@@A\P@ӲҺd' cc .*. A\PA\Pp123321A\P@@<Щ !!aM5ItablecardscardsCREATE TABLE cards ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "cardModelId" INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, ordinal INTEGER NOT NULL, question TEXT NOT NULL, answer TEXT NOT NULL, priority INTEGER NOT NULL, 8KtablefieldsfieldsCREATE TABLE fields ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "fieldModelId" INTEGER NOT NULL, ordinal INTEGER NOT NULL, value TEXT NOT NULL, PRIMARY KEY (id), FOREIGN KEY("fieldModelId") REFERENCES "fieldModels" (id), FOREIGN KEY("factId") REFERENCES facts (id) ).%%tablefactsDeletedfactsDeletedCREATE TABLE "factsDeleted" ( "factId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("factId") REFERENCES facts (id) )0%%#tablemediaDeletedmediaDeletedCREATE TABLE "mediaDeleted" ( "mediaId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("mediaId") REFERENCES cards (id) )interval FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, due FLOAT NOT NULL, "lastDue" FLOAT NOT NULL, factor FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "firstAnswered" FLOAT NOT NULL, reps INTEGER NOT NULL, successive INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, "yesCount" INTEGER NOT NULL, "noCount" INTEGER NOT NULL, "spaceUntil" FLOAT NOT NULL, "relativeDelay" FLOAT NOT NULL, "isDue" BOOLEAN NOT NULL, type INTEGER NOT NULL, "combinedDue" INTEGER NOT NULL, PRIMARY KEY (id), FOREIGN KEY("cardModelId") REFERENCES "cardModels" (id), CHECK ("isDue" IN (0, 1)), FOREIGN KEY("factId") REFERENCES facts (id) ) *Z7\*(Dž/.UҰ.I今日[きょう]ו .Uj0q.ImeaningۜЩ .)-. bar.Um-.I今日ݲҪ  .*-. 321Р >c. -. world䘇Ҫ .*i. 123݆Щ.)i. fooݲР>c. i. hello    DD1~T.%%tablecardsDeletedcardsDeletedCREATE TABLE "cardsDeleted" ( "cardId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("cardId") REFERENCES cards (id) ) tabletagstagsCREATE TABLE tags ( id integer not null, tag text not null collate nocase, priority integer not null default 2, primary key(id))!tablecardTagscardTagsCREATE TABLE cardTags ( id integer not null, cardId integer not null, tagId integer not null, src integer not null, primary key(id))K%%[tablesqlite_stat1sqlite_stat1CREATE TABLE sqlite_stat1(tbl,idx,stat)n7indexix_cards_typeCombinedcards CREATE INDEX ix_cards_typeCombined on cards (type, combinedDue, factId)d9indexix_cards_relativeDelaycards!CREATE INDEX ix_cards_relativeDelay on cards (relativeDelay)T/qindexix_cards_modifiedcards"CREATE INDEX ix_cards_modified on cards (modified)T/qindexix_facts_modifiedfacts#CREATE INDEX ix_facts_modified on facts (modified) || #Recognition Japanese Reverse Forward Basic-PriorityVeryHigh%PriorityHigh# PriorityLow :|l[K: [.:j  [.:j r.:d  r.:d-'.r  -'.rW.? W.?.> .>х.) х.) hK, r_;dWD8'modelsDeleted0-fieldsix_fields_factId9 3#9fieldsix_fields_fieldModelId9 2+fieldsix_fields_value9 1 decks1%factsDeleted0 models26'MreviewHistorysqlite_autoindex_reviewHistory_15 2 1 media0!cardModels4 sources0+CdeckVarssqlite_autoindex_deckVars_116 1-statsix_stats_typeDay4 2 1%3cardTagsix_cardTags_tagCard12 3 1"1cardTagsix_cardTags_cardId12 2%mediaDeleted0 /factsix_facts_modified4 1 #fieldModels5% 7cardsix_cards_typeCombined6 2 1 1" 9cardsix_cards_relativeDelay6 2 /cardsix_cards_modified6 1/cardsix_cards_priority6 6+cardsix_cards_factor6 2 2+cardsix_cards_factId6 2*9#cardsix_cards_intervalDesc26 2 2 2 2 1$-#cardsix_cards_dueAsc26 2 2 1 1 1'cardsix_cards_sort6 1%cardsDeleted0#tagsix_tags_tag8 1 IhIA`.)W.?A\P .*[.:jA\P .*r.:d A`cV.).>A`.U-'.rA`N>c. х.)  W.? [.:j r.:d  .> -'.r х.) A`W.?A`.>A`m-'.rA`х.)A\P_[.:jA\Ppr.:d A`V`.)A]%9ɐ>c. A\P .*A\a.U  -'.r W.? х.) .> [.:j r.:d __ [k!O +iindexix_fields_valuefields+CREATE INDEX ix_fields_valuT/qindexix_cards_prioritycards$CREATE INDEX ix_cards_priority on cards (priority)T+uindexix_cards_factorcards&CREATE INDEX ix_cards_factor on cards (type, factor)N+iindexix_cards_factIdcards'CREATE INDEX ix_cards_factId on cards (factId)S-qindexix_stats_typeDaystats(CREATE INDEX ix_stats_typeDay on stats (type, day)R-mindexix_fields_factIdfields)CREATE INDEX ix_fields_factId on fields (factId)e9indexix_fields_fieldModelIdfields*CREATE INDEX ix_fields_fieldModelId on fields (fieldModelId)O +iindexix_fields_valuefields+CREATE INDEX ix_fields_value on fields (value)a!7indexix_media_originalPathmedia,CREATE INDEX ix_media_originalPath on media (originalPath)k"9%indexix_cardsDeleted_cardIdcardsDeleted-CREATE INDEX ix_cardsDeleted_cardId on cardsDeleted (cardId)r#=' indexix_modelsDeleted_modelIdmodelsDeleted.CREATE INDEX ix_modelsDeleted_modelId on modelsDeleted (modelId) @W.?@[.:j@r.:d @.>@-'.r@х.) >c. х.) .*[.:j .*r.:d.U-'.r.)W.?.).>  !2011-03-18 !2011-03-07 !2011-03-06! 2011-03-06 Lt`L>c. ). >c. :.  .*z.* .*`9.*.Uw-.U.U)\.U.U.U.)#l.).)ԺS.) Lt`Lm-.I.Uj0q.I)\.Ui. `9.*i. S.)i. :. -. #l.)-. z.*-. ). .Iw-.U PA2/今日[きょう]w-.U今日.Uworld). meaning)\.UfooS.)bar#l.)ԁhello:. 321z.*123`9.*     g;([+/indexix_media_filenamemedia7CREATEk$9%indexix_factsDeleted_factIdfactsDeleted/CREATE INDEX ix_factsDelek$9%indexix_factsDeleted_factIdfactsDeleted/CREATE INDEX ix_factsDeleted_factId on factsk$9%indexix_factsDeleted_factIdfactsDeleted/CREATE INDEX ix_factsDeleted_factId on factsDeleted (factId)l%9%indexix_mediaDeleted_factIdmediaDeleted1CREATE INDEX ix_mediaDeleted_factId on mediaDeleted (mediaId)d&3indexix_cardTags_tagCardcardTags2CREATE INDEX ix_cardTags_tagCard on cardTags (tagId, cardId)Z'1uindexix_cardTags_cardIdcardTags3CREATE INDEX ix_cardTags_cardId on cardTags (cardId)(9Yindexix_cards_intervalDesc2cards4CREATE INDEX ix_cards_intervalDesc2 on cards (type, priority desc, interval desc, factId, combinedDue)x)-9indexix_cards_dueAsc2cards5CREATE INDEX ix_cards_dueAsc2 on cards (type, priority desc, due, factId, combinedDue)\*'indexix_cards_sortcards6CREATE INDEX ix_cards_sort on cards (question collate nocase)  Mzk\M -'.r-'.rW.?[.:j х.).>r.:d W.?  х.).>[.:j r.:d ere -'.r -'.r W.? W.? х.)  х.) .> .> [.:j [.:j r.:d r.:d 7{Y7! .*A\P[.:j! .*A\Pr.:d!.)A`W.?  .)A`cV.> >c. A`Nх.) .UA`-'.r [1)A\P .*A\P[.:j)A\P .*A\Pr.:d)A\ 9Ű.)A`W.?( A`cV.)A`cV.>(A`.UA`-'.r(A`N>c. A`Nх.) 0g06cbarW.?6c321[.:j9i今日-'.r6cfoo.>8ehelloх.)6c123r.:d   Reverse#Recognition -PriorityVeryHigh# PriorityLow%PriorityHigh Japanese Forward Basic s !revSpacing0.1 )latexPost\end{document}> qlatexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \setlength{\parindent}{0in} \begin{document}  mediaURL!newSpacing60.0# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspendLeeches1 VV' CcssCache.fmb0999d2e8be8499e {font-family:"Arial";font-size:50px;white-space:pre-wrap;} .fmff152d2e8be80d02 {font-family:"Arial";font-size:20px;white-space:pre-wrap;} .fm12e6692e8be80d02 {font-family:"Arial";font-size:20px;white-space:pre-wrap;} .fm6a30712e8be8499e {font-family:"Arial";font-size:20px;white-space:pre-wrap;} .fm6d852d2e8be8499e {font-family:"ヒラギノ明朝 Pro W3";font-size:50px;white-space:pre-wrap;} #cmq8481c72e8be8499e {text-align:center;} #cmqad9ecf2e8be80d02 {text-align:center;} #cmq27207d2e8be80d02 {text-align:center;} #cmq32cfd92e8be8499e {text-align:center;} #cma8481c72e8be8499e {text-align:center;} #cmaad9ecf2e8be80d02 {text-align:center;} #cma27207d2e8be80d02 {text-align:center;} #cma32cfd92e8be8499e {text-align:center;} .cmb8481c72e8be8499e {background:#FFFFFF;} .cmbad9ecf2e8be80d02 {background:#FFFFFF;} .cmb27207d2e8be80d02 {background:#FFFFFF;} .cmb32cfd92e8be8499e {background:#FFFFFF;}  sortIndex0.'ImediaLocation/Users/dae/Dropbox/Public/AnkipageSize4096iGhexCache{"3661383816014481822": "32cfd92e8be8499e", "-66096941588017918": "ff152d2e8be80d02", "7651740211632163230": "6a30712e8be8499e", "-5936079460005049086": "ad9ecf2e8be80d02", "-8505492998582694654": "89f66b2e8be80d02", "-8898612385977710178": "8481c72e8be8499e", "-3822851096768394850": "caf2812e8be8499e", "2819391005603138818": "27207d2e8be80d02", "7891763599975664030": "6d852d2e8be8499e", "-5721369028356191842": "b0999d2e8be8499e", "1361891585962806530": "12e6692e8be80d02"} )5j)eЩ( eg>c. . A\ A`helloworldA`NA\@@A\%N@cF`@cF`A`NFо' cc    .)ԭ. A\ 9A`foobarA`cV@@A`c^A`cV@χ˲Һj' cc .*' }. A\PA\P_321123A\P@@A\P@ӲҺd' cc .*. A\PA\Pp123321A\P@@A\P 5ѕr( ie   .U2.IA\A`m今日今日[きょう]
meaningA`@@A`\@"8jp@"8jpA`@п' cc.)' }. A\ 9A`barfooA\ 9@@A` uPuJ@0##[2##[viewacqCardsOldacqCardsOldCREATE VIEW acqCardsOld as select * from cards where type = 2 and isDue = 1 order by priority desc, dueH,#gindexix_tags_tagtags8CREATE UNIQUE INDEX ix_tags_tag on tag[+/indexix_media_filenamemedia7CREATE UNIQUE INDEX ix_media_filename on media (filename)H,#gindexix_tags_tagtags8CREATE UNIQUE INDEX ix_tags_tag on tags (tag)-##gviewfailedCardsfailedCardsCREATE VIEW failedCards as select * from cards where type = 0 and isDue = 1 order by type, isDue, combinedDue.##oviewrevCardsOldrevCardsOldCREATE VIEW revCardsOld as select * from cards where type = 1 and isDue = 1 order by priority desc, interval desc /##eviewrevCardsNewrevCardsNewCREATE VIEW revCardsNew as select * from cards where type = 1 and isDue = 1 order by priority desc, interval0##[viewrevCardsDuerevCardsDueCREATE VIEW revCardsDue as select * from cards where type = 1 and isDue = 1 order by priority desc, due EEp1))yviewrevCardsRandomrevCardsRandomCREATE VIEW revCardsRandom as select * from cards where type = 1 and isDue = 1 order by priority desc, factId, ordinal2##[viewacqCardsOldacqCardsOldCREATE VIEW acqCardsOld as select * from cards where type = 2 and isDue = 1 order by priority desc, due 3##eviewacqCardsNewacqCardsNewCREATE VIEW acqCardsNew as select * from cards where type = 2 and isDue = 1 order by priority desc, due descanki-2.1.0+dfsg~b36/tests/support/anki2-alpha.anki2000066400000000000000000002000001323611211500217420ustar00rootroot00000000000000SQLite format 3@ -   R#JaK %%[tablesqlite_stat1sqlite_stat1CREATE TABLE sqlite_stat1(tbl,idx,stat)H 'aindexix_notes_csumnotes CREATE INDEX ix_notes_csum on notes (csum)I 'aindexix_revlog_cidrevlog CREATE INDEX ix_revlog_cid on revlog (cid)U )yindexix_cards_schedcards CREATE INDEX ix_cards_sched on cards (did, queue, due)E %]indexix_cards_nidcards CREATE INDEX ix_cards_nid on cards (nid)I'aindexix_revlog_usnrevlog CREATE INDEX ix_revlog_usn on revlog (usn)E%]indexix_cards_usncardsCREATE INDEX ix_cards_usn on cards (usn)E%]indexix_notes_usnnotesCREATE INDEX ix_notes_usn on notes (usn)!tablegravesgravesCREATE TABLE graves ( usn integer not null, oid integer not null, type integer not null )ktablerevlogrevlogCREATE TABLE revlog ( id integer primary key, cid integer not null, usn integer not null, ease integer not null, ivl integer not null, lastIvl integer not null, factor integer not null, time integer not null, type integer not null )2CtablecardscardsCREATE TABLE cards ( id integer primary key, nid integer not null, did integer not null, ord integer not null, mod integer not null, usn integer not null, type integer not null, queue integer not null, due integer not null, ivl integer not null, factor integer not null, reps integer not null, lapses integer not null, left integer not null, edue integer not null, flags integer not null, data text not null )k5tablenotesnotesCREATE TABLE notes ( id integer primary key, guid text not null, mid integer not null, did integer not null, mod integer not null, usn integer not null, tags text not null, flds text not null, sfld integer not null, csum integer not null, flags integer not null, data text not null )wtablecolcolCREATE TABLE col ( id integer primary key, crt integer not null, mod integer not null, scm integer not null, ver integer not null, dty integer not null, usn integer not null, ls integer not null, conf text not null, models text not null, decks text not null, dconf text not null, tags text not null )  w !][6{"nextPos": 1, "estTimes": true, "sortBackwards": false, "sortType": "noteFld", "timeLim": 0, "activeDecks": [1], "curDeck": 1, "collapseTime": 1200, "dueCounts": true, "curModel": null, "newSpread": 0}{}{"1": {"name": "Default", "usn": 0, "a 7?][O\06Q6{"nextPos": 2, "estTimes": true, "activeDecks": [1], "sortType": "noteFld", "timeLim": 0, "sortBackwards": false, "curDeck": 1, "newSpread": 0, "dueCounts": true, "curModel": "1331523425753", "collapseTime": 1200}{"1331523425752": {"vers": [], "tags": [], "flds": [{"size": 20, "name": "Text", "media": [], "rtl": false, "ord": 0, "font": "Arial", "sticky": false}], "latexPost": "\\end{document}", "id": "1331523425752", "mod": 1331523425, "name": "Cloze", "did": 1, "usn": -1, "req": [[0, "all", [], ["{{c1::"]], [1, "all", [], ["{{c2::"]], [2, "all", [], ["{{c3::"]], [3, "all 3Z !   I{@40:/o>Y6O]oehellohello ]   6O]oe    6#  6  6#  66#    6#  6 col1", [], ["{{c4::"]], [4, "all", [], ["{{c5::"]], [5, "all", [], ["{{c6::"]], [6, "all", [], ["{{c7::"]], [7, "all", [], ["{{c8::"]]], "cloze": true, "sortf": 0, "tmpls": [{"afmt": "{{cloze:1:Text}}", "name": "Cloze 1", "qfmt": "{{cloze:1:Text}}", "did": null, "ord": 0, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:2:Text}}", "name": "Cloze 2", "qfmt": "{{cloze:2:Text}}", "did": null, "ord": 1, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:3:Text}}", "name": "Cloze 3", "qfmt": "{{cloze:3:Text}}", "did": null, "ord": 2, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:4:Text}}", "name": "Cloze 4", "qfmt": "{{cloze:4:Text}}", "did": null, "ord": 3, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:5:Text}}", "name": "Cloze 5", "qfmt": "{{cloze:5:Text}}", "did": null, "ord": 4, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:6:Text}}", "name": "Cloze 6", "qfmt": "{{cloze:6:Text}}", "did": null, "ord": 5, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:7:Text}}", "name": "Cloze 7", "qfmt": "{{cloze:7:Text}}", "did": null, "ord": 6, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:8:Text}}", "name": "Cloze 8", "qfmt": "{{cloze:8:Text}}", "did": null, "ord": 7, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}], "latexPre": "\\documentclass[12pt]{article}\n\\special{papersize=3in,5in}\n\\usepackage{amssymb,amsmath}\n\\pagestyle{empty}\n\\setlength{\\parindent}{0in}\n\\begin{document}\n"}, "1331523425753": {"vers": [], "tags": [], "flds": [{"size": 20, "name": "Front", "media": [], "rtl": false, "ord": 0, "font": "Arial", "sticky": false}, {"size": 20, "name": "Back", "media": [], "rtl": false, "ord": 1, "font": "Arial", "sticky": false}], "latexPost": "\\end{document}", "id": "1331523425753", "mod": 1331523429, "name": "Basic", "did": 1, "usn": -1, "req": [[0, "all", [0], []]], "cloze": false, "sortf": 0, "tmpls": [{"afmt": "{{Front}}\n\n


\n\n{{Back}}", "name": "Forward", "qfmt": "{{Front}}", "did": null, "ord": 0, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n"}], "latexPre": "\\documentclass[12pt]{article}\n\\special{papersize=3in,5in}\n\\usepackage{amssymb,amsmath}\n\\pagestyle{empty}\n\\setlength{\\parindent}{0in}\n\\begin{document}\n"}}{"1": {"name": "Default", "usn": 0, "newToday": [0, 0], "lrnToday": [0, 0], "conf": 1, "revToday": [0, 0], "timeToday": [0, 0], "id": 1, "mod": 1331523425, "desc": ""}}{"1": {"name": "Default", "usn": 0, "lapse": {"leechFails": 8, "minInt": 1, "delays": [1, 10], "leechAction": 0, "mult": 0}, "rev": {"perDay": 100, "fuzz": 0.05, "fi": [10, 10], "ease4": 1.3, "order": 0, "minSpace": 1}, "timer": 0, "maxTaken": 60, "new": {"separate": true, "delays": [1, 10], "perDay": 20, "ints": [1, 4, 7], "initialFactor": 2500, "order": 1}, "cram": {"reset": true, "minInt": 1, "delays": [1, 5, 10], "resched": true, "mult": 0}, "autoplay": true, "id": 1, "mod": 0}}{}], ["{{c4::"]], [4, "all", [], ["{{c5::"]], [5, "all", [], ["{{c6::"]], [6, "all", [], ["{{c7::"]], [7, "all", [], ["{{c8::"]]], "cloze": true, "sortf": 0, "tmpls": [{"afmt": "{{cloze:1:Text}}", "name": "Cloze 1", "qfmt": "{{cloze:1:Text}}", "did": null, "ord": 0, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:2:Text}}", "name": "Cloze 2", "qfmt": "{{cloze:2:Text}}", "did": null, "ord": 1, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:3:Text}}", "name": "Cloze 3", "qfmt": "{{cloze:3:Text}}", "did": null, "ord": 2, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:4:Text}}", "name": "Cloze 4", "qfmt": "{{cloze:4:Text}}", "did": null, "ord": 3, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:5:Text}}", "name": "Cloze 5", "qfmt": "{{cloze:5:Text}}", "did": null, "ord": 4, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:6:Text}}", "name": "Cloze 6", "qfmt": "{{cloze:6:Text}}", "did": null, "ord": 5, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:7:Text}}", "name": "Cloze 7", "qfmt": "{{cloze:7:Text}}", "did": null, "ord": 6, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}, {"afmt": "{{cloze:8:Text}}", "name": "Cloze 8", "qfmt": "{{cloze:8:Text}}", "did": null, "ord": 7, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n\n.cloze {\n font-weight: bold;\n color: blue;\n}"}], "latexPre": "\\documentclass[12pt]{article}\n\\special{papersize=3in,5in}\n\\usepackage{amssymb,amsmath}\n\\pagestyle{empty}\n\\setlength{\\parindent}{0in}\n\\begin{document}\n"}, "1331523425753": {"vers": [], "tags": [], "flds": [{"size": 20, "name": "Front", "media": [], "rtl": false, "ord": 0, "font": "Arial", "sticky": false}, {"size": 20, "name": "Back", "media": [], "rtl": false, "ord": 1, "font": "Arial", "sticky": false}], "latexPost": "\\end{document}", "id": "1331523425753", "mod": 1331523429, "name": "Basic", "did": 1, "usn": -1, "req": [[0, "all", [0], []]], "cloze": false, "sortf": 0, "tmpls": [{"afmt": "{{Front}}\n\n
\n\n{{Back}}", "name": "Forward", "qfmt": "{{Front}}", "did": null, "ord": 0, "css": ".card {\n font-family: arial;\n font-size: 20px;\n text-align: center;\n color: black;\n background-color: white;\n}\n"}], "latexPre": "\\documentclass[12pt]{article}\n\\special{papersize=3in,5in}\n\\usepackage{amssymb,amsmath}\n\\pagestyle{empty}\n\\setlength{\\parindent}{0in}\n\\begin{document}\n"}}{"1": {"name": "Default", "usn": 0, "newToday": [0, 0], "lrnToday": [0, 0], "conf": 1, "revToday": [0, 0], "timeToday": [0, 0], "id": 1, "mod": 1331523425, "desc": ""}}{"1": {"name": "Default", "usn": 0, "lapse": {"leechFails": 8, "minInt": 1, "delays": [1, 10], "leechAction": 0, "mult": 0}, "rev": {"perDay": 100, "fuzz": 0.05, "fi": [10, 10], "ease4": 1.3, "order": 0, "minSpace": 1}, "timer": 0, "maxTaken": 60, "new": {"separate": true, "delays": [1, 10], "perDay": 20, "ints": [1, 4, 7], "initialFactor": 2500, "order": 1}, "cram": {"reset": true, "minInt": 1, "delays": [1, 5, 10], "resched": true, "mult": 0}, "autoplay": true, "id": 1, "mod": 0}}{}anki-2.1.0+dfsg~b36/tests/support/diffmodels1.anki000066400000000000000000001150001323611211500217730ustar00rootroot00000000000000SQLite format 3@ M4N -ML1E.@*;&6"0*&#!       BB;''5tablereviewHistoryreviewHistoryCREATE TABLE "reviewHistory" ( "cardId" INTEGER NOT NULL, time FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, "nextInterval" FLOAT NOT NULL, ease INTEGER NOT NULL, delay FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "nextFactor" FLOAT NOT NULL, reps FLOAT NOT NULL, "thinkingTime" FLOAT NOT NULL, "yesCount" FLOAT NOT NULL, "noCount" FLOAT NOT NULL, PRIMARY KEY ("cardId", time) ) 39M'indexsqlite_autoindex_reviewHistory_1reviewHistoryJktablesourcessourcesCREATE TABLE sources ( id INTEGER NOT NULL, name TEXT NOT NULL, created FLOAT NOT NULL, "lastSync" FLOAT NOT NULL, "syncPeriod" INTEGER NOT NULL, PRIMARY KEY (id) )  " !2012-10-27"!2012-10-27"newEase0" INTEGER NOT NULL, "newEase1" INTEGER NOT NULL, "newEase2" INTEGER NOT NULL, "newEase3" INTEGER NOT NULL, "newEase4" INTEGER NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, PRIMARY KEY (id) ) {tablestatsstatsCREATE TABLE stats ( id INTEGER NOT NULL, type INTEGER NOT NULL, day DATE NOT NULL, reps INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "distractedTime" FLOAT NOT NULL, "distractedReps" INTEGER NOT NULL,   `tablemediamedia CREATE TABLE media ( id INTEGER NOT NULL, filename TEXT NOT NULL, size INTEGER NOT NULL, created FLOAT NOT NULL, "originalPath" TEXT NOT NULL, description TEXT NOT NULL, PRIMARY KEY (id) ) /ۂՆE  A"#VA")BasicBasic?< ,,k]tablemodelsmodels CREATE TABLE models ( id INTEGER NOT NULL, "deckId" INTEGER, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, features TEXT NOT NULL, spacing FLOAT NOT NULL, "initialSpacing" FLOAT NOT NULL, source INTEGER NOT NULL, PRIMARY KEY (id) )r7tabledeckVarsdeckVarsCREATE TABLE "deckVars" ( "key" TEXT NOT NULL, value TEXT, PRIMARY KEY ("key") )Is !revSpacing0.1 )latexPost\end{document}> qlatexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \setlength{\parindent}{0in} \begin{document}  mediaURL!newSpacing60.0# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspeHG uj\L=/) suspendLeeches sortIndex!revSpacing #revInactive revActive perDay pageSize!newSpacing#newInactive newActive mediaURL !leechFails latexPre latexPost hexCache cssCache @@q<q Atable/Cindexsqlite_autoindex_deckVars_1deckVars !!tablecardModelscardModelsCREATEq AtabledecksdecksCREATE TABLE decks ( id INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, description TEXT NOT NULL, version INTEGER NOT NULL, "currentModelId" INTEGER, "syncName" TEXT, "lastSync" FLOAT NOT NULV ##stablefieldModelsfieldModelsCREATE TABLE "fieldModels" ( id INTEGER NOT NULL, or eՆF  l:EForward%(Front)s%(Back)sArial#000000Arial#000000Arial#FFFFFF TABLE "cardModels" ( id INTEGER NOT NULL, ordinal INTEGER NOT NULL, "modelId" INTEGER NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, active BOOLEAN NOT NULL, qformat TEXT NOT NULL, aformat TEXT NOT NULL, lformat TEXT, qedformat TEXT, aedformat TEXT, "questionInAnswer" BOOLEAN NOT NULL, "questionFontFamily" TEXT, "questionFontSize" INTEGER, "questionFontColour" VARCHAR(7), "questionAlign" INTEGER, "answerFontFamily" TEXT, "answerFontSize" INTEGER, "answerFontColour" VARCHAR(7), "answerAlign" INTEGER, "lastFontFamily" TEXT, "lastFontSize" INTEGER, "lastFontColour" VARCHAR(7), "editQuestionFontFamily" TEXT, "editQuestionFontSize" INTEGER, "editAnswerFontFamily" TEXT, "editAnswerFontSize" INTEGER, "allowEmptyAnswer" BOOLEAN NOT NULL, "typeAnswer" TEXT NOT NULL, PRIMARY KEY (id), CHECK (active IN (0, 1)), CHECK ("questionInAnswer" IN (0, 1)), CHECK ("allowEmptyAnswer" IN (0, 1)), FOREIGN KEY("modelId") REFERENCES models (id) ) y%   -%#   A"A"*Al:E?񙙙 XPriorityVeryHighPriorityHighPriorityLowXL, "hardIntervalMin" FLOAT NOT NULL, "hardIntervalMax" FLOAT NOT NULL, "midIntervalMin" FLOAT NOT NULL, "midIntervalMax" FLOAT NOT NULL, "easyIntervalMin" FLOAT NOT NULL, "easyIntervalMax" FLOAT NOT NULL, delay0 INTEGER NOT NULL, delay1 INTEGER NOT NULL, delay2 FLOAT NOT NULL, "collapseTime" INTEGER NOT NULL, "highPriority" TEXT NOT NULL, "medPriority" TEXT NOT NULL, "lowPriority" TEXT NOT NULL, suspended TEXT NOT NULL, "newCardOrder" INTEGER NOT NULL, "newCardSpacing" INTEGER NOT NULL, "failedCardMax" INTEGER NOT NULL, "newCardsPerDay" INTEGER NOT NULL, "sessionRepLimit" INTEGER NOT NULL, "sessionTimeLimit" INTEGER NOT NULL, "utcOffset" FLOAT NOT NULL, "cardCount" INTEGER NOT NULL, "factCount" INTEGER NOT NULL, "failedNowCount" INTEGER NOT NULL, "failedSoonCount" INTEGER NOT NULL, "revCount" INTEGER NOT NULL, "newCount" INTEGER NOT NULL, "revCardOrder" INTEGER NOT NULL, PRIMARY KEY (id), FOREIGN KEY("currentModelId") REFERENCES models (id) ) $聓ՆE l:EFrontArial1#ՆF  l:EBackArial1dinal INTEGER NOT NULL, "modelId" INTEGER NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, features TEXT NOT NULL, required BOOLEAN NOT NULL, "unique" BOOLEAN NOT NULL, numeric BOOLEAN NOT NULL, "quizFontFamily" TEXT, "quizFontSize" INTEGER, "quizFontColour" VARCHAR(7), "editFontFamily" TEXT, "editFontSize" INTEGER, PRIMARY KEY (id), CHECK (numeric IN (0, 1)), CHECK ("unique" IN (0, 1)), CHECK (required IN (0, 1)), FOREIGN KEY("modelId") REFERENCES models (id) )   4 '''tablemodelsDeletedmodelsDeletedCREATE TABLE "modelsDeleted" ( "modelId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("modelId") REFERENCES models (id) )& +tablefactsfactsCREATE TABLE facts ( id INTEGER NOT NULL, "modelId" INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, "spaceUntil" TEXT NOT NULL, "lastCardId" INTEGER, PRIMARY KEY (id), FOREIGN KEY("modelId") REFERENCES models (id) ) *Ն !l:EA"ޜeA"3front back Ն 5:2Б:FbackՆ5:M :Efront 8KtablefieldsfieldsCREATE TABLE fields ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "fieldModelId" INTEGER NOT NULL, ordinal INTEGER NOT NULL, value TEXT NOT NULL, PRIMARY KEY (id), FOREIGN KEY("fieldModelId") REFERENCES "fieldModels" (id), FOREIGN KEY("factId") REFERENCES facts (id) ) 22CΎՆN' ge5::FA"ޜeA"ffrontbackA"ޜe@@A"ޜe rval FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, due FLOAT NOT NULL, "lastDue" FLOAT NOT NULL, factor FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "firstAnswered" FLOAT NOT NULL, reps INTEGER NOT NULL, successive INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, "yesCount" INTEGER NOT NULL, "noCount" INTEGER NOT NULL, "spaceUntil" FLOAT NOT NULL, "relativeDelay" FLOAT NOT NULL, "isDue" BOOLEAN NOT NULL, type INTEGER NOT NULL, "combinedDue" INTEGER NOT NULL, PRIMARY KEY (id), CHECK ("isDue" IN (0, 1)), FOREIGN KEY("cardModelId") REFERENCES "cardModels" (id), FOREIGN KEY("factId") REFERENCES facts (id) ) 5ItablecardscardsCREATE TABLE cards ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "cardModelId" INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, ordinal INTEGER NOT NULL, question TEXT NOT NULL, answer TEXT NOT NULL, priority INTEGER NOT NULL, inte &ݻ:"fA"}Z:]A"ܜ O.%%tablefactsDeletedfactsDeleted"CREATE TABLE "factsDeleted" ( "factId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("factId") REFERENCES facts (id) ).%%tablecardsDeletedcardsDeleted$CREATE TABLE "cardsDeleted" ( "cardId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("cardId") REFERENCES cards (id) )  a:*A")۲h/):DA":"XA"ه@  \0%%#tablemediaDeletedmediaDeleted%CREATE TABLE "mediaDeleted" ( "mediaId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("mediaId") REFERENCES cards (id) ) tabletagstags'CREATE TABLE tags ( id integer not null, tag text not null collate nocase, priority integer not null default 2, primary key(id))!tablecardTagscardTags(CREATE TABLE cardTags ( id integer not null, cardId integer not null, tagId integer not null, src integer not null, primary key(id))  Forward Basic-PriorityVeryHigh%PriorityHigh# PriorityLow 8q:N 8q:NK|P3lN)#9fieldsix_fields_fieldModelId2 1 +fieldsix_fields_value2 1 /factsix_facts_modified1 1% 7cardsix_cards_typeCombined1 1 1 1" 9cardsix_cards_relativeDelay1 1 /cardsix_cards_modified1 1/cardsix_cards_priority1 1+cardsix_cards_factor1 1 1+cardsix_cards_factId1 1*9#cardsix_cards_intervalDesc21 1 1 1 1 1$-#cardsix_cards_dueAsc21 1 1 1 1 1'cardsix_cards_sort1 1)%9cardsDeletedix_cardsDeleted_cardId3 1#tagsix_tags_tJ 11~TK%%[tablesqlite_stat1sqlite_stat1)CREATE TABLE sqlite_stat1(tbl,idx,stat)n7indexix_cards_typeCombinedcards+CREATE INDEX ix_cards_typeCombined on cards (type, combinedDue, factId)d9indexix_cards_relativeDelaycards,CREATE INDEX ix_cards_relativeDelay on cards (relativeDelay)T/qindexix_cards_modifiedcards-CREATE INDEX ix_cards_modified on cards (modified)T/qindexix_facts_modifiedfacts.CREATE INDEX ix_facts_modified on facts (modified) A"ޜe5:8q:N  8q:N A"f8q:N A"35:  8q:N [[WNT/qindexix_cards_prioritycards/CREATE INDEX ix_cards_priority on cards (priority)T+uindexix_cards_factorcards1CREATE INDEX ix_cards_factor on cards (type, factor)N+iindexix_cards_factIdcards2CREATE INDEX ix_cards_factId on cards (factId)S-qindexix_stats_typeDaystats3CREATE INDEX ix_stats_typeDay on stats (type, day)R-mindexix_fields_factIdfields4CREATE INDEX ix_fields_factId on fields (factId) @8q:N 5:8q:N  !2012-10-27! 2012-10-27 5:_:5:ˣ: M :Eˣ:2Б:F_: xx0$k"9%indexix_cardsDeleted_cardIdcardsDeleted9CREATE INDEX ix_cardsDeleted_cardIde9indexix_fields_fieldModelIdfields5CREATE INDEX ix_fields_fieldModelId on fields (fieldModelId)O +iindexix_fields_valuefields7CREATE INDEX ix_fields_value on fields (value)a!7indexix_media_originalPathmedia8CREATE INDEX ix_media_originalPath on media (originalPath)k"9%indexix_cardsDeleted_cardIdcardsDeleted9CREATE INDEX ix_cardsDeleted_cardId on cardsDeleted (cardId) frontˣ:back_:   /):D  :"X  a:*  KK,l%9%r#=' indexix_modelsDeleted_modelIdmodelsDeleted:CREATE INDEX ix_modelsDeleted_modelId on modelsDeleted (modelId)k$9%indexix_factsDeleted_factIdfactsDeletedCREATE INDEX ix_cardTags_tagCard on cardTags (tagId, cardId)   Z:] &ݻ:"f  8q:N  8q:N  8q:N  8q:N ;;(x)-Z'1uindexix_cardTags_cardIdcardTags?CREATE INDEX ix_cardTags_cardId on cardTags (cardId)(9Yindexix_cards_intervalDesc2cardsACREATE INDEX ix_cards_intervalDesc2 on cards (type, priority desc, interval desc, factId, combinedDue)x)-9indexix_cards_dueAsc2cardsBCREATE INDEX ix_cards_dueAsc2 on cards (type, priority desc, due, factId, combinedDue)\*'indexix_cards_sortcardsCCREATE INDEX ix_cards_sort on cards (question collate nocase) !5:A"ޜe8q:N )A"ޜe5:A"ޜe8q:N 8gfront8q:N  33k[+/indexix_media_filenamemediaDCREATE UNIQUE INDEX ix_media_filename on media (filename)H,#gindexix_tags_tagtagsFCREATE UNIQUE INDEX ix_tags_tag on tags (tag)-##gviewfailedCardsfailedCardsCREATE VIEW failedCards as select * from cards where type = 0 and isDue = 1 order by type, isDue, combinedDue.##oviewrevCardsOldrevCardsOldCREATE VIEW revCardsOld as select * from cards where type = 1 and isDue = 1 order by priority desc, interval desc -PriorityVeryHigh# PriorityLow%PriorityHigh Forward Basic s !revSpacing0.1 )latexPost\end{document}> qlatexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \setlength{\parindent}{0in} \begin{document}  mediaURL!newSpacing60.0# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspendLeeches1 8ehexCache{"3661586178059337542": "32d0913aa1b4ff46", "-8256200675311681723": "8d6c153aa1b4ff45", "1045839219487211334": "e83913aa1b4ff46", "5593480884619902789": "4da0093aa1b4ff45"}& AcssCache.fm32d0913aa1b4ff46 {font-family:"Arial";font-size:20px;white-space:pre-wrap;} .fm4da0093aa1b4ff45 {font-family:"Arial";font-size:20px;white-space:pre-wrap;} #cmqe83913aa1b4ff46 {text-align:center;} #cmae83913aa1b4ff46 {text-align:center;} .cmbe83913aa1b4ff46 {background:#FFFFFF;} pageSize4096 sortIndex0 )|P3lN)#9fieldsix_fields_fieldModelId2 1 +fieldsix_fields_value2 1 /factsix_facts_modified1 1% 7cardsix_cards_typeCombined1 1 1 1" 9cardsix_cards_relativeDelay1 1 /cardsix_cards_modified1 1/cardsix_cards_priority1 1+cardsix_cards_factor1 1 1+cardsix_cards_factId1 1*9#cardsix_cards_intervalDesc21 1 1 1 1 1$-#cardsix_cards_dueAsc21 1 1 1 1 1'cardsix_cards_sort1 1)%9cardsDeletedix_cardsDeleted_cardId3 1#tagsix_tags_tag5 1 wQ1 decks1)%9factsDeletedix_factsDeleted_factId2 1!cardModels1 media0+CdeckVarssqlite_autoindex_deckVars_116 1 models1'reviewHistory0-statsix_stats_typeDay2 1 1$3cardTagsix_cardTags_tagCard2 1 1!1cardTagsix_cardTags_cardId2 2 sources0%mediaDeleted0#fieldModels2'modelsDeleted0-fieldsix_fields_factId2 2 EE` /##eviewrevCardsNewrevCardsNewCREATE VIEW revCardsNew as select * from cards where type = 1 and isDue = 1 order by priority desc, interval0##[viewrevCardsDuerevCardsDueCREATE VIEW revCardsDue as select * from cards where type = 1 and isDue = 1 order by priority desc, due1))yviewrevCardsRandomrevCardsRandomCREATE VIEW revCardsRandom as select * from cards where type = 1 and isDue = 1 order by priority desc, factId, ordinal u 3##eviewacqCardsNewacqCardsNewCREATE VIEW acqCardsNew as select * from cards where type = 2 and isDue = 1 order by priority desc, due desc2##[viewacqCardsOldacqCardsOldCREATE VIEW acqCardsOld as select * from cards where type = 2 and isDue = 1 order by priority desc, dueanki-2.1.0+dfsg~b36/tests/support/diffmodels2-1.apkg000066400000000000000000000057761323611211500221540ustar00rootroot00000000000000PK*[Ae" collection.anki2oH);m6,ZpEtĖpc;PM۴ Z(?  C9=hRM{PhiH(rvfޛ7yݡ;jgڪ/-P(O~bh |n SW O4JW*OazwNM+nh\XIwf-?5kW֬і%_ū>zbE.ꮣ)ͦjnv}XӠ驡&wEعxnRzaT\.]xԉb/S0骻)>j2YsNwyr|am7_WxSިJZY8Ѯ }& F' k''Y-PlQ'Ȩ91& 1Lդ!D5?|tr?Id\%')Ξ3h[AW{?שƟlg&137荤3ٳy/1ef)sL9t ͑{Cy=?]G[S'狿P|4ocH4w筚 F$8*"I5ؙ[d) e^z&yE3#f LxD. <6&pLȼ\DLρ=7=`* o 2 ALq4a5ʘ,XGjyۂy[Nw\h̬Yu9Ҭ?RG吹D)2| Vy:%rSȰZa{"zd^cK=ȌH|9zr{9z{cIs^N ]\lõFеqj/  ' ӥR\.''n'q%Ǫۡ4,jURKҳno_G:ܰ7NR"<n[W<jkik/ö́2 ]w=\NWԄ݉$gnNȫa7jLU| ]_-ז.h*j~vxiR"Tx73 \csT3kvjM AAAqL??AAAAo/    gJ//w^AAAA#Nf3%      86NMr_</    \ n0~jU\ϭ4+\/jPj\>좿 i;T9TQ^+v~\[`cG)?0Zq3`b5,&=&.gʻR-*Y/2u\b-+ %-Ȱiޖ94hЮ~uƕ]. t|TScekIk4Yg 8ֆRWPZĢ;ؾaBFmzo {k*m]q=PAa"hf]ecJ-fBh#Q*z^f?yk\9AYJNJH$ rSj^f$hbl;7XN[ԽxToUgz4GРtO% <ۥq-/u6ڏDl}ı } ^ܒ^a%cc2Ϯb曵3sJ42ԘEK `0ڗa8Īa9_0dΏX_lJc(Dɇ{ϵ'-&H/z15s Á  wL]׈Y}I€vZKf}Az\c-}7c`=0& 06gꀺԥv޴̲^_XoպVtzRV W w#'nT:`axpzfEТ zbi5EΌa&v!Ӆ3O<UhEy:NQv~ZP0+yXs;]V&S4gsJ=#Q5艈YxAVZ"xYEC/憁DDxD.W,%0Nr"rhE$"g_D?6|E&~ؼ%3ӏo߲YȤsL?Z6kl2 0dH'jQQT6(mA}L9]|lnwB))yvlΞfߕ21sQH2 gz:$r!v#DX%b\~u*}#߱9cnvhDDkm8z C/Sv3$a^tH]LnlZ}#267l/sEAqs& |X|unί}?? K.A庾u Ρ۶Yj|@m%t[ZJiy7;`X4ozWK4eVR\ZZVs:(]פZp5s,[դ#*   8N oG    cTq*AAAg/_AAAAf&& O{5+/    N\nldp ݶ  krWŠ&o[nhzF[*k%(յZR) o+[&{m3,:s.ǚ0^5(vcvZQʹLs; ^(5QO3, *eQ5mїWLS{@da\1o$߻ Uhp,Zy+%jW*KKK5atF邁 Wk[̱n]2jR+U+VrVۭk ִax݄bܴiIMq<8h.pD*%\& ն\͒"u E,l39B 0g &,=b@\2I_FYݓ4a^ [UQ< $ W}48y!N ?&7U Bvmr]ZGzךiaVn_%)ɤL꧞L ZjoJl3Ddw 3Ԃh35B 6O!^ـBCWŸxMٽߤ?}%6qq6?l  G'G3zaIWI,-b[> s/WY%n3Cq5dl\2i9Cf7Q2E"n+vHs~p$.pf]%d05ؼ,q˽PWANEW iyhBJ'd-5BeǾm$wgvqYx!D_Qr/^ -v\LU s=tZ4jӲ\4/Kj]KBfpjd6$2EGXGzƒ%oNAGd+3A:& e:ɝ PK[ACmediaPK[Ai collection.anki2PK[AC mediaPKq anki-2.1.0+dfsg~b36/tests/support/diffmodels2.anki000066400000000000000000001120001323611211500217710ustar00rootroot00000000000000SQLite format 3@ J5N -JI0E-@*;&6"0*&#!       BB;''5tablereviewHistoryreviewHistoryCREATE TABLE "reviewHistory" ( "cardId" INTEGER NOT NULL, time FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, "nextInterval" FLOAT NOT NULL, ease INTEGER NOT NULL, delay FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "nextFactor" FLOAT NOT NULL, reps FLOAT NOT NULL, "thinkingTime" FLOAT NOT NULL, "yesCount" FLOAT NOT NULL, "noCount" FLOAT NOT NULL, PRIMARY KEY ("cardId", time) ) 39M'indexsqlite_autoindex_reviewHistory_1reviewHistoryJktablesourcessourcesCREATE TABLE sources ( id INTEGER NOT NULL, name TEXT NOT NULL, created FLOAT NOT NULL, "lastSync" FLOAT NOT NULL, "syncPeriod" INTEGER NOT NULL, PRIMARY KEY (id) )  " !2012-10-27"!2012-10-27"newEase0" INTEGER NOT NULL, "newEase1" INTEGER NOT NULL, "newEase2" INTEGER NOT NULL, "newEase3" INTEGER NOT NULL, "newEase4" INTEGER NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, PRIMARY KEY (id) ) {tablestatsstatsCREATE TABLE stats ( id INTEGER NOT NULL, type INTEGER NOT NULL, day DATE NOT NULL, reps INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "distractedTime" FLOAT NOT NULL, "distractedReps" INTEGER NOT NULL,   `tablemediamedia CREATE TABLE media ( id INTEGER NOT NULL, filename TEXT NOT NULL, size INTEGER NOT NULL, created FLOAT NOT NULL, "originalPath" TEXT NOT NULL, description TEXT NOT NULL, PRIMARY KEY (id) ) /ۂՆE  A"#VA"#VCBasicBasic?< ,,k]tablemodelsmodels CREATE TABLE models ( id INTEGER NOT NULL, "deckId" INTEGER, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, features TEXT NOT NULL, spacing FLOAT NOT NULL, "initialSpacing" FLOAT NOT NULL, source INTEGER NOT NULL, PRIMARY KEY (id) )r7tabledeckVarsdeckVarsCREATE TABLE "deckVars" ( "key" TEXT NOT NULL, value TEXT, PRIMARY KEY ("key") )Hu !revSpacing0.1 )latexPost\end{document}> qlatexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \setlength{\parindent}{0in} \begin{document}  mediaURL!newSpacing60# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspeG F uj\L=/) suspendLeeches sortIndex!revSpacing #revInactive revActive perDay pageSize!newSpacing#newInactive newActive mediaURL !leechFails latexPre latexPost hexCache cssCache @@q<q Atable/Cindexsqlite_autoindex_deckVars_1deckVars !!tablecardModelscardModelsCREATEq AtabledecksdecksCREATE TABLE decks ( id INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, description TEXT NOT NULL, version INTEGER NOT NULL, "currentModelId" INTEGER, "syncName" TEXT, "lastSync" FLOAT NOT NULV ##stablefieldModelsfieldModelsCREATE TABLE "fieldModels" ( id INTEGER NOT NULL, or ""eՆF  l:EForward%(Front)s%(Back)sArial#000000Arial#000000Arial#FFFFFFeՆF   l:EReverse%(Back)s%(Front)sArial#000000Arial#000000Arial#FFFFFF TABLE "cardModels" ( id INTEGER NOT NULL, ordinal INTEGER NOT NULL, "modelId" INTEGER NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, active BOOLEAN NOT NULL, qformat TEXT NOT NULL, aformat TEXT NOT NULL, lformat TEXT, qedformat TEXT, aedformat TEXT, "questionInAnswer" BOOLEAN NOT NULL, "questionFontFamily" TEXT, "questionFontSize" INTEGER, "questionFontColour" VARCHAR(7), "questionAlign" INTEGER, "answerFontFamily" TEXT, "answerFontSize" INTEGER, "answerFontColour" VARCHAR(7), "answerAlign" INTEGER, "lastFontFamily" TEXT, "lastFontSize" INTEGER, "lastFontColour" VARCHAR(7), "editQuestionFontFamily" TEXT, "editQuestionFontSize" INTEGER, "editAnswerFontFamily" TEXT, "editAnswerFontSize" INTEGER, "allowEmptyAnswer" BOOLEAN NOT NULL, "typeAnswer" TEXT NOT NULL, PRIMARY KEY (id), CHECK (active IN (0, 1)), CHECK ("questionInAnswer" IN (0, 1)), CHECK ("allowEmptyAnswer" IN (0, 1)), FOREIGN KEY("modelId") REFERENCES models (id) ) {%   -%#  A"A"Al:E?񙙙 XPriorityVeryHighPriorityHighPriorityLowXL, "hardIntervalMin" FLOAT NOT NULL, "hardIntervalMax" FLOAT NOT NULL, "midIntervalMin" FLOAT NOT NULL, "midIntervalMax" FLOAT NOT NULL, "easyIntervalMin" FLOAT NOT NULL, "easyIntervalMax" FLOAT NOT NULL, delay0 INTEGER NOT NULL, delay1 INTEGER NOT NULL, delay2 FLOAT NOT NULL, "collapseTime" INTEGER NOT NULL, "highPriority" TEXT NOT NULL, "medPriority" TEXT NOT NULL, "lowPriority" TEXT NOT NULL, suspended TEXT NOT NULL, "newCardOrder" INTEGER NOT NULL, "newCardSpacing" INTEGER NOT NULL, "failedCardMax" INTEGER NOT NULL, "newCardsPerDay" INTEGER NOT NULL, "sessionRepLimit" INTEGER NOT NULL, "sessionTimeLimit" INTEGER NOT NULL, "utcOffset" FLOAT NOT NULL, "cardCount" INTEGER NOT NULL, "factCount" INTEGER NOT NULL, "failedNowCount" INTEGER NOT NULL, "failedSoonCount" INTEGER NOT NULL, "revCount" INTEGER NOT NULL, "newCount" INTEGER NOT NULL, "revCardOrder" INTEGER NOT NULL, PRIMARY KEY (id), FOREIGN KEY("currentModelId") REFERENCES models (id) ) $聓ՆE l:EFrontArial1#ՆF  l:EBackArial1dinal INTEGER NOT NULL, "modelId" INTEGER NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, features TEXT NOT NULL, required BOOLEAN NOT NULL, "unique" BOOLEAN NOT NULL, numeric BOOLEAN NOT NULL, "quizFontFamily" TEXT, "quizFontSize" INTEGER, "quizFontColour" VARCHAR(7), "editFontFamily" TEXT, "editFontSize" INTEGER, PRIMARY KEY (id), CHECK (numeric IN (0, 1)), CHECK ("unique" IN (0, 1)), CHECK (required IN (0, 1)), FOREIGN KEY("modelId") REFERENCES models (id) )   4 '''tablemodelsDeletedmodelsDeletedCREATE TABLE "modelsDeleted" ( "modelId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("modelId") REFERENCES models (id) )& +tablefactsfactsCREATE TABLE facts ( id INTEGER NOT NULL, "modelId" INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, "spaceUntil" TEXT NOT NULL, "lastCardId" INTEGER, PRIMARY KEY (id), FOREIGN KEY("modelId") REFERENCES models (id) ) *Ն !l:EA"ޜeA"3front back Ն 5:2Б:FbackՆ5:M :Efront 8KtablefieldsfieldsCREATE TABLE fields ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "fieldModelId" INTEGER NOT NULL, ordinal INTEGER NOT NULL, value TEXT NOT NULL, PRIMARY KEY (id), FOREIGN KEY("fieldModelId") REFERENCES "fieldModels" (id), FOREIGN KEY("factId") REFERENCES facts (id) ) d2dCΎՆN' ge5::FA"ޜeA"ffrontbackA"ޜe@@A"ޜeCìՆ' eg5:;:FA"ޜgbA"FbackfrontA"ޜgb@@A"ޜgb rval FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, due FLOAT NOT NULL, "lastDue" FLOAT NOT NULL, factor FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "firstAnswered" FLOAT NOT NULL, reps INTEGER NOT NULL, successive INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, "yesCount" INTEGER NOT NULL, "noCount" INTEGER NOT NULL, "spaceUntil" FLOAT NOT NULL, "relativeDelay" FLOAT NOT NULL, "isDue" BOOLEAN NOT NULL, type INTEGER NOT NULL, "combinedDue" INTEGER NOT NULL, PRIMARY KEY (id), CHECK ("isDue" IN (0, 1)), FOREIGN KEY("cardModelId") REFERENCES "cardModels" (id), FOREIGN KEY("factId") REFERENCES facts (id) ) 5ItablecardscardsCREATE TABLE cards ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "cardModelId" INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, ordinal INTEGER NOT NULL, question TEXT NOT NULL, answer TEXT NOT NULL, priority INTEGER NOT NULL, inte &ݻ:"fA"}Z:]A"ܜ O.%%tablefactsDeletedfactsDeleted"CREATE TABLE "factsDeleted" ( "factId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("factId") REFERENCES facts (id) ).%%tablecardsDeletedcardsDeleted$CREATE TABLE "cardsDeleted" ( "cardId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("cardId") REFERENCES cards (id) ) /):DA":"XA"ه@  \0%%#tablemediaDeletedmediaDeleted%CREATE TABLE "mediaDeleted" ( "mediaId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("mediaId") REFERENCES cards (id) ) tabletagstags'CREATE TABLE tags ( id integer not null, tag text not null collate nocase, priority integer not null default 2, primary key(id))!tablecardTagscardTags(CREATE TABLE cardTags ( id integer not null, cardId integer not null, tagId integer not null, src integer not null, primary key(id))  Reverse Forward Basic-PriorityVeryHigh%PriorityHigh# PriorityLow 8q:N 8q:N a:* a:*8q:N 8q:N wiZN:- decks1%factsDeleted0!cardModels0 media0+CdeckVarssqlite_autoindex_deckVars_112 1 models0 'reviewHistory0 stats0 cardTags0 sources0%mediaDeleted0#fieldModels0'modelsDeleted0 fields0 facts0 cards0%cardsDeleted0#tagsix_tags_tag3 1 11~TK%%[tablesqlite_stat1sqlite_stat1)CREATE TABLE sqlite_stat1(tbl,idx,stat)n7indexix_cards_typeCombinedcards+CREATE INDEX ix_cards_typeCombined on cards (type, combinedDue, factId)d9indexix_cards_relativeDelaycards,CREATE INDEX ix_cards_relativeDelay on cards (relativeDelay)T/qindexix_cards_modifiedcards-CREATE INDEX ix_cards_modified on cards (modified)T/qindexix_facts_modifiedfacts.CREATE INDEX ix_facts_modified on facts (modified) A"ޜgb5: a:*A"ޜe5:8q:N  8q:N  a:* A"f8q:NA"F a:* A"35:  8q:N  a:* [[WNT/qindexix_cards_prioritycards/CREATE INDEX ix_cards_priority on cards (priority)T+uindexix_cards_factorcards1CREATE INDEX ix_cards_factor on cards (type, factor)N+iindexix_cards_factIdcards2CREATE INDEX ix_cards_factId on cards (factId)S-qindexix_stats_typeDaystats3CREATE INDEX ix_stats_typeDay on stats (type, day)R-mindexix_fields_factIdfields4CREATE INDEX ix_fields_factId on fields (factId) @8q:N@ a:* 5:8q:N5: a:*  !2012-10-27! 2012-10-27 5:_:5:ˣ: M :Eˣ:2Б:F_: xx0$k"9%indexix_cardsDeleted_cardIdcardsDeleted9CREATE INDEX ix_cardsDeleted_cardIde9indexix_fields_fieldModelIdfields5CREATE INDEX ix_fields_fieldModelId on fields (fieldModelId)O +iindexix_fields_valuefields7CREATE INDEX ix_fields_value on fields (value)a!7indexix_media_originalPathmedia8CREATE INDEX ix_media_originalPath on media (originalPath)k"9%indexix_cardsDeleted_cardIdcardsDeleted9CREATE INDEX ix_cardsDeleted_cardId on cardsDeleted (cardId) frontˣ:back_:   /):D  :"X  KK,l%9%r#=' indexix_modelsDeleted_modelIdmodelsDeleted:CREATE INDEX ix_modelsDeleted_modelId on modelsDeleted (modelId)k$9%indexix_factsDeleted_factIdfactsDeletedCREATE INDEX ix_cardTags_tagCard on cardTags (tagId, cardId)   Z:] &ݻ:"f   a:*8q:N8q:N8q:N  8q:N a:*  8q:N 8q:N 8q:N  8q:N  a:*  a:* <<)x)-9Z'1uindexix_cardTags_cardIdcardTags?CREATE INDEX ix_cardTags_cardId on cardTags (cardId)(9Yindexix_cards_intervalDesc2cardsACREATE INDEX ix_cards_intervalDesc2 on cards (type, priority desc, interval desc, factId, combinedDue)x)-9indexix_cards_dueAsc2cardsBCREATE INDEX ix_cards_dueAsc2 on cards (type, priority desc, due, factId, combinedDue)[*/indexix_media_filenamemediaCCREATE UNIQUE INDEX ix_media_filename on media (filename) !5:A"ޜgb a:*!5:A"ޜe8q:N )A"ޜgb5:A"ޜgb a:*)A"ޜe5:A"ޜe8q:N   Reverse-PriorityVeryHigh# PriorityLow%PriorityHigh Forward Basic k3-##oviewrevCardsOldrevCardsOldCREATE VIEW revCardsOld as select * from cards where typeH+#gindexix_tags_tagtagsDCREATE UNIQUE INDEX ix_tags_tag on tags (tag),##gviewfailedCardsfailedCardsCREATE VIEW failedCards as select * from cards where type = 0 and isDue = 1 order by type, isDue, combinedDue-##oviewrevCardsOldrevCardsOldCREATE VIEW revCardsOld as select * from cards where type = 1 and isDue = 1 order by priority desc, interval desc u !revSpacing0.1 )latexPost\end{document}> qlatexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \setlength{\parindent}{0in} \begin{document}  mediaURL!newSpacing60# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspendLeeches1 XX% ?cssCache.fm32d0913aa1b4ff46 {font-family:"Arial";font-size:20px;white-space:pre-wrap;} .fm4da0093aa1b4ff45 {font-family:"Arial";font-size:20px;white-space:pre-wrap;} #cmqdc3b073aa1b4ff46 {text-align:center;} #cmqe83913aa1b4ff46 {text-align:center;} #cmadc3b073aa1b4ff46 {text-align:center;} #cmae83913aa1b4ff46 {text-align:center;} .cmbdc3b073aa1b4ff46 {background:#FFFFFF;} .cmbe83913aa1b4ff46 {background:#FFFFFF;}  pageSize4096 sortIndex0d=hexCache{"3661586178059337542": "32d0913aa1b4ff46", "1045839219487211334": "e83913aa1b4ff46", "-8256200675311681723": "8d6c153aa1b4ff45", "-2577458413336985786": "dc3b073aa1b4ff46", "5593480884619902789": "4da0093aa1b4ff45"} EE` .##eviewrevCardsNewrevCardsNewCREATE VIEW revCardsNew as select * from cards where type = 1 and isDue = 1 order by priority desc, interval/##[viewrevCardsDuerevCardsDueCREATE VIEW revCardsDue as select * from cards where type = 1 and isDue = 1 order by priority desc, due0))yviewrevCardsRandomrevCardsRandomCREATE VIEW revCardsRandom as select * from cards where type = 1 and isDue = 1 order by priority desc, factId, ordinal u 2##eviewacqCardsNewacqCardsNewCREATE VIEW acqCardsNew as select * from cards where type = 2 and isDue = 1 order by priority desc, due desc1##[viewacqCardsOldacqCardsOldCREATE VIEW acqCardsOld as select * from cards where type = 2 and isDue = 1 order by priority desc, dueanki-2.1.0+dfsg~b36/tests/support/diffmodeltemplates-1.apkg000066400000000000000000000120241323611211500236060ustar00rootroot00000000000000PKhDHcollection.anki2Olw-Re++le$JԖ%Ta;ZRKI4mb8-@z/^\zo{p/=of+ڗÒޝy{3ofwV;ϵ֙Us*4EQs>9EWQ)۴kL|Wz_pseA[y΂[3oZ%8(/Uf?06lކ5l$4Dؚeq Yе=M#8;{TW@ Ȗij+236<}aS=– (iM%hi긼4kFm$]r}mzvpv@otY\ȓ\B;G`L0HT#Oah&BagC ԟC֖|&)(Ƈ5BŴ}]aXURuR~.HH nv5mf-mTn 3`)sJab#_tqd¯[C|^)B$"@W_W}܈ŤRT*UF*u'Trl*ӑqUT䊗JZc Tf#c6VJ%~7tTX^*8,^SgsێЙ$8jI`0?V 6N`5EgV3pp+g?OOx(KH)UH'clOgTf?Ů@ ˩C1~pp,:N%wl+A_R{M!eR$D _~9u΋럞il sZ篘u..}Wh+&cV֩s\vTP;E(PxqǬSi9}€jAXqn 6߿t[j*Xnaڦ;MB¡TzlUEOr )mL˝v(V659I=E6JMSU!,Y- qKUj&zzz+Ǎ:&Mdgv'˝mEt5R9(j?~ap]Z]ieԝN!`'RdaIeΚf{ۥ] f{(iEnlF , sbRHX_):'P-DREd'-\´Κi4&z써TtƁ(29M+J)CwN۴(qInDXmA.|-yɆf. Eǭy CkP77]6mYxZc[|fۦhնYZ[gnP, --]][5QN@{zQ"5ִd|Ͼr7zR`"Ť,+SF+2)صk|pSk?U ̛gjuZܻЈe_qwt~u}h9g]ްXkRJ[ۋ̔ϬhĴUI/k t?s` :I4Knp*e6"W"sZ#uv'V̴?"WbXw1l撼uap#7 «dbrz+XO`%-MLTօnfp"S%i)X/nJǤK5}G HACב:?ǛwYR6\ɍ7ƿu_jImCNLՋUHyAsh>gpꢍ.`_Ԓ/^g}c]& GBƖcQ8ThJ~OIMyDm7i hۨ|ysb;6_ D#GIJMe+iZk=EHc+؋=6$8ewPKhD~ia1uYn^ EEP?"eQhV'ol.;\ H9>{׏/O?^=<>|ڇןan;קX??Gt=򟧧_/?ax>qqQ}x%˘mo}tQ_y9x}>ىaU]J6`y˶xW &4mϭIo++'m )mb憇f;JmMy3V6&9Bⲣ7j둹T֦͝>b%m8 l+UE{lF˽ui[X1)17+>Q5`q3V:7#u_qA9c:2l{e)W7)")gއYN\QpXXD)om+ ygP̑0!g| YRx۪ p8_V*$jF+-!ԂvYWI H厕}YЊ+njv] `1'F$%V6T{+wpxJB!4'};F޷K=/ '!U/BZ~2o/5 RR\Q 4:xbo lgkB)JxlGBꫥlkmE8ܿ;êȯ;h߾;Gw\U'P7NfY;n_uFR,8w y{W(l$ kM[9ދXSU7_+Eu:˾C)WA֨n/5H1J iiGcX-VY,:XALXyFrW]chFWAzyy;9>b_+wy+0QnQC 2jmѡ{{ @DƼvX^䊲oLVJ3,h|u(^zzu 衫6kPVH3j@AF ~u0W }FmK0nh.n*o1HWiz[-OH SU"<*=BEū2 xJZOH:u|"kDM@T<UXq i 9 sB-=-R K<"t]3L5y[9 baDm]U\tOϫp 9"%|f S[ ʼn!g6A"*Jehv%Ni"k}Omٜ BL3H_*oE\n*9.i$K~4VtE{SR$w$ͪcdKt&jkZL8RhA'JECߺcڂ%x %9;duJkУ9YB8NfUxVZ*U%N/6ѣ j8n=(pQinؠ3'^*;_ \S.vbRc{j1| s7%|D )u7Oa 3-.9ӨQP=H6x9.7hMP=GX]в>k//PKhDoDJmediaV2TRPK.JM+I JMLKw(I+KI,QQP2+ L-άJuL*-.qLI*PKhDHcollection.anki2PKhDɜ 0PKhD~ia 1PKhDoDJmediaPK/anki-2.1.0+dfsg~b36/tests/support/diffmodeltemplates-2.apkg000066400000000000000000000120331323611211500236070ustar00rootroot00000000000000PKjDe@collection.anki2Mlw#Re+vlXm>,nj*ISKAHRͰ@N $EQ ={S\߃{}o\>aI{޼7;+ ^-ZqU3*4EQs>}^OF*G3\kct26tM{x#&Kn'lV25;59Iŝ=IC[m }=D m::ȧUP,Y-ss pU'ֺ:Gj=߬nF+ǍҤkQ3RzNʇw@-]Wvf8VC~=o<;KZfyMQ%ޤ'*]6mYDb׮wL]=Pnl߆o&Ux~h;6ouw6Eݴ;T$hZB6OYr֐3uah2 fw:-ĩl z(5y|4D-Ҷn{{t:@a/ 6#C 2 A l),)m:0xxs:k)p7L}U9ވJ9n }.eZ:.ҼsܫڦE&[wiê-T% M ^8{+]rb«F㦨-KN"Ꜽ-v|R7Ryd-+cF;Rcv-'}Lr5#8s3!g wƠk^ +hƵwz^I/ekK֢nY|;1%z f:wA9VҝrI.­;wɥ;aZHC_U23-RÒe˴;S7 ۂI&-gd)XQ |ӥס9TQqMf|q# VAZo$u:?ǛW)|6]>ɍ항7.|uڟ~|=i ߛy.x_y>.}`B'ů~޸2j.w"2.>XW{W8`F 8NG`S_ocl?WOcKlD6 cP&[ʧ_)B953:V9,PoPKiDɜ0MMO0 # 5:1Ą@޳cQ$$F8Y+qv3J !>jImCNLՋUHyAsh>gpꢍ.`_Ԓ/^g}c]& GBƖcQ8ThJ~OIMyDm7i hۨ|ysb;6_ D#GIJMe+iZk=EHc+؋=6$8ewPKiD pwa1uYݎ /@ˢ@Q_ugݢh>GƱl#:$5oÇ7/|~|ۯϯ߾yx&|w߰ˇ7/OX_^Wt|ӷ>= 4Q}xK{iMa?YPkD0ܹ #ͪ:M+mVҥVK۱UVLU* zߧ3wiRJUѪEjmfku *ݩM&'e|Ň7s}R>VRziݰqÃit[k;XrBZ)Uƪ2iݱbRb.jkw"sE8a{+dYJ>F}Wv0iCYv4mW(ȞWʬh,)#s ՎUA4J\u J%j j/M!Vg*R&suENJi+unaMXqE52p&*PIմD"z") WdNH[P -©c_0kHڎ"Rkm g`i9j2¨k@ \62q6;%\62/rkFR &2V«T8wǍ@HfRP;pUi˼μʪZ'd Zy5jAZݱ]>lr,pLfZ+.xLJp~Zk:y_G' 6k8wp( I֨^.@W(T*ow*I3tsX٣;w="nkUP'}jl FI3L5U;85Lk+(X9סt#ݴ>hzvU0:͌ 9fP g3 @Xy=kT5_2(ޏlGH\JI @z/TtZפTw0gI#ݽЫ%Pe 0 Dא(*{fCT0-ԦB#bw|qƏDqcob7@+6mN߫C;aNqslUhn]/e>|nIRCRs*!C (r拌T]gls@j;C .,ڼ$턹B>q.Ne,8_dˮ;P1y̩=&hnsj dV2Aw}?RP9rbC/ϓj*˜$tY1[JwKPŌ#꧕{@ϑEh\@hwԐ Mj>>+ѺXү`Eʘ"7N9m!r:DFdb(:. hg(J0I~:wEX+y1[bBVHOI#M$ jc^\~E2J]tz5+SЄk54QJ!vmjBn$CZO}UG7e>|ckT[j:0C@!`*l;C6V9^l4@ۖjl,-jYz ZqX3dj/MdL=(6|V Ef U4aelX0 9{_DP0V;s㡗WЅ(K1oL U㍋lmH0'fug;{~1L\kgjh+2z~_3jU eeΓ'&^}c!˜|u1s*Bˇ7_~t6~>?=;^~PKjDoDJmediaV2TRPK.JM+I JMLKw(I+KI,QQP2+ L-άJuL*-.qLI*PKjDe@collection.anki2PKiDɜ 0PKiD pwa" 1PKjDoDJmediaPK6anki-2.1.0+dfsg~b36/tests/support/fake.png000066400000000000000000000000041323611211500203430ustar00rootroot00000000000000abc anki-2.1.0+dfsg~b36/tests/support/invalid-ords.anki000066400000000000000000004200001323611211500221700ustar00rootroot00000000000000SQLite format 3@ 4N - JktablesourcessourcesCREATE TABLE sources ( id INTEGER NOT NULL, name TEXT NOT NULL, created FLOAT NOT NULL, "lastSync" FLOAT NOT NULL, "syncPeriod" INTEGER NOT NULL, PRIMARY KEY (id) );''5tablereviewHistoryreviewHistoryCREATE TABLE "reviewHistory" ( "cardId" INTEGER NOT NULL, time FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, "nextInterval" FLOAT NOT NULL, ease INTEGER NOT NULL, delay FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "nextFactor" FLOAT NOT NULL, reps FLOAT NOT NULL, "thinkingTime" FLOAT NOT NULL, "yesCount" FLOAT NOT NULL, "noCount" FLOAT NOT NULL, PRIMARY KEY ("cardId", time) )9M'indexsqlit6.-(!     8r}wqke_YSMGA;5/)# @ A ! 2008-03-28@jc@' K < !2008-03-27@nXe@+Ԍ S $ 7  ! 2008-03-262@#pq@{L# 8  !2008-03-25J@$^g@%JI$8  !2008-03-24;@ͮ8f'G@y/*: 7  ! 2008-03-22I@Ć,@.y #8  !2008-03-20;@#>O8d@#ێ9 7 ! 2008-03-19&@2[ukZ@:,  6 ! 2008-03-18@UUUU@AͰ9 !2008-0qpovndmRlAk1j!ihgpf`eOd>c.ba`z_h^W]E\5[%ZYXxWiVXUHT7S'RQPvOfNVMEL3K#JIHuGfFVEFD6C&BA@t?a>P=@<0; : ::3J;''5tablereviewHistoryreviewHistoryCREATE TABLE "reviewHistory" ( "cardId" INTEGER NOT NULL, time FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, "nextInterval" FLOAT NOT NULL, ease INTEGER NOT NULL, delay FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "nextFactor" FLOAT NOT NULL, reps FLOAT NOT NULL, "thinkingTime" FLOAT NOT NULL, "yesCount" FLOAT NOT NULL, "noCount" FLOAT NOT NULL, PRIMARY KEY ("cardId", time) )9M'indexsqlite_autoindex_reviewHistory_1reviewHistoryJktablesourcessourcesCREATE TABLE sources ( id INTEGER NOT NULL, name TEXT NOT NULL, created FLOAT NOT NULL, "lastSync" FLOAT NOT NULL, "syncPeriod" INTEGER NOT NULL, PRIMARY KEY (id) )  {tablestatsstatsCREATE TABLE stats ( id INTEGER NOT NULL, type INTEGER NOT NULL, day DATE NOT NULL, reps INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "distractedTime" FLOAT NOT NULL, "distractedReps" INTEGER NOT NULL, "newEase0" INTEGER NOT NULL, "newEase1" INTEGER NOT NULL, "newEase2" INTEGER NOT NULL, "newEase3" INTEGER NOT NULL, "newEase4" INTEGER NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, PRIMARY KEY (id) )`tablemediamediaCREATE TABLE media ( id INTEGER NOT NULL, filename TEXT NOT NULL, size INTEGER NOT NULL, created FLOAT NOT NULL, "originalPath" TEXT NOT NULL, description TEXT NOT NULL, PRIMARY KEY (id) )  3դO  ' A^LHA!_2:English/Greek?X e]tablemodelsmodels CREATE TABLE models ( id INTEGER NOT NULL, "deckId" INTEGER, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, features TEXT NOT NULL, spacing FLOAT NOT NULL, "initialSpacing" FLOAT NOT NULL, source INTEGER NOT NULL, PRIMARY KEY (id) )r7tabledeckVarsdeckVars CREATE TABLE "deckVars" ( "key" TEXT NOT NULL, value TEXT, PRIMARY KEY ("key") )/Cindexsqlite_autoindex_deckVars_1deckVars  !!tablecardModelscardModels CREATE TABLE "cardModels" ( id INTEGER NOT NULL, ordinal INTEGER NOq AtabledecksdecksCREATE TABLE decks ( id INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, description TEXT NOT NULL, version INTEGER NOT NULL, "currentModelId" INTEGER, "syncName" TEXT, "lastSync" FLOAT NOT.  mediaURL!newSpacing60.0# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspendLeeches1 sortIndex0pageSize4096e?hexCache{"7714278139299660113": "6b0e9f187f848151", "-3196723299912220334": "d3a2f5187f848152", "7691030065441964367": "6abc07187f84814f", "2342550310125601108": "208269187f848154", "-2642164819234094769": "db5525187f84814f"}D}cssCache.fm6abc07187f84814f {font-family:"Arial";font-size:25px;color:#000000;white-space:pre-wrap;} .fm6b0e9f187f848151 {font-family:"Arial";font-size:25px;color:#000000;white-space:pre-wrap;} #cmqd3a2f5187f848152 {text-align:center;} #cmq208269187f848154 {text-align:center;} #cmad3a2f5187f848152 {text-align:center;} #cma208269187f848154 {text-align:center;} .cmbd3a2f5187f848152 {background:#ffffff;} .cmb208269187f848154 {background:#ffffff;} !revSpaci |l]PE7' )suspendLeeches sortIndex!revSpacing#revInactive revActive perDay pageSize!newSpacing#newInactive newActive)mobileScalePad mediaURL'mediaLocation!leechFails latexPre latexPost hexCache cssCache {{͑T'' # U%OBack-to-frontBack to front%(Greek)s%(English)sArial#000000Arial#000000Arial#ffffff{R'' # U%OFront-to-backFront to back%(English)s%(Greek)sArial#000000Arial#000000Arial#ffffffT NULL, "modelId" INTEGER NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, active BOOLEAN NOT NULL, qformat TEXT NOT NULL, aformat TEXT NOT NULL, lformat TEXT, qedformat TEXT, aedformat TEXT, "questionInAnswer" BOOLEAN NOT NULL, "questionFontFamily" TEXT, "questionFontSize" INTEGER, "questionFontColour" VARCHAR(7), "questionAlign" INTEGER, "answerFontFamily" TEXT, "answerFontSize" INTEGER, "answerFontColour" VARCHAR(7), "answerAlign" INTEGER, "lastFontFamily" TEXT, "lastFontSize" INTEGER, "lastFontColour" VARCHAR(7), "editQuestionFontFamily" TEXT, "editQuestionFontSize" INTEGER, "editAnswerFontFamily" TEXT, "editAnswerFontSize" INTEGER, "allowEmptyAnswer" BOOLEAN NOT NULL, "typeAnswer" TEXT NOT NULL, PRIMARY KEY (id), CHECK (active IN (0, 1)), CHECK ("questionInAnswer" IN (0, 1)), CHECK ("allowEmptyAnswer" IN (0, 1)), FOREIGN KEY("modelId") REFERENCES models (id) ) d%    A!zXA!z'AU%OA!vA?333333? Xȹ NULL, "hardIntervalMin" FLOAT NOT NULL, "hardIntervalMax" FLOAT NOT NULL, "midIntervalMin" FLOAT NOT NULL, "midIntervalMax" FLOAT NOT NULL, "easyIntervalMin" FLOAT NOT NULL, "easyIntervalMax" FLOAT NOT NULL, delay0 INTEGER NOT NULL, delay1 INTEGER NOT NULL, delay2 FLOAT NOT NULL, "collapseTime" INTEGER NOT NULL, "highPriority" TEXT NOT NULL, "medPriority" TEXT NOT NULL, "lowPriority" TEXT NOT NULL, suspended TEXT NOT NULL, "newCardOrder" INTEGER NOT NULL, "newCardSpacing" INTEGER NOT NULL, "failedCardMax" INTEGER NOT NULL, "newCardsPerDay" INTEGER NOT NULL, "sessionRepLimit" INTEGER NOT NULL, "sessionTimeLimit" INTEGER NOT NULL, "utcOffset" FLOAT NOT NULL, "cardCount" INTEGER NOT NULL, "factCount" INTEGER NOT NULL, "failedNowCount" INTEGER NOT NULL, "failedSoonCount" INTEGER NOT NULL, "revCount" INTEGER NOT NULL, "newCount" INTEGER NOT NULL, "revCardOrder" INTEGER NOT NULL, PRIMARY KEY (id), FOREIGN KEY("currentModelId") REFERENCES models (id) ) 2Q  U%OGreekArial#000000preserve4O U%OEnglishArial#000000preserve IV ##stablefieldModelsfieldModelsCREATE TABLE "fieldModels" ( id INTEGER NOT NULL, ordinal INTEGER NOT NULL, "modelId" INTEGER NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, features TEXT NOT NULL, required BOOLEAN NOT NULL, "unique" BOOLEAN NOT NULL, numeric BOOLEAN NOT NULL, "quizFontFamily" TEXT, "quizFontSize" INTEGER, "quizFontColour" VARCHAR(7), "editFontFamily" TEXT, "editFontSize" INTEGER, PRIMARY KEY (id), CHECK (numeric IN (0, 1)), CHECK ("unique" IN (0, 1)), CHECK (required IN (0, 1)), FOREIGN KEY("modelId") REFERENCES models (id) )4 '''tablemodelsDeletedmodelsDeletedCREATE TABLE "modelsDeleted" ( "modelId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("modelId") REFERENCES models (id) )  OЙ˘_U%OAmEA!s17brokenfrog (2) βάτραχος, βατράχι \\X& +tablefactsfactsCREATE TABLE facts ( id INTEGER NOT NULL, "modelId" INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, "spaceUntil" TEXT NOT NULL, "lastCardId" INTEGER, PRIMARY KEY (id), FOREIGN KEY("modelId") REFERENCES models (id) )8KtablefieldsfieldsCREATE TABLE fields ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "fieldModelId" INTEGER NOT NULL, ordinal INTEGER NOT NULL, value TEXT NOT NULL, PRIMARY KEY (id), FOREIGN KEY("fieldModelId") REFERENCES "fieldModels" (id), FOREIGN KEY("factId") REFERENCES facts (id) )5ItablecardscardsCREATE TABLE cards ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "cardModelId" INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, ordinal INTEGER NOT NULL, question TEXT NOT NULL, answer TEXT NOT NULL, priority INTEGER NOT NULL,  6޳˘ Me9f? kQβάτραχος, βατράχι΍˘e9f? jOfrog (2) ˙( m    e9f? iTAmQA!zXOβάτραχος, βατράχιfrog (2)@Pfrog (2)βάτραχος, βατράχι@$v!(@ 1pA uA@@Aqx @-lc@d9XA uinterval FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, due FLOAT NOT NULL, "lastDue" FLOAT NOT NULL, factor FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "firstAnswered" FLOAT NOT NULL, reps INTEGER NOT NULL, successive INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, "yesCount" INTEGER NOT NULL, "noCount" INTEGER NOT NULL, "spaceUntil" FLOAT NOT NULL, "relativeDelay" FLOAT NOT NULL, "isDue" BOOLEAN NOT NULL, type INTEGER NOT NULL, "combinedDue" INTEGER NOT NULL, PRIMARY KEY (id), CHECK ("isDue" IN (0, 1)), FOREIGN KEY("cardModelId") REFERENCES "cardModels" (id), FOREIGN KEY("factId") REFERENCES facts (id) )  bbw tabletagstagsCREATE TABLE tags ( id integer not null, tag text nK.%%tablefactsDeletedfactsDeletedCREATE TABLE "factsDeleted" ( "factId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("factId") REFERENCES facts (id) ).%%tablecardsDeletedcardsDeletedCREATE TABLE "cardsDeleted" ( "cardId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("cardId") REFERENCES cards (id) )0%%#tablemediaDeletedmediaDeletedCREATE TABLE "mediaDeleted" ( "mediaId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("mediaId") REFERENCES cards (id) ) tabletagstagsCREATE TABLE tags ( id integer not null, tag text not null collate nocase, priority integer not null default 2, primary key(id))!tablecardTagscardTagsCREATE TABLE cardTags ( id integer not null, cardId integer not null, tagId integer not null, src integer not null, primary key(id))K%%[tablesqlite_stat1sqlite_stat1CREATE TABLE sqlite_stat1(tbl,idx,stat)    broken'Front-to-back'Back-to-front-PriorityVeryHigh%PriorityHigh#PriorityLow R9fBR9fBi99fBi99fB !{^? yT5#xk>-! decks1!cardModels2+CdeckVarssqlite_autoindex_deckVars_118 1 models1<'M#reviewHistorysqlite_autoindex_reviewHistory_1106495 20 1"-statsix_stats_typeDay926 463 1$3cardTagsix_cardTags_tagCard4 2 1!1cardTagsix_cardTags_cardId4 2#fieldModels2-fieldsix_fields_factId2 2# 9fieldsix_fields_fieldModelId2 1 +fieldsix_fields_value2 1 /factsix_facts_modified1 1% 7cardsix_cards_typeCombined2 2 1 1" 9cardsix_cards_relativeDelay2 2/cardsix_cards_modified2 2/cardsix_cards_priority2 2+cardsix_cards_factor2 2 1+cardsix_cards_factId2 2*9#cardsix_cards_intervalDesc22 2 2 1 1 1$-#cardsix_cards_dueAsc22 2 2 1 1 1'cardsix_cards_sort2 1#tagsix_tags_tag6 1  A5eEJbe9f? R9fB A ue9f? i99fB !!MOHn7indexix_cards_typeCombinedcards CREATE INDEX ix_cards_typeCombined on cards (type, combinedDue, factId)d9indexix_cards_relativeDelaycards"CREATE INDEX ix_cards_relativeDelay on cards (relativeDelay)T/qindexix_cards_modifiedcards#CREATE INDEX ix_cards_modified on cards (modified)T/qindexix_facts_modifiedfacts$CREATE INDEX ix_facts_modified on facts (modified)T/qindexix_cards_prioritycards%CREATE INDEX ix_cards_priority on cards (priority)T+uindexix_cards_factorcards&CREATE INDEX ix_cards_factor on cards (type, factor)N+iindexix_cards_factIdcards'CREATE INDEX ix_cards_factId on cards (factId)S-qindexix_stats_typeDaystats(CREATE INDEX ix_stats_typeDay on stats (type, day)R-mindexix_fields_factIdfields)CREATE INDEX ix_fields_factId on fields (factId)e9indexix_fields_fieldModelIdfields*CREATE INDEX ix_fields_fieldModelId on fields (fieldModelId)O +iindexix_fields_valuefields+CREATE INDEX ix_fields_value on fields (value)   R9fB  i99fB A!zXOR9fBA!zXOi99fB A!s17e9f?  R9fB i99fB  @R9fB @i99fB e9f? R9fBe9f? i99fBoZE0qaQA1!qaQA1! !2008-06-149 !2008-06-138 !2008-06-127 !2008-06-116 !2008-06-075 !2008-06-064 !2008-06-053 !2008-06-032 !2008-06-021 !2008-06-010 !2008-05-31/ !2008-05-30. !2008-05-25- !2008-05-23, !2008-05-22+ !2008-05-21* !2008-05-20) !2008-05-19( !2008-05-17' !2008-05-16& !2008-05-15% !2008-05-14$ !2008-05-13# !2008-05-06" !2008-05-02! !2008-04-30  !2008-04-29 !2008-04-28 !2008-04-26 !2008-04-24 !2008-04-21 !2008-04-16 !20 !2012-08-29k !2012-07-11: !2012-05-21 !2012-04-03 !2012-02-15 !2011-12-20x~ !2011-10-30H} !2011-09-08| !2011-07-14{ !2011-04-30z !2011-02-28y !2010-12-29Xx !2010-04-21(w !2010-02-28v !2009-12-29u !2009-08-12t !2008-08-24gs !2008-06-064 e9f? (n9f? e9f? 69f? kQ(n9f? jO69f? +Mβάτραχος, βατράχι(n9f? frog (2)69f?  ^?o=0l%9%inde(9Yindexix_cards_intervalDesc2cards4CREATE INDEX ix_cards_intervalDesc2 ona!7indexix_media_originalPathmedia,CREATE INDEX ix_media_originalPath on media (originalPath)k"9%indexix_cardsDeleted_cardIdcardsDeleted.CREATE INDEX ix_cardsDeleted_cardId on cardsDeleted (cardId)r#=' indexix_modelsDeleted_modelIdmodelsDeleted/CREATE INDEX ix_modelsDeleted_modelId on modelsDeleted (modelId)k$9%indexix_factsDeleted_factIdfactsDeleted0CREATE INDEX ix_factsDeleted_factId on factsDeleted (factId)l%9%indexix_mediaDeleted_factIdmediaDeleted1CREATE INDEX ix_mediaDeleted_factId on mediaDeleted (mediaId)d&3indexix_cardTags_tagCardcardTags2CREATE INDEX ix_cardTags_tagCard on cardTags (tagId, cardId)Z'1uindexix_cardTags_cardIdcardTags3CREATE INDEX ix_cardTags_cardId on cardTags (cardId)(9Yindexix_cards_intervalDesc2cards4CREATE INDEX ix_cards_intervalDesc2 on cards (type, priority desc, interval desc, factId, combinedDue)     R9fB  i99fBi99fBR9fB  R9fB R9fB i99fB  i99fB ( @$v!(e9f? A ui99fB( @Pβάτραχος, βατράχιR9fB;mfrog (2)i99fB  -PriorityVeryHigh# PriorityLow%PriorityHigh'Front-to-back broken'Back-to-front LR_&y?L7 ! 2008-03-30/@{f <@t.@ A ! 2008-03-28@jc@' K < !2008-03-27@nXe@+Ԍ S $ 7  ! 2008-03-262@#pq@{L# 8  !2008-03-25J@$^g@%JI$8  !2008-03-24;@ͮ8f'G@y/*: 7  ! 2008-03-22I@Ć,@.y #8  !2008-03-20;@#>O8d@#ێ9 7 ! 2008-03-19&@2[ukZ@:,  6 ! 2008-03-18@UUUU@AͰ9 !2008-03-17@$"'>@<3 .> !2008-03-07@ wυ!@"W pY5"E/> !2008-03-06@"@7DG #' )3 !   2008-03-05@& 8@6 8" !2012-10-24S!2008-03-05"@"Ll0A-@R:(e` S4bZ SKT[%S:  !2008-04-30@%d5@@opi 9:" !2008-04-298 !2008-04-28o@ $Mۜ@t16 ! 2008-04-26 @'8|q@Z?4 ! 2008-04-24@'<@M8 !2008-04-21w@sw=@ @> ! 2008-04-16@,|O@0iG͑'8 ! 2008-04-15w@ÎU=@*XP(7C !2008-04-14v@rO@V(E m39@ , A !2008-04-09@ia8@^|  >= !2008-04-08@@̓ J: ! 2008-04-07@f#@ߴ7 ! 2008-04-04;@"X}/@?- 2 !  2008-04-03@0GX@0GX= ! 2008-04-016@!v@&.XH@ ! 2008-03-31 @Y"@^; O2 < >Kg'v8z>:0 ! 2008-06-01:@gi@w¼  9/ !  2008-05-31N@2N4@y"Y  2A. ! 2008-05-30+@ ?.ޤ@錥+0Z  0>- !  2008-05-25@ EE@p#! <<, !2008-05-23]@"kJr@Q` &  6+ !  2008-05-22@*H>;@`L &UU:* ! 2008-05-21I@!Md b@wyn;) !  2008-05-20@)v@gw4# >( ! 2008-05-19 @333@ozS` B' ! 2008-05-17@V^@gZ@ K$ 'V7& !2008-05-16,@6ebOG@;Kt;  "% !2008-05-15A$ !  2008-05-14@m@q^7@h/s9?# !2008-05-13\@ }ɡ@)JfA 8" !  2008-05-06X@x@Sƒ  8! !2008-05-025@"Q`&:@aV@ Wb*L UWA@ !  2008-06-22@@R O=;? !   2008-06-21@7IYW@ )SP qz;> !   2008-06-20@2 C6@ŭ-/ n@?= !2008-06-198@.(HJ@?c#? 8< ! 2008-06-18f@@k:>; !    2008-06-17-@"4F@lb]''{% 8: ! 2008-06-15t@\{@7   *6A9 !2008-06-14+@'@;3/8 ?8 ! 2008-06-13@>v@Ja187 ! 2008-06-12@~N@~N$ 9"6 !2008-06-11=5 ! 2008-06-07O@uq䨁@j|K   64 !2008-06-06@ b@a <3 ! 2008-06-05@ 8@[_  ; "2 !2008-06-03:1 ! 2008-06-02@@,W|@z%ff( *LT_!o*CP !  2008-07-12b@z@` {l)B 0Yf"!%7O !2008-07-11J@2"@hL#6N !2008-07-10#@<}ꃨ;@q@ ?M ! 2008-07-08@Ϣ"@؞ 5J K !  2008-07-06@&u@X$H ;J !  2008-07-05@S0Ԍ@V4 b' =I !  2008-07-04@۩W@e>) 7H !  2008-07-03@|b@aqaAG !2008-07-02g@uB2@YbW%%* >F ! 2008-07-01@[}DS@lCl .#8E !2008-06-30@B}r3@:_Bh 9D !2008-06-26@;N@c9 :C ! 2008-06-25m@!_V@oO'@=B !2008-06-24@s9@ڰD$ *g7A !   2008-06-23`@n@>K4%= FNh/r9jF"a !  2008-08-05"` !2008-08-045_ !2008-07-31@;M---@]_ ;^ ! 2008-07-29V@\A}@|w@* 5] !  2008-07-28@.@cm7\ ! 2008-07-261@$=9x@s?- <[ !  2008-07-25h@@7@f"O.  >Z !   2008-07-24@!@]?,#.i+=Y ! 2008-07-23J@*jj-@KU<, Xp -"7X !2008-07-22X@"i@3E-7W !2008-07-20T@5n@X@ ,:V ! 2008-07-19@OX @eUUU Rr9U !2008-07-17@}@T! I4T !2008-07-16@r@2V 4@עL,6$ !   2009-09-03X@Cg.@W?&8# !  2009-09-02g@Yݡ^r@PW <:" !2009-09-01g@JT^"@69! !   2009-08-31a@p@I@ 86  !  2009-08-26H@ q@@6 !   2009-08-25Z@hO@e`": ! 2009-08-23&@gN\M@'RPM;6 ! 2009-08-22@`@`17 ! 2009-08-17=@!{;@ " !2009-08-169 ! 2009-08-15@ E@d07 !  2009-08-14]@7 @$@"" !2009-08-128 ! 2009-08-11@ H@@+*98 ! 2009-08-10@,L@C43 OK[j-O96 !   2009-11-06W@!ya|@  "5 !2009-11-04:4 !  2009-10-31h@=;@b 9 =3 !  2009-09-28@a7)@Q@ :2 !  2009-09-20f@@b 5:1 !  2009-09-17@g-@_2c90 !  2009-09-16i@菱 @09/ !   2009-09-15b@xm@a2  ,9. !  2009-09-13q@izV@v  A9- ! 2009-09-12g@y顎@>;9, !   2009-09-11@z@ٻ`5K8+ ! 2009-09-10`@@׺̠ 2:* !   2009-09-09@j@ĵ P?*;:) !   2009-09-08@ @V@"V9( ! 2009-09-07`@M ]*@ȅ-9' ! 2009-09-06b@cN^@u`> MRe)w9M9F !   2009-12-27c@ u3@v. 7E !  2009-12-26Q@=n@;% 7D ! 2009-12-25@؞@fv~  9C ! 2009-12-22<@Ov"""@v`j~! ;B ! 2009-12-21@(s81@E ! G9A ! 2009-12-200@1UUU@rۀ7@ !   2009-12-196@kT/@r߀9? !    2009-12-13@%ɀ`@!`%= 9> !2009-12-08!@ @t8= ! 2009-11-250@UUU@r$9< ! 2009-11-241@g1N^ @r|  9; ! 2009-11-19_@(@w@`*7: !  2009-11-166@+)[ @{-@  79 !  2009-11-10@X^󻻼@f78 !   2009-11-09R@ @} 77 ! 2009-11-07/@~Σg}@r"  ?H _"m2?=V ! 2010-01-24@_@-ޫ&9: 9U ! 2010-01-23?@׏@v1 8T !  2010-01-21A@P3Jԭ@vt 9S !  2010-01-20d@FG@E`#'8R !  2010-01-19:@$@vap@  ^@C  GI [d'G;f ! 2010-02-10r@Gk@ <1 ;e ! 2010-02-09p@zI%@w@ (" p ! 2010-02-20@'Wl@ V 0!;o ! 2010-02-19=@[0C%@v&=n ! 2010-02-18@ Yu@"i  !2010-03-13@/@MҠ>- > !2010-03-11@ ˭@| +-< ! 2010-03-10@@<#@6E0W;> !2010-03-09 @To n@)d@ (rK< ! 2010-03-08@=g@ *8- ;~ ! 2010-03-07l@\ {@ݸC,$<} !  2010-03-06@5UUU@q  #e,:| !  2010-03-05@O!P@5@@F:<{ !   2010-03-04@._@@G$ ;z !   2010-03-02@H\@Rt@ +m* !  2010-03-27@@[m@m0:^ : ! 2010-03-26,@G@s-@ 9 !   2010-03-255@y}@rs<@ ?  ! 2010-03-24@ +|l@6; :  !   2010-03-23@͂D@9@'( <  ! 2010-03-22x@/ """@  8?  !2010-03-21@:dG@HQ =  ! 2010-03-20@@'$2= ! 2010-03-19w@ !2010-08-06"= !2010-08-03"< !2010-07-257; !  2010-07-11/@^@ne΀8: ! 2010-07-08.@zo@n'`(99 !2010-07-067@@p@sP@ 98 !2010-07-03@@ب@rب 77 !  2010-07-01[@@; 196 !2010-06-27R@)D@zV%N585 !  2010-05-23G@=h@yqx@ 84 !2010-05-19 @@m  Fz@Ul1F7V !  2010-12-270@iѪ@r]@ 8U ! 2010-12-26#@!)iB@rK@8T !2010-12-225@r!5!@rۀ 8S ! 2010-12-21R@@~S /8R !2010-12-152@G@rE 7Q ! 2010-12-148@jFm@r%7P ! 2010-12-11)@ _81@iz8O ! 2010-12-081@)9x*@nu`? 7N ! 2010-12-054@v'b@r]%7M ! 2010-12-04@ag9t@f|8L ! 2010-11-30@Ψa@^'=7K ! 2010-11-297@a@se 9J ! 2010-11-28B@Me@vr $7I ! 2010-11-27@؝@f "H !2010-10-03"G !2010-09-129F !2010-08-24@^fff@f  ^N`;M^9f ! 2011-01-12I@N7@z%6 9e ! 2011-01-11a@PyFDZ@@"8d ! 2011-01-10?@,@v;c 9c ! 2011-01-09"@*@g`C 9b !2011-01-08E@E@z+t8a !   2011-01-07k@Ix9k@ƨ . 9` !  2011-01-06P@tR333@}ӑf8_ ! 2011-01-05C@jj.@z!"^ !2011-01-049] !2011-01-03@b)JS@g 8\ !  2011-01-02;@Lx@vf 8[ !2011-01-013@Y@r 9Z !  2010-12-31f@ꆰ@T@ 8Y ! 2010-12-30"@xZZZ@n 8X ! 2010-12-29:@m(ܱ@z9W ! 2010-12-28y@YA7@ƨ`+ KL\#s7K8v ! 2011-02-06<@H@v9u !2011-02-05)@ORWj%@m!8t !2011-01-30 @@n 7s ! 2011-01-29.@1a7@nwt  9r ! 2011-01-28*@UUU@n9q !2011-01-26*@<@n7p !  2011-01-25\@򤅐@ff@/ 7o !  2011-01-23G@$ͅ@zG.h#6n !  2011-01-22=@X)qO@z7m !   2011-01-20K@X`Ǯ{@z/j ":l ! 2011-01-19@(@IC;9k !2011-01-189@Hf >@vz@:j !  2011-01-17@&%+@l /9i ! 2011-01-16c@.^@/ 9h ! 2011-01-15d@Tfff@  / 9g ! 2011-01-13J@`h@zRi@  8Qj1]!r87 !   2011-02-27O@ qk@~Y8#7 ! 2011-02-26;@h3IA@r 8 ! 2011-02-25Y@%{@}@+7 ! 2011-02-24:@#Os@r! 9 ! 2011-02-23k@3d@@88 ! 2011-02-22<@ =p@v 7 !  2011-02-20K@kX@~Ԓ"" !2011-02-197 ! 2011-02-17T@2^a@~r& 6~ !   2011-02-16Q@ @~.8(6} !  2011-02-15>@32@vzI 7| !  2011-02-14d@zH@0`)17{ ! 2011-02-13&@5@lq 7z !2011-02-12T@)z@+\# 8y !2011-02-107@A*@rz@6x !   2011-02-09A@ֵ н@z>c@!8w !2011-02-081@xW/9@mU  ^Lb=Q^: ! 2011-03-23n@I@s'#: ! 2011-03-22K@Ӡm@w k : ! 2011-03-21C@9P=@vG 9 !  2011-03-163@\@m놀9 !  2011-03-15 @h@fh8 !   2011-03-14d@((@o`)6 !  2011-03-13F@m@z]`' 9 !  2011-03-12I@#@z/" !2011-03-117 !   2011-03-10/@Urb @r  8  ! 2011-03-095@y}@r@  8  ! 2011-03-083@₂@rA 7  !  2011-03-074@^v'b@m^68  !   2011-03-06Q@) @z7@ 9  ! 2011-03-03N@#\@zJ  : ! 2011-02-28@m4M@SM0`!F# <O]i-w<8' !   2011-04-10"@Zո@f  9& !  2011-04-089@H7@nap;% ! 2011-04-07E@r;\@rۀ  9$ !   2011-04-051@6w/9@sM^{@ 9# !   2011-04-04T@<@za9" !    2011-04-03E@հk@zb  :! !  2011-04-02b@{dZƇ@xՀ:  !  2011-04-01A@%-@t-; !  2011-03-31g@b2|E@fl+8 !   2011-03-303@r@rB9 !  2011-03-29V@[/@ "< !2011-03-28^@ @&+ 9 !  2011-03-27D@^@z9 : !   2011-03-26u@Fa^@nU* 5 ! 2011-03-25 @q@M @9 !  2011-03-249@:c@vA@   AKVx9A<7 !  2011-04-28v@W;8h@O   ;6 ! 2011-04-27]@<$@~Q+ ;5 !  2011-04-26w@_h߻)@ ŀ"  :4 !  2011-04-251@n@m <3 ! 2011-04-24d@LW@~'H   "2 !2011-04-23<1 ! 2011-04-22X@,+.@z\k :0 !   2011-04-20M@hP@v@ :/ ! 2011-04-19>@z+x1@rZ  9. !  2011-04-180@DDF@nffi  <- ! 2011-04-16l@Y) {@ۥ`%:, !  2011-04-157@j@sC1 :+ !   2011-04-14<@M|DDD@sHԀ :* !   2011-04-13;@ib@r&@  9) !  2011-04-124@+@rӱO 9( ! 2011-04-11;@|V<@q;c  U_"n1n0zU"H !2011-06-06;G ! 2011-05-31@iOS@1vɀ 1 9F !2011-05-264@aVv'b@r  9E ! 2011-05-241@Z@r| ;D !2011-05-19o@'5 @ř3:C !2011-05-16Y@b@p  ! "B !2011-05-14"A !2011-05-139@ ! 2011-05-12C@ ORݜ@z7  :? !  2011-05-11[@ 2*@ `  9> ! 2011-05-10A@)z@v(  9= ! 2011-05-09C@|1@v~@  9< !  2011-05-08=@&ͤ@v, :; ! 2011-05-07x@q@&": !2011-05-03:9 ! 2011-05-01*@I$@o <8 !  2011-04-30@9@""! CM^!m0~C8X !  2011-06-269@T(# @r| 9W !  2011-06-25Q@1) @}'7"8V !  2011-06-24N@4H@}n(8U !  2011-06-23D@w!_KKK@~>u@ :T ! 2011-06-21@&Hs@ge 9S !   2011-06-20x@<@E*8R !  2011-06-18L@E`A yC@|bM@%:Q !  2011-06-17W@.*{@~'x :P !  2011-06-15R@V81@~9l 9O ! 2011-06-14X@.@~7N !  2011-06-132@bh@rDG:M !  2011-06-12m@w@! 9L !  2011-06-11b@_5n@  8K !  2011-06-10S@6C@z77L@8J ! 2011-06-09%@t@n47:I !2011-06-07-@X3Vfff@n1  2_#J]"o2:i ! 2011-07-16-@1r@rd[9h !  2011-07-14J@@v^5 &9g ! 2011-07-133@PPP@rS8f !   2011-07-127@/@r@ 8e !  2011-07-11*@ <=@n@}P  8d !   2011-07-10g@^VU O@x08c !   2011-07-09W@, Rd@z(9b !  2011-07-08x@P@&68a !  2011-07-07A@ s;@y( 9` !   2011-07-06:@˽,#O@rأ@ "_ !2011-07-059^ !   2011-07-04B@@vw!S 9] !  2011-07-03O@-]@~c/9\ ! 2011-07-02B@9,_|@~"  8[ !  2011-07-01.@@r7K@ >Z !2011-06-29@o@'9 "Y !2011-06-28 HEH OH?x ! 2011-08-03@{8L@0 Bb@w !2011-08-02@ݵл@.! >v !  2011-08-01@ Vǘ@[I& >u ! 2011-07-31@5[@k!0V% >t ! 2011-07-30@&)& H@p $`3 9s !   2011-07-293@@rƒ:r !  2011-07-26J@&6)@wL/G  ! 2011-08-21@{@z )\0 > !2011-08-20@zW~@t`F!> !2011-08-19t@*p=@v #< ! 2011-08-17@뮻@ܡʠ$T"> ! 2011-08-16@*e@ ? > ! 2011-08-15@Ͱ@M9 H > ! 2011-08-14@ 7\@7w6  > ! 2011-08-13@AwD@ 9+ < ! 2011-08-11G@S @v >~ ! 2011-08-10V@K% 0@}   >} !2011-08-08@v8@- >, =| ! 2011-08-07@ }@;;+ ?{ ! 2011-08-06@Ga@@Q$ !2011-09-05@ M;O@'@ (!  = !2011-09-04s@:(@!  @ ! 2011-09-03+@UX/@cfl&> ; !  2011-09-02@@hh@vhh  ? !2011-09-01@-"@P \? = !  2011-08-31@7OMV@ӛY [0 > ! 2011-08-30@\"@7 t7  > !  2011-08-29@K[@@  `) > !2011-08-28@W k@ X3  ?  ! 2011-08-27@i0)-{t@i` W)>  ! 2011-08-26@Nl@  :$ ?  !2011-08-25@+%e@ - /7  ?  ! 2011-08-24@Ϙd@h&  G" ?  !2011-08-23@ -u@_ V3> ! 2011-08-22@^@4w6'  @~=y8u9}@:% ! 2011-09-225@}@s @ :$ !  2011-09-211@qN^ @r ! 2011-09-15"@)>@?` .w5 > !  2011-09-14@F@9I= !  2011-09-13@ؾ~@)f A ? !2011-09-12@I_ץ@X W% ? ! 2011-09-11#@2^!n@| ){H > !  2011-09-10K@%z @ /0 %3" ? ! 2011-09-08@+CN^@5p  *G = !2011-09-06Z@q@  :If${9y:<5 !2011-10-08@%)%h}@3ixY. ;4 ! 2011-10-07@$s@:h9E" <3 !2011-10-06@(Hj@  p .? @2 !2011-10-05@)G9@ D' ?1 ! 2011-10-04@&#'@` b; @0 ! 2011-10-03@'}n[@( MY "/ !2011-10-02>. ! 2011-10-01@'R@|H)D ?- !2011-09-30@(ںQ@q:R%  ?, !2011-09-29@)A @ևP5f! "+ !2011-09-28>* ! 2011-09-27m@%!!i@ =psqI 8) ! 2011-09-26+@&8jk)@}- <( !2011-09-25Y@%P sb@l  :' ! 2011-09-24;@&]/@r^@  8& ! 2011-09-23!@@E@fw  HCHNH;E !2011-10-27o@'QL@W  > ! 2011-10-18@*]@aʐ.<#7= ! 2011-10-17@-vKKK@o=< !  2011-10-15O@f@{ <; !2011-10-14@&:bv'@Y: 34 <: !2011-10-13@(B(@9X 90 :9 !2011-10-12{@%_j%w@%0 &" <8 !2011-10-11@%)=@ @G(@ 8/<7 !2011-10-10@#ޫ@M072   <6 !2011-10-09@(ݻ[@{<.  0v6|>v7q0>W !2011-11-14@+2'=p@?/ %$""V !2011-11-13"U !2011-11-12;T !2011-11-11]@+ yH@ ;S !2011-11-10Y@,x@W    0"H !2011-10-30"G !2011-10-29=F !2011-10-28K@'ۿLg@0 XQ4  ICEk,nI"h !2011-12-03@g> "] !2011-11-21"\ !2011-11-19;[ !2011-11-18O@'e? @  ;Z !2011-11-17j@%{geo@ʊ=   ]8\7"z !2011-12-226y !   2011-12-21@#W yC@ghsd9 ! 2012-01-19@*H>@nN9  !  2012-01-18@,tR@;gw&:  ! 2012-01-17@2TKM@6EH$"  !2012-01-169  !  2012-01-15t@6x#Os@|0"  !2012-01-14: ! 2012-01-13@1h*@RjX P" !2012-01-11" !2012-01-10" !2012-01-08" !2012-01-07" !2012-01-06" !2012-01-05" !2012-01-04" !2012-01-03" !2012-01-028~ ! 2011-12-31&@@kc "} !2011-12-26:| ! 2011-12-24B@%1E@{[*  7{ ! 2011-12-237@$=X@ UO[ h-zU" !2012-02-059 !2012-02-04`@ L/UU@rG79 ! 2012-02-03b@1rP4?@ C7 8 ! 2012-02-02W@%f@b;e- 8 !  2012-02-01b@$m@d" ?  : ! 2012-01-31@(E'@33 Z ; ! 2012-01-30@+^?Euuu@, c: !2012-01-29@.ueTI@eJ8 !2012-01-284@1 m@" : ! 2012-01-27@.c]5@ڿ|y : ! 2012-01-26@2O#@nh( [I m0zU[8> ! 2012-03-08k@(f@.*9= !2012-03-07n@"}Xo@0>< ! 2012-03-06@)L{}Og@z5Y##?; ! 2012-03-05@'UU@ɺ8 N:": !2012-03-0499 !2012-03-03W@<@Ƙ #;8 !  2012-03-02@%؃쎕@BF" 97 !2012-03-01Y@*G@|}0! :6 !2012-02-29@,kW@y 6 " :5 !2012-02-28@%Y({@ d( ;4 ! 2012-02-27@+D@h| d 3"3 !2012-02-2692 !  2012-02-25~@,hm@2 7':1 !2012-02-24u@%ҩz@\`5 :0 !2012-02-23@%Cd@?`C'$:/ !2012-02-22@%,@`0E( +O\ AP+"O !2012-03-258N ! 2012-03-24|@2{@A'0 :M !2012-03-23@*fs@R3) :L !2012-03-22@'kQB/@4#9K !2012-03-21n@%o@k 1;J ! 2012-03-20@)lbm@=p O*=I ! 2012-03-19 @(f@ ` nC"H !2012-03-189G !2012-03-17l@6mUUU@k29F !2012-03-16g@'Z3V@P"#:E !2012-03-15@1'.@a+( O!9D !2012-03-14p@){$I@a I- :C ! 2012-03-13@*mH4@:Ƙ H":B !2012-03-12@'{@>c@6A !2012-03-11@*'UUU@t@9@ !2012-03-10|@#C@x> 9? ! 2012-03-09}@#GX9X@Ӭ (- -Jq4Di-9` !2012-04-11j@++x5@ 9_ !2012-04-10i@,V\@>@# 8^ !2012-04-09w@*km@ ,. <] ! 2012-04-08@#UB@c  Q? "\ !2012-04-078[ !2012-04-06d@,kN@4$ݐ+ 9Z !2012-04-05\@&i@S$ 9Y !2012-04-04~@&J]v@I@.) :X !2012-04-03@(M <@e8 WD:W !2012-04-02@&VbHq4@]&fP=% .$"V !2012-04-019U ! 2012-03-31x@(a@ۗP0 9T ! 2012-03-30w@&&@`1'p)# 9S !2012-03-29e@, 'Ŵ@9W :R !2012-03-28@1(@(59Q !2012-03-27c@!jMe@P`&  :P ! 2012-03-26@*VK[_@x gB .D_e(k.:p ! 2012-04-27@0@b%8?==o !2012-04-26@1L@) 34=n !2012-04-25@-&rn@K&f F) :m !2012-04-24@.M:@Ox2< :l ! 2012-04-23@(JjS@G`56 :k !2012-04-22@0 @DVp-@:j !2012-04-21@*LA]@aRD =i !2012-04-20@-Ƭ0!5@n  ?7=h !2012-04-19@*]@0 FB=g !2012-04-18@&-H@cSA-=f !2012-04-17@0O>@M= M  =e !2012-04-16@(ٝz@= TN "d !2012-04-15=c !2012-04-14@+@Z\@_ E-=b !2012-04-13@,^`@8 (B9a !2012-04-12i@&r֍i@ I " TKn1~BT9 !2012-05-13F@+~+@JI 6 ! 2012-05-12@2/@y@ 9~ !2012-05-11{@1zy@1H0:} ! 2012-05-10@, ~@K%< 9| !2012-05-09s@&w>T@/p,(8{ ! 2012-05-08j@*Jv9@@0 9z !2012-05-07u@(Gq@1ƨ.9y ! 2012-05-06i@4|׸@h% :x !2012-05-05@/333@ OP%8 ;w ! 2012-05-04@#AHN+@)*+:v ! 2012-05-03@+Y$i@ D_%"u !2012-05-02:t !  2012-05-01@*Z {@˓t*3 :s !2012-04-30@,,-%@&`bZ8r ! 2012-04-29-@'5UUU@ :q ! 2012-04-28@!Ԑſ@CS0*O /H MZ k/9 !2012-05-30c@&Ԕ W@j9 !2012-05-29c@(Ocd6@9 !2012-05-28o@*-G@1 : !2012-05-27@'c@"`=(7  !2012-05-26@$x@dx9  !2012-05-25L@)w(k@>"Ѐ9  !2012-05-24g@*Yz@$;  !2012-05-23@)2@U_ :  !2012-05-22@& a@l` /U 8 ! 2012-05-21w@/|@zG +,7 ! 2012-05-20*@0ޥ<@9" !2012-05-19" !2012-05-189 !2012-05-17n@* O!@p#; ! 2012-05-16z@)_GX@/`): !2012-05-15@.S?|@S?| 1": !2012-05-14@+F: @ _b Bb&i.o2~B9! ! 2012-06-15@(O@6(9  !2012-06-14t@0'?Xa@G"а"!9 !2012-06-13{@(,rx(@;$9 !2012-06-12y@"=(2@I-: ! 2012-06-11@)#@2ڟ?C> !2012-06-10@'K8@z `Q < !2012-06-09A@(vE܎@n  < !2012-06-08r@#S!# @6 =p#8 ! 2012-06-07~@$4M@>w0$): ! 2012-06-06q@(5U@^  = ! 2012-06-05@$8# @S@/-= !2012-06-04'@&f.l@`( oK#!9 !  2012-06-039@5`5 @ " !2012-06-02: ! 2012-06-01{@'#@0P *9 !2012-05-31q@$@)ff@) _GQu8_81 ! 2012-07-01=@- }@RI  "0 !2012-06-309/ !2012-06-29k@)u| @H}+ :. !2012-06-28@)q\@L̀4%:- !  2012-06-27w@(TI%@ʮ%:, !2012-06-26@%m@M05+:+ !2012-06-25@.@…@|)x uD 3"* !2012-06-24:) !  2012-06-23@'@-#1:( !2012-06-22@'fy@QW O!# :' !2012-06-21@& q@l0 H""9& ! 2012-06-20@'r;UUU@?+=% !2012-06-19@/_:@[;dPhJ#6$ !    2012-06-18@5UU@wƧ =# !2012-06-17@$d```@M=P8& =" !2012-06-16@'4-,I$@ahp * bER`;b9A !2012-07-18z@*D:@ q2;@ !2012-07-17@)J6k @ ` A,7? ! 2012-07-16.@!FQ8@y "> !2012-07-15"= !2012-07-149< !2012-07-13m@&6U@-@4 :; !2012-07-12@&?g@(P< :: !2012-07-11@'–"@u06' 99 !2012-07-10|@)[B)J@pH :8 !2012-07-09@%&2@@GK:7 !2012-07-08@0hLj%w@9 Y96 !2012-07-07~@$Ȣ)@t3}X"v !2012-09-099u !2012-09-08}@#zH@I . 9t !2012-09-07c@%$@$ ;s !2012-09-06@%o@`I >r ! 2012-09-05Y@,2aG@;dX .=q ! 2012-09-04@-ݛ@9DU H"p !2012-09-03"o !2012-09-02=n ! 2012-09-01/@2 ~J@Y<( sA ;;m !2012-08-31@- @@g28l !  2012-08-30@0 X]@6E1T"k !2012-08-29"j !2012-08-28"i !2012-08-27"h !2012-08-26:g ! 2012-08-25k@*;@@`"9f !2012-08-24a@&W@BA( 9e !2012-08-23c@%]F@ UEn1 SzU" !2012-09-26= !2012-09-25@@)`@%b<oG 5;6 !  2012-09-24@+ek[@{"" !2012-09-238 ! 2012-09-22@9a@h ; !2012-09-21@,F-@%h); !2012-09-20v@-$sh@I} : !2012-09-19@%n@b` , -" !2012-09-18:~ !2012-09-17@/j_@x8 J5} !   2012-09-16@,@s@"| !2012-09-15:{ !2012-09-14@0\H\r@gh` @(:z !2012-09-13@'*@M<#9y !2012-09-12v@$Cu' @?M02;x ! 2012-09-11@&.em3@{P=>w !2012-09-100@(5# y@o <0 CJm1[hC" !2012-10-138 ! 2012-10-12s@&BU8@O0*; !2012-10-11@0E#|3@C x: ! 2012-10-10@&ф@>jxj1: !2012-10-09@&(7E@cK V(: !2012-10-08@(%@B6I V8<57 ! 2012-10-07@& r@pV " !2012-10-067 !2012-10-05*@- -@  9 !2012-10-04y@%Z.@r49@)# : !2012-10-03@)!@P 8F ;"  !2012-10-02>  !2012-10-01C@'q޶@YpQ%7  !  2012-09-30@#ݙq@p :  !2012-09-29@+n@eI ,& 9  !2012-09-28R@*m~Wj@-%  : !2012-09-27 @.%f@v{%0 b=" !2012-10-23: !2012-10-18@%Lcq@ S%:" !2012-10-179 !2012-10-16t@%㧹a@NP= : !2012-10-15&@* z@bMg- U"" !2012-10-14 2 0@P`p 0@P`p 0@P`p! 2008-03-05 !2008-03-05 !2008-03-06 !2008-03-07 !2008-03-17 !2008-03-18! 2008-03-05 !2008-03-05 !2008-03-06 !2008-03-07 !2008-03-17 !2008-03-18 !2008-03-19 !2008-03-20  !2008-03-22  !2008-03-24  !2008-03-25  !2008-03-26  !2008-03-27 !2008-03-28 !2008-03-30 !2008-03-31 !2008-04-01 !2008-04-03 !2008-04-04 !2008-04-07 !2008-04-08 !2008-04-09 !2008-04-14 !2008-04-15 !2008-04-16 !2008-04-21 !2008-04-24 !2008-04-26 !2008-04-28 !2008-04-29 !2008-04-30  !2008-05-02! !2008-05-06" !2008-05-13# !2008-05-14$ !2008-05-15% !2008-05-16& !2008-05-17' !2008-05-19( !2008-05-20) !2008-05-21* !2008-05-22+ !2008-05-23, !2008-05-25- !2008-05-30. !2008-05-31/ !2008-06-010 !2008-06-021 !2008-06-032 !2008-06-053 2 0@P`p 0@P`p 0@P`p !2008-06-075 !2008-06-116 !2008-06-127 !2008-06-138 !2008-06-149 !2008-06-15: !2008-06-075 !2008-06-116 !2008-06-127 !2008-06-138 !2008-06-149 !2008-06-15: !2008-06-17; !2008-06-18< !2008-06-19= !2008-06-20> !2008-06-21? !2008-06-22@ !2008-06-23A !2008-06-24B !2008-06-25C !2008-06-26D !2008-06-30E !2008-07-01F !2008-07-02G !2008-07-03H !2008-07-04I !2008-07-05J !2008-07-06K !2008-07-07L !2008-07-08M !2008-07-10N !2008-07-11O !2008-07-12P !2008-07-13Q !2008-07-14R !2008-07-15S !2008-07-16T !2008-07-17U !2008-07-19V !2008-07-20W !2008-07-22X !2008-07-23Y !2008-07-24Z !2008-07-25[ !2008-07-26\ !2008-07-28] !2008-07-29^ !2008-07-31_ !2008-08-04` !2008-08-05a !2008-08-07b !2008-08-11c !2008-08-15d !2008-08-17e !2008-08-23f 0(8HXhx(8HXhy#4EVgx !2 !2 !2008-08-25h !2008-08-26i !2008-08-27j !2008-09-06k !2008-09-07l !2008-09-24m !2 !2008-08-25h !2008-08-26i !2008-08-27j !2008-09-06k !2008-09-07l !2008-09-24m !2008-09-27n !2008-10-07o !2008-10-19p !2008-11-01q !2008-11-04r !2008-11-08s !2008-11-12t !2008-11-14u !2008-12-16v !2008-12-17w !2008-12-20x !2008-12-22y !2008-12-23z !2008-12-24{ !2008-12-26| !2008-12-27} !2008-12-29~ !2009-02-04 !2009-02-11 !2009-02-12 !2009-02-13 !2009-02-14 !2009-02-15 !2009-02-19 !2009-04-18 !2009-06-04 !2009-06-30 !2009-07-12 !2009-07-13 !2009-07-16 !2009-07-17 !2009-07-18 !2009-07-24 !2009-07-30 !2009-07-31 !2009-08-01 !2009-08-02 !2009-08-03 !2009-08-07 !2009-08-09 !2009-08-10 !2009-08-11 /%6GXiz$5FWhy#4EVgx !2009-08-14 !2009-08-15 !2009-08-16 !2009-08-17 !2009-08-22 !2009-08-23 !2009-08-14 !2009-08-15 !2009-08-16 !2009-08-17 !2009-08-22 !2009-08-23 !2009-08-25 !2009-08-26 !2009-08-31 !2009-09-01 !2009-09-02 !2009-09-03 !2009-09-04 !2009-09-05 !2009-09-06 !2009-09-07 !2009-09-08 !2009-09-09 !2009-09-10 !2009-09-11 !2009-09-12 !2009-09-13 !2009-09-15 !2009-09-16 !2009-09-17 !2009-09-20 !2009-09-28 !2009-10-31 !2009-11-04 !2009-11-06 !2009-11-07 !2009-11-09 !2009-11-10 !2009-11-16 !2009-11-19 !2009-11-24 !2009-11-25 !2009-12-08 !2009-12-13 !2009-12-19 !2009-12-20 !2009-12-21 !2009-12-22 !2009-12-25 !2009-12-26 !2009-12-27 !2009-12-28 /%6GXiz$5FWhy#4EVgx !2009-12-31 !2010-01-01 !2010-01-03 !2010-01-05 !2010-01-06 !2010-01-11 !2009-12-31 !2010-01-01 !2010-01-03 !2010-01-05 !2010-01-06 !2010-01-11 !2010-01-13 !2010-01-14 !2010-01-17 !2010-01-19 !2010-01-20 !2010-01-21 !2010-01-23 !2010-01-24 !2010-01-26 !2010-01-27 !2010-01-28 !2010-01-29 !2010-01-30 !2010-01-31 !2010-02-01 !2010-02-02 !2010-02-03 !2010-02-04 !2010-02-05 !2010-02-06 !2010-02-07 !2010-02-08 !2010-02-09 !2010-02-10 !2010-02-11 !2010-02-12 !2010-02-13 !2010-02-14 !2010-02-15 !2010-02-16 !2010-02-17 !2010-02-18 !2010-02-19 !2010-02-20 !2010-02-21 !2010-02-22 !2010-02-23 !2010-02-24 !2010-02-25 !2010-02-26 !2010-02-27 /%6GXiz$5FWhy#4EVgx !2010-03-01 !2010-03-02 !2010-03-04 !2010-03-05 !2010-03-06 !2010-03-07 !2010-03-01 !2010-03-02 !2010-03-04 !2010-03-05 !2010-03-06 !2010-03-07 !2010-03-08 !2010-03-09 !2010-03-10 !2010-03-11 !2010-03-13 !2010-03-14 !2010-03-15 !2010-03-16 !2010-03-17 !2010-03-19 !2010-03-20  !2010-03-21  !2010-03-22  !2010-03-23  !2010-03-24  !2010-03-25 !2010-03-26 !2010-03-27 !2010-03-28 !2010-03-29 !2010-03-30 !2010-03-31 !2010-04-01 !2010-04-02 !2010-04-03 !2010-04-04 !2010-04-05 !2010-04-06 !2010-04-07 !2010-04-08 !2010-04-09 !2010-04-10 !2010-04-11 !2010-04-13  !2010-04-14! !2010-04-15" !2010-04-16# !2010-04-17$ !2010-04-18% !2010-04-19& !2010-04-20' /%6GXiz$5FWhy#4EVgx !2010-04-22) !2010-04-23* !2010-04-24+ !2010-04-25, !2010-04-26- !2010-04-27. !2010-04-22) !2010-04-23* !2010-04-24+ !2010-04-25, !2010-04-26- !2010-04-27. !2010-04-28/ !2010-05-140 !2010-05-151 !2010-05-162 !2010-05-183 !2010-05-194 !2010-05-235 !2010-06-276 !2010-07-017 !2010-07-038 !2010-07-069 !2010-07-08: !2010-07-11; !2010-07-25< !2010-08-03= !2010-08-06> !2010-08-11? !2010-08-15@ !2010-08-17A !2010-08-19B !2010-08-21C !2010-08-22D !2010-08-23E !2010-08-24F !2010-09-12G !2010-10-03H !2010-11-27I !2010-11-28J !2010-11-29K !2010-11-30L !2010-12-04M !2010-12-05N !2010-12-08O !2010-12-11P !2010-12-14Q !2010-12-15R !2010-12-21S !2010-12-22T !2010-12-26U !2010-12-27V !2010-12-28W /%6GXiz$5FWhy#4EVgx !2010-12-30Y !2010-12-31Z !2011-01-01[ !2011-01-02\ !2011-01-03] !2011-01-04^ !2010-12-30Y !2010-12-31Z !2011-01-01[ !2011-01-02\ !2011-01-03] !2011-01-04^ !2011-01-05_ !2011-01-06` !2011-01-07a !2011-01-08b !2011-01-09c !2011-01-10d !2011-01-11e !2011-01-12f !2011-01-13g !2011-01-15h !2011-01-16i !2011-01-17j !2011-01-18k !2011-01-19l !2011-01-20m !2011-01-22n !2011-01-23o !2011-01-25p !2011-01-26q !2011-01-28r !2011-01-29s !2011-01-30t !2011-02-05u !2011-02-06v !2011-02-08w !2011-02-09x !2011-02-10y !2011-02-12z !2011-02-13{ !2011-02-14| !2011-02-15} !2011-02-16~ !2011-02-17 !2011-02-19 !2011-02-20 !2011-02-22 !2011-02-23 !2011-02-24 !2011-02-25 !2011-02-26 !2011-02-27 /%6GXiz$5FWhy#4EVgx !2011-03-03 !2011-03-06 !2011-03-07 !2011-03-08 !2011-03-09 !2011-03-10 !2011-03-03 !2011-03-06 !2011-03-07 !2011-03-08 !2011-03-09 !2011-03-10 !2011-03-11 !2011-03-12 !2011-03-13 !2011-03-14 !2011-03-15 !2011-03-16 !2011-03-21 !2011-03-22 !2011-03-23 !2011-03-24 !2011-03-25 !2011-03-26 !2011-03-27 !2011-03-28 !2011-03-29 !2011-03-30 !2011-03-31 !2011-04-01 !2011-04-02 !2011-04-03 !2011-04-04 !2011-04-05 !2011-04-07 !2011-04-08 !2011-04-10 !2011-04-11 !2011-04-12 !2011-04-13 !2011-04-14 !2011-04-15 !2011-04-16 !2011-04-18 !2011-04-19 !2011-04-20 !2011-04-22 !2011-04-23 !2011-04-24 !2011-04-25 !2011-04-26 !2011-04-27 !2011-04-28 /%6GXiz$5FWhy#4EVgx !2011-05-01 !2011-05-03 !2011-05-07 !2011-05-08 !2011-05-09 !2011-05-10 !2011-05-01 !2011-05-03 !2011-05-07 !2011-05-08 !2011-05-09 !2011-05-10 !2011-05-11 !2011-05-12 !2011-05-13 !2011-05-14 !2011-05-16 !2011-05-19 !2011-05-24 !2011-05-26 !2011-05-31 !2011-06-06 !2011-06-07 !2011-06-09 !2011-06-10 !2011-06-11 !2011-06-12 !2011-06-13 !2011-06-14 !2011-06-15 !2011-06-17 !2011-06-18 !2011-06-20 !2011-06-21 !2011-06-23 !2011-06-24 !2011-06-25 !2011-06-26 !2011-06-28 !2011-06-29 !2011-07-01 !2011-07-02 !2011-07-03 !2011-07-04 !2011-07-05 !2011-07-06 !2011-07-07 !2011-07-08 !2011-07-09 !2011-07-10 !2011-07-11 !2011-07-12 !2011-07-13 /%6GXiz$5FWhy#4EVgx !2011-07-16 !2011-07-17 !2011-07-18 !2011-07-19 !2011-07-21 !2011-07-22 !2011-07-16 !2011-07-17 !2011-07-18 !2011-07-19 !2011-07-21 !2011-07-22 !2011-07-23 !2011-07-24 !2011-07-25 !2011-07-26 !2011-07-29 !2011-07-30 !2011-07-31 !2011-08-01 !2011-08-02 !2011-08-03 !2011-08-04 !2011-08-05 !2011-08-06 !2011-08-07 !2011-08-08 !2011-08-10 !2011-08-11 !2011-08-13 !2011-08-14 !2011-08-15 !2011-08-16 !2011-08-17 !2011-08-19 !2011-08-20 !2011-08-21 !2011-08-22 !2011-08-23  !2011-08-24  !2011-08-25  !2011-08-26  !2011-08-27  !2011-08-28 !2011-08-29 !2011-08-30 !2011-08-31 !2011-09-01 !2011-09-02 !2011-09-03 !2011-09-04 !2011-09-05 !2011-09-06 /%6GXiz$5FWhy#4EVgx !2011-09-10 !2011-09-11 !2011-09-12 !2011-09-13 !2011-09-14 !2011-09-15 !2011-09-10 !2011-09-11 !2011-09-12 !2011-09-13 !2011-09-14 !2011-09-15 !2011-09-16 !2011-09-17  !2011-09-18! !2011-09-19" !2011-09-20# !2011-09-21$ !2011-09-22% !2011-09-23& !2011-09-24' !2011-09-25( !2011-09-26) !2011-09-27* !2011-09-28+ !2011-09-29, !2011-09-30- !2011-10-01. !2011-10-02/ !2011-10-030 !2011-10-041 !2011-10-052 !2011-10-063 !2011-10-074 !2011-10-085 !2011-10-096 !2011-10-107 !2011-10-118 !2011-10-129 !2011-10-13: !2011-10-14; !2011-10-15< !2011-10-17= !2011-10-18> !2011-10-19? !2011-10-20@ !2011-10-21A !2011-10-22B !2011-10-23C !2011-10-25D !2011-10-27E !2011-10-28F !2011-10-29G /%6GXiz$5FWhy#4EVgx !2011-10-31I !2011-11-01J !2011-11-02K !2011-11-03L !2011-11-04M !2011-11-05N !2011-10-31I !2011-11-01J !2011-11-02K !2011-11-03L !2011-11-04M !2011-11-05N !2011-11-06O !2011-11-07P !2011-11-08Q !2011-11-09R !2011-11-10S !2011-11-11T !2011-11-12U !2011-11-13V !2011-11-14W !2011-11-15X !2011-11-16Y !2011-11-17Z !2011-11-18[ !2011-11-19\ !2011-11-21] !2011-11-22^ !2011-11-23_ !2011-11-24` !2011-11-25a !2011-11-27b !2011-11-28c !2011-11-29d !2011-11-30e !2011-12-01f !2011-12-02g !2011-12-03h !2011-12-04i !2011-12-05j !2011-12-06k !2011-12-07l !2011-12-08m !2011-12-09n !2011-12-11o !2011-12-12p !2011-12-13q !2011-12-14r !2011-12-15s !2011-12-16t !2011-12-17u !2011-12-18v !2011-12-19w /%6GXiz$5FWhy#4EVgx !2011-12-21y !2011-12-22z !2011-12-23{ !2011-12-24| !2011-12-26} !2011-12-31~ !2011-12-21y !2011-12-22z !2011-12-23{ !2011-12-24| !2011-12-26} !2011-12-31~ !2012-01-02 !2012-01-03 !2012-01-04 !2012-01-05 !2012-01-06 !2012-01-07 !2012-01-08 !2012-01-10 !2012-01-11 !2012-01-13 !2012-01-14 !2012-01-15 !2012-01-16 !2012-01-17 !2012-01-18 !2012-01-19 !2012-01-20 !2012-01-21 !2012-01-23 !2012-01-24 !2012-01-25 !2012-01-26 !2012-01-27 !2012-01-28 !2012-01-29 !2012-01-30 !2012-01-31 !2012-02-01 !2012-02-02 !2012-02-03 !2012-02-04 !2012-02-05 !2012-02-06 !2012-02-07 !2012-02-08 !2012-02-09 !2012-02-10 !2012-02-11 !2012-02-12 !2012-02-13 !2012-02-14 /%6GXiz$5FWhy#4EVgx !2012-02-16 !2012-02-17 !2012-02-18 !2012-02-19 !2012-02-20 !2012-02-21 !2012-02-16 !2012-02-17 !2012-02-18 !2012-02-19 !2012-02-20 !2012-02-21 !2012-02-22 !2012-02-23 !2012-02-24 !2012-02-25 !2012-02-26 !2012-02-27 !2012-02-28 !2012-02-29 !2012-03-01 !2012-03-02 !2012-03-03 !2012-03-04 !2012-03-05 !2012-03-06 !2012-03-07 !2012-03-08 !2012-03-09 !2012-03-10 !2012-03-11 !2012-03-12 !2012-03-13 !2012-03-14 !2012-03-15 !2012-03-16 !2012-03-17 !2012-03-18 !2012-03-19 !2012-03-20 !2012-03-21 !2012-03-22 !2012-03-23 !2012-03-24 !2012-03-25 !2012-03-26 !2012-03-27 !2012-03-28 !2012-03-29 !2012-03-30 !2012-03-31 !2012-04-01 !2012-04-02 /%6GXiz$5FWhy#4EVgx !2012-04-04 !2012-04-05 !2012-04-06 !2012-04-07 !2012-04-08 !2012-04-09 !2012-04-04 !2012-04-05 !2012-04-06 !2012-04-07 !2012-04-08 !2012-04-09 !2012-04-10 !2012-04-11 !2012-04-12 !2012-04-13 !2012-04-14 !2012-04-15 !2012-04-16 !2012-04-17 !2012-04-18 !2012-04-19 !2012-04-20 !2012-04-21 !2012-04-22 !2012-04-23 !2012-04-24 !2012-04-25 !2012-04-26 !2012-04-27 !2012-04-28 !2012-04-29 !2012-04-30 !2012-05-01 !2012-05-02 !2012-05-03 !2012-05-04 !2012-05-05 !2012-05-06 !2012-05-07 !2012-05-08 !2012-05-09 !2012-05-10 !2012-05-11 !2012-05-12 !2012-05-13 !2012-05-14 !2012-05-15 !2012-05-16 !2012-05-17 !2012-05-18 !2012-05-19 !2012-05-20 1%6GXiz$5FWhy#4EVgx !2012-05-28 !2012-05-29 !2012-05-30 !2012-05-31 !2012-05-22  !2012-05-23  !2012-05-24  !2012-05-25  !2012-05-26  !2012-05-27 !2012-05-28 !2012-05-29 !2012-05-30 !2012-05-31 !2012-06-01 !2012-06-02 !2012-06-03 !2012-06-04 !2012-06-05 !2012-06-06 !2012-06-07 !2012-06-08 !2012-06-09 !2012-06-10 !2012-06-11 !2012-06-12 !2012-06-13 !2012-06-14  !2012-06-15! !2012-06-16" !2012-06-17# !2012-06-18$ !2012-06-19% !2012-06-20& !2012-06-21' !2012-06-22( !2012-06-23) !2012-06-24* !2012-06-25+ !2012-06-26, !2012-06-27- !2012-06-28. !2012-06-29/ !2012-06-300 !2012-07-011 !2012-07-022 !2012-07-033 !2012-07-054 !2012-07-065 !2012-07-076 !2012-07-087 !2012-07-098 !2012-07-109 0%6GXiz$5FWhy#4EVgx !2012-07-22E !2012-07-23F !2012-07-24G !2012-07-25H !2012-07-26I !2012-07-12; !2012-07-13< !2012-07-14= !2012-07-15> !2012-07-16? !2012-07-17@ !2012-07-18A !2012-07-19B !2012-07-20C !2012-07-21D !2012-07-22E !2012-07-23F !2012-07-24G !2012-07-25H !2012-07-26I !2012-07-27J !2012-07-28K !2012-07-29L !2012-07-30M !2012-07-31N !2012-08-01O !2012-08-02P !2012-08-03Q !2012-08-04R !2012-08-05S !2012-08-06T !2012-08-07U !2012-08-08V !2012-08-09W !2012-08-10X !2012-08-11Y !2012-08-12Z !2012-08-13[ !2012-08-14\ !2012-08-15] !2012-08-16^ !2012-08-17_ !2012-08-18` !2012-08-19a !2012-08-20b !2012-08-21c !2012-08-22d !2012-08-23e !2012-08-24f !2012-08-25g !2012-08-26h !2012-08-27i !2012-08-28j 4%6GXiz$5FWhy#4EVgx{ !2012-10-10 !2012-10-24 !2012-10-23 !2012-10-18 !2012-10-17 !2012-10-16 !2012-10-15 !2012-10-14 !2012-10-13 !2012-10-12 !2012-08-30l !2012-08-31m !2012-09-01n !2012-09-02o !2012-09-03p !2012-09-04q !2012-09-05r !2012-09-06s !2012-09-07t !2012-09-08u !2012-09-09v !2012-09-10w !2012-09-11x !2012-09-12y !2012-09-13z !2012-09-14{ !2012-09-15| !2012-09-16} !2012-09-17~ !2012-09-18 !2012-09-19 !2012-09-20 !2012-09-21 !2012-09-22 !2012-09-23 !2012-09-24 !2012-09-25 !2012-09-26 !2012-09-27 !2012-09-28 !2012-09-29 !2012-09-30 !2012-10-01 !2012-10-02 !2012-10-03 !2012-10-04 !2012-10-05 !2012-10-06 !2012-10-07 !2012-10-08 !2012-10-09 !2012-10-10 !2012-10-11 '?.  mediaURL!newSpacing60.0# revInactive# newInactive  revActive  newActive perDay1!leechFails16)suspendLeeches1 sortIndex0pageSize4096e?hexCache{"7714278139299660113": "6b0e9f187f848151", "-3196723299912220334": "d3a2f5187f848152", "7691030065441964367": "6abc07187f84814f", "2342550310125601108": "208269187f848154", "-2642164819234094769": "db5525187f84814f"}D}cssCache.fm6abc07187f84814f {font-family:"Arial";font-size:25px;color:#000000;white-space:pre-wrap;} .fm6b0e9f187f848151 {font-family:"Arial";font-size:25px;color:#000000;white-space:pre-wrap;} #cmqd3a2f5187f848152 {text-align:center;} #cmq208269187f848154 {text-align:center;} #cmad3a2f5187f848152 {text-align:center;} #cma208269187f848154 {text-align:center;} .cmbd3a2f5187f848152 {background:#ffffff;} .cmb208269187f848154 {background:#ffffff;} !revSpacing0.1 [?- )mobileScalePad1.21' mediaLocation)latexPost\end{document}"9latexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \begin{document} *E`* 3##eviewacqCardsNewacqCardsNewCREATE VIEW acqCardsNew as select * from cards where type = 2 and isDue = 1 order by priority desc, due desc2##[viewacqCardsOldacqCardsOldCREATE VIEW acqCardsOld as select * from cards where type = 2 and isDue = 1 order by priority desc, due /##eviewrevCardsNewrevCardsNewCREATE VIEW revCardsNew as select * from cards where type = 1 and isDue = 1 order by priority desc, interval0##[viewrevCardsDuerevCardsDueCREATE VIEW revCardsDue as select * from cards where type = 1 and isDue = 1 order by priority desc, due1))yviewrevCardsRandomrevCardsRandomCREATE VIEW revCardsRandom as select * from cards where type = 1 and isDue = 1 order by priority desc, factId, ordinalanki-2.1.0+dfsg~b36/tests/support/media.apkg000066400000000000000000000047151323611211500206670ustar00rootroot00000000000000PKt{5Acollection.anki2ow%d1JmE J-%eYIV vB]jwIfyHkN-\街r PAɥ_}3viJՍ`Mμ}f{C;i\+9nڌ򺢪4MQ5qo}_9L e֭>tY"ݥJL >eYwc2G"0Nv_~0r~*΋| Ի1狢U.U=%.I}J-VzJgQ]>?ʀ  m9GʏXhsӅv5b_qB#6>h݌*YF/dz%7=^?JCKSc5 *,JRu!e> +S]إSxxTYZ#l(t4ԋJ"TͿܺo^{$?\hl u-jż㞿A'DԬeTYܦ2q Z 'VUQr4+TZn0}P쌨,O*4 g4\?4w.gFV%f^["Dřم|a8'NڢBtjv-j6GC63uJv%-ȡi4ݤu2ˢw6 B\ ̻Bt!ªؾh p}+2B ^ud~-k[W#>i{e1t]֖ }6fqo7K,ڲ*Ioʪ4d;33mY[xleedkTv=Y] oX+U(>U^SԻ4hf!Ը˦l[EEҝ:*ͦt-K;SQlqlr]h֊ ( bENQ?[27srhtpxitleSnr(zIj:ҳjwҪGZ¥!ۻ"M9rA7_n2&+O-{JIÇ,c1u5J:0=S-wg/qlL3鞜Ǎte$ȟeE3.>؏{W=rʫ΀ܷp&lLv,Y2 hHy YUTHw1alp_Dh ZxPڥ0]^M˵(;D==b7kR\[eLшi+J^p;XMm+I^](d(׭UŽ"gd-w=oY-IqjFLw\+l0;`\1w-G ].I#kAm 38ʈټvUm«B.0^Rv>igrOK'?yG_TLɟ$ҙoUմ^{ozf%Ǚ:dv<P R+<ӗp:jz -Ɉ\x}+_yU[ G7 ]8O 8+??p ~B cd'?WǾVa49VBpn &_<ԂQ? ]8W%eLwPKk{5ANG0KLJPKt{5A"cumediaV2PRPJ+O,SPKt{5Acollection.anki2PKk{5ANG0PKt{5A"cumediaPK anki-2.1.0+dfsg~b36/tests/support/mnemo.db000066400000000000000000003400001323611211500203540ustar00rootroot00000000000000SQLite format 3@  - M 9 Wnp;i-Ic/'indexi_tags_for_card_2tags_for_cardCREATE INDEX i_tags_for_card_2 on tags_for_card (_tag_id)`+'}indexi_tags_for_cardtags_for_cardCREATE INDEX i_tags_for_card on tags_for_card (_card_id)6Mindexi_tagstagsCREATE INDEX i_tags on tags (id)Hiindexi_cards_2cardsCREATE INDEX i_cards_2 on cards (fact_view_id):Qindexi_cardscardsCREATE INDEX i_cards on cards (id)`+'}indexi_data_for_factdata_for_factCREATE INDEX i_data_for_fact on data_for_fact (_fact_id):Qindexi_factsfactsCREATE INDEX i_facts on facts (id)1!!-tablecard_typescard_typesCREATE TABLE card_types( id text primary key, name text, fact_keys_and_names text, unique_fact_keys text, required_fact_keys text, fact_view_ids text, keyboard_shortcuts text, extra_data text default "" )3G!indexsqlite_autoindex_card_types_1card_types^!!tablefact_viewsfact_viewsCREATE TABLE fact_views( id text primary key, name text, q_fact_keys text, a_fact_keys text, q_fact_key_decorators text, a_fact_key_decorators text, a_on_top_of_q boolean default 0, type_answer boolean default 0, extra_data text default "" )3G!indexsqlite_autoindex_fact_views_1fact_viewsf +tablemediamedia CREATE TABLE media( filename text primary key, _hash text )) =indexsqlite_autoindex_media_1media %%Atablepartnershipspartnerships CREATE TABLE partnerships( partner text unique, _last_log_id integer )7 K%indexsqlite_autoindex_partnerships_1partnerships P ++Ytablesqlite_sequencesqlite_sequence CREATE TABLE sqlite_sequence(name,seq)tOtableloglog CREATE TABLE log( _id integer primary key autoincrement, /* Should never be reused. */ event_type integer, timestamp integer, object_id text, grade integer, easiness real, acq_reps integer, ret_reps integer, lapses integer, acq_reps_since_lapse integer, ret_reps_since_lapse integer, scheduled_interval integer, actual_interval integer, thinking_time integer, next_rep integer, /* Storing scheduler_data allows syncing the cramming scheduler */ scheduler_data integer )v--tableglobal_variablesglobal_variablesCREATE TABLE global_variables( key text, value text )tablecriteriacriteriaCREATE TABLE criteria( _id integer primary key, id text, name text, type text, data text )z''3tabletags_for_cardtags_for_cardCREATE TABLE tags_for_card( _card_id integer, _tag_id integer ) tabletagstagsCREATE TABLE tags( _id integer primary key, id text, name text, extra_data text default "" )tablecardscardsCREATE TABLE cards( _id integer primary key, id text, card_type_id text, _fact_id integer, fact_view_id text, question text, answer text, tags text, grade integer, next_rep integer, last_rep integer, easiness real, acq_reps integer, ret_reps integer, lapses integer, acq_reps_since_lapse integer, ret_reps_since_lapse integer, creation_time integer, modification_time integer, extra_data text default "", scheduler_data integer default 0, active boolean default 1 )''Mtabledata_for_factdata_for_factCREATE TABLE data_for_fact( _fact_id integer, key text, value text )itablefactsfactsCREATE TABLE facts( _id integer primary key, id text, extra_data text default "" ) tt9 Cswj5BiZZzRTlYpvZP4uM09 mxBDrkoww4OnB1QdewLXWj9 nxzAHXn81GIlCqkNw2PYXL9 ULrFxcsEmw8C7bLT5F5TIn9 Ny2IIajDQK3gEXNqGQWELt MyiXM fnew ffront-tag bback-tag'p_1pronunciation!fexpression nnotesm_1meaning%ffront-double#bback-double ffront bback  8T c b9 3 g0EVsfhQPYEA8hBiaR36D211.1newa longer tag, tag 1@ONONv93 Q1J34dopRCoazGpvlVta3x11.1front-tagback-taga longer tag, tag 1OVON@ONONw9I  lliWoHrGatAxS6jsgvOyNf33.2meaningexpression pronunciation notesOUSON@ONONw9!C  TDfMFmuwvRYJXDTtIUiLTx33.1expressionpronunciation meaning notesOUSON@ONONi9#%  xZDI66eVAl4RDnOIH6QWnx22.2back-doublefront-doubleOTON@ONONi9%#  P85YZagJouqjp8P5rOILjF22.1front-doubleback-doubleOTON@ONON[9  WvRqVVCkCHvtBX86ls0JDJ11.1frontbackOQ_ON@ONON '9% 7XWEvaROaU3ou3pmFkMQINa longer tag 9 rSmRHxVRPpbvUUrw16CGAGtag 1%% __UNTAGGED____UNTAGGED__   E##Q__DEFAULT____DEFAULT__default(set([]), set([1, 2, 3]), set([])) /versionMnemosyne SQL 1.0  \.` | N h : V ( ONON,9ONg0EVsfhQPYEA8hBiaR36D2,9ONCswj5BiZZzRTlYpvZP4uM0B9 ONWvRqVVCkCHvtBX86ls0JDJ@OQ_B9 ONQ1J34dopRCoazGpvlVta3x@OV,9ONQ1J34dopRCoazGpvlVta3x,9ONmxBDrkoww4OnB1QdewLXWj!#ON__DEFAULT__,9 ON7XWEvaROaU3ou3pmFkMQIN!#ON__DEFAULT__,9 ONrSmRHxVRPpbvUUrw16CGAGB9 ONlliWoHrGatAxS6jsgvOyNf@OUS,9ONlliWoHrGatAxS6jsgvOyNfB 9 ONTDfMFmuwvRYJXDTtIUiLTx@OUS, 9ONTDfMFmuwvRYJXDTtIUiLTx, 9ONnxzAHXn81GIlCqkNw2PYXLB 9 ONxZDI66eVAl4RDnOIH6QWnx@OT, 9ONxZDI66eVAl4RDnOIH6QWnxB9 ONP85YZagJouqjp8P5rOILjF@OT,9ONP85YZagJouqjp8P5rOILjF,9ONULrFxcsEmw8C7bLT5F5TIn,9ONWvRqVVCkCHvtBX86ls0JDJ,9ONNy2IIajDQK3gEXNqGQWELtON#'ONSM2 Mnemosyne4IONMnemosyne beta-11 posix darwin log  log.txt  log.txt       yy9nxzAHXn81GIlCqkNw2PYXL9mxBDrkoww4OnB1QdewLXWj9ULrFxcsEmw8C7bLT5F5TIn9Ny2IIajDQK3gEXNqGQWELt9Cswj5BiZZzRTlYpvZP4uM0     Cy^C9xZDI66eVAl4RDnOIH6QWnx9lliWoHrGatAxS6jsgvOyNf9g0EVsfhQPYEA8hBiaR36D29WvRqVVCkCHvtBX86ls0JDJ9TDfMFmuwvRYJXDTtIUiLTx9Q1J34dopRCoazGpvlVta3x9P85YZagJouqjp8P5rOILjF 3.23.12.22.11.11.11.1 9rSmRHxVRPpbvUUrw16CGAG%__UNTAGGED__97XWEvaROaU3ou3pmFkMQIN      ypg^ULC:1( ONONONONONONONONONONONONONONON ON ON ON ON ONONONONONONONON J!L`y B d % Y ,hLJM+kindexi_log_object_idlogCREATE INDEX i_log_object_id on log (object_id)itablefactsfactsCREATE TABLE facts( _id integer primary key, id text, extra_data text default "" )''Mtabledata_for_factdata_for_factCREATE TABLE data_for_fact( _fact_id integer, key text, value text )tablecardscardsCREATE TABLE cards( _id integer primary key, id text, card_type_id text, _fact_id integer, fact_view_id text, question text, answer text, tags text, grade integer, next_rep integer, last_rep integer, easiness real, acq_reps integer, ret_reps integer, lapses integer, acq_reps_since_lapse integer, ret_reps_since_lapse integer, creation_time integer, modification_time integer, extra_data text default "", scheduler_data integer default 0, active boolean default 1 ) tabletagstagsCREATE TABLE tags( _id integer primary key, id text, name text, extra_data text default "" )z''3tabletags_for_cardtags_for_cardCREATE TABLE tags_for_card( _card_id integer, _tag_id integer )tablecriteriacriteriaCREATE TABLE criteria( _id integer primary key, id text, name text, type text, data text )v--tableglobal_variablesglobal_variablesCREATE TABLE global_variables( key text, value text )tOtableloglog CREATE TABLE log( _id integer primary key autoincrement, /* Should never be reused. */ event_type integer, timestamp integer, object_id text, grade integer, easiness real, acq_reps integer, ret_reps integer, lapses integer, acq_reps_since_lapse integer, ret_reps_since_lapse integer, scheduled_interval integer, actual_interval integer, thinking_time integer, next_rep integer, /* Storing scheduler_data allows syncing the cramming scheduler */ scheduler_data integer )P ++Ytablesqlite_sequencesqlite_sequence CREATE TABLE sqlite_sequence(name,seq) %%Atablepartnershipspartnerships CREATE TABLE partnerships( partner text unique, _last_log_id integer )7 K%indexsqlite_autoindex_partnerships_1partnerships f +tablemediamedia CREATE TABLE media( filename text primary key, _hash text )) =indexsqlite_autoindex_media_1media^!!tablefact_viewsfact_viewsCREATE TABLE fact_views( id text primary key, name text, q_fact_keys text, a_fact_keys text, q_fact_key_decorators text, a_fact_key_decorators text, a_on_top_of_q boolean default 0, type_answer boolean default 0, extra_data text default "" )3G!indexsqlite_autoindex_fact_views_1fact_views1!!-tablecard_typescard_typesCREATE TABLE card_types( id text primary key, name text, fact_keys_and_names text, unique_fact_keys text, required_fact_keys text, fact_view_ids text, keyboard_shortcuts text, extra_data text default "" )3G!indexsqlite_autoindex_card_types_1card_types:Qindexi_factsfactsCREATE INDEX i_facts on facts (id)`+'}indexi_data_for_factdata_for_factCREATE INDEX i_data_for_fact on data_for_fact (_fact_id):Qindexi_cardscardsCREATE INDEX i_cards on cards (id)Hiindexi_cards_2cardsCREATE INDEX i_cards_2 on cards (fact_view_id)6Mindexi_tagstagsCREATE INDEX i_tags on tags (id)`+'}indexi_tags_for_cardtags_for_cardCREATE INDEX i_tags_for_card on tags_for_card (_card_id)c/'indexi_tags_for_card_2tags_for_cardCREATE INDEX i_tags_for_card_2 on tags_for_card (_tag_id)M+kindexi_log_timestamplogCREATE INDEX i_log_timestamp on log (timestamp)  }bG,xhX=" 9xZDI66eVAl4RDnOIH6QWnx 9xZDI66eVAl4RDnOIH6QWnx 9rSmRHxVRPpbvUUrw16CGAG9nxzAHXn81GIlCqkNw2PYXL 9mxBDrkoww4OnB1QdewLXWj9lliWoHrGatAxS6jsgvOyNf9lliWoHrGatAxS6jsgvOyNf9g0EVsfhQPYEA8hBiaR36D2#__DEFAULT__#__DEFAULT__9WvRqVVCkCHvtBX86ls0JDJ9WvRqVVCkCHvtBX86ls0JDJ9ULrFxcsEmw8C7bLT5F5TIn9TDfMFmuwvRYJXDTtIUiLTx 9TDfMFmuwvRYJXDTtIUiLTx 'SM2 Mnemosyne9Q1J34dopRCoazGpvlVta3x9Q1J34dopRCoazGpvlVta3x9P85YZagJouqjp8P5rOILjF9P85YZagJouqjp8P5rOILjF9Ny2IIajDQK3gEXNqGQWELt"IMnemosyne beta-11 posix darwin9Cswj5BiZZzRTlYpvZP4uM097XWEvaROaU3ou3pmFkMQINanki-2.1.0+dfsg~b36/tests/support/supermemo1.xml000066400000000000000000000031121323611211500215510ustar00rootroot00000000000000 3572 1 Topic 40326 aoeu Topic 40327 1-400 Topic 40615 aoeu Topic 10247 Item aoeu aoeu 1844 7 0 19.09.2002 5,701 2,452 Topic aoeu 0 0 0 04.08.2000 3,000 0,000 anki-2.1.0+dfsg~b36/tests/support/suspended12.anki000066400000000000000000001740001323611211500217400ustar00rootroot00000000000000SQLite format 3@ >}N - >9M'indexsqlite_autoindex_reviewHistory_1reviewHistoryJktablesourcessourcesCREATE TABLE sources ( id INTEGER NOT NULL, name TEXT NOT NULL, created FLOAT NOT NULL, "lastSync" FLOAT NOT NULL, "syncPeriod" INTEGER NOT NULL, PRIMARY KEY (id) )`tablemediamediaCREATE TABLE media ( id INTEGER NOT NULL, filename TEXT NOT NULL, size INTEGER NOT NULL, created FLOAT NOT NULL, "originalPath" TEXT NOT NULL, de6.,'       uBS`tablemediamediaCREATE TABLE media ( id INTEGER `tablemediamediaCREATE TABLE media ( id INTEGER NOT NULL, filename TEXT NOT NULL, size INTEGER NOT NULL, created FLOAT NOT NULL, "originalPath" TEXT NOT NULL, description TEXT NOT NULL, PRIMARY KEY (id) )JktablesourcessourcesCREATE TABLE sources ( id INTEGER NOT NULL, name TEXT NOT NULL, created FLOAT NOT NULL, "lastSync" FLOAT NOT NULL, "syncPeriod" INTEGER NOT NULL, PRIMARY KEY (id) );''5tablereviewHistoryreviewHistoryCREATE TABLE "reviewHistory" ( "cardId" INTEGER NOT NULL, time FLOAT NOT NULL, "lastInterval" FLOAT NOT NULL, "nextInterval" FLOAT NOT NULL, ease INTEGER NOT NULL, delay FLOAT NOT NULL, "lastFactor" FLOAT NOT NULL, "nextFactor" FLOAT NOT NULL, reps FLOAT NOT NULL, "thinkingTime" FLOAT NOT NULL, "yesCount" FLOAT NOT NULL, "noCount" FLOAT NOT NULL, PRIMARY KEY ("cardId", time) ) J!2010-01-03@?1Q"A=pw8# YI,U 9M'indexsqlite_autoindex_reviewHistory_1reviewHistory{tablestatsstatsCREATE TABLE stats ( id INTEGER NOT NULL, type INTEGER NOT NULL, day DATE NOT NULL, reps INTEGER NOT NULL, "averageTime" FLOAT NOT NULL, "reviewTime" FLOAT NOT NULL, "distractedTime" FLOAT NOT NULL, "distractedReps" INTEGER NOT NULL, "newEase0" INTEGER NOT NULL, "newEase1" INTEGER NOT NULL, "newEase2" INTEGER NOT NULL, "newEase3" INTEGER NOT NULL, "newEase4" INTEGER NOT NULL, "youngEase0" INTEGER NOT NULL, "youngEase1" INTEGER NOT NULL, "youngEase2" INTEGER NOT NULL, "youngEase3" INTEGER NOT NULL, "youngEase4" INTEGER NOT NULL, "matureEase0" INTEGER NOT NULL, "matureEase1" INTEGER NOT NULL, "matureEase2" INTEGER NOT NULL, "matureEase3" INTEGER NOT NULL, "matureEase4" INTEGER NOT NULL, PRIMARY KEY (id) ) ^^Cܓz ++ A#_[A?&~Mandarin PhraseMandarin Phrase?Chinese{{Meaning}}{{Chinese}}
{{Pinyin}}
* {{#Measure word}}
{{Measure word}}{{/Measure word}}
{{#Comments}}
{{Comments}}
{{/Comments}}Arial#000000Arial#000000Arial#bdceba;Ұ- #1 p%/zMeaning->Chinese{{Meaning}}{{Chinese}}
{{Pinyin}}
{{#Hanzi}}
{{Hanzi}}
{{/Hanzi}}
{{#Comments}}
{{Comments}}{{/Comments}}
{{#Tags}}
({{Tags}}){{/Tags}}Arial#000000Arial#000000Arial#bdcebaT NULL, "modelId" INTEGER NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, active BOOLEAN NOT NULL, qformat TEXT NOT NULL, aformat TEXT NOT NULL, lformat TEXT, qedformat TEXT, aedformat TEXT, "questionInAnswer" BOOLEAN NOT NULL, "questionFontFamily" TEXT, "questionFontSize" INTEGER, "questionFontColour" VARCHAR(7), "questionAlign" INTEGER, "answerFontFamily" TEXT, "answerFontSize" INTEGER, "answerFontColour" VARCHAR(7), "answerAlign" INTEGER, "lastFontFamily" TEXT, "lastFontSize" INTEGER, "lastFontColour" VARCHAR(7), "editQuestionFontFamily" TEXT, "editQuestionFontSize" INTEGER, "editAnswerFontFamily" TEXT, "editAnswerFontSize" INTEGER, "allowEmptyAnswer" BOOLEAN NOT NULL, "typeAnswer" TEXT NOT NULL, PRIMARY KEY (id), CHECK ("allowEmptyAnswer" IN (0, 1)), CHECK ("questionInAnswer" IN (0, 1)), CHECK (active IN (0, 1)), FOREIGN KEY("modelId") REFERENCES models (id) ) ]'7kA?l{F ~V ##stablefieldModelsfieldModelsCREATE TABLE "fieldModels" ( id INTEGER NOT NULL, ordinal INTEGER NOT4 '''tablemodelsDeletedmodelsDeletedCREATE TABLE "modelsDeleted" ( "modelId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("modelId") REFERENCES models (id) )V ##stablefieldModelsfieldModelsCREATE TABLE "fieldModels" ( id INTEGER NOT NULL, ordinal INTEGER NOT NULL, "modelId" INTEGER NOT NULL, name TEXT NOT NULL, description TEXT NOT NULL, features TEXT NOT NULL, required BOOLEAN NOT NULL, "unique" BOOLEAN NOT NULL, numeric BOOLEAN NOT NULL, "quizFontFamily" TEXT, "quizFontSize" INTEGER, "quizFontColour" VARCHAR(7), "editFontFamily" TEXT, "editFontSize" INTEGER, PRIMARY KEY (id), CHECK (required IN (0, 1)), CHECK ("unique" IN (0, 1)), CHECK (numeric IN (0, 1)), FOREIGN KEY("modelId") REFERENCES models (id) ) DK6ă. p%/zCommentsArial#000000preserve7Ų p%/zChineseHeiti SC2#000000preserve:ҵN% =%.+$Measure wordArial#000000preserve5 p%/zMeaningArial#000000preserve3㥲  p%/zPinyinArial#000000preserve6֠ =%.+$CommentsArial#000000preserve3f  =%.+$PinyinArial#000000preserve6ьܫ$ )=%.+$ChineseHeiti SC LightK#00000013 p%/zHanziArial#000000preserve5։ܫ% =%.+$MeaningArial#000000preserve Nݕ %Op%/zA-e˼A?&{gdue_date_bug冯 Féng​ surname Feng 馮冯 píng​ to gallop / to assist / to attack / to wade / great / old variant of 憑|凭小 xiǎo​ small / tiny / few / young刚 gāng​ hard / firm / strong / just / barely / exactly Féng Xiǎogāng 冯小刚 A World Without Thieves ja 不见不散 & +tablefactsfactsCREATE TABLE facts ( id INTEGER NOT NULL, "modelId" INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, "spaceUntil" TEXT NOT NULL, "lastCardId" INTEGER, PRIMARY KEY (id), FOREIGN KEY("modelId") REFERENCES models (id) ).%%tablefactsDeletedfactsDeletedCREATE TABLE "factsDeleted" ( "factId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("factId") REFERENCES facts (id) )5ItablecardscardsCREATE TABLE cards ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "cardModelId" INTEGER NOT NULL, created FLOAT NOT NULL, modified FLOAT NOT NULL, tags TEXT NOT NULL, ordinal INTEGER NOT NULL, question TEXT NOT NULL, answer TEXT NOT NULL, priority INTEGER NOT NULL,   Xɭݕ) -[  S +WG%/A-e˼A?&udA World Without Thieves ja 不见不散冯小刚
Féng Xiǎogāng

冯 Féng​ surname Feng 馮
冯 píng​ to gallop / to assist / to attack / to wade / great / old variant of 憑|凭
小 xiǎo​ small / tiny / few / young
刚 gāng​ hard / firm / strong / just / barely / exactly



(due_date_bug)@,+Yy@" "A@ŞfA*`:??A.b冯 píng​ to gallop / to assist / to attack / to wade / great / old variant of 憑|凭
小 xiǎo​ small / tiny / few / young
刚 gāng​ hard / firm / strong / just / barely / exactly %%`\!8KtablefieldsfieldsCREATE TABLE fields ( id INTEGER NOT NULL, "factId" INTEGER NOT NULL, "fieldModelId" INTEGER NOT NULL, ordinal INTEGER NOT NULL, value TEXT NOT NULL, PRIMARY KEY (id), FOREIGN KEY("fieldModelId") REFERENCES "fieldModels" (id), FOREIGN KEY("factId") REFERENCES facts (id) ).%%tablecardsDeletedcardsDeletedCREATE TABLE "cardsDeleted" ( "cardId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("cardId") REFERENCES cards (id) )0%%#tablemediaDeletedmediaDeletedCREATE TABLE "mediaDeleted" ( "mediaId" INTEGER NOT NULL, "deletedTime" FLOAT NOT NULL, FOREIGN KEY("mediaId") REFERENCES cards (id) ) tabletagstagsCREATE TABLE tags ( id integer not null, tag text not null collate nocase, priority integer not null default 2, primary key(id))!tablecardTagscardTagsCREATE TABLE cardTags ( id integer not null, cardId integer not null, tagId integer not null, src integer not null, primary key(id))   U)D+&LZȗ  0QQ1 3%due_date_bug Phrase-Meaning->Chinese Mandarin %m+Y %m+Y  %m+Y%m+Y RyM0iV8jD {ocR!cardModels2 media0 decks1,%9factsDeletedix_factsDeleted_factId1621 2+CdeckVarssqlite_autoindex_deckVars_118 1 models2;'M!reviewHistorysqlite_autoindex_reviewHistory_161121 42 1"-statsix_stats_typeDay851 426 1$3cardTagsix_cardTags_tagCard4 1 1!1cardTagsix_cardTags_cardId4 4 sources0)%9mediaDeletedix_mediaDeleted_factId1 1,'=modelsDeletedix_modelsDeleted_modelId1 1-fieldsix_fields_factId5 5#9fieldsix_fields_fieldModelId5 1+fieldsix_fields_value5 1 #fieldModels10 /factsix_facts_modified1 1% 7cardsix_cards_typeCombined1 1 1 1" 9cardsix_cards_relativeDelay1 1 /cardsix_cards_modified1 1/cardsix_cards_priority1 1+cardsix_cards_factor1 1 1+cardsix_cards_factId1 1*9#cardsix_cards_intervalDesc21 1 1 1 1 1$-#cardsix_cards_dueAsc21 1 1 1 1 1'cardsix_cards_sort1 1,%9cardsDeletedix_cardsDeleted_cardId1709 2#tagsix_tags_tag8 1 %%rHJEK%%[tablesqlite_stat1sqlite_stat1CREATE TABLE sqlite_stat1(tbl,idx,stat)n7indexix_cards_typeCombinedcards!CREATE INDEX ix_cards_typeCombined on cards (type, combinedDue, factId)d9indexix_cards_relativeDelaycards"CREATE INDEX ix_cards_relativeDelay on cards (relativeDelay)T/qindexix_cards_modifiedcards#CREATE INDEX ix_cards_modified on cards (modified)T/qindexix_facts_modifiedfacts$CREATE INDEX ix_facts_modified on facts (modified)T/qindexix_cards_prioritycards%CREATE INDEX ix_cards_priority on cards (priority)T+uindexix_cards_factorcards&CREATE INDEX ix_cards_factor on cards (type, factor)N+iindexix_cards_factIdcards'CREATE INDEX ix_cards_factId on cards (factId)S-qindexix_stats_typeDaystats(CREATE INDEX ix_stats_typeDay on stats (type, day)R-mindexix_fields_factIdfields)CREATE INDEX ix_fields_factId on fields (factId)e9indexix_fields_fieldModelIdfields*CREATE INDEX ix_fields_fieldModelId on fields (fieldModelId) A@ŞfS +W%m+Y   %m+Y A?&ud%m+Y A?&{gS +W  %m+Y ?͏%m+Y S +W%m+Y ! 2010-01-03 S +W( ܄S +Wx+WS +WE+WS +W( +WS +WS+W uw..( ܄hV+%/E+Wg%/x+W1+&Y( +W%/S+W "7"冯小刚E+Wzi冯 Féng​ surname Feng 馮
冯 píng​ to gallop / to assist / to attack / to wade / gre=-Féng Xiǎogāng( +W3]A World Without Thieves ja 不见不散x+W  ( ܄ c>oHO +iindexix_fields_valuefields+CREATE INDEX ix_fields_value on fields (value)a!7indexix_media_originalPathmedia-CREATE INDEX ix_media_oO +iindexix_fields_valuefields+CREATE INDEX ix_fields_value on fields (value)a!7indexix_media_originalPathmedia-CREATE INDEX ix_media_originalPath on media (originalPath)k"9%indexix_cardsDeleted_cardIdcardsDeleted.CREATE INDEX ix_cardsDeleted_cardId on cardsDeleted (cardId)r#=' indexix_modelsDeleted_modelIdmodelsDeleted/CREATE INDEX ix_modelsDeleted_modelId on modelsDeleted (modelId)k$9%indexix_factsDeleted_factIdfactsDeleted0CREATE INDEX ix_factsDeleted_factId on factsDeleted (factId)l%9%indexix_mediaDeleted_factIdmediaDeleted1CREATE INDEX ix_mediaDeleted_factId on mediaDeleted (mediaId)d&3indexix_cardTags_tagCardcardTags2CREATE INDEX ix_cardTags_tagCard on cardTags (tagId, cardId)Z'1uindexix_cardTags_cardIdcardTags3CREATE INDEX ix_cardTags_cardId on cardTags (cardId)     ]'7k    U)D+&   %m+Y%m+Y%m+Y  %m+Y  %m+Y %m+Y %m+Y  %m+Y )@,+YyS +WA@Şf%m+Y )A@ŞfS +WA@Şf%m+Y k3ku /#x)-9indexix_cards_dueAsc2cards5CREATE INDEX ix_cards_dueAsc2 on cards (type, priority desc, due, factId, combinedDue)L*'iindexix_(9Yindexix_cards_intervalDesc2cards4CREATE INDEX ix_cards_intervalDesc2 on cards (type, priority desc, interval desc, factId, combinedDue)x)-9indexix_cards_dueAsc2cards5CREATE INDEX ix_cards_dueAsc2 on cards (type, priority desc, due, factId, combinedDue)L*'iindexix_cards_sortcards7CREATE INDEX ix_cards_sort on cards (modified)[+/indexix_media_filenamemedia8CREATE UNIQUE INDEX ix_media_filename on media (filename)H,#gindexix_tags_tagtags9CREATE UNIQUE INDEX ix_tags_tag on tags (tag)-##gviewfailedCardsfailedCardsCREATE VIEW failedCards as select * from cards where type = 0 and isDue = 1 order by type, isDue, combinedDue.##oviewrevCardsOldrevCardsOldCREATE VIEW revCardsOld as select * from cards where type = 1 and isDue = 1 order by priority desc, interval desc A?&ud%m+Y  QQ Phrase-Meaning->Chinese  Mandarin%due_date_bug310 re-wrap;} .fmdd446725f42e2b24 {font-family:"Heiti SC Light";font-size:75px;color:#000000;white-space:pre-wrap;} .fmfa6fb126a953ce66 {font-family:"Arial";font-size:20px;color:#000000;white-space:pre-wrap;} .fm2ab9eb25f42ed6a0 {font-family:"Arial";font-size:20px;color:#000000;white-space:pre-wrap;} .fm318d2b26a9591407 {font-family:"Arial";font-size:20px;color:#000000;white-space:pre-wrap;} .fm67a8a725f42fe085 {font-family:"Arial";font-size:20px;color:#000000;white-space:pre-wrap;} .fm68153d26ad8ac64e {font-family:"Arial";font-size:20px;color:#000000;white-space:pre-wrap;} .fm68562b25f42fe083 {font-family:"Heiti SC";font-size:50px;color:#000000;white-space:pre-wrap;} .fm75df772e1101d92e {font-family:"Arial";font-size:20px;color:#000000;white-space:pre-wrap;} #cmqa4c34725f42fe097 {text-align:center;} #cmq63c90f25f42e2b26 {text-align:center;} #cmaa4c34725f42fe097 {text-align:center;} #cma63c90f25f42e2b26 {text-align:center;} .cmba4c34725f42fe097 {background:#bdceba;} .cmb63c90f25f42e2b26 {background:#bdceba;} "obSD3".# revInactive-# newInactive , revActive + newActive *perDay0)#mobileScale0.70k(KhexCache{"3078750368527472288": "2ab9eb25f42ed6a0", "7518244069952184451": "68562b25f42fe083", "-2502762080203035868": "dd446725f42e2b24", "-6532384235071853787": "a5584f25f42e2b25", "-400907062204969370": "fa6fb126a953ce66", "-3619232575325740921": "cdc5e725f42fe087", "3570557524624610311": "318d2b26a9591407", "7499967990785033806": "68153d26ad8ac64e", "7190294935758580518": "63c90f25f42e2b26", "8493638461981579566": "75df772e1101d92e", "-6574332802694651753": "a4c34725f42fe097", "-2648757433162388700": "db3db925f42e2b24", "1400787872401842298": "13709925f42fe07a", "7469403763446374533": "67a8a725f42fe085"}8'ecssCache.fma5584f25f42e2b25 {font-family:"Arial";font-size:20px;color:#000000;white-space:pre-wrap;} .fmcdc5e725f42fe087 {font-family:"Arial";font-size:20px;color:#000000;white-space:p: &sortIndex3%pageSize4096$!leechFails16#)suspendLeeches1 84!revSpacing0.13' mediaLocation2)latexPost\end{document}"19latexPre\documentclass[12pt]{article} \special{papersize=3in,5in} \usepackage[utf8]{inputenc} \usepackage{amssymb,amsmath} \pagestyle{empty} \begin{document} 0 mediaURL/!newSpacing60.0at / old variant of 憑|凭
小 xiǎo​ small / tiny / few / young
刚 gāng​ hard / firm / strong / just / barely / exactlyS+W *E`* 3##eviewacqCardsNewacqCardsNewCREATE VIEW acqCardsNew as select * from cards where type = 2 and isDue = 1 order by priority desc, due desc2##[viewacqCardsOldacqCardsOldCREATE VIEW acqCardsOld as select * from cards where type = 2 and isDue = 1 order by priority desc, due /##eviewrevCardsNewrevCardsNewCREATE VIEW revCardsNew as select * from cards where type = 1 and isDue = 1 order by priority desc, interval0##[viewrevCardsDuerevCardsDueCREATE VIEW revCardsDue as select * from cards where type = 1 and isDue = 1 order by priority desc, due1))yviewrevCardsRandomrevCardsRandomCREATE VIEW revCardsRandom as select * from cards where type = 1 and isDue = 1 order by priority desc, factId, ordinalanki-2.1.0+dfsg~b36/tests/support/text-2fields.txt000066400000000000000000000002511323611211500220060ustar00rootroot00000000000000# this is a test file 食べる to eat 飲む to drink テスト test to eat 食べる 飲む to drink 多すぎる too many fields not, enough, fields 遊ぶ to play anki-2.1.0+dfsg~b36/tests/support/text-tags.txt000066400000000000000000000000371323611211500214160ustar00rootroot00000000000000foo bar baz,qux foo2 bar2 baz2 anki-2.1.0+dfsg~b36/tests/support/text-update.txt000066400000000000000000000000041323611211500217340ustar00rootroot000000000000001 x anki-2.1.0+dfsg~b36/tests/support/update1.apkg000066400000000000000000000061011323611211500211420ustar00rootroot00000000000000PKeC^;@e collection.anki2o(ru54FrdKJFeH c;]%Q 4 C/ Pȥ@s^s!5}o1a@Q3>f7\ͦzLUi#3^3M0.ӽ<?ƀ1.Ca~1?cf=鏦D,\V!x' G)kͻ[ƍ76˪!JsX«ş>9sWfSjtUNJ:E L6٬2>|}+'V.\{ _^O+|wP8z7\^^lLۻZct957l+o  k毻|P(>rڬwqQ[~T\7Yr=*ďpu-|xmu-8CEMSj ׃r f$Pd" g˿&v{.H~p/9szz,zoK оUVTVVT'>l?Rls ׾'ij1؊WJ3I{ڵrf>}~g?m    Ǐ}'E#0+zWxOAAAęAAAq3"   ,17   ⌒gx?AAAAm׀AAAAg S|s>3EAAA|\\OAAAAAAqƇ}l_g    3E!7}Ѹ`«nM+;:יx* fvŒYuxia^SXǷC_:P'BEJ }d[2"suxDLxT 1}F,G4R)R0#]UqĎo=aw xoZyѪ^[YVW*+kkÎ"bqMMRy講,tx9#nV!VeĄے y~n6 m,v\š &|=о_#^Bk\iv}x(YߘL"[;PZbS8C\!q Cz` ,*& AHn'hCLV VP6CyAȓ0HC,J1 A͵(6׫,R#nj=veV\ZcEQkԎn!RcJpR;1t0ocz~6w㢥7tn&k `_)w,vHJ-a=Yqʔ*N&&?@[ ت|gZ⑝i y Xw9^h-8wn3W'*qgXZ=\?&MufpK*PT^U[=҇K"+UܾGGJY?davv9qut餞mI|`Is. AAAA/)ko?\:[^es@5^[vn kV(~()Z#A%r[7>u}ُQ(H 0ATOuhQ:f25l4WךՕs݈]+ʉKl c=_:'Taa/S^&e;6P EUjߪC02[6j +VfZ]duR}d8ǥR!Y!<3H] %vi_XVn2 F۶q/^B R'd7YF$]h{?jU>Kƒt]QcӁWxYD``,M_jH!cVUN*ij'?рFLFGd0HE/3!ng2r4V>e@(gf`D-n]au(})URWU`Y.aA*T-챞X7: ;^Ťioۑxp==l\gؿN^|t\;zsss8_Md qvvItI#< Ar=T 3F2Vmz6Q٣6Z2v?U[KԠbxOH2?QYsSh`;l.'EHaj7ھM$ʈ=ՃNF< x89{rxtPKhfCCmediaPKhfCm collection.anki2PKhfCC mediaPKq anki-2.1.0+dfsg~b36/tests/test_cards.py000066400000000000000000000055721323611211500177370ustar00rootroot00000000000000# coding: utf-8 from tests.shared import getEmptyCol def test_previewCards(): deck = getEmptyCol() f = deck.newNote() f['Front'] = '1' f['Back'] = '2' # non-empty and active cards = deck.previewCards(f, 0) assert len(cards) == 1 assert cards[0].ord == 0 # all templates cards = deck.previewCards(f, 2) assert len(cards) == 1 # add the note, and test existing preview deck.addNote(f) cards = deck.previewCards(f, 1) assert len(cards) == 1 assert cards[0].ord == 0 # make sure we haven't accidentally added cards to the db assert deck.cardCount() == 1 def test_delete(): deck = getEmptyCol() f = deck.newNote() f['Front'] = '1' f['Back'] = '2' deck.addNote(f) cid = f.cards()[0].id deck.reset() deck.sched.answerCard(deck.sched.getCard(), 2) deck.remCards([cid]) assert deck.cardCount() == 0 assert deck.noteCount() == 0 assert deck.db.scalar("select count() from notes") == 0 assert deck.db.scalar("select count() from cards") == 0 assert deck.db.scalar("select count() from graves") == 2 def test_misc(): d = getEmptyCol() f = d.newNote() f['Front'] = '1' f['Back'] = '2' d.addNote(f) c = f.cards()[0] id = d.models.current()['id'] assert c.template()['ord'] == 0 def test_genrem(): d = getEmptyCol() f = d.newNote() f['Front'] = '1' f['Back'] = '' d.addNote(f) assert len(f.cards()) == 1 m = d.models.current() mm = d.models # adding a new template should automatically create cards t = mm.newTemplate("rev") t['qfmt'] = '{{Front}}' t['afmt'] = "" mm.addTemplate(m, t) mm.save(m, templates=True) assert len(f.cards()) == 2 # if the template is changed to remove cards, they'll be removed t['qfmt'] = "{{Back}}" mm.save(m, templates=True) d.remCards(d.emptyCids()) assert len(f.cards()) == 1 # if we add to the note, a card should be automatically generated f.load() f['Back'] = "1" f.flush() assert len(f.cards()) == 2 def test_gendeck(): d = getEmptyCol() cloze = d.models.byName("Cloze") d.models.setCurrent(cloze) f = d.newNote() f['Text'] = '{{c1::one}}' d.addNote(f) assert d.cardCount() == 1 assert f.cards()[0].did == 1 # set the model to a new default deck newId = d.decks.id("new") cloze['did'] = newId d.models.save(cloze) # a newly generated card should share the first card's deck f['Text'] += '{{c2::two}}' f.flush() assert f.cards()[1].did == 1 # and same with multiple cards f['Text'] += '{{c3::three}}' f.flush() assert f.cards()[2].did == 1 # if one of the cards is in a different deck, it should revert to the # model default c = f.cards()[1] c.did = newId c.flush() f['Text'] += '{{c4::four}}' f.flush() assert f.cards()[3].did == newId anki-2.1.0+dfsg~b36/tests/test_collection.py000066400000000000000000000073211323611211500207700ustar00rootroot00000000000000# coding: utf-8 import os, tempfile from tests.shared import assertException, getEmptyCol from anki.stdmodels import addBasicModel, models from anki import Collection as aopen newPath = None newMod = None def test_create_open(): global newPath, newMod (fd, path) = tempfile.mkstemp(suffix=".anki2", prefix="test_attachNew") try: os.close(fd) os.unlink(path) except OSError: pass deck = aopen(path) # for open() newPath = deck.path deck.close() newMod = deck.mod del deck # reopen deck = aopen(newPath) assert deck.mod == newMod deck.close() # non-writeable dir assertException(Exception, lambda: aopen("/attachroot.anki2")) # reuse tmp file from before, test non-writeable file os.chmod(newPath, 0) assertException(Exception, lambda: aopen(newPath)) os.chmod(newPath, 0o666) os.unlink(newPath) def test_noteAddDelete(): deck = getEmptyCol() # add a note f = deck.newNote() f['Front'] = "one"; f['Back'] = "two" n = deck.addNote(f) assert n == 1 # test multiple cards - add another template m = deck.models.current(); mm = deck.models t = mm.newTemplate("Reverse") t['qfmt'] = "{{Back}}" t['afmt'] = "{{Front}}" mm.addTemplate(m, t) mm.save(m) # the default save doesn't generate cards assert deck.cardCount() == 1 # but when templates are edited such as in the card layout screen, it # should generate cards on close mm.save(m, templates=True) assert deck.cardCount() == 2 # creating new notes should use both cards f = deck.newNote() f['Front'] = "three"; f['Back'] = "four" n = deck.addNote(f) assert n == 2 assert deck.cardCount() == 4 # check q/a generation c0 = f.cards()[0] assert "three" in c0.q() # it should not be a duplicate assert not f.dupeOrEmpty() # now let's make a duplicate f2 = deck.newNote() f2['Front'] = "one"; f2['Back'] = "" assert f2.dupeOrEmpty() # empty first field should not be permitted either f2['Front'] = " " assert f2.dupeOrEmpty() def test_fieldChecksum(): deck = getEmptyCol() f = deck.newNote() f['Front'] = "new"; f['Back'] = "new2" deck.addNote(f) assert deck.db.scalar( "select csum from notes") == int("c2a6b03f", 16) # changing the val should change the checksum f['Front'] = "newx" f.flush() assert deck.db.scalar( "select csum from notes") == int("302811ae", 16) def test_addDelTags(): deck = getEmptyCol() f = deck.newNote() f['Front'] = "1" deck.addNote(f) f2 = deck.newNote() f2['Front'] = "2" deck.addNote(f2) # adding for a given id deck.tags.bulkAdd([f.id], "foo") f.load(); f2.load() assert "foo" in f.tags assert "foo" not in f2.tags # should be canonified deck.tags.bulkAdd([f.id], "foo aaa") f.load() assert f.tags[0] == "aaa" assert len(f.tags) == 2 def test_timestamps(): deck = getEmptyCol() assert len(deck.models.models) == len(models) for i in range(100): addBasicModel(deck) assert len(deck.models.models) == 100 + len(models) def test_furigana(): deck = getEmptyCol() mm = deck.models m = mm.current() # filter should work m['tmpls'][0]['qfmt'] = '{{kana:Front}}' mm.save(m) n = deck.newNote() n['Front'] = 'foo[abc]' deck.addNote(n) c = n.cards()[0] assert c.q().endswith("abc") # and should avoid sound n['Front'] = 'foo[sound:abc.mp3]' n.flush() assert "sound:" in c.q(reload=True) # it shouldn't throw an error while people are editing m['tmpls'][0]['qfmt'] = '{{kana:}}' mm.save(m) c.q(reload=True) anki-2.1.0+dfsg~b36/tests/test_decks.py000066400000000000000000000117021323611211500177240ustar00rootroot00000000000000# coding: utf-8 from tests.shared import assertException, getEmptyCol def test_basic(): deck = getEmptyCol() # we start with a standard deck assert len(deck.decks.decks) == 1 # it should have an id of 1 assert deck.decks.name(1) # create a new deck parentId = deck.decks.id("new deck") assert parentId assert len(deck.decks.decks) == 2 # should get the same id assert deck.decks.id("new deck") == parentId # we start with the default deck selected assert deck.decks.selected() == 1 assert deck.decks.active() == [1] # we can select a different deck deck.decks.select(parentId) assert deck.decks.selected() == parentId assert deck.decks.active() == [parentId] # let's create a child childId = deck.decks.id("new deck::child") # it should have been added to the active list assert deck.decks.selected() == parentId assert deck.decks.active() == [parentId, childId] # we can select the child individually too deck.decks.select(childId) assert deck.decks.selected() == childId assert deck.decks.active() == [childId] # parents with a different case should be handled correctly deck.decks.id("ONE") m = deck.models.current() m['did'] = deck.decks.id("one::two") deck.models.save(m) n = deck.newNote() n['Front'] = "abc" deck.addNote(n) # this will error if child and parent case don't match deck.sched.deckDueList() def test_remove(): deck = getEmptyCol() # create a new deck, and add a note/card to it g1 = deck.decks.id("g1") f = deck.newNote() f['Front'] = "1" f.model()['did'] = g1 deck.addNote(f) c = f.cards()[0] assert c.did == g1 # by default deleting the deck leaves the cards with an invalid did assert deck.cardCount() == 1 deck.decks.rem(g1) assert deck.cardCount() == 1 c.load() assert c.did == g1 # but if we try to get it, we get the default assert deck.decks.name(c.did) == "[no deck]" # let's create another deck and explicitly set the card to it g2 = deck.decks.id("g2") c.did = g2; c.flush() # this time we'll delete the card/note too deck.decks.rem(g2, cardsToo=True) assert deck.cardCount() == 0 assert deck.noteCount() == 0 def test_rename(): d = getEmptyCol() id = d.decks.id("hello::world") # should be able to rename into a completely different branch, creating # parents as necessary d.decks.rename(d.decks.get(id), "foo::bar") assert "foo" in d.decks.allNames() assert "foo::bar" in d.decks.allNames() assert "hello::world" not in d.decks.allNames() # create another deck id = d.decks.id("tmp") # we can't rename it if it conflicts assertException( Exception, lambda: d.decks.rename(d.decks.get(id), "foo")) # when renaming, the children should be renamed too d.decks.id("one::two::three") id = d.decks.id("one") d.decks.rename(d.decks.get(id), "yo") for n in "yo", "yo::two", "yo::two::three": assert n in d.decks.allNames() def test_renameForDragAndDrop(): d = getEmptyCol() def deckNames(): return [ name for name in sorted(d.decks.allNames()) if name != 'Default' ] languages_did = d.decks.id('Languages') chinese_did = d.decks.id('Chinese') hsk_did = d.decks.id('Chinese::HSK') # Renaming also renames children d.decks.renameForDragAndDrop(chinese_did, languages_did) assert deckNames() == [ 'Languages', 'Languages::Chinese', 'Languages::Chinese::HSK' ] # Dragging a deck onto itself is a no-op d.decks.renameForDragAndDrop(languages_did, languages_did) assert deckNames() == [ 'Languages', 'Languages::Chinese', 'Languages::Chinese::HSK' ] # Dragging a deck onto its parent is a no-op d.decks.renameForDragAndDrop(hsk_did, chinese_did) assert deckNames() == [ 'Languages', 'Languages::Chinese', 'Languages::Chinese::HSK' ] # Dragging a deck onto a descendant is a no-op d.decks.renameForDragAndDrop(languages_did, hsk_did) assert deckNames() == [ 'Languages', 'Languages::Chinese', 'Languages::Chinese::HSK' ] # Can drag a grandchild onto its grandparent. It becomes a child d.decks.renameForDragAndDrop(hsk_did, languages_did) assert deckNames() == [ 'Languages', 'Languages::Chinese', 'Languages::HSK' ] # Can drag a deck onto its sibling d.decks.renameForDragAndDrop(hsk_did, chinese_did) assert deckNames() == [ 'Languages', 'Languages::Chinese', 'Languages::Chinese::HSK' ] # Can drag a deck back to the top level d.decks.renameForDragAndDrop(chinese_did, None) assert deckNames() == [ 'Chinese', 'Chinese::HSK', 'Languages' ] # Dragging a top level deck to the top level is a no-op d.decks.renameForDragAndDrop(chinese_did, None) assert deckNames() == [ 'Chinese', 'Chinese::HSK', 'Languages' ] # '' is a convenient alias for the top level DID d.decks.renameForDragAndDrop(hsk_did, '') assert deckNames() == [ 'Chinese', 'HSK', 'Languages' ] anki-2.1.0+dfsg~b36/tests/test_exporting.py000066400000000000000000000075071323611211500206620ustar00rootroot00000000000000# coding: utf-8 import nose, os, tempfile from anki import Collection as aopen from anki.exporting import * from anki.importing import Anki2Importer from .shared import getEmptyCol deck = None ds = None testDir = os.path.dirname(__file__) def setup1(): global deck deck = getEmptyCol() f = deck.newNote() f['Front'] = "foo"; f['Back'] = "bar"; f.tags = ["tag", "tag2"] deck.addNote(f) # with a different deck f = deck.newNote() f['Front'] = "baz"; f['Back'] = "qux" f.model()['did'] = deck.decks.id("new deck") deck.addNote(f) ########################################################################## @nose.with_setup(setup1) def test_export_anki(): # create a new deck with its own conf to test conf copying did = deck.decks.id("test") dobj = deck.decks.get(did) confId = deck.decks.confId("newconf") conf = deck.decks.getConf(confId) conf['new']['perDay'] = 5 deck.decks.save(conf) deck.decks.setConf(dobj, confId) # export e = AnkiExporter(deck) fd, newname = tempfile.mkstemp(prefix="ankitest", suffix=".anki2") newname = str(newname) os.close(fd) os.unlink(newname) e.exportInto(newname) # exporting should not have changed conf for original deck conf = deck.decks.confForDid(did) assert conf['id'] != 1 # connect to new deck d2 = aopen(newname) assert d2.cardCount() == 2 # as scheduling was reset, should also revert decks to default conf did = d2.decks.id("test", create=False) assert did conf2 = d2.decks.confForDid(did) assert conf2['new']['perDay'] == 20 dobj = d2.decks.get(did) # conf should be 1 assert dobj['conf'] == 1 # try again, limited to a deck fd, newname = tempfile.mkstemp(prefix="ankitest", suffix=".anki2") newname = str(newname) os.close(fd) os.unlink(newname) e.did = 1 e.exportInto(newname) d2 = aopen(newname) assert d2.cardCount() == 1 @nose.with_setup(setup1) def test_export_ankipkg(): # add a test file to the media folder with open(os.path.join(deck.media.dir(), "今日.mp3"), "w") as f: f.write("test") n = deck.newNote() n['Front'] = '[sound:今日.mp3]' deck.addNote(n) e = AnkiPackageExporter(deck) fd, newname = tempfile.mkstemp(prefix="ankitest", suffix=".apkg") newname = str(newname) os.close(fd) os.unlink(newname) e.exportInto(newname) @nose.with_setup(setup1) def test_export_anki_due(): deck = getEmptyCol(schedVer=2) f = deck.newNote() f['Front'] = "foo" deck.addNote(f) deck.crt -= 86400*10 deck.sched.reset() c = deck.sched.getCard() deck.sched.answerCard(c, 3) deck.sched.answerCard(c, 3) # should have ivl of 1, due on day 11 assert c.ivl == 1 assert c.due == 11 assert deck.sched.today == 10 assert c.due - deck.sched.today == 1 # export e = AnkiExporter(deck) e.includeSched = True fd, newname = tempfile.mkstemp(prefix="ankitest", suffix=".anki2") newname = str(newname) os.close(fd) os.unlink(newname) e.exportInto(newname) # importing into a new deck, the due date should be equivalent deck2 = getEmptyCol() imp = Anki2Importer(deck2, newname) imp.run() c = deck2.getCard(c.id) deck2.sched.reset() assert c.due - deck2.sched.today == 1 # @nose.with_setup(setup1) # def test_export_textcard(): # e = TextCardExporter(deck) # f = unicode(tempfile.mkstemp(prefix="ankitest")[1]) # os.unlink(f) # e.exportInto(f) # e.includeTags = True # e.exportInto(f) @nose.with_setup(setup1) def test_export_textnote(): e = TextNoteExporter(deck) fd, f = tempfile.mkstemp(prefix="ankitest") f = str(f) os.close(fd) os.unlink(f) e.exportInto(f) e.includeTags = True e.exportInto(f) def test_exporters(): assert "*.apkg" in str(exporters()) anki-2.1.0+dfsg~b36/tests/test_find.py000066400000000000000000000254021323611211500175550ustar00rootroot00000000000000# coding: utf-8 from nose.tools import assert_raises from anki.find import Finder from tests.shared import getEmptyCol def test_parse(): f = Finder(None) assert f._tokenize("hello world") == ["hello", "world"] assert f._tokenize("hello world") == ["hello", "world"] assert f._tokenize("one -two") == ["one", "-", "two"] assert f._tokenize("one --two") == ["one", "-", "two"] assert f._tokenize("one - two") == ["one", "-", "two"] assert f._tokenize("one or -two") == ["one", "or", "-", "two"] assert f._tokenize("'hello \"world\"'") == ["hello \"world\""] assert f._tokenize('"hello world"') == ["hello world"] assert f._tokenize("one (two or ( three or four))") == [ "one", "(", "two", "or", "(", "three", "or", "four", ")", ")"] assert f._tokenize("embedded'string") == ["embedded'string"] assert f._tokenize("deck:'two words'") == ["deck:two words"] def test_findCards(): deck = getEmptyCol() f = deck.newNote() f['Front'] = 'dog' f['Back'] = 'cat' f.tags.append("monkey animal_1 * %") f1id = f.id deck.addNote(f) firstCardId = f.cards()[0].id f = deck.newNote() f['Front'] = 'goats are fun' f['Back'] = 'sheep' f.tags.append("sheep goat horse animal11") deck.addNote(f) f2id = f.id f = deck.newNote() f['Front'] = 'cat' f['Back'] = 'sheep' deck.addNote(f) catCard = f.cards()[0] m = deck.models.current(); mm = deck.models t = mm.newTemplate("Reverse") t['qfmt'] = "{{Back}}" t['afmt'] = "{{Front}}" mm.addTemplate(m, t) mm.save(m) f = deck.newNote() f['Front'] = 'test' f['Back'] = 'foo bar' deck.addNote(f) latestCardIds = [c.id for c in f.cards()] # tag searches assert len(deck.findCards("tag:*")) == 5 assert len(deck.findCards("tag:\\*")) == 1 assert len(deck.findCards("tag:%")) == 5 assert len(deck.findCards("tag:\\%")) == 1 assert len(deck.findCards("tag:animal_1")) == 2 assert len(deck.findCards("tag:animal\\_1")) == 1 assert not deck.findCards("tag:donkey") assert len(deck.findCards("tag:sheep")) == 1 assert len(deck.findCards("tag:sheep tag:goat")) == 1 assert len(deck.findCards("tag:sheep tag:monkey")) == 0 assert len(deck.findCards("tag:monkey")) == 1 assert len(deck.findCards("tag:sheep -tag:monkey")) == 1 assert len(deck.findCards("-tag:sheep")) == 4 deck.tags.bulkAdd(deck.db.list("select id from notes"), "foo bar") assert (len(deck.findCards("tag:foo")) == len(deck.findCards("tag:bar")) == 5) deck.tags.bulkRem(deck.db.list("select id from notes"), "foo") assert len(deck.findCards("tag:foo")) == 0 assert len(deck.findCards("tag:bar")) == 5 # text searches assert len(deck.findCards("cat")) == 2 assert len(deck.findCards("cat -dog")) == 1 assert len(deck.findCards("cat -dog")) == 1 assert len(deck.findCards("are goats")) == 1 assert len(deck.findCards('"are goats"')) == 0 assert len(deck.findCards('"goats are"')) == 1 # card states c = f.cards()[0] c.queue = c.type = 2 assert deck.findCards("is:review") == [] c.flush() assert deck.findCards("is:review") == [c.id] assert deck.findCards("is:due") == [] c.due = 0; c.queue = 2 c.flush() assert deck.findCards("is:due") == [c.id] assert len(deck.findCards("-is:due")) == 4 c.queue = -1 # ensure this card gets a later mod time c.flush() deck.db.execute("update cards set mod = mod + 1 where id = ?", c.id) assert deck.findCards("is:suspended") == [c.id] # nids assert deck.findCards("nid:54321") == [] assert len(deck.findCards("nid:%d"%f.id)) == 2 assert len(deck.findCards("nid:%d,%d" % (f1id, f2id))) == 2 # templates with assert_raises(Exception): deck.findCards("card:foo") assert len(deck.findCards("'card:card 1'")) == 4 assert len(deck.findCards("card:reverse")) == 1 assert len(deck.findCards("card:1")) == 4 assert len(deck.findCards("card:2")) == 1 # fields assert len(deck.findCards("front:dog")) == 1 assert len(deck.findCards("-front:dog")) == 4 assert len(deck.findCards("front:sheep")) == 0 assert len(deck.findCards("back:sheep")) == 2 assert len(deck.findCards("-back:sheep")) == 3 assert len(deck.findCards("front:do")) == 0 assert len(deck.findCards("front:*")) == 5 # ordering deck.conf['sortType'] = "noteCrt" assert deck.findCards("front:*", order=True)[-1] in latestCardIds assert deck.findCards("", order=True)[-1] in latestCardIds deck.conf['sortType'] = "noteFld" assert deck.findCards("", order=True)[0] == catCard.id assert deck.findCards("", order=True)[-1] in latestCardIds deck.conf['sortType'] = "cardMod" assert deck.findCards("", order=True)[-1] in latestCardIds assert deck.findCards("", order=True)[0] == firstCardId deck.conf['sortBackwards'] = True assert deck.findCards("", order=True)[0] in latestCardIds # model assert len(deck.findCards("note:basic")) == 5 assert len(deck.findCards("-note:basic")) == 0 assert len(deck.findCards("-note:foo")) == 5 # deck assert len(deck.findCards("deck:default")) == 5 assert len(deck.findCards("-deck:default")) == 0 assert len(deck.findCards("-deck:foo")) == 5 assert len(deck.findCards("deck:def*")) == 5 assert len(deck.findCards("deck:*EFAULT")) == 5 with assert_raises(Exception): deck.findCards("deck:*cefault") # full search f = deck.newNote() f['Front'] = 'helloworld' f['Back'] = 'abc' deck.addNote(f) # as it's the sort field, it matches assert len(deck.findCards("helloworld")) == 2 #assert len(deck.findCards("helloworld", full=True)) == 2 # if we put it on the back, it won't (f['Front'], f['Back']) = (f['Back'], f['Front']) f.flush() assert len(deck.findCards("helloworld")) == 0 #assert len(deck.findCards("helloworld", full=True)) == 2 #assert len(deck.findCards("back:helloworld", full=True)) == 2 # searching for an invalid special tag should not error with assert_raises(Exception): len(deck.findCards("is:invalid")) # should be able to limit to parent deck, no children id = deck.db.scalar("select id from cards limit 1") deck.db.execute("update cards set did = ? where id = ?", deck.decks.id("Default::Child"), id) assert len(deck.findCards("deck:default")) == 7 assert len(deck.findCards("deck:default::child")) == 1 assert len(deck.findCards("deck:default -deck:default::*")) == 6 # properties id = deck.db.scalar("select id from cards limit 1") deck.db.execute( "update cards set queue=2, ivl=10, reps=20, due=30, factor=2200 " "where id = ?", id) assert len(deck.findCards("prop:ivl>5")) == 1 assert len(deck.findCards("prop:ivl<5")) > 1 assert len(deck.findCards("prop:ivl>=5")) == 1 assert len(deck.findCards("prop:ivl=9")) == 0 assert len(deck.findCards("prop:ivl=10")) == 1 assert len(deck.findCards("prop:ivl!=10")) > 1 assert len(deck.findCards("prop:due>0")) == 1 # due dates should work deck.sched.today = 15 assert len(deck.findCards("prop:due=14")) == 0 assert len(deck.findCards("prop:due=15")) == 1 assert len(deck.findCards("prop:due=16")) == 0 # including negatives deck.sched.today = 32 assert len(deck.findCards("prop:due=-1")) == 0 assert len(deck.findCards("prop:due=-2")) == 1 # ease factors assert len(deck.findCards("prop:ease=2.3")) == 0 assert len(deck.findCards("prop:ease=2.2")) == 1 assert len(deck.findCards("prop:ease>2")) == 1 assert len(deck.findCards("-prop:ease>2")) > 1 # recently failed assert len(deck.findCards("rated:1:1")) == 0 assert len(deck.findCards("rated:1:2")) == 0 c = deck.sched.getCard() deck.sched.answerCard(c, 2) assert len(deck.findCards("rated:1:1")) == 0 assert len(deck.findCards("rated:1:2")) == 1 c = deck.sched.getCard() deck.sched.answerCard(c, 1) assert len(deck.findCards("rated:1:1")) == 1 assert len(deck.findCards("rated:1:2")) == 1 assert len(deck.findCards("rated:1")) == 2 assert len(deck.findCards("rated:0:2")) == 0 assert len(deck.findCards("rated:2:2")) == 1 # empty field assert len(deck.findCards("front:")) == 0 f = deck.newNote() f['Front'] = '' f['Back'] = 'abc2' assert deck.addNote(f) == 1 assert len(deck.findCards("front:")) == 1 # OR searches and nesting assert len(deck.findCards("tag:monkey or tag:sheep")) == 2 assert len(deck.findCards("(tag:monkey OR tag:sheep)")) == 2 assert len(deck.findCards("-(tag:monkey OR tag:sheep)")) == 6 assert len(deck.findCards("tag:monkey or (tag:sheep sheep)")) == 2 assert len(deck.findCards("tag:monkey or (tag:sheep octopus)")) == 1 # invalid grouping shouldn't error assert len(deck.findCards(")")) == 0 assert len(deck.findCards("(()")) == 0 # added assert len(deck.findCards("added:0")) == 0 deck.db.execute("update cards set id = id - 86400*1000 where id = ?", id) assert len(deck.findCards("added:1")) == deck.cardCount() - 1 assert len(deck.findCards("added:2")) == deck.cardCount() def test_findReplace(): deck = getEmptyCol() f = deck.newNote() f['Front'] = 'foo' f['Back'] = 'bar' deck.addNote(f) f2 = deck.newNote() f2['Front'] = 'baz' f2['Back'] = 'foo' deck.addNote(f2) nids = [f.id, f2.id] # should do nothing assert deck.findReplace(nids, "abc", "123") == 0 # global replace assert deck.findReplace(nids, "foo", "qux") == 2 f.load(); assert f['Front'] == "qux" f2.load(); assert f2['Back'] == "qux" # single field replace assert deck.findReplace(nids, "qux", "foo", field="Front") == 1 f.load(); assert f['Front'] == "foo" f2.load(); assert f2['Back'] == "qux" # regex replace assert deck.findReplace(nids, "B.r", "reg") == 0 f.load(); assert f['Back'] != "reg" assert deck.findReplace(nids, "B.r", "reg", regex=True) == 1 f.load(); assert f['Back'] == "reg" def test_findDupes(): deck = getEmptyCol() f = deck.newNote() f['Front'] = 'foo' f['Back'] = 'bar' deck.addNote(f) f2 = deck.newNote() f2['Front'] = 'baz' f2['Back'] = 'bar' deck.addNote(f2) f3 = deck.newNote() f3['Front'] = 'quux' f3['Back'] = 'bar' deck.addNote(f3) f4 = deck.newNote() f4['Front'] = 'quuux' f4['Back'] = 'nope' deck.addNote(f4) r = deck.findDupes("Back") assert r[0][0] == "bar" assert len(r[0][1]) == 3 # valid search r = deck.findDupes("Back", "bar") assert r[0][0] == "bar" assert len(r[0][1]) == 3 # excludes everything r = deck.findDupes("Back", "invalid") assert not r # front isn't dupe assert deck.findDupes("Front") == [] anki-2.1.0+dfsg~b36/tests/test_flags.py000066400000000000000000000021121323611211500177220ustar00rootroot00000000000000from tests.shared import assertException, getEmptyCol def test_flags(): col = getEmptyCol() n = col.newNote() n['Front'] = "one"; n['Back'] = "two" cnt = col.addNote(n) c = n.cards()[0] # make sure higher bits are preserved origBits = 0b101 << 3 c.flags = origBits c.flush() # no flags to start with assert c.userFlag() == 0 assert len(col.findCards("flag:0")) == 1 assert len(col.findCards("flag:1")) == 0 # set flag 2 col.setUserFlag(2, [c.id]) c.load() assert c.userFlag() == 2 assert c.flags & origBits == origBits assert len(col.findCards("flag:0")) == 0 assert len(col.findCards("flag:2")) == 1 assert len(col.findCards("flag:3")) == 0 # change to 3 col.setUserFlag(3, [c.id]) c.load() assert c.userFlag() == 3 # unset col.setUserFlag(0, [c.id]) c.load() assert c.userFlag() == 0 # should work with Cards method as well c.setUserFlag(2) assert c.userFlag() == 2 c.setUserFlag(3) assert c.userFlag() == 3 c.setUserFlag(0) assert c.userFlag() == 0 anki-2.1.0+dfsg~b36/tests/test_importing.py000066400000000000000000000156531323611211500206540ustar00rootroot00000000000000# coding: utf-8 import os from tests.shared import getUpgradeDeckPath, getEmptyCol from anki.utils import ids2str from anki.importing import Anki2Importer, TextImporter, \ SupermemoXmlImporter, MnemosyneImporter, AnkiPackageImporter testDir = os.path.dirname(__file__) srcNotes=None srcCards=None def test_anki2_mediadupes(): tmp = getEmptyCol() # add a note that references a sound n = tmp.newNote() n['Front'] = "[sound:foo.mp3]" mid = n.model()['id'] tmp.addNote(n) # add that sound to media folder with open(os.path.join(tmp.media.dir(), "foo.mp3"), "w") as f: f.write("foo") tmp.close() # it should be imported correctly into an empty deck empty = getEmptyCol() imp = Anki2Importer(empty, tmp.path) imp.run() assert os.listdir(empty.media.dir()) == ["foo.mp3"] # and importing again will not duplicate, as the file content matches empty.remCards(empty.db.list("select id from cards")) imp = Anki2Importer(empty, tmp.path) imp.run() assert os.listdir(empty.media.dir()) == ["foo.mp3"] n = empty.getNote(empty.db.scalar("select id from notes")) assert "foo.mp3" in n.fields[0] # if the local file content is different, and import should trigger a # rename empty.remCards(empty.db.list("select id from cards")) with open(os.path.join(empty.media.dir(), "foo.mp3"), "w") as f: f.write("bar") imp = Anki2Importer(empty, tmp.path) imp.run() assert sorted(os.listdir(empty.media.dir())) == [ "foo.mp3", "foo_%s.mp3" % mid] n = empty.getNote(empty.db.scalar("select id from notes")) assert "_" in n.fields[0] # if the localized media file already exists, we rewrite the note and # media empty.remCards(empty.db.list("select id from cards")) with open(os.path.join(empty.media.dir(), "foo.mp3"), "w") as f: f.write("bar") imp = Anki2Importer(empty, tmp.path) imp.run() assert sorted(os.listdir(empty.media.dir())) == [ "foo.mp3", "foo_%s.mp3" % mid] assert sorted(os.listdir(empty.media.dir())) == [ "foo.mp3", "foo_%s.mp3" % mid] n = empty.getNote(empty.db.scalar("select id from notes")) assert "_" in n.fields[0] def test_apkg(): tmp = getEmptyCol() apkg = str(os.path.join(testDir, "support/media.apkg")) imp = AnkiPackageImporter(tmp, apkg) assert os.listdir(tmp.media.dir()) == [] imp.run() assert os.listdir(tmp.media.dir()) == ['foo.wav'] # importing again should be idempotent in terms of media tmp.remCards(tmp.db.list("select id from cards")) imp = AnkiPackageImporter(tmp, apkg) imp.run() assert os.listdir(tmp.media.dir()) == ['foo.wav'] # but if the local file has different data, it will rename tmp.remCards(tmp.db.list("select id from cards")) with open(os.path.join(tmp.media.dir(), "foo.wav"), "w") as f: f.write("xyz") imp = AnkiPackageImporter(tmp, apkg) imp.run() assert len(os.listdir(tmp.media.dir())) == 2 def test_anki2_diffmodel_templates(): # different from the above as this one tests only the template text being # changed, not the number of cards/fields dst = getEmptyCol() # import the first version of the model tmp = getUpgradeDeckPath("diffmodeltemplates-1.apkg") imp = AnkiPackageImporter(dst, tmp) imp.dupeOnSchemaChange = True imp.run() # then the version with updated template tmp = getUpgradeDeckPath("diffmodeltemplates-2.apkg") imp = AnkiPackageImporter(dst, tmp) imp.dupeOnSchemaChange = True imp.run() # collection should contain the note we imported assert(dst.noteCount() == 1) # the front template should contain the text added in the 2nd package tcid = dst.findCards("")[0] # only 1 note in collection tnote = dst.getCard(tcid).note() assert("Changed Front Template" in dst.findTemplates(tnote)[0]['qfmt']) def test_anki2_updates(): # create a new empty deck dst = getEmptyCol() tmp = getUpgradeDeckPath("update1.apkg") imp = AnkiPackageImporter(dst, tmp) imp.run() assert imp.dupes == 0 assert imp.added == 1 assert imp.updated == 0 # importing again should be idempotent imp = AnkiPackageImporter(dst, tmp) imp.run() assert imp.dupes == 1 assert imp.added == 0 assert imp.updated == 0 # importing a newer note should update assert dst.noteCount() == 1 assert dst.db.scalar("select flds from notes").startswith("hello") tmp = getUpgradeDeckPath("update2.apkg") imp = AnkiPackageImporter(dst, tmp) imp.run() assert imp.dupes == 1 assert imp.added == 0 assert imp.updated == 1 assert dst.noteCount() == 1 assert dst.db.scalar("select flds from notes").startswith("goodbye") def test_csv(): deck = getEmptyCol() file = str(os.path.join(testDir, "support/text-2fields.txt")) i = TextImporter(deck, file) i.initMapping() i.run() # four problems - too many & too few fields, a missing front, and a # duplicate entry assert len(i.log) == 5 assert i.total == 5 # if we run the import again, it should update instead i.run() assert len(i.log) == 10 assert i.total == 5 # but importing should not clobber tags if they're unmapped n = deck.getNote(deck.db.scalar("select id from notes")) n.addTag("test") n.flush() i.run() n.load() assert n.tags == ['test'] # if add-only mode, count will be 0 i.importMode = 1 i.run() assert i.total == 0 # and if dupes mode, will reimport everything assert deck.cardCount() == 5 i.importMode = 2 i.run() # includes repeated field assert i.total == 6 assert deck.cardCount() == 11 deck.close() def test_csv2(): deck = getEmptyCol() mm = deck.models m = mm.current() f = mm.newField("Three") mm.addField(m, f) mm.save(m) n = deck.newNote() n['Front'] = "1" n['Back'] = "2" n['Three'] = "3" deck.addNote(n) # an update with unmapped fields should not clobber those fields file = str(os.path.join(testDir, "support/text-update.txt")) i = TextImporter(deck, file) i.initMapping() i.run() n.load() assert n['Front'] == "1" assert n['Back'] == "x" assert n['Three'] == "3" deck.close() def test_supermemo_xml_01_unicode(): deck = getEmptyCol() file = str(os.path.join(testDir, "support/supermemo1.xml")) i = SupermemoXmlImporter(deck, file) #i.META.logToStdOutput = True i.run() assert i.total == 1 cid = deck.db.scalar("select id from cards") c = deck.getCard(cid) # Applies A Factor-to-E Factor conversion assert c.factor == 2879 assert c.reps == 7 deck.close() def test_mnemo(): deck = getEmptyCol() file = str(os.path.join(testDir, "support/mnemo.db")) i = MnemosyneImporter(deck, file) i.run() assert deck.cardCount() == 7 assert "a_longer_tag" in deck.tags.all() assert deck.db.scalar("select count() from cards where type = 0") == 1 deck.close() anki-2.1.0+dfsg~b36/tests/test_latex.py000066400000000000000000000063431323611211500177550ustar00rootroot00000000000000# coding: utf-8 import os import shutil from tests.shared import getEmptyCol from anki.utils import stripHTML def test_latex(): d = getEmptyCol() # change latex cmd to simulate broken build import anki.latex anki.latex.pngCommands[0][0] = "nolatex" # add a note with latex f = d.newNote() f['Front'] = "[latex]hello[/latex]" d.addNote(f) # but since latex couldn't run, there's nothing there assert len(os.listdir(d.media.dir())) == 0 # check the error message msg = f.cards()[0].q() assert "executing nolatex" in msg assert "installed" in msg # check if we have latex installed, and abort test if we don't if not shutil.which("latex") or not shutil.which("dvipng"): print("aborting test; latex or dvipng is not installed") return # fix path anki.latex.pngCommands[0][0] = "latex" # check media db should cause latex to be generated d.media.check() assert len(os.listdir(d.media.dir())) == 1 assert ".png" in f.cards()[0].q() # adding new notes should cause generation on question display f = d.newNote() f['Front'] = "[latex]world[/latex]" d.addNote(f) f.cards()[0].q() assert len(os.listdir(d.media.dir())) == 2 # another note with the same media should reuse f = d.newNote() f['Front'] = " [latex]world[/latex]" d.addNote(f) assert len(os.listdir(d.media.dir())) == 2 oldcard = f.cards()[0] assert ".png" in oldcard.q() # if we turn off building, then previous cards should work, but cards with # missing media will show the latex anki.latex.build = False f = d.newNote() f['Front'] = "[latex]foo[/latex]" d.addNote(f) assert len(os.listdir(d.media.dir())) == 2 assert stripHTML(f.cards()[0].q()) == "[latex]foo[/latex]" assert ".png" in oldcard.q() # turn it on again so other test don't suffer anki.latex.build = True # bad commands (result, msg) = _test_includes_bad_command("\\write18") assert result, msg (result, msg) = _test_includes_bad_command("\\readline") assert result, msg (result, msg) = _test_includes_bad_command("\\input") assert result, msg (result, msg) = _test_includes_bad_command("\\include") assert result, msg (result, msg) = _test_includes_bad_command("\\catcode") assert result, msg (result, msg) = _test_includes_bad_command("\\openout") assert result, msg (result, msg) = _test_includes_bad_command("\\write") assert result, msg (result, msg) = _test_includes_bad_command("\\loop") assert result, msg (result, msg) = _test_includes_bad_command("\\def") assert result, msg (result, msg) = _test_includes_bad_command("\\shipout") assert result, msg # inserting commands beginning with a bad name should not raise an error (result, msg) = _test_includes_bad_command("\\defeq") assert not result, msg # normal commands should not either (result, msg) = _test_includes_bad_command("\\emph") assert not result, msg def _test_includes_bad_command(bad): d = getEmptyCol() f = d.newNote() f['Front'] = '[latex]%s[/latex]' % bad d.addNote(f) q = f.cards()[0].q() return ("'%s' is not allowed on cards" % bad in q, "Card content: %s" % q) anki-2.1.0+dfsg~b36/tests/test_media.py000066400000000000000000000076711323611211500177240ustar00rootroot00000000000000# coding: utf-8 import tempfile import os import time from .shared import getEmptyCol, testDir # copying files to media folder def test_add(): d = getEmptyCol() dir = tempfile.mkdtemp(prefix="anki") path = os.path.join(dir, "foo.jpg") with open(path, "w") as f: f.write("hello") # new file, should preserve name assert d.media.addFile(path) == "foo.jpg" # adding the same file again should not create a duplicate assert d.media.addFile(path) == "foo.jpg" # but if it has a different md5, it should with open(path, "w") as f: f.write("world") assert d.media.addFile(path) == "foo (1).jpg" def test_strings(): d = getEmptyCol() mf = d.media.filesInStr mid = list(d.models.models.keys())[0] assert mf(mid, "aoeu") == [] assert mf(mid, "aoeuao") == ["foo.jpg"] assert mf(mid, "aoeuao") == ["foo.jpg"] assert mf(mid, "aoeuao") == [ "foo.jpg", "bar.jpg"] assert mf(mid, "aoeuao") == ["foo.jpg"] assert mf(mid, "") == ["one", "two"] assert mf(mid, "aoeuao") == ["foo.jpg"] assert mf(mid, "aoeuao") == [ "foo.jpg", "fo"] assert mf(mid, "aou[sound:foo.mp3]aou") == ["foo.mp3"] sp = d.media.strip assert sp("aoeu") == "aoeu" assert sp("aoeu[sound:foo.mp3]aoeu") == "aoeuaoeu" assert sp("aoeu") == "aoeu" es = d.media.escapeImages assert es("aoeu") == "aoeu" assert es("") == "" assert es('') == '' def test_deckIntegration(): d = getEmptyCol() # create a media dir d.media.dir() # put a file into it file = str(os.path.join(testDir, "support/fake.png")) d.media.addFile(file) # add a note which references it f = d.newNote() f['Front'] = "one"; f['Back'] = "" d.addNote(f) # and one which references a non-existent file f = d.newNote() f['Front'] = "one"; f['Back'] = "" d.addNote(f) # and add another file which isn't used with open(os.path.join(d.media.dir(), "foo.jpg"), "w") as f: f.write("test") # check media ret = d.media.check() assert ret[0] == ["fake2.png"] assert ret[1] == ["foo.jpg"] def test_changes(): d = getEmptyCol() def added(): return d.media.db.execute("select fname from media where csum is not null") def removed(): return d.media.db.execute("select fname from media where csum is null") assert not list(added()) assert not list(removed()) # add a file dir = tempfile.mkdtemp(prefix="anki") path = os.path.join(dir, "foo.jpg") with open(path, "w") as f: f.write("hello") time.sleep(1) path = d.media.addFile(path) # should have been logged d.media.findChanges() assert list(added()) assert not list(removed()) # if we modify it, the cache won't notice time.sleep(1) with open(path, "w") as f: f.write("world") assert len(list(added())) == 1 assert not list(removed()) # but if we add another file, it will time.sleep(1) with open(path+"2", "w") as f: f.write("yo") d.media.findChanges() assert len(list(added())) == 2 assert not list(removed()) # deletions should get noticed too time.sleep(1) os.unlink(path+"2") d.media.findChanges() assert len(list(added())) == 1 assert len(list(removed())) == 1 def test_illegal(): d = getEmptyCol() aString = "a:b|cd\\e/f\0g*h" good = "abcdefgh" assert d.media.stripIllegal(aString) == good for c in aString: bad = d.media.hasIllegal("somestring"+c+"morestring") if bad: assert(c not in good) else: assert(c in good) anki-2.1.0+dfsg~b36/tests/test_models.py000066400000000000000000000255071323611211500201260ustar00rootroot00000000000000# coding: utf-8 from tests.shared import getEmptyCol from anki.utils import stripHTML, joinFields import anki.template def test_modelDelete(): deck = getEmptyCol() f = deck.newNote() f['Front'] = '1' f['Back'] = '2' deck.addNote(f) assert deck.cardCount() == 1 deck.models.rem(deck.models.current()) assert deck.cardCount() == 0 def test_modelCopy(): deck = getEmptyCol() m = deck.models.current() m2 = deck.models.copy(m) assert m2['name'] == "Basic copy" assert m2['id'] != m['id'] assert len(m2['flds']) == 2 assert len(m['flds']) == 2 assert len(m2['flds']) == len(m['flds']) assert len(m['tmpls']) == 1 assert len(m2['tmpls']) == 1 assert deck.models.scmhash(m) == deck.models.scmhash(m2) def test_fields(): d = getEmptyCol() f = d.newNote() f['Front'] = '1' f['Back'] = '2' d.addNote(f) m = d.models.current() # make sure renaming a field updates the templates d.models.renameField(m, m['flds'][0], "NewFront") assert "{{NewFront}}" in m['tmpls'][0]['qfmt'] h = d.models.scmhash(m) # add a field f = d.models.newField(m) f['name'] = "foo" d.models.addField(m, f) assert d.getNote(d.models.nids(m)[0]).fields == ["1", "2", ""] assert d.models.scmhash(m) != h # rename it d.models.renameField(m, f, "bar") assert d.getNote(d.models.nids(m)[0])['bar'] == '' # delete back d.models.remField(m, m['flds'][1]) assert d.getNote(d.models.nids(m)[0]).fields == ["1", ""] # move 0 -> 1 d.models.moveField(m, m['flds'][0], 1) assert d.getNote(d.models.nids(m)[0]).fields == ["", "1"] # move 1 -> 0 d.models.moveField(m, m['flds'][1], 0) assert d.getNote(d.models.nids(m)[0]).fields == ["1", ""] # add another and put in middle f = d.models.newField(m) f['name'] = "baz" d.models.addField(m, f) f = d.getNote(d.models.nids(m)[0]) f['baz'] = "2" f.flush() assert d.getNote(d.models.nids(m)[0]).fields == ["1", "", "2"] # move 2 -> 1 d.models.moveField(m, m['flds'][2], 1) assert d.getNote(d.models.nids(m)[0]).fields == ["1", "2", ""] # move 0 -> 2 d.models.moveField(m, m['flds'][0], 2) assert d.getNote(d.models.nids(m)[0]).fields == ["2", "", "1"] # move 0 -> 1 d.models.moveField(m, m['flds'][0], 1) assert d.getNote(d.models.nids(m)[0]).fields == ["", "2", "1"] def test_templates(): d = getEmptyCol() m = d.models.current(); mm = d.models t = mm.newTemplate("Reverse") t['qfmt'] = "{{Back}}" t['afmt'] = "{{Front}}" mm.addTemplate(m, t) mm.save(m) f = d.newNote() f['Front'] = '1' f['Back'] = '2' d.addNote(f) assert d.cardCount() == 2 (c, c2) = f.cards() # first card should have first ord assert c.ord == 0 assert c2.ord == 1 # switch templates d.models.moveTemplate(m, c.template(), 1) c.load(); c2.load() assert c.ord == 1 assert c2.ord == 0 # removing a template should delete its cards assert d.models.remTemplate(m, m['tmpls'][0]) assert d.cardCount() == 1 # and should have updated the other cards' ordinals c = f.cards()[0] assert c.ord == 0 assert stripHTML(c.q()) == "1" # it shouldn't be possible to orphan notes by removing templates t = mm.newTemplate(m) mm.addTemplate(m, t) assert not d.models.remTemplate(m, m['tmpls'][0]) def test_cloze_ordinals(): d = getEmptyCol() d.models.setCurrent(d.models.byName("Cloze")) m = d.models.current(); mm = d.models #We replace the default Cloze template t = mm.newTemplate("ChainedCloze") t['qfmt'] = "{{text:cloze:Text}}" t['afmt'] = "{{text:cloze:Text}}" mm.addTemplate(m, t) mm.save(m) d.models.remTemplate(m, m['tmpls'][0]) f = d.newNote() f['Text'] = '{{c1::firstQ::firstA}}{{c2::secondQ::secondA}}' d.addNote(f) assert d.cardCount() == 2 (c, c2) = f.cards() # first card should have first ord assert c.ord == 0 assert c2.ord == 1 def test_text(): d = getEmptyCol() m = d.models.current() m['tmpls'][0]['qfmt'] = "{{text:Front}}" d.models.save(m) f = d.newNote() f['Front'] = 'helloworld' d.addNote(f) assert "helloworld" in f.cards()[0].q() def test_cloze(): d = getEmptyCol() d.models.setCurrent(d.models.byName("Cloze")) f = d.newNote() assert f.model()['name'] == "Cloze" # a cloze model with no clozes is not empty f['Text'] = 'nothing' assert d.addNote(f) # try with one cloze f = d.newNote() f['Text'] = "hello {{c1::world}}" assert d.addNote(f) == 1 assert "hello [...]" in f.cards()[0].q() assert "hello world" in f.cards()[0].a() # and with a comment f = d.newNote() f['Text'] = "hello {{c1::world::typical}}" assert d.addNote(f) == 1 assert "[typical]" in f.cards()[0].q() assert "world" in f.cards()[0].a() # and with 2 clozes f = d.newNote() f['Text'] = "hello {{c1::world}} {{c2::bar}}" assert d.addNote(f) == 2 (c1, c2) = f.cards() assert "[...] bar" in c1.q() assert "world bar" in c1.a() assert "world [...]" in c2.q() assert "world bar" in c2.a() # if there are multiple answers for a single cloze, they are given in a # list f = d.newNote() f['Text'] = "a {{c1::b}} {{c1::c}}" assert d.addNote(f) == 1 assert "b c" in ( f.cards()[0].a()) # if we add another cloze, a card should be generated cnt = d.cardCount() f['Text'] = "{{c2::hello}} {{c1::foo}}" f.flush() assert d.cardCount() == cnt + 1 # 0 or negative indices are not supported f['Text'] += "{{c0::zero}} {{c-1:foo}}" f.flush() assert len(f.cards()) == 2 def test_cloze_mathjax(): d = getEmptyCol() d.models.setCurrent(d.models.byName("Cloze")) f = d.newNote() f['Text'] = r'{{c1::ok}} \(2^2\) {{c2::not ok}} \(2^{{c3::2}}\) \(x^3\) {{c4::blah}} {{c5::text with \(x^2\) jax}}' assert d.addNote(f) assert len(f.cards()) == 5 assert "class=cloze" in f.cards()[0].q() assert "class=cloze" in f.cards()[1].q() assert "class=cloze" not in f.cards()[2].q() assert "class=cloze" in f.cards()[3].q() assert "class=cloze" in f.cards()[4].q() def test_chained_mods(): d = getEmptyCol() d.models.setCurrent(d.models.byName("Cloze")) m = d.models.current(); mm = d.models #We replace the default Cloze template t = mm.newTemplate("ChainedCloze") t['qfmt'] = "{{cloze:text:Text}}" t['afmt'] = "{{cloze:text:Text}}" mm.addTemplate(m, t) mm.save(m) d.models.remTemplate(m, m['tmpls'][0]) f = d.newNote() q1 = 'phrase' a1 = 'sentence' q2 = 'en chaine' a2 = 'chained' f['Text'] = "This {{c1::%s::%s}} demonstrates {{c1::%s::%s}} clozes." % (q1,a1,q2,a2) assert d.addNote(f) == 1 assert "This [sentence] demonstrates [chained] clozes." in f.cards()[0].q() assert "This phrase demonstrates en chaine clozes." in f.cards()[0].a() def test_modelChange(): deck = getEmptyCol() basic = deck.models.byName("Basic") cloze = deck.models.byName("Cloze") # enable second template and add a note m = deck.models.current(); mm = deck.models t = mm.newTemplate("Reverse") t['qfmt'] = "{{Back}}" t['afmt'] = "{{Front}}" mm.addTemplate(m, t) mm.save(m) f = deck.newNote() f['Front'] = 'f' f['Back'] = 'b123' deck.addNote(f) # switch fields map = {0: 1, 1: 0} deck.models.change(basic, [f.id], basic, map, None) f.load() assert f['Front'] == 'b123' assert f['Back'] == 'f' # switch cards c0 = f.cards()[0] c1 = f.cards()[1] assert "b123" in c0.q() assert "f" in c1.q() assert c0.ord == 0 assert c1.ord == 1 deck.models.change(basic, [f.id], basic, None, map) f.load(); c0.load(); c1.load() assert "f" in c0.q() assert "b123" in c1.q() assert c0.ord == 1 assert c1.ord == 0 # .cards() returns cards in order assert f.cards()[0].id == c1.id # delete first card map = {0: None, 1: 1} deck.models.change(basic, [f.id], basic, None, map) f.load() c0.load() # the card was deleted try: c1.load() assert 0 except TypeError: pass # but we have two cards, as a new one was generated assert len(f.cards()) == 2 # an unmapped field becomes blank assert f['Front'] == 'b123' assert f['Back'] == 'f' deck.models.change(basic, [f.id], basic, map, None) f.load() assert f['Front'] == '' assert f['Back'] == 'f' # another note to try model conversion f = deck.newNote() f['Front'] = 'f2' f['Back'] = 'b2' deck.addNote(f) assert deck.models.useCount(basic) == 2 assert deck.models.useCount(cloze) == 0 map = {0: 0, 1: 1} deck.models.change(basic, [f.id], cloze, map, map) f.load() assert f['Text'] == "f2" assert len(f.cards()) == 2 # back the other way, with deletion of second ord deck.models.remTemplate(basic, basic['tmpls'][1]) assert deck.db.scalar("select count() from cards where nid = ?", f.id) == 2 deck.models.change(cloze, [f.id], basic, map, map) assert deck.db.scalar("select count() from cards where nid = ?", f.id) == 1 def test_templates(): d = dict(Foo="x", Bar="y") assert anki.template.render("{{Foo}}", d) == "x" assert anki.template.render("{{#Foo}}{{Foo}}{{/Foo}}", d) == "x" assert anki.template.render("{{#Foo}}{{Foo}}{{/Foo}}", d) == "x" assert anki.template.render("{{#Bar}}{{#Foo}}{{Foo}}{{/Foo}}{{/Bar}}", d) == "x" assert anki.template.render("{{#Baz}}{{#Foo}}{{Foo}}{{/Foo}}{{/Baz}}", d) == "" def test_availOrds(): d = getEmptyCol() m = d.models.current(); mm = d.models t = m['tmpls'][0] f = d.newNote() f['Front'] = "1" # simple templates assert mm.availOrds(m, joinFields(f.fields)) == [0] t['qfmt'] = "{{Back}}" mm.save(m, templates=True) assert not mm.availOrds(m, joinFields(f.fields)) # AND t['qfmt'] = "{{#Front}}{{#Back}}{{Front}}{{/Back}}{{/Front}}" mm.save(m, templates=True) assert not mm.availOrds(m, joinFields(f.fields)) t['qfmt'] = "{{#Front}}\n{{#Back}}\n{{Front}}\n{{/Back}}\n{{/Front}}" mm.save(m, templates=True) assert not mm.availOrds(m, joinFields(f.fields)) # OR t['qfmt'] = "{{Front}}\n{{Back}}" mm.save(m, templates=True) assert mm.availOrds(m, joinFields(f.fields)) == [0] t['Front'] = "" t['Back'] = "1" assert mm.availOrds(m, joinFields(f.fields)) == [0] anki-2.1.0+dfsg~b36/tests/test_schedv1.py000066400000000000000000000737301323611211500202010ustar00rootroot00000000000000# coding: utf-8 import time import copy from anki.consts import STARTING_FACTOR from tests.shared import getEmptyCol from anki.utils import intTime from anki.hooks import addHook def test_clock(): d = getEmptyCol() if (d.sched.dayCutoff - intTime()) < 10*60: raise Exception("Unit tests will fail around the day rollover.") def checkRevIvl(d, c, targetIvl): min, max = d.sched._fuzzIvlRange(targetIvl) return min <= c.ivl <= max def test_basics(): d = getEmptyCol() d.reset() assert not d.sched.getCard() def test_new(): d = getEmptyCol() d.reset() assert d.sched.newCount == 0 # add a note f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) d.reset() assert d.sched.newCount == 1 # fetch it c = d.sched.getCard() assert c assert c.queue == 0 assert c.type == 0 # if we answer it, it should become a learn card t = intTime() d.sched.answerCard(c, 1) assert c.queue == 1 assert c.type == 1 assert c.due >= t # disabled for now, as the learn fudging makes this randomly fail # # the default order should ensure siblings are not seen together, and # # should show all cards # m = d.models.current(); mm = d.models # t = mm.newTemplate("Reverse") # t['qfmt'] = "{{Back}}" # t['afmt'] = "{{Front}}" # mm.addTemplate(m, t) # mm.save(m) # f = d.newNote() # f['Front'] = u"2"; f['Back'] = u"2" # d.addNote(f) # f = d.newNote() # f['Front'] = u"3"; f['Back'] = u"3" # d.addNote(f) # d.reset() # qs = ("2", "3", "2", "3") # for n in range(4): # c = d.sched.getCard() # assert qs[n] in c.q() # d.sched.answerCard(c, 2) def test_newLimits(): d = getEmptyCol() # add some notes g2 = d.decks.id("Default::foo") for i in range(30): f = d.newNote() f['Front'] = str(i) if i > 4: f.model()['did'] = g2 d.addNote(f) # give the child deck a different configuration c2 = d.decks.confId("new conf") d.decks.setConf(d.decks.get(g2), c2) d.reset() # both confs have defaulted to a limit of 20 assert d.sched.newCount == 20 # first card we get comes from parent c = d.sched.getCard() assert c.did == 1 # limit the parent to 10 cards, meaning we get 10 in total conf1 = d.decks.confForDid(1) conf1['new']['perDay'] = 10 d.reset() assert d.sched.newCount == 10 # if we limit child to 4, we should get 9 conf2 = d.decks.confForDid(g2) conf2['new']['perDay'] = 4 d.reset() assert d.sched.newCount == 9 def test_newBoxes(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) d.reset() c = d.sched.getCard() d.sched._cardConf(c)['new']['delays'] = [1,2,3,4,5] d.sched.answerCard(c, 2) # should handle gracefully d.sched._cardConf(c)['new']['delays'] = [1] d.sched.answerCard(c, 2) def test_learn(): d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one"; f['Back'] = "two" f = d.addNote(f) # set as a learn card and rebuild queues d.db.execute("update cards set queue=0, type=0") d.reset() # sched.getCard should return it, since it's due in the past c = d.sched.getCard() assert c d.sched._cardConf(c)['new']['delays'] = [0.5, 3, 10] # fail it d.sched.answerCard(c, 1) # it should have three reps left to graduation assert c.left%1000 == 3 assert c.left//1000 == 3 # it should by due in 30 seconds t = round(c.due - time.time()) assert t >= 25 and t <= 40 # pass it once d.sched.answerCard(c, 2) # it should by due in 3 minutes assert round(c.due - time.time()) in (179, 180) assert c.left%1000 == 2 assert c.left//1000 == 2 # check log is accurate log = d.db.first("select * from revlog order by id desc") assert log[3] == 2 assert log[4] == -180 assert log[5] == -30 # pass again d.sched.answerCard(c, 2) # it should by due in 10 minutes assert round(c.due - time.time()) in (599, 600) assert c.left%1000 == 1 assert c.left//1000 == 1 # the next pass should graduate the card assert c.queue == 1 assert c.type == 1 d.sched.answerCard(c, 2) assert c.queue == 2 assert c.type == 2 # should be due tomorrow, with an interval of 1 assert c.due == d.sched.today+1 assert c.ivl == 1 # or normal removal c.type = 0 c.queue = 1 d.sched.answerCard(c, 3) assert c.type == 2 assert c.queue == 2 assert checkRevIvl(d, c, 4) # revlog should have been updated each time assert d.db.scalar("select count() from revlog where type = 0") == 5 # now failed card handling c.type = 2 c.queue = 1 c.odue = 123 d.sched.answerCard(c, 3) assert c.due == 123 assert c.type == 2 assert c.queue == 2 # we should be able to remove manually, too c.type = 2 c.queue = 1 c.odue = 321 c.flush() d.sched.removeLrn() c.load() assert c.queue == 2 assert c.due == 321 def test_learn_collapsed(): d = getEmptyCol() # add 2 notes f = d.newNote() f['Front'] = "1" f = d.addNote(f) f = d.newNote() f['Front'] = "2" f = d.addNote(f) # set as a learn card and rebuild queues d.db.execute("update cards set queue=0, type=0") d.reset() # should get '1' first c = d.sched.getCard() assert c.q().endswith("1") # pass it so it's due in 10 minutes d.sched.answerCard(c, 2) # get the other card c = d.sched.getCard() assert c.q().endswith("2") # fail it so it's due in 1 minute d.sched.answerCard(c, 1) # we shouldn't get the same card again c = d.sched.getCard() assert not c.q().endswith("2") def test_learn_day(): d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one" f = d.addNote(f) d.sched.reset() c = d.sched.getCard() d.sched._cardConf(c)['new']['delays'] = [1, 10, 1440, 2880] # pass it d.sched.answerCard(c, 2) # two reps to graduate, 1 more today assert c.left%1000 == 3 assert c.left//1000 == 1 assert d.sched.counts() == (0, 1, 0) c = d.sched.getCard() ni = d.sched.nextIvl assert ni(c, 2) == 86400 # answering it will place it in queue 3 d.sched.answerCard(c, 2) assert c.due == d.sched.today+1 assert c.queue == 3 assert not d.sched.getCard() # for testing, move it back a day c.due -= 1 c.flush() d.reset() assert d.sched.counts() == (0, 1, 0) c = d.sched.getCard() # nextIvl should work assert ni(c, 2) == 86400*2 # if we fail it, it should be back in the correct queue d.sched.answerCard(c, 1) assert c.queue == 1 d.undo() d.reset() c = d.sched.getCard() d.sched.answerCard(c, 2) # simulate the passing of another two days c.due -= 2 c.flush() d.reset() # the last pass should graduate it into a review card assert ni(c, 2) == 86400 d.sched.answerCard(c, 2) assert c.queue == c.type == 2 # if the lapse step is tomorrow, failing it should handle the counts # correctly c.due = 0 c.flush() d.reset() assert d.sched.counts() == (0, 0, 1) d.sched._cardConf(c)['lapse']['delays'] = [1440] c = d.sched.getCard() d.sched.answerCard(c, 1) assert c.queue == 3 assert d.sched.counts() == (0, 0, 0) def test_reviews(): d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) # set the card up as a review card, due 8 days ago c = f.cards()[0] c.type = 2 c.queue = 2 c.due = d.sched.today - 8 c.factor = STARTING_FACTOR c.reps = 3 c.lapses = 1 c.ivl = 100 c.startTimer() c.flush() # save it for later use as well cardcopy = copy.copy(c) # failing it should put it in the learn queue with the default options ################################################## # different delay to new d.reset() d.sched._cardConf(c)['lapse']['delays'] = [2, 20] d.sched.answerCard(c, 1) assert c.queue == 1 # it should be due tomorrow, with an interval of 1 assert c.odue == d.sched.today + 1 assert c.ivl == 1 # but because it's in the learn queue, its current due time should be in # the future assert c.due >= time.time() assert (c.due - time.time()) > 119 # factor should have been decremented assert c.factor == 2300 # check counters assert c.lapses == 2 assert c.reps == 4 # check ests. ni = d.sched.nextIvl assert ni(c, 1) == 120 assert ni(c, 2) == 20*60 # try again with an ease of 2 instead ################################################## c = copy.copy(cardcopy) c.flush() d.sched.answerCard(c, 2) assert c.queue == 2 # the new interval should be (100 + 8/4) * 1.2 = 122 assert checkRevIvl(d, c, 122) assert c.due == d.sched.today + c.ivl # factor should have been decremented assert c.factor == 2350 # check counters assert c.lapses == 1 assert c.reps == 4 # ease 3 ################################################## c = copy.copy(cardcopy) c.flush() d.sched.answerCard(c, 3) # the new interval should be (100 + 8/2) * 2.5 = 260 assert checkRevIvl(d, c, 260) assert c.due == d.sched.today + c.ivl # factor should have been left alone assert c.factor == STARTING_FACTOR # ease 4 ################################################## c = copy.copy(cardcopy) c.flush() d.sched.answerCard(c, 4) # the new interval should be (100 + 8) * 2.5 * 1.3 = 351 assert checkRevIvl(d, c, 351) assert c.due == d.sched.today + c.ivl # factor should have been increased assert c.factor == 2650 # leech handling ################################################## c = copy.copy(cardcopy) c.lapses = 7 c.flush() # steup hook hooked = [] def onLeech(card): hooked.append(1) addHook("leech", onLeech) d.sched.answerCard(c, 1) assert hooked assert c.queue == -1 c.load() assert c.queue == -1 def test_button_spacing(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) # 1 day ivl review card due now c = f.cards()[0] c.type = 2 c.queue = 2 c.due = d.sched.today c.reps = 1 c.ivl = 1 c.startTimer() c.flush() d.reset() ni = d.sched.nextIvlStr assert ni(c, 2) == "2 days" assert ni(c, 3) == "3 days" assert ni(c, 4) == "4 days" def test_overdue_lapse(): # disabled in commit 3069729776990980f34c25be66410e947e9d51a2 return d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one" d.addNote(f) # simulate a review that was lapsed and is now due for its normal review c = f.cards()[0] c.type = 2 c.queue = 1 c.due = -1 c.odue = -1 c.factor = STARTING_FACTOR c.left = 2002 c.ivl = 0 c.flush() d.sched._clearOverdue = False # checkpoint d.save() d.sched.reset() assert d.sched.counts() == (0, 2, 0) c = d.sched.getCard() d.sched.answerCard(c, 3) # it should be due tomorrow assert c.due == d.sched.today + 1 # revert to before d.rollback() d.sched._clearOverdue = True # with the default settings, the overdue card should be removed from the # learning queue d.sched.reset() assert d.sched.counts() == (0, 0, 1) def test_finished(): d = getEmptyCol() # nothing due assert "Congratulations" in d.sched.finishedMsg() assert "limit" not in d.sched.finishedMsg() f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) # have a new card assert "new cards available" in d.sched.finishedMsg() # turn it into a review d.reset() c = f.cards()[0] c.startTimer() d.sched.answerCard(c, 3) # nothing should be due tomorrow, as it's due in a week assert "Congratulations" in d.sched.finishedMsg() assert "limit" not in d.sched.finishedMsg() def test_nextIvl(): d = getEmptyCol() f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) d.reset() conf = d.decks.confForDid(1) conf['new']['delays'] = [0.5, 3, 10] conf['lapse']['delays'] = [1, 5, 9] c = d.sched.getCard() # new cards ################################################## ni = d.sched.nextIvl assert ni(c, 1) == 30 assert ni(c, 2) == 180 assert ni(c, 3) == 4*86400 d.sched.answerCard(c, 1) # cards in learning ################################################## assert ni(c, 1) == 30 assert ni(c, 2) == 180 assert ni(c, 3) == 4*86400 d.sched.answerCard(c, 2) assert ni(c, 1) == 30 assert ni(c, 2) == 600 assert ni(c, 3) == 4*86400 d.sched.answerCard(c, 2) # normal graduation is tomorrow assert ni(c, 2) == 1*86400 assert ni(c, 3) == 4*86400 # lapsed cards ################################################## c.type = 2 c.ivl = 100 c.factor = STARTING_FACTOR assert ni(c, 1) == 60 assert ni(c, 2) == 100*86400 assert ni(c, 3) == 100*86400 # review cards ################################################## c.queue = 2 c.ivl = 100 c.factor = STARTING_FACTOR # failing it should put it at 60s assert ni(c, 1) == 60 # or 1 day if relearn is false d.sched._cardConf(c)['lapse']['delays']=[] assert ni(c, 1) == 1*86400 # (* 100 1.2 86400)10368000.0 assert ni(c, 2) == 10368000 # (* 100 2.5 86400)21600000.0 assert ni(c, 3) == 21600000 # (* 100 2.5 1.3 86400)28080000.0 assert ni(c, 4) == 28080000 assert d.sched.nextIvlStr(c, 4) == "10.8 months" def test_misc(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] # burying d.sched.buryNote(c.nid) d.reset() assert not d.sched.getCard() d.sched.unburyCards() d.reset() assert d.sched.getCard() def test_suspend(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] # suspending d.reset() assert d.sched.getCard() d.sched.suspendCards([c.id]) d.reset() assert not d.sched.getCard() # unsuspending d.sched.unsuspendCards([c.id]) d.reset() assert d.sched.getCard() # should cope with rev cards being relearnt c.due = 0; c.ivl = 100; c.type = 2; c.queue = 2; c.flush() d.reset() c = d.sched.getCard() d.sched.answerCard(c, 1) assert c.due >= time.time() assert c.queue == 1 assert c.type == 2 d.sched.suspendCards([c.id]) d.sched.unsuspendCards([c.id]) c.load() assert c.queue == 2 assert c.type == 2 assert c.due == 1 # should cope with cards in cram decks c.due = 1 c.flush() cram = d.decks.newDyn("tmp") d.sched.rebuildDyn() c.load() assert c.due != 1 assert c.did != 1 d.sched.suspendCards([c.id]) c.load() assert c.due == 1 assert c.did == 1 def test_cram(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] c.ivl = 100 c.type = c.queue = 2 # due in 25 days, so it's been waiting 75 days c.due = d.sched.today + 25 c.mod = 1 c.factor = STARTING_FACTOR c.startTimer() c.flush() d.reset() assert d.sched.counts() == (0,0,0) cardcopy = copy.copy(c) # create a dynamic deck and refresh it did = d.decks.newDyn("Cram") d.sched.rebuildDyn(did) d.reset() # should appear as new in the deck list assert sorted(d.sched.deckDueList())[0][4] == 1 # and should appear in the counts assert d.sched.counts() == (1,0,0) # grab it and check estimates c = d.sched.getCard() assert d.sched.answerButtons(c) == 2 assert d.sched.nextIvl(c, 1) == 600 assert d.sched.nextIvl(c, 2) == 138*60*60*24 cram = d.decks.get(did) cram['delays'] = [1, 10] assert d.sched.answerButtons(c) == 3 assert d.sched.nextIvl(c, 1) == 60 assert d.sched.nextIvl(c, 2) == 600 assert d.sched.nextIvl(c, 3) == 138*60*60*24 d.sched.answerCard(c, 2) # elapsed time was 75 days # factor = 2.5+1.2/2 = 1.85 # int(75*1.85) = 138 assert c.ivl == 138 assert c.odue == 138 assert c.queue == 1 # should be logged as a cram rep assert d.db.scalar( "select type from revlog order by id desc limit 1") == 3 # check ivls again assert d.sched.nextIvl(c, 1) == 60 assert d.sched.nextIvl(c, 2) == 138*60*60*24 assert d.sched.nextIvl(c, 3) == 138*60*60*24 # when it graduates, due is updated c = d.sched.getCard() d.sched.answerCard(c, 2) assert c.ivl == 138 assert c.due == 138 assert c.queue == 2 # and it will have moved back to the previous deck assert c.did == 1 # cram the deck again d.sched.rebuildDyn(did) d.reset() c = d.sched.getCard() # check ivls again - passing should be idempotent assert d.sched.nextIvl(c, 1) == 60 assert d.sched.nextIvl(c, 2) == 600 assert d.sched.nextIvl(c, 3) == 138*60*60*24 d.sched.answerCard(c, 2) assert c.ivl == 138 assert c.odue == 138 # fail d.sched.answerCard(c, 1) assert d.sched.nextIvl(c, 1) == 60 assert d.sched.nextIvl(c, 2) == 600 assert d.sched.nextIvl(c, 3) == 86400 # delete the deck, returning the card mid-study d.decks.rem(d.decks.selected()) assert len(d.sched.deckDueList()) == 1 c.load() assert c.ivl == 1 assert c.due == d.sched.today+1 # make it due d.reset() assert d.sched.counts() == (0,0,0) c.due = -5 c.ivl = 100 c.flush() d.reset() assert d.sched.counts() == (0,0,1) # cram again did = d.decks.newDyn("Cram") d.sched.rebuildDyn(did) d.reset() assert d.sched.counts() == (0,0,1) c.load() assert d.sched.answerButtons(c) == 4 # add a sibling so we can test minSpace, etc c.col = None c2 = copy.deepcopy(c) c2.col = c.col = d c2.id = 123 c2.ord = 1 c2.due = 325 c2.col = c.col c2.flush() # should be able to answer it c = d.sched.getCard() d.sched.answerCard(c, 4) # it should have been moved back to the original deck assert c.did == 1 def test_cram_rem(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) oldDue = f.cards()[0].due did = d.decks.newDyn("Cram") d.sched.rebuildDyn(did) d.reset() c = d.sched.getCard() d.sched.answerCard(c, 2) # answering the card will put it in the learning queue assert c.type == c.queue == 1 assert c.due != oldDue # if we terminate cramming prematurely it should be set back to new d.sched.emptyDyn(did) c.load() assert c.type == c.queue == 0 assert c.due == oldDue def test_cram_resched(): # add card d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) # cram deck did = d.decks.newDyn("Cram") cram = d.decks.get(did) cram['resched'] = False d.sched.rebuildDyn(did) d.reset() # graduate should return it to new c = d.sched.getCard() ni = d.sched.nextIvl assert ni(c, 1) == 60 assert ni(c, 2) == 600 assert ni(c, 3) == 0 assert d.sched.nextIvlStr(c, 3) == "(end)" d.sched.answerCard(c, 3) assert c.queue == c.type == 0 # undue reviews should also be unaffected c.ivl = 100 c.type = c.queue = 2 c.due = d.sched.today + 25 c.factor = STARTING_FACTOR c.flush() cardcopy = copy.copy(c) d.sched.rebuildDyn(did) d.reset() c = d.sched.getCard() assert ni(c, 1) == 600 assert ni(c, 2) == 0 assert ni(c, 3) == 0 d.sched.answerCard(c, 2) assert c.ivl == 100 assert c.due == d.sched.today + 25 # check failure too c = cardcopy c.flush() d.sched.rebuildDyn(did) d.reset() c = d.sched.getCard() d.sched.answerCard(c, 1) d.sched.emptyDyn(did) c.load() assert c.ivl == 100 assert c.due == d.sched.today + 25 # fail+grad early c = cardcopy c.flush() d.sched.rebuildDyn(did) d.reset() c = d.sched.getCard() d.sched.answerCard(c, 1) d.sched.answerCard(c, 3) d.sched.emptyDyn(did) c.load() assert c.ivl == 100 assert c.due == d.sched.today + 25 # due cards - pass c = cardcopy c.due = -25 c.flush() d.sched.rebuildDyn(did) d.reset() c = d.sched.getCard() d.sched.answerCard(c, 3) d.sched.emptyDyn(did) c.load() assert c.ivl == 100 assert c.due == -25 # fail c = cardcopy c.due = -25 c.flush() d.sched.rebuildDyn(did) d.reset() c = d.sched.getCard() d.sched.answerCard(c, 1) d.sched.emptyDyn(did) c.load() assert c.ivl == 100 assert c.due == -25 # fail with normal grad c = cardcopy c.due = -25 c.flush() d.sched.rebuildDyn(did) d.reset() c = d.sched.getCard() d.sched.answerCard(c, 1) d.sched.answerCard(c, 3) c.load() assert c.ivl == 100 assert c.due == -25 # lapsed card pulled into cram # d.sched._cardConf(c)['lapse']['mult']=0.5 # d.sched.answerCard(c, 1) # d.sched.rebuildDyn(did) # d.reset() # c = d.sched.getCard() # d.sched.answerCard(c, 2) # print c.__dict__ def test_ordcycle(): d = getEmptyCol() # add two more templates and set second active m = d.models.current(); mm = d.models t = mm.newTemplate("Reverse") t['qfmt'] = "{{Back}}" t['afmt'] = "{{Front}}" mm.addTemplate(m, t) t = mm.newTemplate("f2") t['qfmt'] = "{{Front}}" t['afmt'] = "{{Back}}" mm.addTemplate(m, t) mm.save(m) # create a new note; it should have 3 cards f = d.newNote() f['Front'] = "1"; f['Back'] = "1" d.addNote(f) assert d.cardCount() == 3 d.reset() # ordinals should arrive in order assert d.sched.getCard().ord == 0 assert d.sched.getCard().ord == 1 assert d.sched.getCard().ord == 2 def test_counts_idx(): d = getEmptyCol() f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) d.reset() assert d.sched.counts() == (1, 0, 0) c = d.sched.getCard() # counter's been decremented but idx indicates 1 assert d.sched.counts() == (0, 0, 0) assert d.sched.countIdx(c) == 0 # answer to move to learn queue d.sched.answerCard(c, 1) assert d.sched.counts() == (0, 2, 0) # fetching again will decrement the count c = d.sched.getCard() assert d.sched.counts() == (0, 0, 0) assert d.sched.countIdx(c) == 1 # answering should add it back again d.sched.answerCard(c, 1) assert d.sched.counts() == (0, 2, 0) def test_repCounts(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) d.reset() # lrnReps should be accurate on pass/fail assert d.sched.counts() == (1, 0, 0) d.sched.answerCard(d.sched.getCard(), 1) assert d.sched.counts() == (0, 2, 0) d.sched.answerCard(d.sched.getCard(), 1) assert d.sched.counts() == (0, 2, 0) d.sched.answerCard(d.sched.getCard(), 2) assert d.sched.counts() == (0, 1, 0) d.sched.answerCard(d.sched.getCard(), 1) assert d.sched.counts() == (0, 2, 0) d.sched.answerCard(d.sched.getCard(), 2) assert d.sched.counts() == (0, 1, 0) d.sched.answerCard(d.sched.getCard(), 2) assert d.sched.counts() == (0, 0, 0) f = d.newNote() f['Front'] = "two" d.addNote(f) d.reset() # initial pass should be correct too d.sched.answerCard(d.sched.getCard(), 2) assert d.sched.counts() == (0, 1, 0) d.sched.answerCard(d.sched.getCard(), 1) assert d.sched.counts() == (0, 2, 0) d.sched.answerCard(d.sched.getCard(), 3) assert d.sched.counts() == (0, 0, 0) # immediate graduate should work f = d.newNote() f['Front'] = "three" d.addNote(f) d.reset() d.sched.answerCard(d.sched.getCard(), 3) assert d.sched.counts() == (0, 0, 0) # and failing a review should too f = d.newNote() f['Front'] = "three" d.addNote(f) c = f.cards()[0] c.type = 2 c.queue = 2 c.due = d.sched.today c.flush() d.reset() assert d.sched.counts() == (0, 0, 1) d.sched.answerCard(d.sched.getCard(), 1) assert d.sched.counts() == (0, 1, 0) def test_timing(): d = getEmptyCol() # add a few review cards, due today for i in range(5): f = d.newNote() f['Front'] = "num"+str(i) d.addNote(f) c = f.cards()[0] c.type = 2 c.queue = 2 c.due = 0 c.flush() # fail the first one d.reset() c = d.sched.getCard() # set a a fail delay of 1 second so we don't have to wait d.sched._cardConf(c)['lapse']['delays'][0] = 1/60.0 d.sched.answerCard(c, 1) # the next card should be another review c = d.sched.getCard() assert c.queue == 2 # but if we wait for a second, the failed card should come back time.sleep(1) c = d.sched.getCard() assert c.queue == 1 def test_collapse(): d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one" d.addNote(f) d.reset() # test collapsing c = d.sched.getCard() d.sched.answerCard(c, 1) c = d.sched.getCard() d.sched.answerCard(c, 3) assert not d.sched.getCard() def test_deckDue(): d = getEmptyCol() # add a note with default deck f = d.newNote() f['Front'] = "one" d.addNote(f) # and one that's a child f = d.newNote() f['Front'] = "two" default1 = f.model()['did'] = d.decks.id("Default::1") d.addNote(f) # make it a review card c = f.cards()[0] c.queue = 2 c.due = 0 c.flush() # add one more with a new deck f = d.newNote() f['Front'] = "two" foobar = f.model()['did'] = d.decks.id("foo::bar") d.addNote(f) # and one that's a sibling f = d.newNote() f['Front'] = "three" foobaz = f.model()['did'] = d.decks.id("foo::baz") d.addNote(f) d.reset() assert len(d.decks.decks) == 5 cnts = d.sched.deckDueList() assert cnts[0] == ["Default", 1, 0, 0, 1] assert cnts[1] == ["Default::1", default1, 1, 0, 0] assert cnts[2] == ["foo", d.decks.id("foo"), 0, 0, 0] assert cnts[3] == ["foo::bar", foobar, 0, 0, 1] assert cnts[4] == ["foo::baz", foobaz, 0, 0, 1] tree = d.sched.deckDueTree() assert tree[0][0] == "Default" # sum of child and parent assert tree[0][1] == 1 assert tree[0][2] == 1 assert tree[0][4] == 1 # child count is just review assert tree[0][5][0][0] == "1" assert tree[0][5][0][1] == default1 assert tree[0][5][0][2] == 1 assert tree[0][5][0][4] == 0 # code should not fail if a card has an invalid deck c.did = 12345; c.flush() d.sched.deckDueList() d.sched.deckDueTree() def test_deckTree(): d = getEmptyCol() d.decks.id("new::b::c") d.decks.id("new2") # new should not appear twice in tree names = [x[0] for x in d.sched.deckDueTree()] names.remove("new") assert "new" not in names def test_deckFlow(): d = getEmptyCol() # add a note with default deck f = d.newNote() f['Front'] = "one" d.addNote(f) # and one that's a child f = d.newNote() f['Front'] = "two" default1 = f.model()['did'] = d.decks.id("Default::2") d.addNote(f) # and another that's higher up f = d.newNote() f['Front'] = "three" default1 = f.model()['did'] = d.decks.id("Default::1") d.addNote(f) # should get top level one first, then ::1, then ::2 d.reset() assert d.sched.counts() == (3,0,0) for i in "one", "three", "two": c = d.sched.getCard() assert c.note()['Front'] == i d.sched.answerCard(c, 2) def test_reorder(): d = getEmptyCol() # add a note with default deck f = d.newNote() f['Front'] = "one" d.addNote(f) f2 = d.newNote() f2['Front'] = "two" d.addNote(f2) assert f2.cards()[0].due == 2 found=False # 50/50 chance of being reordered for i in range(20): d.sched.randomizeCards(1) if f.cards()[0].due != f.id: found=True break assert found d.sched.orderCards(1) assert f.cards()[0].due == 1 # shifting f3 = d.newNote() f3['Front'] = "three" d.addNote(f3) f4 = d.newNote() f4['Front'] = "four" d.addNote(f4) assert f.cards()[0].due == 1 assert f2.cards()[0].due == 2 assert f3.cards()[0].due == 3 assert f4.cards()[0].due == 4 d.sched.sortCards([ f3.cards()[0].id, f4.cards()[0].id], start=1, shift=True) assert f.cards()[0].due == 3 assert f2.cards()[0].due == 4 assert f3.cards()[0].due == 1 assert f4.cards()[0].due == 2 def test_forget(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] c.queue = 2; c.type = 2; c.ivl = 100; c.due = 0 c.flush() d.reset() assert d.sched.counts() == (0, 0, 1) d.sched.forgetCards([c.id]) d.reset() assert d.sched.counts() == (1, 0, 0) def test_resched(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] d.sched.reschedCards([c.id], 0, 0) c.load() assert c.due == d.sched.today assert c.ivl == 1 assert c.queue == c.type == 2 d.sched.reschedCards([c.id], 1, 1) c.load() assert c.due == d.sched.today+1 assert c.ivl == +1 def test_norelearn(): d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] c.type = 2 c.queue = 2 c.due = 0 c.factor = STARTING_FACTOR c.reps = 3 c.lapses = 1 c.ivl = 100 c.startTimer() c.flush() d.reset() d.sched.answerCard(c, 1) d.sched._cardConf(c)['lapse']['delays'] = [] d.sched.answerCard(c, 1) def test_failmult(): d = getEmptyCol() f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) c = f.cards()[0] c.type = 2 c.queue = 2 c.ivl = 100 c.due = d.sched.today - c.ivl c.factor = STARTING_FACTOR c.reps = 3 c.lapses = 1 c.startTimer() c.flush() d.sched._cardConf(c)['lapse']['mult'] = 0.5 c = d.sched.getCard() d.sched.answerCard(c, 1) assert c.ivl == 50 d.sched.answerCard(c, 1) assert c.ivl == 25 anki-2.1.0+dfsg~b36/tests/test_schedv2.py000066400000000000000000000740321323611211500201760ustar00rootroot00000000000000# coding: utf-8 import time import copy from anki.consts import STARTING_FACTOR from tests.shared import getEmptyCol as _getEmptyCol from anki.utils import intTime from anki.hooks import addHook def getEmptyCol(): return _getEmptyCol(schedVer=2) def test_clock(): d = getEmptyCol() if (d.sched.dayCutoff - intTime()) < 10*60: raise Exception("Unit tests will fail around the day rollover.") def checkRevIvl(d, c, targetIvl): min, max = d.sched._fuzzIvlRange(targetIvl) return min <= c.ivl <= max def test_basics(): d = getEmptyCol() d.reset() assert not d.sched.getCard() def test_new(): d = getEmptyCol() d.reset() assert d.sched.newCount == 0 # add a note f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) d.reset() assert d.sched.newCount == 1 # fetch it c = d.sched.getCard() assert c assert c.queue == 0 assert c.type == 0 # if we answer it, it should become a learn card t = intTime() d.sched.answerCard(c, 1) assert c.queue == 1 assert c.type == 1 assert c.due >= t # disabled for now, as the learn fudging makes this randomly fail # # the default order should ensure siblings are not seen together, and # # should show all cards # m = d.models.current(); mm = d.models # t = mm.newTemplate("Reverse") # t['qfmt'] = "{{Back}}" # t['afmt'] = "{{Front}}" # mm.addTemplate(m, t) # mm.save(m) # f = d.newNote() # f['Front'] = u"2"; f['Back'] = u"2" # d.addNote(f) # f = d.newNote() # f['Front'] = u"3"; f['Back'] = u"3" # d.addNote(f) # d.reset() # qs = ("2", "3", "2", "3") # for n in range(4): # c = d.sched.getCard() # assert qs[n] in c.q() # d.sched.answerCard(c, 2) def test_newLimits(): d = getEmptyCol() # add some notes g2 = d.decks.id("Default::foo") for i in range(30): f = d.newNote() f['Front'] = str(i) if i > 4: f.model()['did'] = g2 d.addNote(f) # give the child deck a different configuration c2 = d.decks.confId("new conf") d.decks.setConf(d.decks.get(g2), c2) d.reset() # both confs have defaulted to a limit of 20 assert d.sched.newCount == 20 # first card we get comes from parent c = d.sched.getCard() assert c.did == 1 # limit the parent to 10 cards, meaning we get 10 in total conf1 = d.decks.confForDid(1) conf1['new']['perDay'] = 10 d.reset() assert d.sched.newCount == 10 # if we limit child to 4, we should get 9 conf2 = d.decks.confForDid(g2) conf2['new']['perDay'] = 4 d.reset() assert d.sched.newCount == 9 def test_newBoxes(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) d.reset() c = d.sched.getCard() d.sched._cardConf(c)['new']['delays'] = [1,2,3,4,5] d.sched.answerCard(c, 2) # should handle gracefully d.sched._cardConf(c)['new']['delays'] = [1] d.sched.answerCard(c, 2) def test_learn(): d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one"; f['Back'] = "two" f = d.addNote(f) # set as a learn card and rebuild queues d.db.execute("update cards set queue=0, type=0") d.reset() # sched.getCard should return it, since it's due in the past c = d.sched.getCard() assert c d.sched._cardConf(c)['new']['delays'] = [0.5, 3, 10] # fail it d.sched.answerCard(c, 1) # it should have three reps left to graduation assert c.left%1000 == 3 assert c.left//1000 == 3 # it should by due in 30 seconds t = round(c.due - time.time()) assert t >= 25 and t <= 40 # pass it once d.sched.answerCard(c, 3) # it should by due in 3 minutes assert round(c.due - time.time()) in (179, 180) assert c.left%1000 == 2 assert c.left//1000 == 2 # check log is accurate log = d.db.first("select * from revlog order by id desc") assert log[3] == 3 assert log[4] == -180 assert log[5] == -30 # pass again d.sched.answerCard(c, 3) # it should by due in 10 minutes assert round(c.due - time.time()) in (599, 600) assert c.left%1000 == 1 assert c.left//1000 == 1 # the next pass should graduate the card assert c.queue == 1 assert c.type == 1 d.sched.answerCard(c, 3) assert c.queue == 2 assert c.type == 2 # should be due tomorrow, with an interval of 1 assert c.due == d.sched.today+1 assert c.ivl == 1 # or normal removal c.type = 0 c.queue = 1 d.sched.answerCard(c, 4) assert c.type == 2 assert c.queue == 2 assert checkRevIvl(d, c, 4) # revlog should have been updated each time assert d.db.scalar("select count() from revlog where type = 0") == 5 def test_relearn(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] c.ivl = 100 c.due = d.sched.today c.type = c.queue = 2 c.flush() # fail the card d.reset() c = d.sched.getCard() d.sched.answerCard(c, 1) assert c.queue == 1 assert c.type == 3 assert c.ivl == 1 # immediately graduate it d.sched.answerCard(c, 4) assert c.queue == c.type == 2 assert c.ivl == 1 assert c.due == d.sched.today + c.ivl def test_relearn_no_steps(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] c.ivl = 100 c.due = d.sched.today c.type = c.queue = 2 c.flush() conf = d.decks.confForDid(1) conf['lapse']['delays'] = [] d.decks.save(conf) # fail the card d.reset() c = d.sched.getCard() d.sched.answerCard(c, 1) assert c.type == c.queue == 2 def test_learn_collapsed(): d = getEmptyCol() # add 2 notes f = d.newNote() f['Front'] = "1" f = d.addNote(f) f = d.newNote() f['Front'] = "2" f = d.addNote(f) # set as a learn card and rebuild queues d.db.execute("update cards set queue=0, type=0") d.reset() # should get '1' first c = d.sched.getCard() assert c.q().endswith("1") # pass it so it's due in 10 minutes d.sched.answerCard(c, 3) # get the other card c = d.sched.getCard() assert c.q().endswith("2") # fail it so it's due in 1 minute d.sched.answerCard(c, 1) # we shouldn't get the same card again c = d.sched.getCard() assert not c.q().endswith("2") def test_learn_day(): d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one" f = d.addNote(f) d.sched.reset() c = d.sched.getCard() d.sched._cardConf(c)['new']['delays'] = [1, 10, 1440, 2880] # pass it d.sched.answerCard(c, 3) # two reps to graduate, 1 more today assert c.left%1000 == 3 assert c.left//1000 == 1 assert d.sched.counts() == (0, 1, 0) c = d.sched.getCard() ni = d.sched.nextIvl assert ni(c, 3) == 86400 # answering it will place it in queue 3 d.sched.answerCard(c, 3) assert c.due == d.sched.today+1 assert c.queue == 3 assert not d.sched.getCard() # for testing, move it back a day c.due -= 1 c.flush() d.reset() assert d.sched.counts() == (0, 1, 0) c = d.sched.getCard() # nextIvl should work assert ni(c, 3) == 86400*2 # if we fail it, it should be back in the correct queue d.sched.answerCard(c, 1) assert c.queue == 1 d.undo() d.reset() c = d.sched.getCard() d.sched.answerCard(c, 3) # simulate the passing of another two days c.due -= 2 c.flush() d.reset() # the last pass should graduate it into a review card assert ni(c, 3) == 86400 d.sched.answerCard(c, 3) assert c.queue == c.type == 2 # if the lapse step is tomorrow, failing it should handle the counts # correctly c.due = 0 c.flush() d.reset() assert d.sched.counts() == (0, 0, 1) d.sched._cardConf(c)['lapse']['delays'] = [1440] c = d.sched.getCard() d.sched.answerCard(c, 1) assert c.queue == 3 assert d.sched.counts() == (0, 0, 0) def test_reviews(): d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) # set the card up as a review card, due 8 days ago c = f.cards()[0] c.type = 2 c.queue = 2 c.due = d.sched.today - 8 c.factor = STARTING_FACTOR c.reps = 3 c.lapses = 1 c.ivl = 100 c.startTimer() c.flush() # save it for later use as well cardcopy = copy.copy(c) # try with an ease of 2 ################################################## c = copy.copy(cardcopy) c.flush() d.reset() d.sched.answerCard(c, 2) assert c.queue == 2 # the new interval should be (100 + 8/4) * 1.2 = 122 assert checkRevIvl(d, c, 122) assert c.due == d.sched.today + c.ivl # factor should have been decremented assert c.factor == 2350 # check counters assert c.lapses == 1 assert c.reps == 4 # ease 3 ################################################## c = copy.copy(cardcopy) c.flush() d.sched.answerCard(c, 3) # the new interval should be (100 + 8/2) * 2.5 = 260 assert checkRevIvl(d, c, 260) assert c.due == d.sched.today + c.ivl # factor should have been left alone assert c.factor == STARTING_FACTOR # ease 4 ################################################## c = copy.copy(cardcopy) c.flush() d.sched.answerCard(c, 4) # the new interval should be (100 + 8) * 2.5 * 1.3 = 351 assert checkRevIvl(d, c, 351) assert c.due == d.sched.today + c.ivl # factor should have been increased assert c.factor == 2650 # leech handling ################################################## c = copy.copy(cardcopy) c.lapses = 7 c.flush() # steup hook hooked = [] def onLeech(card): hooked.append(1) addHook("leech", onLeech) d.sched.answerCard(c, 1) assert hooked assert c.queue == -1 c.load() assert c.queue == -1 def test_review_limits(): d = getEmptyCol() parent = d.decks.get(d.decks.id("parent")) child = d.decks.get(d.decks.id("parent::child")) pconf = d.decks.getConf(d.decks.confId("parentConf")) cconf = d.decks.getConf(d.decks.confId("childConf")) pconf['rev']['perDay'] = 5 d.decks.updateConf(pconf) d.decks.setConf(parent, pconf['id']) cconf['rev']['perDay'] = 10 d.decks.updateConf(cconf) d.decks.setConf(child, cconf['id']) m = d.models.current() m['did'] = child['id'] d.models.save(m) # add some cards for i in range(20): f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) # make them reviews c = f.cards()[0] c.queue = c.type = 2 c.due = 0 c.flush() tree = d.sched.deckDueTree() # (('Default', 1, 0, 0, 0, ()), ('parent', 1514457677462, 5, 0, 0, (('child', 1514457677463, 5, 0, 0, ()),))) assert tree[1][2] == 5 # parent assert tree[1][5][0][2] == 5 # child # .counts() should match d.decks.select(child['id']) d.sched.reset() assert d.sched.counts() == (0, 0, 5) # answering a card in the child should decrement parent count c = d.sched.getCard() d.sched.answerCard(c, 3) assert d.sched.counts() == (0, 0, 4) tree = d.sched.deckDueTree() assert tree[1][2] == 4 # parent assert tree[1][5][0][2] == 4 # child # switch limits d.decks.setConf(parent, cconf['id']) d.decks.setConf(child, pconf['id']) d.decks.select(parent['id']) d.sched.reset() # child limits do not affect the parent tree = d.sched.deckDueTree() assert tree[1][2] == 9 # parent assert tree[1][5][0][2] == 4 # child def test_button_spacing(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) # 1 day ivl review card due now c = f.cards()[0] c.type = 2 c.queue = 2 c.due = d.sched.today c.reps = 1 c.ivl = 1 c.startTimer() c.flush() d.reset() ni = d.sched.nextIvlStr assert ni(c, 2) == "2 days" assert ni(c, 3) == "3 days" assert ni(c, 4) == "4 days" def test_overdue_lapse(): # disabled in commit 3069729776990980f34c25be66410e947e9d51a2 return d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one" d.addNote(f) # simulate a review that was lapsed and is now due for its normal review c = f.cards()[0] c.type = 2 c.queue = 1 c.due = -1 c.odue = -1 c.factor = STARTING_FACTOR c.left = 2002 c.ivl = 0 c.flush() d.sched._clearOverdue = False # checkpoint d.save() d.sched.reset() assert d.sched.counts() == (0, 2, 0) c = d.sched.getCard() d.sched.answerCard(c, 3) # it should be due tomorrow assert c.due == d.sched.today + 1 # revert to before d.rollback() d.sched._clearOverdue = True # with the default settings, the overdue card should be removed from the # learning queue d.sched.reset() assert d.sched.counts() == (0, 0, 1) def test_finished(): d = getEmptyCol() # nothing due assert "Congratulations" in d.sched.finishedMsg() assert "limit" not in d.sched.finishedMsg() f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) # have a new card assert "new cards available" in d.sched.finishedMsg() # turn it into a review d.reset() c = f.cards()[0] c.startTimer() d.sched.answerCard(c, 3) # nothing should be due tomorrow, as it's due in a week assert "Congratulations" in d.sched.finishedMsg() assert "limit" not in d.sched.finishedMsg() def test_nextIvl(): d = getEmptyCol() f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) d.reset() conf = d.decks.confForDid(1) conf['new']['delays'] = [0.5, 3, 10] conf['lapse']['delays'] = [1, 5, 9] c = d.sched.getCard() # new cards ################################################## ni = d.sched.nextIvl assert ni(c, 1) == 30 assert ni(c, 2) == (30+180)//2 assert ni(c, 3) == 180 assert ni(c, 4) == 4*86400 d.sched.answerCard(c, 1) # cards in learning ################################################## assert ni(c, 1) == 30 assert ni(c, 2) == (30+180)//2 assert ni(c, 3) == 180 assert ni(c, 4) == 4*86400 d.sched.answerCard(c, 3) assert ni(c, 1) == 30 assert ni(c, 2) == (180+600)//2 assert ni(c, 3) == 600 assert ni(c, 4) == 4*86400 d.sched.answerCard(c, 3) # normal graduation is tomorrow assert ni(c, 3) == 1*86400 assert ni(c, 4) == 4*86400 # lapsed cards ################################################## c.type = 2 c.ivl = 100 c.factor = STARTING_FACTOR assert ni(c, 1) == 60 assert ni(c, 3) == 100*86400 assert ni(c, 4) == 100*86400 # review cards ################################################## c.queue = 2 c.ivl = 100 c.factor = STARTING_FACTOR # failing it should put it at 60s assert ni(c, 1) == 60 # or 1 day if relearn is false d.sched._cardConf(c)['lapse']['delays']=[] assert ni(c, 1) == 1*86400 # (* 100 1.2 86400)10368000.0 assert ni(c, 2) == 10368000 # (* 100 2.5 86400)21600000.0 assert ni(c, 3) == 21600000 # (* 100 2.5 1.3 86400)28080000.0 assert ni(c, 4) == 28080000 assert d.sched.nextIvlStr(c, 4) == "10.8 months" def test_bury(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] f = d.newNote() f['Front'] = "two" d.addNote(f) c2 = f.cards()[0] # burying d.sched.buryCards([c.id], manual=True) c.load() assert c.queue == -3 d.sched.buryCards([c2.id], manual=False) c2.load() assert c2.queue == -2 d.reset() assert not d.sched.getCard() d.sched.unburyCardsForDeck(type="manual") c.load(); assert c.queue == 0 c2.load(); assert c2.queue == -2 d.sched.unburyCardsForDeck(type="siblings") c2.load(); assert c2.queue == 0 d.sched.buryCards([c.id, c2.id]) d.sched.unburyCardsForDeck(type="all") d.reset() assert d.sched.counts() == (2, 0, 0) def test_suspend(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] # suspending d.reset() assert d.sched.getCard() d.sched.suspendCards([c.id]) d.reset() assert not d.sched.getCard() # unsuspending d.sched.unsuspendCards([c.id]) d.reset() assert d.sched.getCard() # should cope with rev cards being relearnt c.due = 0; c.ivl = 100; c.type = 2; c.queue = 2; c.flush() d.reset() c = d.sched.getCard() d.sched.answerCard(c, 1) assert c.due >= time.time() due = c.due assert c.queue == 1 assert c.type == 3 d.sched.suspendCards([c.id]) d.sched.unsuspendCards([c.id]) c.load() assert c.queue == 1 assert c.type == 3 assert c.due == due # should cope with cards in cram decks c.due = 1 c.flush() cram = d.decks.newDyn("tmp") d.sched.rebuildDyn() c.load() assert c.due != 1 assert c.did != 1 d.sched.suspendCards([c.id]) c.load() assert c.due != 1 assert c.did != 1 assert c.odue == 1 def test_filt_reviewing_early_normal(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] c.ivl = 100 c.type = c.queue = 2 # due in 25 days, so it's been waiting 75 days c.due = d.sched.today + 25 c.mod = 1 c.factor = STARTING_FACTOR c.startTimer() c.flush() d.reset() assert d.sched.counts() == (0,0,0) # create a dynamic deck and refresh it did = d.decks.newDyn("Cram") d.sched.rebuildDyn(did) d.reset() # should appear as normal in the deck list assert sorted(d.sched.deckDueList())[0][2] == 1 # and should appear in the counts assert d.sched.counts() == (0,0,1) # grab it and check estimates c = d.sched.getCard() assert d.sched.answerButtons(c) == 4 assert d.sched.nextIvl(c, 1) == 600 assert d.sched.nextIvl(c, 2) == int(75*1.2)*86400 assert d.sched.nextIvl(c, 3) == int(75*2.5)*86400 assert d.sched.nextIvl(c, 4) == int(75*2.5*1.3)*86400 # answer 'good' d.sched.answerCard(c, 3) checkRevIvl(d, c, 90) assert c.due == d.sched.today + c.ivl assert not c.odue # should not be in learning assert c.queue == 2 # should be logged as a cram rep assert d.db.scalar( "select type from revlog order by id desc limit 1") == 3 # due in 75 days, so it's been waiting 25 days c.ivl = 100 c.due = d.sched.today + 75 c.flush() d.sched.rebuildDyn(did) d.reset() c = d.sched.getCard() assert d.sched.nextIvl(c, 2) == 50*86400 assert d.sched.nextIvl(c, 3) == 100*86400 assert d.sched.nextIvl(c, 4) == 101*86400 def test_filt_keep_lrn_state(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) # fail the card outside filtered deck c = d.sched.getCard() d.sched.answerCard(c, 1) assert c.type == c.queue == 1 # create a dynamic deck and refresh it did = d.decks.newDyn("Cram") d.sched.rebuildDyn(did) d.reset() # card should still be in learning state c.load() assert c.type == c.queue == 1 # emptying the deck preserves learning state d.sched.emptyDyn(did) c.load() assert c.type == c.queue == 1 def test_preview(): # add cards d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] orig = copy.copy(c) f2 = d.newNote() f2['Front'] = "two" d.addNote(f2) # cram deck did = d.decks.newDyn("Cram") cram = d.decks.get(did) cram['resched'] = False d.sched.rebuildDyn(did) d.reset() # grab the first card c = d.sched.getCard() assert d.sched.answerButtons(c) == 2 assert d.sched.nextIvl(c, 1) == 600 assert d.sched.nextIvl(c, 2) == 0 # failing it will push its due time back due = c.due d.sched.answerCard(c, 1) assert c.due != due # the other card should come next c2 = d.sched.getCard() assert c2.id != c.id # passing it will remove it d.sched.answerCard(c2, 2) assert c2.queue == 0 assert c2.reps == 0 assert c2.type == 0 # the other card should appear again c = d.sched.getCard() assert c.id == orig.id # emptying the filtered deck should restore card d.sched.emptyDyn(did) c.load() assert c.queue == 0 assert c.reps == 0 assert c.type == 0 def test_ordcycle(): d = getEmptyCol() # add two more templates and set second active m = d.models.current(); mm = d.models t = mm.newTemplate("Reverse") t['qfmt'] = "{{Back}}" t['afmt'] = "{{Front}}" mm.addTemplate(m, t) t = mm.newTemplate("f2") t['qfmt'] = "{{Front}}" t['afmt'] = "{{Back}}" mm.addTemplate(m, t) mm.save(m) # create a new note; it should have 3 cards f = d.newNote() f['Front'] = "1"; f['Back'] = "1" d.addNote(f) assert d.cardCount() == 3 d.reset() # ordinals should arrive in order assert d.sched.getCard().ord == 0 assert d.sched.getCard().ord == 1 assert d.sched.getCard().ord == 2 def test_counts_idx(): d = getEmptyCol() f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) d.reset() assert d.sched.counts() == (1, 0, 0) c = d.sched.getCard() # counter's been decremented but idx indicates 1 assert d.sched.counts() == (0, 0, 0) assert d.sched.countIdx(c) == 0 # answer to move to learn queue d.sched.answerCard(c, 1) assert d.sched.counts() == (0, 1, 0) # fetching again will decrement the count c = d.sched.getCard() assert d.sched.counts() == (0, 0, 0) assert d.sched.countIdx(c) == 1 # answering should add it back again d.sched.answerCard(c, 1) assert d.sched.counts() == (0, 1, 0) def test_repCounts(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) d.reset() # lrnReps should be accurate on pass/fail assert d.sched.counts() == (1, 0, 0) d.sched.answerCard(d.sched.getCard(), 1) assert d.sched.counts() == (0, 1, 0) d.sched.answerCard(d.sched.getCard(), 1) assert d.sched.counts() == (0, 1, 0) d.sched.answerCard(d.sched.getCard(), 3) assert d.sched.counts() == (0, 1, 0) d.sched.answerCard(d.sched.getCard(), 1) assert d.sched.counts() == (0, 1, 0) d.sched.answerCard(d.sched.getCard(), 3) assert d.sched.counts() == (0, 1, 0) d.sched.answerCard(d.sched.getCard(), 3) assert d.sched.counts() == (0, 0, 0) f = d.newNote() f['Front'] = "two" d.addNote(f) d.reset() # initial pass should be correct too d.sched.answerCard(d.sched.getCard(), 3) assert d.sched.counts() == (0, 1, 0) d.sched.answerCard(d.sched.getCard(), 1) assert d.sched.counts() == (0, 1, 0) d.sched.answerCard(d.sched.getCard(), 4) assert d.sched.counts() == (0, 0, 0) # immediate graduate should work f = d.newNote() f['Front'] = "three" d.addNote(f) d.reset() d.sched.answerCard(d.sched.getCard(), 4) assert d.sched.counts() == (0, 0, 0) # and failing a review should too f = d.newNote() f['Front'] = "three" d.addNote(f) c = f.cards()[0] c.type = 2 c.queue = 2 c.due = d.sched.today c.flush() d.reset() assert d.sched.counts() == (0, 0, 1) d.sched.answerCard(d.sched.getCard(), 1) assert d.sched.counts() == (0, 1, 0) def test_timing(): d = getEmptyCol() # add a few review cards, due today for i in range(5): f = d.newNote() f['Front'] = "num"+str(i) d.addNote(f) c = f.cards()[0] c.type = 2 c.queue = 2 c.due = 0 c.flush() # fail the first one d.reset() c = d.sched.getCard() d.sched.answerCard(c, 1) # the next card should be another review c2 = d.sched.getCard() assert c2.queue == 2 # if the failed card becomes due, it should show first c.due = time.time() - 1 c.flush() d.reset() c = d.sched.getCard() assert c.queue == 1 def test_collapse(): d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one" d.addNote(f) d.reset() # test collapsing c = d.sched.getCard() d.sched.answerCard(c, 1) c = d.sched.getCard() d.sched.answerCard(c, 4) assert not d.sched.getCard() def test_deckDue(): d = getEmptyCol() # add a note with default deck f = d.newNote() f['Front'] = "one" d.addNote(f) # and one that's a child f = d.newNote() f['Front'] = "two" default1 = f.model()['did'] = d.decks.id("Default::1") d.addNote(f) # make it a review card c = f.cards()[0] c.queue = 2 c.due = 0 c.flush() # add one more with a new deck f = d.newNote() f['Front'] = "two" foobar = f.model()['did'] = d.decks.id("foo::bar") d.addNote(f) # and one that's a sibling f = d.newNote() f['Front'] = "three" foobaz = f.model()['did'] = d.decks.id("foo::baz") d.addNote(f) d.reset() assert len(d.decks.decks) == 5 cnts = d.sched.deckDueList() assert cnts[0] == ["Default", 1, 1, 0, 1] assert cnts[1] == ["Default::1", default1, 1, 0, 0] assert cnts[2] == ["foo", d.decks.id("foo"), 0, 0, 0] assert cnts[3] == ["foo::bar", foobar, 0, 0, 1] assert cnts[4] == ["foo::baz", foobaz, 0, 0, 1] tree = d.sched.deckDueTree() assert tree[0][0] == "Default" # sum of child and parent assert tree[0][1] == 1 assert tree[0][2] == 1 assert tree[0][4] == 1 # child count is just review assert tree[0][5][0][0] == "1" assert tree[0][5][0][1] == default1 assert tree[0][5][0][2] == 1 assert tree[0][5][0][4] == 0 # code should not fail if a card has an invalid deck c.did = 12345; c.flush() d.sched.deckDueList() d.sched.deckDueTree() def test_deckTree(): d = getEmptyCol() d.decks.id("new::b::c") d.decks.id("new2") # new should not appear twice in tree names = [x[0] for x in d.sched.deckDueTree()] names.remove("new") assert "new" not in names def test_deckFlow(): d = getEmptyCol() # add a note with default deck f = d.newNote() f['Front'] = "one" d.addNote(f) # and one that's a child f = d.newNote() f['Front'] = "two" default1 = f.model()['did'] = d.decks.id("Default::2") d.addNote(f) # and another that's higher up f = d.newNote() f['Front'] = "three" default1 = f.model()['did'] = d.decks.id("Default::1") d.addNote(f) # should get top level one first, then ::1, then ::2 d.reset() assert d.sched.counts() == (3,0,0) for i in "one", "three", "two": c = d.sched.getCard() assert c.note()['Front'] == i d.sched.answerCard(c, 3) def test_reorder(): d = getEmptyCol() # add a note with default deck f = d.newNote() f['Front'] = "one" d.addNote(f) f2 = d.newNote() f2['Front'] = "two" d.addNote(f2) assert f2.cards()[0].due == 2 found=False # 50/50 chance of being reordered for i in range(20): d.sched.randomizeCards(1) if f.cards()[0].due != f.id: found=True break assert found d.sched.orderCards(1) assert f.cards()[0].due == 1 # shifting f3 = d.newNote() f3['Front'] = "three" d.addNote(f3) f4 = d.newNote() f4['Front'] = "four" d.addNote(f4) assert f.cards()[0].due == 1 assert f2.cards()[0].due == 2 assert f3.cards()[0].due == 3 assert f4.cards()[0].due == 4 d.sched.sortCards([ f3.cards()[0].id, f4.cards()[0].id], start=1, shift=True) assert f.cards()[0].due == 3 assert f2.cards()[0].due == 4 assert f3.cards()[0].due == 1 assert f4.cards()[0].due == 2 def test_forget(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] c.queue = 2; c.type = 2; c.ivl = 100; c.due = 0 c.flush() d.reset() assert d.sched.counts() == (0, 0, 1) d.sched.forgetCards([c.id]) d.reset() assert d.sched.counts() == (1, 0, 0) def test_resched(): d = getEmptyCol() f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] d.sched.reschedCards([c.id], 0, 0) c.load() assert c.due == d.sched.today assert c.ivl == 1 assert c.queue == c.type == 2 d.sched.reschedCards([c.id], 1, 1) c.load() assert c.due == d.sched.today+1 assert c.ivl == +1 def test_norelearn(): d = getEmptyCol() # add a note f = d.newNote() f['Front'] = "one" d.addNote(f) c = f.cards()[0] c.type = 2 c.queue = 2 c.due = 0 c.factor = STARTING_FACTOR c.reps = 3 c.lapses = 1 c.ivl = 100 c.startTimer() c.flush() d.reset() d.sched.answerCard(c, 1) d.sched._cardConf(c)['lapse']['delays'] = [] d.sched.answerCard(c, 1) def test_failmult(): d = getEmptyCol() f = d.newNote() f['Front'] = "one"; f['Back'] = "two" d.addNote(f) c = f.cards()[0] c.type = 2 c.queue = 2 c.ivl = 100 c.due = d.sched.today - c.ivl c.factor = STARTING_FACTOR c.reps = 3 c.lapses = 1 c.startTimer() c.flush() d.sched._cardConf(c)['lapse']['mult'] = 0.5 c = d.sched.getCard() d.sched.answerCard(c, 1) assert c.ivl == 50 # failing again, the actual elapsed interval is 0, # so the card is reset to new d.sched.answerCard(c, 1) assert c.ivl == 1 def test_moveVersions(): col = _getEmptyCol(schedVer=1) n = col.newNote() n['Front'] = "one" col.addNote(n) # make it a learning card col.reset() c = col.sched.getCard() col.sched.answerCard(c, 1) # the move to v2 should reset it to new col.changeSchedulerVer(2) c.load() assert c.queue == 0 assert c.type == 0 # fail it again, and manually bury it col.reset() c = col.sched.getCard() col.sched.answerCard(c, 1) col.sched.buryCards([c.id]) c.load() assert c.queue == -3 # revert to version 1 col.changeSchedulerVer(1) # card should have moved queues c.load() assert c.queue == -2 # and it should be new again when unburied col.sched.unburyCards() c.load() assert c.queue == c.type == 0 anki-2.1.0+dfsg~b36/tests/test_stats.py000066400000000000000000000012431323611211500177700ustar00rootroot00000000000000# coding: utf-8 import os from tests.shared import getEmptyCol def test_stats(): d = getEmptyCol() f = d.newNote() f['Front'] = "foo" d.addNote(f) c = f.cards()[0] # card stats assert d.cardStats(c) d.reset() c = d.sched.getCard() d.sched.answerCard(c, 3) d.sched.answerCard(c, 2) assert d.cardStats(c) def test_graphs_empty(): d = getEmptyCol() assert d.stats().report() def test_graphs(): from anki import Collection as aopen d = aopen(os.path.expanduser("~/test.anki2")) g = d.stats() rep = g.report() with open(os.path.expanduser("~/test.html"), "w") as f: f.write(rep) return anki-2.1.0+dfsg~b36/tests/test_sync.py000066400000000000000000000263631323611211500176200ustar00rootroot00000000000000# coding: utf-8 import nose, os, shutil, time from anki import Collection as aopen, Collection from anki.utils import intTime from anki.sync import Syncer, LocalServer from anki.consts import STARTING_FACTOR from tests.shared import getEmptyCol, getEmptyDeckWith import anki.stdmodels # Local tests ########################################################################## deck1=None deck2=None client=None server=None server2=None def setup_basic(): global deck1, deck2, client, server deck1 = getEmptyCol() # add a note to deck 1 f = deck1.newNote() f['Front'] = "foo"; f['Back'] = "bar"; f.tags = ["foo"] deck1.addNote(f) # answer it deck1.reset(); deck1.sched.answerCard(deck1.sched.getCard(), 4) # repeat for deck2 deck2 = getEmptyDeckWith(server=True) f = deck2.newNote() f['Front'] = "bar"; f['Back'] = "bar"; f.tags = ["bar"] deck2.addNote(f) deck2.reset(); deck2.sched.answerCard(deck2.sched.getCard(), 4) # start with same schema and sync time deck1.scm = deck2.scm = 0 # and same mod time, so sync does nothing t = intTime(1000) deck1.save(mod=t); deck2.save(mod=t) server = LocalServer(deck2) client = Syncer(deck1, server) def setup_modified(): setup_basic() # mark deck1 as changed time.sleep(0.1) deck1.setMod() deck1.save() @nose.with_setup(setup_basic) def test_nochange(): assert client.sync() == "noChanges" @nose.with_setup(setup_modified) def test_changedSchema(): deck1.scm += 1 deck1.setMod() assert client.sync() == "fullSync" @nose.with_setup(setup_modified) def test_sync(): def check(num): for d in deck1, deck2: for t in ("revlog", "notes", "cards"): assert d.db.scalar("select count() from %s" % t) == num assert len(d.models.all()) == num*len(anki.stdmodels.models) # the default deck and config have an id of 1, so always 1 assert len(d.decks.all()) == 1 assert len(d.decks.dconf) == 1 assert len(d.tags.all()) == num check(1) origUsn = deck1.usn() assert client.sync() == "success" # last sync times and mod times should agree assert deck1.mod == deck2.mod assert deck1._usn == deck2._usn assert deck1.mod == deck1.ls assert deck1._usn != origUsn # because everything was created separately it will be merged in. in # actual use, we use a full sync to ensure a common starting point. check(2) # repeating it does nothing assert client.sync() == "noChanges" # if we bump mod time, the decks will sync but should remain the same. deck1.setMod() deck1.save() assert client.sync() == "success" check(2) # crt should be synced deck1.crt = 123 deck1.setMod() assert client.sync() == "success" assert deck1.crt == deck2.crt @nose.with_setup(setup_modified) def test_models(): test_sync() # update model one cm = deck1.models.current() cm['name'] = "new" time.sleep(1) deck1.models.save(cm) deck1.save() assert deck2.models.get(cm['id'])['name'].startswith("Basic") assert client.sync() == "success" assert deck2.models.get(cm['id'])['name'] == "new" # deleting triggers a full sync deck1.scm = deck2.scm = 0 deck1.models.rem(cm) deck1.save() assert client.sync() == "fullSync" @nose.with_setup(setup_modified) def test_notes(): test_sync() # modifications should be synced nid = deck1.db.scalar("select id from notes") note = deck1.getNote(nid) assert note['Front'] != "abc" note['Front'] = "abc" note.flush() deck1.save() assert client.sync() == "success" assert deck2.getNote(nid)['Front'] == "abc" # deletions too assert deck1.db.scalar("select 1 from notes where id = ?", nid) deck1.remNotes([nid]) deck1.save() assert client.sync() == "success" assert not deck1.db.scalar("select 1 from notes where id = ?", nid) assert not deck2.db.scalar("select 1 from notes where id = ?", nid) @nose.with_setup(setup_modified) def test_cards(): test_sync() nid = deck1.db.scalar("select id from notes") note = deck1.getNote(nid) card = note.cards()[0] # answer the card locally card.startTimer() deck1.sched.answerCard(card, 4) assert card.reps == 2 deck1.save() assert deck2.getCard(card.id).reps == 1 assert client.sync() == "success" assert deck2.getCard(card.id).reps == 2 # if it's modified on both sides , later mod time should win for test in ((deck1, deck2), (deck2, deck1)): time.sleep(1) c = test[0].getCard(card.id) c.reps = 5; c.flush() test[0].save() time.sleep(1) c = test[1].getCard(card.id) c.reps = 3; c.flush() test[1].save() assert client.sync() == "success" assert test[1].getCard(card.id).reps == 3 assert test[0].getCard(card.id).reps == 3 # removals should work too deck1.remCards([card.id]) deck1.save() assert deck2.db.scalar("select 1 from cards where id = ?", card.id) assert client.sync() == "success" assert not deck2.db.scalar("select 1 from cards where id = ?", card.id) @nose.with_setup(setup_modified) def test_tags(): test_sync() def sortedTags(deck): return sorted(deck.tags.all()) assert sortedTags(deck1) == sortedTags(deck2) deck1.tags.register(["abc"]) deck2.tags.register(["xyz"]) assert sortedTags(deck1) != sortedTags(deck2) deck1.save() time.sleep(0.1) deck2.save() assert client.sync() == "success" assert sortedTags(deck1) == sortedTags(deck2) @nose.with_setup(setup_modified) def test_decks(): test_sync() assert len(deck1.decks.all()) == 1 assert len(deck1.decks.all()) == len(deck2.decks.all()) deck1.decks.id("new") assert len(deck1.decks.all()) != len(deck2.decks.all()) time.sleep(0.1) deck2.decks.id("new2") deck1.save() time.sleep(0.1) deck2.save() assert client.sync() == "success" assert sorted(deck1.tags.all()) == sorted(deck2.tags.all()) assert len(deck1.decks.all()) == len(deck2.decks.all()) assert len(deck1.decks.all()) == 3 assert deck1.decks.confForDid(1)['maxTaken'] == 60 deck2.decks.confForDid(1)['maxTaken'] = 30 deck2.decks.save(deck2.decks.confForDid(1)) deck2.save() assert client.sync() == "success" assert deck1.decks.confForDid(1)['maxTaken'] == 30 @nose.with_setup(setup_modified) def test_conf(): test_sync() assert deck2.conf['curDeck'] == 1 deck1.conf['curDeck'] = 2 time.sleep(0.1) deck1.setMod() deck1.save() assert client.sync() == "success" assert deck2.conf['curDeck'] == 2 @nose.with_setup(setup_modified) def test_threeway(): test_sync() deck1.close(save=False) d3path = deck1.path.replace(".anki", "2.anki") shutil.copy2(deck1.path, d3path) deck1.reopen() deck3 = aopen(d3path) client2 = Syncer(deck3, server) assert client2.sync() == "noChanges" # client 1 adds a card at time 1 time.sleep(1) f = deck1.newNote() f['Front'] = "1"; deck1.addNote(f) deck1.save() # at time 2, client 2 syncs to server time.sleep(1) deck3.setMod() deck3.save() assert client2.sync() == "success" # at time 3, client 1 syncs, adding the older note time.sleep(1) assert client.sync() == "success" assert deck1.noteCount() == deck2.noteCount() # syncing client2 should pick it up assert client2.sync() == "success" assert deck1.noteCount() == deck2.noteCount() == deck3.noteCount() def test_threeway2(): # for this test we want ms precision of notes so we don't have to # sleep a lot import anki.notes intTime = anki.notes.intTime anki.notes.intTime = lambda x=1: intTime(1000) def setup(): # create collection 1 with a single note c1 = getEmptyCol() f = c1.newNote() f['Front'] = "startingpoint" nid = f.id c1.addNote(f) cid = f.cards()[0].id c1.beforeUpload() # start both clients and server off in this state s1path = c1.path.replace(".anki2", "-s1.anki2") c2path = c1.path.replace(".anki2", "-c2.anki2") shutil.copy2(c1.path, s1path) shutil.copy2(c1.path, c2path) # open them c1 = Collection(c1.path) c2 = Collection(c2path) s1 = Collection(s1path, server=True) return c1, c2, s1, nid, cid c1, c2, s1, nid, cid = setup() # modify c1 then sync c1->s1 n = c1.getNote(nid) t = "firstmod" n['Front'] = t n.flush() c1.db.execute("update cards set mod=1, usn=-1") srv = LocalServer(s1) clnt1 = Syncer(c1, srv) clnt1.sync() n.load() assert n['Front'] == t assert s1.getNote(nid)['Front'] == t assert s1.db.scalar("select mod from cards") == 1 # sync s1->c2 clnt2 = Syncer(c2, srv) clnt2.sync() assert c2.getNote(nid)['Front'] == t assert c2.db.scalar("select mod from cards") == 1 # modify c1 and sync time.sleep(0.001) t = "secondmod" n = c1.getNote(nid) n['Front'] = t n.flush() c1.db.execute("update cards set mod=2, usn=-1") clnt1.sync() # modify c2 and sync - both c2 and server should be the same time.sleep(0.001) t2 = "thirdmod" n = c2.getNote(nid) n['Front'] = t2 n.flush() c2.db.execute("update cards set mod=3, usn=-1") clnt2.sync() n.load() assert n['Front'] == t2 assert c2.db.scalar("select mod from cards") == 3 n = s1.getNote(nid) assert n['Front'] == t2 assert s1.db.scalar("select mod from cards") == 3 # and syncing c1 again should yield the updated note as well clnt1.sync() n = s1.getNote(nid) assert n['Front'] == t2 assert s1.db.scalar("select mod from cards") == 3 n = c1.getNote(nid) assert n['Front'] == t2 assert c1.db.scalar("select mod from cards") == 3 def _test_speed(): t = time.time() deck1 = aopen(os.path.expanduser("~/rapid.anki")) for tbl in "revlog", "cards", "notes", "graves": deck1.db.execute("update %s set usn = -1 where usn != -1"%tbl) for m in deck1.models.all(): m['usn'] = -1 for tx in deck1.tags.all(): deck1.tags.tags[tx] = -1 deck1._usn = -1 deck1.save() deck2 = getEmptyDeckWith(server=True) deck1.scm = deck2.scm = 0 server = LocalServer(deck2) client = Syncer(deck1, server) print("load %d" % ((time.time() - t)*1000)); t = time.time() assert client.sync() == "success" print("sync %d" % ((time.time() - t)*1000)); t = time.time() @nose.with_setup(setup_modified) def test_filtered_delete(): test_sync() nid = deck1.db.scalar("select id from notes") note = deck1.getNote(nid) card = note.cards()[0] card.queue = 2 card.type = 2 card.ivl = 10 card.factor = STARTING_FACTOR card.due = deck1.sched.today card.flush() # put cards into a filtered deck did = deck1.decks.newDyn("dyn") deck1.sched.rebuildDyn(did) # sync the filtered deck assert client.sync() == "success" # answer the card locally time.sleep(1) card.load() card.startTimer() deck1.sched.answerCard(card, 4) assert card.ivl > 10 # delete the filtered deck deck1.decks.rem(did) # sync again assert client.sync() == "success" card.load() assert card.ivl > 10 return anki-2.1.0+dfsg~b36/tests/test_undo.py000066400000000000000000000043021323611211500175760ustar00rootroot00000000000000# coding: utf-8 import time from tests.shared import getEmptyCol from anki.consts import * def test_op(): d = getEmptyCol() # should have no undo by default assert not d.undoName() # let's adjust a study option d.save("studyopts") d.conf['abc'] = 5 # it should be listed as undoable assert d.undoName() == "studyopts" # with about 5 minutes until it's clobbered assert time.time() - d._lastSave < 1 # undoing should restore the old value d.undo() assert not d.undoName() assert 'abc' not in d.conf # an (auto)save will clear the undo d.save("foo") assert d.undoName() == "foo" d.save() assert not d.undoName() # and a review will, too d.save("add") f = d.newNote() f['Front'] = "one" d.addNote(f) d.reset() assert d.undoName() == "add" c = d.sched.getCard() d.sched.answerCard(c, 2) assert d.undoName() == "Review" def test_review(): d = getEmptyCol(schedVer=2) d.conf['counts'] = COUNT_REMAINING f = d.newNote() f['Front'] = "one" d.addNote(f) d.reset() assert not d.undoName() # answer assert d.sched.counts() == (1, 0, 0) c = d.sched.getCard() assert c.queue == 0 d.sched.answerCard(c, 3) assert c.left == 1001 assert d.sched.counts() == (0, 1, 0) assert c.queue == 1 # undo assert d.undoName() d.undo() d.reset() assert d.sched.counts() == (1, 0, 0) c.load() assert c.queue == 0 assert c.left != 1001 assert not d.undoName() # we should be able to undo multiple answers too f = d.newNote() f['Front'] = "two" d.addNote(f) d.reset() assert d.sched.counts() == (2, 0, 0) c = d.sched.getCard() d.sched.answerCard(c, 3) c = d.sched.getCard() d.sched.answerCard(c, 3) assert d.sched.counts() == (0, 2, 0) d.undo() d.reset() assert d.sched.counts() == (1, 1, 0) d.undo() d.reset() assert d.sched.counts() == (2, 0, 0) # performing a normal op will clear the review queue c = d.sched.getCard() d.sched.answerCard(c, 3) assert d.undoName() == "Review" d.save("foo") assert d.undoName() == "foo" d.undo() assert not d.undoName() anki-2.1.0+dfsg~b36/tests/test_utils.py000066400000000000000000000002571323611211500177760ustar00rootroot00000000000000# coding: utf-8 from anki.utils import fmtTimeSpan def test_fmtTimeSpan(): assert fmtTimeSpan(5) == "5 seconds" assert fmtTimeSpan(5, inTime=True) == "in 5 seconds" anki-2.1.0+dfsg~b36/tools/000077500000000000000000000000001323611211500152175ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/tools/anki-wait.bat000066400000000000000000000000621323611211500175710ustar00rootroot00000000000000cd .. set PYTHONPATH=../lib python anki pause anki-2.1.0+dfsg~b36/tools/build_ui.sh000077500000000000000000000017011323611211500173510ustar00rootroot00000000000000#!/bin/bash # # generate python files based on the designer ui files. pyuic5 and pyrcc5 # should be on the path. # if [ ! -d "designer" ] then echo "Please run this from the project root" exit fi mkdir -p aqt/forms init=aqt/forms/__init__.py temp=aqt/forms/scratch rm -f $init $temp echo "# This file auto-generated by build_ui.sh. Don't edit." > $init echo "__all__ = [" >> $init echo "Generating forms.." for i in designer/*.ui do base=$(basename $i .ui) py="aqt/forms/${base}.py" echo " \"$base\"," >> $init echo "from . import $base" >> $temp if [ $i -nt $py ]; then echo " * "$py pyuic5 --from-imports $i -o $py # munge the output to use gettext perl -pi.bak -e 's/(QtGui\.QApplication\.)?_?translate\(".*?", /_(/; s/, None.*/))/' $py rm $py.bak fi done echo "]" >> $init cat $temp >> $init rm $temp echo "Building resources.." pyrcc5 designer/icons.qrc -o aqt/forms/icons_rc.py anki-2.1.0+dfsg~b36/tools/runanki.system000077500000000000000000000001341323611211500201350ustar00rootroot00000000000000#!/usr/bin/env python3 import sys sys.path.append("/usr/share/anki") import aqt aqt.run() anki-2.1.0+dfsg~b36/tools/tests.sh000077500000000000000000000010061323611211500167150ustar00rootroot00000000000000#!/bin/bash # # Usage: # tools/tests.sh # run all tests # tools/tests.sh decks # test only test_decks.py # coverage=1 tools/tests.sh # run with coverage test BIN="$(cd "`dirname "$0"`"; pwd)" export PYTHONPATH=${BIN}/..:${PYTHONPATH} dir=. if [ x$1 = x ]; then lim="tests" else lim="tests.test_$1" fi if [ x$coverage != x ]; then args="--with-coverage" else args="" echo "Call with coverage=1 to run coverage tests" fi (cd $dir && nosetests -vs --processes=16 $lim $args --cover-package=anki) anki-2.1.0+dfsg~b36/web/000077500000000000000000000000001323611211500146345ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/web/deckbrowser.css000066400000000000000000000014651323611211500176660ustar00rootroot00000000000000a.deck { color: #000; text-decoration: none; min-width: 5em; display: inline-block; } a.deck:hover { text-decoration: underline; } tr.deck td { border-bottom: 1px solid #e7e7e7; } tr.top-level-drag-row td { border-bottom: 1px solid transparent; } td { white-space: nowrap; } tr.drag-hover td { border-bottom: 1px solid #aaa; } body { margin: 1em; -webkit-user-select: none; } .current { background-color: #e7e7e7; } .decktd { min-width: 15em; } .count { min-width: 4em; text-align: right; } .optscol { width: 2em; } .collapse { color: #000; text-decoration: none; display: inline-block; width: 1em; } .filtered { color: #00a !important; } .gears { width: 1em; height: 1em; opacity: .5; padding-top: 0.2em; } anki-2.1.0+dfsg~b36/web/deckbrowser.js000066400000000000000000000012731323611211500175070ustar00rootroot00000000000000$(init); function init() { $("tr.deck").draggable({ scroll: false, // can't use "helper: 'clone'" because of a bug in jQuery 1.5 helper: function (event) { return $(this).clone(false); }, delay: 200, opacity: 0.7 }); $("tr.deck").droppable({ drop: handleDropEvent, hoverClass: 'drag-hover' }); $("tr.top-level-drag-row").droppable({ drop: handleDropEvent, hoverClass: 'drag-hover' }); } function handleDropEvent(event, ui) { var draggedDeckId = ui.draggable.attr('id'); var ontoDeckId = $(this).attr('id') || ''; pycmd("drag:" + draggedDeckId + "," + ontoDeckId); } anki-2.1.0+dfsg~b36/web/editor.css000066400000000000000000000017501323611211500166370ustar00rootroot00000000000000.field { border: 1px solid #aaa; background: #fff; color: #000; padding: 5px; overflow-wrap: break-word; } /* prevent floated images from being displayed outside field */ .field:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .fname { vertical-align: middle; padding: 0; } img { max-width: 90%; } body { margin: 5px; } #topbuts { position: fixed; height: 24px; top: 0; padding: 2px; left: 0; right: 0; } .topbut { width: 16px; height: 16px; } .rainbow { background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0.00, #f77), color-stop(50%, #7f7), color-stop(100%, #77f)); } .linkb { -webkit-appearance: none; border: 0; padding: 0px 2px; background: transparent; } .linkb:disabled { opacity: 0.3; cursor: not-allowed; } .highlighted { border-bottom: 3px solid #000; } #fields { margin-top: 35px; } anki-2.1.0+dfsg~b36/web/editor.js000066400000000000000000000273571323611211500164760ustar00rootroot00000000000000var currentField = null; var changeTimer = null; var dropTarget = null; String.prototype.format = function () { var args = arguments; return this.replace(/\{\d+\}/g, function (m) { return args[m.match(/\d+/)]; }); }; function setFGButton(col) { $("#forecolor")[0].style.backgroundColor = col; } function saveNow() { clearChangeTimer(); if (currentField) { currentField.blur(); } } function onKey() { // esc clears focus, allowing dialog to close if (window.event.which === 27) { currentField.blur(); return; } // shift+tab goes to previous field if (navigator.platform === "MacIntel" && window.event.which === 9 && window.event.shiftKey) { window.event.preventDefault(); focusPrevious(); return; } clearChangeTimer(); changeTimer = setTimeout(function () { updateButtonState(); saveField("key"); }, 600); } function insertNewline() { if (!inPreEnvironment()) { setFormat("insertText", "\n"); return; } // in some cases inserting a newline will not show any changes, // as a trailing newline at the end of a block does not render // differently. so in such cases we note the height has not // changed and insert an extra newline. var r = window.getSelection().getRangeAt(0); if (!r.collapsed) { // delete any currently selected text first, making // sure the delete is undoable setFormat("delete"); } var oldHeight = currentField.clientHeight; setFormat("inserthtml", "\n"); if (currentField.clientHeight === oldHeight) { setFormat("inserthtml", "\n"); } } // is the cursor in an environment that respects whitespace? function inPreEnvironment() { var n = window.getSelection().anchorNode; if (n.nodeType === 3) { n = n.parentNode; } return window.getComputedStyle(n).whiteSpace.startsWith("pre"); } function checkForEmptyField() { if (currentField.innerHTML === "") { currentField.innerHTML = "
"; } } function updateButtonState() { var buts = ["bold", "italic", "underline", "superscript", "subscript"]; for (var i = 0; i < buts.length; i++) { var name = buts[i]; if (document.queryCommandState(name)) { $("#" + name).addClass("highlighted"); } else { $("#" + name).removeClass("highlighted"); } } // fixme: forecolor // 'col': document.queryCommandValue("forecolor") } function toggleEditorButton(buttonid) { if ($(buttonid).hasClass("highlighted")) { $(buttonid).removeClass("highlighted"); } else { $(buttonid).addClass("highlighted"); } } function setFormat(cmd, arg, nosave) { document.execCommand(cmd, false, arg); if (!nosave) { saveField('key'); updateButtonState(); } } function clearChangeTimer() { if (changeTimer) { clearTimeout(changeTimer); changeTimer = null; } } function onFocus(elem) { currentField = elem; pycmd("focus:" + currentFieldOrdinal()); enableButtons(); // don't adjust cursor on mouse clicks if (mouseDown) { return; } // do this twice so that there's no flicker on newer versions caretToEnd(); // scroll if bottom of element off the screen function pos(obj) { var cur = 0; do { cur += obj.offsetTop; } while (obj = obj.offsetParent); return cur; } var y = pos(elem); if ((window.pageYOffset + window.innerHeight) < (y + elem.offsetHeight) || window.pageYOffset > y) { window.scroll(0, y + elem.offsetHeight - window.innerHeight); } } function focusField(n) { if (n === null) { return; } $("#f" + n).focus(); } function focusPrevious() { if (!currentField) { return; } var previous = currentFieldOrdinal() - 1; if (previous >= 0) { focusField(previous); } } function onDragOver(elem) { // if we focus the target element immediately, the drag&drop turns into a // copy, so note it down for later instead dropTarget = elem; } function makeDropTargetCurrent() { dropTarget.focus(); // the focus event may not fire if the window is not active, so make sure // the current field is set currentField = dropTarget; } function onPaste(elem) { pycmd("paste"); window.event.preventDefault(); } function caretToEnd() { var r = document.createRange(); r.selectNodeContents(currentField); r.collapse(false); var s = document.getSelection(); s.removeAllRanges(); s.addRange(r); } function onBlur() { if (currentField) { saveField("blur"); currentField = null; } clearChangeTimer(); disableButtons(); } function saveField(type) { if (!currentField) { // no field has been focused yet return; } // type is either 'blur' or 'key' pycmd(type + ":" + currentFieldOrdinal() + ":" + currentField.innerHTML); clearChangeTimer(); } function currentFieldOrdinal() { return currentField.id.substring(1); } function wrappedExceptForWhitespace(text, front, back) { var match = text.match(/^(\s*)([^]*?)(\s*)$/); return match[1] + front + match[2] + back + match[3]; } function disableButtons() { $("button.linkb:not(.perm)").prop("disabled", true); } function enableButtons() { $("button.linkb").prop("disabled", false); } // disable the buttons if a field is not currently focused function maybeDisableButtons() { if (!document.activeElement || document.activeElement.className !== "field") { disableButtons(); } else { enableButtons(); } } function wrap(front, back) { if (currentField.dir === "rtl") { front = "‫" + front + "‬"; back = "‫" + back + "‬"; } var s = window.getSelection(); var r = s.getRangeAt(0); var content = r.cloneContents(); var span = document.createElement("span"); span.appendChild(content); var new_ = wrappedExceptForWhitespace(span.innerHTML, front, back); setFormat("inserthtml", new_); if (!span.innerHTML) { // run with an empty selection; move cursor back past postfix r = s.getRangeAt(0); r.setStart(r.startContainer, r.startOffset - back.length); r.collapse(true); s.removeAllRanges(); s.addRange(r); } } function onCutOrCopy() { pycmd("cutOrCopy"); return true; } function setFields(fields) { var txt = ""; for (var i = 0; i < fields.length; i++) { var n = fields[i][0]; var f = fields[i][1]; if (!f) { f = "
"; } txt += "{0}".format(n); txt += "
" + txt + ""); maybeDisableButtons(); } function setBackgrounds(cols) { for (var i = 0; i < cols.length; i++) { $("#f" + i).css("background", cols[i]); } } function setFonts(fonts) { for (var i = 0; i < fonts.length; i++) { var n = $("#f" + i); n.css("font-family", fonts[i][0]) .css("font-size", fonts[i][1]); n[0].dir = fonts[i][2] ? "rtl" : "ltr"; } } function showDupes() { $("#dupes").show(); } function hideDupes() { $("#dupes").hide(); } var pasteHTML = function (html, internal, extendedMode) { html = filterHTML(html, internal, extendedMode); setFormat("inserthtml", html); }; var filterHTML = function (html, internal, extendedMode) { // wrap it in as we aren't allowed to change top level elements var top = $.parseHTML("" + html + "")[0]; if (internal) { filterInternalNode(top); } else { filterNode(top, extendedMode); } var outHtml = top.innerHTML; // remove newlines in HTML, as they break cloze deletions, and collapse whitespace outHtml = outHtml.replace(/[\n\t ]+/g, " ").trim(); //console.log(`input html: ${html}`); //console.log(`outpt html: ${outHtml}`); return outHtml; }; var allowedTagsBasic = {}; var allowedTagsExtended = {}; var TAGS_WITHOUT_ATTRS = ["P", "DIV", "BR", "B", "I", "U", "EM", "STRONG", "SUB", "SUP"]; var i; for (i = 0; i < TAGS_WITHOUT_ATTRS.length; i++) { allowedTagsBasic[TAGS_WITHOUT_ATTRS[i]] = {"attrs": []}; } TAGS_WITHOUT_ATTRS = ["H1", "H2", "H3", "LI", "UL", "OL", "BLOCKQUOTE", "CODE", "PRE", "TABLE", "DD", "DT", "DL"]; for (i = 0; i < TAGS_WITHOUT_ATTRS.length; i++) { allowedTagsExtended[TAGS_WITHOUT_ATTRS[i]] = {"attrs": []}; } allowedTagsBasic["IMG"] = {"attrs": ["SRC"]}; allowedTagsExtended["A"] = {"attrs": ["HREF"]}; allowedTagsExtended["TR"] = {"attrs": ["ROWSPAN"]}; allowedTagsExtended["TD"] = {"attrs": ["COLSPAN", "ROWSPAN"]}; allowedTagsExtended["TH"] = {"attrs": ["COLSPAN", "ROWSPAN"]}; // add basic tags to extended Object.assign(allowedTagsExtended, allowedTagsBasic); // filtering from another field var filterInternalNode = function (node) { if (node.tagName === "SPAN") { node.style.removeProperty("background-color"); node.style.removeProperty("font-size"); node.style.removeProperty("font-family"); } // recurse for (var i = 0; i < node.childNodes.length; i++) { filterInternalNode(node.childNodes[i]); } }; // filtering from external sources var filterNode = function (node, extendedMode) { // text node? if (node.nodeType === 3) { return; } // descend first, and take a copy of the child nodes as the loop will skip // elements due to node modifications otherwise var nodes = []; var i; for (i = 0; i < node.childNodes.length; i++) { nodes.push(node.childNodes[i]); } for (i = 0; i < nodes.length; i++) { filterNode(nodes[i], extendedMode); } if (node.tagName === "ANKITOP") { return; } var tag; if (extendedMode) { tag = allowedTagsExtended[node.tagName]; } else { tag = allowedTagsBasic[node.tagName]; } if (!tag) { if (!node.innerHTML) { node.parentNode.removeChild(node); } else { node.outerHTML = node.innerHTML; } } else { // allowed, filter out attributes var toRemove = []; for (i = 0; i < node.attributes.length; i++) { var attr = node.attributes[i]; var attrName = attr.name.toUpperCase(); if (tag.attrs.indexOf(attrName) === -1) { toRemove.push(attr); } } for (i = 0; i < toRemove.length; i++) { node.removeAttributeNode(toRemove[i]); } } }; var mouseDown = 0; $(function () { document.body.onmousedown = function () { mouseDown++; }; document.body.onmouseup = function () { mouseDown--; }; document.onclick = function (evt) { var src = window.event.srcElement; if (src.tagName === "IMG") { // image clicked; find contenteditable parent var p = src; while (p = p.parentNode) { if (p.className === "field") { $("#" + p.id).focus(); break; } } } }; // prevent editor buttons from taking focus $("button.linkb").on("mousedown", function (e) { e.preventDefault(); }); }); anki-2.1.0+dfsg~b36/web/imgs/000077500000000000000000000000001323611211500155735ustar00rootroot00000000000000anki-2.1.0+dfsg~b36/web/imgs/anki-logo-thin.png000066400000000000000000000141651323611211500211300ustar00rootroot00000000000000PNG  IHDRVP7sRGBbKGD pHYsodtIME$FIDATx]wXrH `hkK@`)D551hK" BT~`9g;ه眝ݝ{OQ.@B Y%HP ̈́W%Hf Y%H6 J U AY%H :ulӫۈB(B#bb㏟x#9^9'ɿzpO}(j&2 36p_oJ+Ov_6~Ν^pDDVex?ZxRb$;w#8:iik,_kk'YMz[U$I?DBY |I=U-G鵜]hUv3zf%%%& =Ϟ=! (͝1 oANNA9Y+iZlBi)fTzܙˉ\qi!nׅa y7۰cU&''kY-,,J%EQU>Kq5Y!Ek_5%+G}FEE,˧s&&&">\ ?!vnB+D)R@[6kWr3~5_"H66[9vwsO[P d b^^ӧO씃Z `dd+! @łW 4iĉ4Mmťu֢hI֖6-_x80݋߿dddfff5YY$#2$ @ }a fM ?ٸUk)i ޼&SoL0ȩ{?sgoފ=L;z;&p o0jx΍V抴Lcz۬['O}9Anڱ +خw<>0 ?}kwB柃$#^9y&>:+z{5PNsoB4co|פX͌|&=16"[)Srvq"U/0D6wILp\CAj23-T5]8lb[Ĕ23psJHP ķ\9nռB[wBjחdBJNB9 Yr`JQBE4hdҕ-PFT[$a`nx|`݌/-~]5}XRa3#&+?F2D7q֭25QN[og/fuOZaoo_RFJFBUyPJQ\FY * #Lj& m[96t%>se¼euuF-&8V0s SʀaicRD {ޜ0p{15)h&5)M ؾ}Ν;yWW 9$P뫜2Pdzɳ2& VV[XiR8ݜ¼Oht<<\EX9o߃xuqk57"Dx[0qn ݾp$fffӧO}}}5m2nYGL->QVZhT[ܒg!Kc%/CUxR/]XߴcaAJz% ڵHmo+lA iג0338qMMM(۞,P3Uqr<(`TZGdۮ=6؅Ű֮^YPYEe 3 7W"oϙ7olV~ h20|u]jA/-fJjJR"!w5]Tt-1׷N-ͅ³}/z1ڴlkg8banfXHcPX}GY\ O-@M2eqEC<_&iO+ژSfM<˿(O~g3w>B!!J; V~eLg>ݪpssk߾=+Yc{9p+ȪB2re0C]AIf0\ $ D:<`TG!{1B޺uke A6_n%Hs[ Պ6 մ|YElZ~#SOwsXth9aa?N傋ql0777!!GS- nyeܕ,ՍE5PNi hK;zѺG׆hd݈ֆ8גN2,©F\Z[߹Ӽ҈^(gc'sJ3SU֤@rp>LU}Xȼ<6hyvle"{ˠűz}H$.`ͱe3ZhUSУ|zs}Қa;Da>.}drP ]iw#IªKvRq/*tU4&2Bp toGá <.e3 LN1kTJ6V-pYݱ"$/7 uvmZ#&A8::ֹBQQQ5Y)oqZk0pÆ 2Ņa<[DX~gu0l咁S8E&u8.'Gל;8uk)8 ptt4 OTnAKjժ7o>y$+++11~ >|0 P*H/aDKgB//m)bv)Ftu-\.};,MTZIh.'-b7Q(\~N5H}^Ӝk>غKɣDV@QH߀sZҍ`Z7%!0C5, SMi%ڶm[nn&ӦMc&%rGK}rCo&!? ^ 8%d+,MY}njbϹJ&4EP3|}}tUW)(dND79rHRR&#GXX^C+>{ᲠA}>/֦xITߏģ42YJ1W;eJg 000pĈrNAj֔5WpDZˍf̘!3̵Ԛ"-I߆7h{XXrLWa0$^ 6q4b~QCO anki-2.1.0+dfsg~b36/web/imgs/media-record.png000066400000000000000000000013271323611211500206370ustar00rootroot00000000000000PNG  IHDR<<:rtEXtSoftwareAdobe ImageReadyqe<yIDATxm0@ bl@:ޠ!#DL l6hHu1V\Fj.RORً{G[djT& `{mlT,Ap۫6k"puYyxK0ې,X Cp8.GWYl7>?+o Mal <4W'4Mw.53Jmws=Xz8*]W5qK=G=J`%Kn$a`8.4000000000 &r[IENDB`anki-2.1.0+dfsg~b36/web/imgs/paperclip.png000066400000000000000000000014531323611211500202630ustar00rootroot00000000000000PNG  IHDR<<:rtEXtSoftwareAdobe ImageReadyqe<IDATxm0 S0#tntupMP!D7 ZKA#cRjkxMoF'ލF; ,OѦtZT-Sm_UD[Ά#>$6ExEw&7./im ݁SDps'd*9jݐay* N9`- =o¦Ipg7\x!W&r j@cl2籣U7$mE]ݸ_c7 m8nAX f`ԫ\*(k!\6sh O>Wyŕ82 u _V3F3`ֱUR`,A9`}D|?jO\@$Jߑ5rϹ`;TPXW~5TD"cn.Xăz^]y sd>jݳ6 GpV]&οv.r\3= [uRNlG;s\Ɋcvce^aobY9Jl%^"ۇ y*/ :Ԍ;] o3\NU,R .9vNkVd/.0#9 |DarDX(`CNŌD!2!Mj7:IWpO%0*t3ͥwYb0YKI-+PkIENDB`anki-2.1.0+dfsg~b36/web/imgs/text_bold.png000066400000000000000000000011701323611211500202640ustar00rootroot00000000000000PNG  IHDR<<:rtEXtSoftwareAdobe ImageReadyqe<IDATxQ0cqpn NL`@2ueAM;op|]!S BR*J9鬦Sip xRiQCn,@mB7iHJ XSh}OξQwR$ : ~ 26d 2s1rЀ.X,2 z swjKKmY=pruIg6: 㶉q5AoΟ^3 #PВvް j٘@pMA&˧A ڷi)&hgk1ݒt^R#KJ:tє D6C> ǐ1\Z%i`aq9Ku>uM. ס45*pb_1 6]K&sˑii'w>ljiLߡ9x6YP8 KCؓ˂C§Tޚˑ'jB~{:Zn)U1p~[;R@֥pΰh# F]``p#WxCXZ Gia`s؅8ש3g,7}oo\BKm$ZvLↃds1,٭}$i 1_]n+hVz MjX,q.i*ȼgKC]P`K-`BDf Z,3.MLڰ)SP[H4{/-N |xg\ ywvCgnnΕs^3s(1s IENDB`anki-2.1.0+dfsg~b36/web/imgs/text_cloze.png000066400000000000000000000005121323611211500204570ustar00rootroot00000000000000PNG  IHDR<<:rtEXtSoftwareAdobe ImageReadyqe<IDATx 0qFnDW`l}iZZ|O~R4"bҋZ4=dLL'*{ x3GSx[ʚ3 0` 0` 0` 8BmBeŚ32E>ǒ 0`կ+]߱._C?.oӜ,[IſF~rے)?{R._f8IENDB`anki-2.1.0+dfsg~b36/web/imgs/text_italic.png000066400000000000000000000006721323611211500206170ustar00rootroot00000000000000PNG  IHDR<<:rtEXtSoftwareAdobe ImageReadyqe<\IDATx 0 Dɀ  :Gɱ}I"3cvkltM}gţp$f`wfgK =jxbKr63,&Y+ҋMRX;~C@8 Z:JmM|UM 84Jx!5šE:V-wcFH =щt,Z:zjg'~M#dд<ְ+F +2x!5hj?=鑎 Iv.&N͑bXVq&fHHgB*a׆UG:5t z.RRÈa=ҩeQCpzey[~'ZVIENDB`anki-2.1.0+dfsg~b36/web/imgs/text_sub.png000066400000000000000000000015221323611211500201360ustar00rootroot00000000000000PNG  IHDR<<:rtEXtSoftwareAdobe ImageReadyqe<IDATx[0Un?D||*U@*@ 2Lvf''[%n1O"T 5<{CR-*wA2`]k@e\]gl} yZth-I ۯ D|L1xxGX1rhiCR> lT7DT2c1S}̶[_Uɰ9 8U Kdo>{*d<*̔^#NCDQv!j5o,݊^%>8nlPNex耬Eaej.+ń!':]G ^4P0HknRGm ݉l >i~9"SB|&(Su kmCyA0O'U]!@cjj7VV4湽 `\]Va^]Q*ۢMb~]XuCWm5 uU-`tU\.lXoҠo.u;vd +H8 v縔|wev\zdz^<;B"Yhۀ%9>N8껂{q w 0>qoIENDB`anki-2.1.0+dfsg~b36/web/imgs/text_super.png000066400000000000000000000015331323611211500205050ustar00rootroot00000000000000PNG  IHDR<<:rtEXtSoftwareAdobe ImageReadyqe<IDATx[q0 ?wpN\!P@@&6̘#~6^nM^؟$KI`H! !H;H1Sգ]Jǭ_d?l9>y_σq#|*tl2nY/љJ퍙.x0IgXDyt#DEsgafpHt)EŸ1ri`ͽ h;2 rAM"&b_qU<ݪ\ D2Q\CiccV826Pc7p;x•N1Oؠ AnЭCºQwp" -"i/!@yYPYVp(-]]ܑw%'>x'QO\F?`]^%e.r4G۰5oh5 M5IN+]wPw`n1CuEE]1@z ߟ yH r:q|ŵ-Hm D6b7j" + m + ":" + s + ""); } else { timeNode.text(m + ":" + s); } }; function showQuestion(txt, maxTime_) { // much faster than jquery's .html() $("#middle")[0].innerHTML = txt; $("#ansbut").focus(); time = 0; maxTime = maxTime_; } function showAnswer(txt) { $("#middle")[0].innerHTML = txt; $("#defease").focus(); } anki-2.1.0+dfsg~b36/web/reviewer.css000066400000000000000000000013241323611211500171760ustar00rootroot00000000000000hr { background-color: #ccc; } body { margin: 20px; overflow-wrap: break-word; } body.nightMode { background-color: black; color: white; } img { max-width: 95%; max-height: 95%; } #_flag { position: fixed; right: 10px; top: 0; font-size: 30px; display: none; -webkit-text-stroke-width: 1px; -webkit-text-stroke-color: black; } #_mark { position: fixed; left: 10px; top: 0; font-size: 30px; color: yellow; display: none; -webkit-text-stroke-width: 1px; -webkit-text-stroke-color: black; } #typeans { width: 100%; } .typeGood { background: #0f0; } .typeBad { background: #f00; } .typeMissed { background: #ccc; } anki-2.1.0+dfsg~b36/web/reviewer.js000066400000000000000000000050011323611211500170160ustar00rootroot00000000000000var ankiPlatform = "desktop"; var typeans; var _updatingQA = false; var qFade = 100; var aFade = 0; var onUpdateHook; var onShownHook; function _runHook(arr) { for (var i=0; i