pax_global_header00006660000000000000000000000064135311372300014510gustar00rootroot0000000000000052 comment=2059e5ba5a1f4b015e8e1a2ef594f37826510c45 anki-2.1.15+dfsg/000077500000000000000000000000001353113723000134375ustar00rootroot00000000000000anki-2.1.15+dfsg/.pylintrc000066400000000000000000000004461353113723000153100ustar00rootroot00000000000000[MESSAGES CONTROL] disable=C,R, fixme, unused-wildcard-import, attribute-defined-outside-init, redefined-builtin, wildcard-import, broad-except, bare-except, unused-argument, unused-variable, redefined-outer-name, global-statement, protected-access, arguments-differ, anki-2.1.15+dfsg/LICENSE000066400000000000000000001056511353113723000144540ustar00rootroot00000000000000Anki 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 following included source code items use a license other than AGPL3: * Anki's translations: BSD. * Qt's bundled translations: LGPL3. * The anki/template/ folder is based off pystache: MIT. * The SuperMemo importer: GPL3. * The Pauker importer: BSD-3. * mpv.py: MIT. * statsbg.py: CC BY-SA 3.0. * winpaths.py: MIT. * MathJax: Apache 2. * jQuery and jQuery-UI: MIT. * browsersel.js: CC BY 2.5. * plot.js: MIT. 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.15+dfsg/LICENSE.logo000066400000000000000000000020201353113723000153750ustar00rootroot00000000000000Anki'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.15+dfsg/Makefile000066400000000000000000000026421353113723000151030ustar00rootroot00000000000000PREFIX=/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 anki aqt web ${DESTDIR}${PREFIX}/share/anki/ -cp -av locale ${DESTDIR}${PREFIX}/share/anki/ sed -e 's:@PREFIX@:${PREFIX}:' tools/runanki.system.in > tools/runanki.system install -m 0755 -D tools/runanki.system ${DESTDIR}${PREFIX}/bin/anki install -m 0644 -D -t ${DESTDIR}${PREFIX}/share/pixmaps anki.xpm anki.png install -m 0644 -D -t ${DESTDIR}${PREFIX}/share/applications anki.desktop install -m 0644 -D -t ${DESTDIR}${PREFIX}/share/man/man1 anki.1 install -m 0644 -D -t ${DESTDIR}${PREFIX}/share/doc/anki README.contributing README.development README.md LICENSE LICENSE.logo -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}/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.15+dfsg/README.contributing000066400000000000000000000055331353113723000170330ustar00rootroot00000000000000Contributing 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 chances 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 is 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.15+dfsg/README.development000066400000000000000000000070701353113723000166440ustar00rootroot00000000000000Running 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.x/5.11.x/5.12.x 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 If you're on a Linux distribution that packages a compatible Qt then you can use the distro's packages. Make sure you install the development tools (eg pyqt5-dev-tools) as well. If you're on another platform or your distro has the wrong Qt version, you can install PyQt with pip: $ pip3 install PyQt5 PyQtWebEngine 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 branch 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. To run the unit tests, you will need to install nose and mock from your distro, or with pip: $ pip3 install nose mock 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 "pyuic5 --from-imports $i -o $py.tmp" 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 mplayer lame portaudio Now you can follow the development commands at the start of this document. anki-2.1.15+dfsg/README.md000066400000000000000000000010731353113723000147170ustar00rootroot00000000000000Anki ------------------------------------- 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. If you are interested in contributing changes to Anki, please see README.contributing before you begin work. [![Build Status](https://travis-ci.org/dae/anki.svg?branch=master)](https://travis-ci.org/dae/anki) anki-2.1.15+dfsg/anki.1000066400000000000000000000042441353113723000144470ustar00rootroot00000000000000.\" 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.15+dfsg/anki.desktop000066400000000000000000000004311353113723000157520ustar00rootroot00000000000000[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.15+dfsg/anki.png000066400000000000000000001034431353113723000150740ustar00rootroot00000000000000PNG  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.15+dfsg/anki.xml000066400000000000000000000006001353113723000150770ustar00rootroot00000000000000 Anki 2.1 collection package Anki 2.0 deck package anki-2.1.15+dfsg/anki.xpm000066400000000000000000000142641353113723000151160ustar00rootroot00000000000000/* 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.15+dfsg/anki/000077500000000000000000000000001353113723000143615ustar00rootroot00000000000000anki-2.1.15+dfsg/anki/__init__.py000066400000000000000000000010171353113723000164710ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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.15" # build scripts grep this line, so preserve formatting from anki.storage import Collection __all__ = ["Collection"] anki-2.1.15+dfsg/anki/buildhash.py000066400000000000000000000000211353113723000166670ustar00rootroot00000000000000build='442df9d6' anki-2.1.15+dfsg/anki/cards.py000066400000000000000000000130141353113723000160260ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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(), self.flags] 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.15+dfsg/anki/collection.py000066400000000000000000001014221353113723000170660ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 import json from anki.lang import _, ngettext from anki.utils import ids2str, fieldChecksum, \ intTime, splitFields, joinFields, maxID, devMode, stripHTMLMedia 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 = {} dues = {} for id, nid, ord, did, due, odue, odid in self.db.execute( "select id, nid, ord, did, due, odue, 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 # save due if odid != 0: due = odue if nid not in dues: dues[nid] = due # 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'] due = dues.get(nid) # 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'] # use sibling due# if there is one, else use a new id if due is None: due = self.nextID("pos") data.append((ts, nid, did, t['ord'], now, usn, due)) 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, did=None): 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, did=did)) return cards def _newCard(self, note, template, due, flush=True, did=None): "Create a new card." card = anki.cards.Card(self) card.nid = note.id card.ord = template['ord'] card.did = self.db.scalar("select did from cards where nid = ? and ord = ?", card.nid, card.ord) # Use template did (deck override) if valid, otherwise did in argument, otherwise model did if not card.did: if template['did'] and str(template['did']) in self.decks.decks: card.did = template['did'] elif did: card.did = 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((stripHTMLMedia(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, cardFlags] # 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] fields['CardFlag'] = self._flagNameFromCardFlags(data[7]) 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, cardFlags] db query" return self.db.execute(""" select c.id, f.id, f.mid, c.did, c.ord, f.tags, f.flds, c.flags from cards c, notes f where c.nid == f.id %s""" % where) def _flagNameFromCardFlags(self, flags): flag = flags & 0b111 if not flag: return "" return "flag%d" % flag # 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 = [] curs = self.db.cursor() 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, so wrap items over # 2 million back to 1 million curs.execute(""" update cards set due=1000000+due%1000000,mod=?,usn=? where due>=1000000 and type=0""", [intTime(), self.usn()]) if curs.rowcount: problems.append("Found %d new cards with a due number >= 1,000,000 - consider repositioning them in the Browse screen." % curs.rowcount) # 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()) # v2 sched had a bug that could create decimal intervals curs.execute("update cards set ivl=round(ivl),due=round(due) where ivl!=round(ivl) or due!=round(due)") if curs.rowcount: problems.append("Fixed %d cards with v2 scheduler bug." % curs.rowcount) curs.execute("update revlog set ivl=round(ivl),lastIvl=round(lastIvl) where ivl!=round(ivl) or lastIvl!=round(lastIvl)") if curs.rowcount: problems.append("Fixed %d review history entries with v2 scheduler bug." % curs.rowcount) # models if self.models.ensureNotEmpty(): problems.append("Added missing note type.") # 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 & ~?) | ?, usn=?, mod=? where id in %s" % ids2str(cids), 0b111, flag, self.usn(), intTime()) anki-2.1.15+dfsg/anki/consts.py000066400000000000000000000035201353113723000162440ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html 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%s.ankiweb.net/" 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.15+dfsg/anki/db.py000066400000000000000000000056671353113723000153360ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import os import time from sqlite3 import dbapi2 as sqlite, Cursor 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.text_factory = None 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") def cursor(self, factory=Cursor): return self._db.cursor(factory) anki-2.1.15+dfsg/anki/decks.py000066400000000000000000000451671353113723000160410ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import copy, operator import unicodedata import json from anki.utils import intTime, ids2str 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': False, }, 'lapse': { 'delays': [10], 'mult': 0, 'minInt': 1, 'leechFails': 8, # type 0=suspend, 1=tagonly 'leechAction': 0, }, 'rev': { 'perDay': 200, 'ease4': 1.3, 'fuzz': 0.05, 'minSpace': 1, # not currently used 'ivlFct': 1, 'maxIvl': 36500, # may not be set on old decks 'bury': False, 'hardFactor': 1.2, }, '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=None): "Add a deck with NAME. Reuse deck if already exists. Return id as int." if type is None: type = defaultDeck name = name.replace('"', '') name = unicodedata.normalize("NFC", name) for id, g in list(self.decks.items()): if unicodedata.normalize("NFC", 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=None): "Create a new configuration and return id." if cloneFrom is None: cloneFrom = defaultConf 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 def _checkDeckTree(self): decks = self.col.decks.all() decks.sort(key=operator.itemgetter('name')) names = set() for deck in decks: # two decks with the same name? if deck['name'] in names: self.col.log("fix duplicate deck name", deck['name']) deck['name'] += "%d" % intTime(1000) self.save(deck) # ensure no sections are blank if not all(deck['name'].split("::")): self.col.log("fix deck with missing sections", deck['name']) deck['name'] = "recovered%d" % intTime(1000) self.save(deck) # immediate parent must exist if "::" in deck['name']: immediateParent = "::".join(deck['name'].split("::")[:-1]) if immediateParent not in names: self.col.log("fix deck with missing parent", deck['name']) self._ensureParents(deck['name']) names.add(immediateParent) names.add(deck['name']) def checkIntegrity(self): self._recoverOrphans() self._checkDeckTree() # 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 childDids(self, did, childMap): def gather(node, arr): for did, child in node.items(): arr.append(did) gather(child, arr) arr = [] gather(childMap[did], arr) return arr def childMap(self): nameMap = self.nameMap() childMap = {} # go through all decks, sorted by name for deck in sorted(self.all(), key=operator.itemgetter("name")): node = {} childMap[deck['id']] = node # add note to immediate parent parts = deck['name'].split("::") if len(parts) > 1: immediateParent = "::".join(parts[:-1]) pid = nameMap[immediateParent]['id'] childMap[pid][deck['id']] = node return childMap def parents(self, did, nameMap=None): "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): if nameMap: deck = nameMap[p] else: deck = self.get(self.id(p)) parents[c] = deck 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 def nameMap(self): return dict((d['name'], d) for d in self.decks.values()) # 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.15+dfsg/anki/errors.py000066400000000000000000000012011353113723000162410ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html class AnkiError(Exception): def __init__(self, type, **data): super().__init__() 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): super().__init__() self.description = description def __str__(self): return "Couldn't rename deck: " + self.description anki-2.1.15+dfsg/anki/exporting.py000066400000000000000000000311661353113723000167610ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import re, os, zipfile, shutil, unicodedata import json from anki.lang import _ from anki.utils import ids2str, splitFields, namedtmp, stripHTML from anki.hooks import runHook from anki import Collection class Exporter: includeHTML = None def __init__(self, col, did=None): self.col = col self.did = did def doExport(self, path): raise Exception("not implemented") def exportInto(self, path): self._escapeCount = 0 file = open(path, "wb") self.doExport(file) file.close() def processText(self, text): if self.includeHTML is False: text = self.stripHTML(text) text = self.escapeText(text) return text 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) text = re.sub(r"\[\[type:[^]]+\]\]", "", text) if "\"" in text: text = "\"" + text.replace("\"", "\"\"") + "\"" return text def stripHTML(self, text): # very basic conversion to text s = text s = re.sub(r"(?i)<(br ?/?|div|p)>", " ", s) s = re.sub(r"\[sound:[^]]+\]", "", s) s = stripHTML(s) s = re.sub(r"[ \n\t]+", " ", s) s = s.strip() return s 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" includeHTML = True 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.processText(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 includeHTML = 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.processText(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 cids = self.cardIds() # 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 # pylint: disable=unreachable 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(r'\.svg$', file, re.IGNORECASE): z.write(mpath, cStr, zipfile.ZIP_DEFLATED) else: z.write(mpath, cStr, zipfile.ZIP_STORED) media[cStr] = unicodedata.normalize("NFC", 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.15+dfsg/anki/find.py000066400000000000000000000445361353113723000156670ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import re import sre_constants import unicodedata 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 unicodedata.normalize("NFC", 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, unicodedata.normalize("NFC", 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 unicodedata.normalize("NFC", 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 unicodedata.normalize("NFC", 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(re.escape("%"), ".*") 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'].lower() == field.lower(): 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 def fieldNamesForNotes(col, nids): downcasedNames = set() origNames = [] mids = col.db.list("select distinct mid from notes where id in %s" % ids2str(nids)) for mid in mids: model = col.models.get(mid) for field in col.models.fieldNames(model): if field.lower() not in downcasedNames: downcasedNames.add(field.lower()) origNames.append(field) return sorted(origNames, key=lambda x: x.lower()) # 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.15+dfsg/anki/hooks.py000066400000000000000000000041611353113723000160600ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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: try: func(*args) except: hook.remove(func) raise def runFilter(hook, arg, *args): hook = _hooks.get(hook, None) if hook: for func in hook: try: arg = func(arg, *args) except: hook.remove(func) raise 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.15+dfsg/anki/importing/000077500000000000000000000000001353113723000163715ustar00rootroot00000000000000anki-2.1.15+dfsg/anki/importing/__init__.py000066400000000000000000000015051353113723000205030ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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.15+dfsg/anki/importing/anki2.py000066400000000000000000000404721353113723000177560ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 from anki.importing.base import Importer from anki.lang import _ 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 _logNoteRow(self, action, noteRow): self.log.append("[%s] %s" % ( action, noteRow[6].replace("\x1f", ", ") )) 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() dupesIdentical = [] dupesIgnored = [] total = 0 for note in self.src.db.execute( "select * from notes"): total += 1 # 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? 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(note) self._ignoredGuids[note[GUID]] = True else: dupesIdentical.append(note) self.log.append(_("Notes found in file: %d") % total) if dupesIgnored: self.log.append( _("Notes that could not be imported as note type has changed: %d") % len(dupesIgnored)) if update: self.log.append( _("Notes updated, as file had newer version: %d") % len(update)) if add: self.log.append( _("Notes added from file: %d") % len(add)) if dupesIdentical: self.log.append( _("Notes skipped, as they're already in your collection: %d") % len(dupesIdentical)) self.log.append("") if dupesIgnored: for row in dupesIgnored: self._logNoteRow(_("Skipped"), row) if update: for row in update: self._logNoteRow(_("Updated"), row) if add: for row in add: self._logNoteRow(_("Added"), row) if dupesIdentical: for row in dupesIdentical: self._logNoteRow(_("Identical"), row) # export info for calling code self.dupes = len(dupesIdentical) 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) # if target is a filtered deck, we'll need a new deck name deck = self.dst.decks.byName(name) if deck and deck['dyn']: name = "%s %d" % (name, intTime()) # 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 # odue needs updating too if card[14]: card[14] -= 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) # 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.15+dfsg/anki/importing/apkg.py000066400000000000000000000034641353113723000176740ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import zipfile, os import unicodedata import json from anki.utils import tmpfile 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.15+dfsg/anki/importing/base.py000066400000000000000000000016651353113723000176650ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 self.dst = None 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.15+dfsg/anki/importing/csvfile.py000066400000000000000000000102731353113723000204010ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html 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(r"^\#.*$", "__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.15+dfsg/anki/importing/mnemo.py000066400000000000000000000157241353113723000200670ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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: # pylint: disable=unsubscriptable-object 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(r".(\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(r"(?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): # pylint: disable=cell-var-from-loop # replace [...] with cloze refs res = ("{{c%d::%s}}" % (state['n'], match.group(1))) state['n'] += 1 return res fld = re.sub(r"\[(.+?)\]", 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.15+dfsg/anki/importing/noteimp.py000066400000000000000000000247011353113723000204220ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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." return [] 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], quote=False) 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) 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.15+dfsg/anki/importing/pauker.py000066400000000000000000000046421353113723000202400ustar00rootroot00000000000000# -*- 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.15+dfsg/anki/importing/supermemo_xml.py000066400000000000000000000367701353113723000216540ustar00rootroot00000000000000# -*- 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(r'(\[[0-9]+\])' , ' ' , i ).replace('_',' ') for i in item.lTitle ])) tmp = list(set([ re.sub(r'(\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.15+dfsg/anki/lang.py000066400000000000000000000062721353113723000156630ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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"), ("lo jbobau", "jbo"), ("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ână", "ro"), ("Slovenčina", "sk"), ("Slovenščina", "sl"), ("Suomi", "fi"), ("Svenska", "sv"), ("Tiếng Việt", "vi"), ("Türkçe", "tr"), ("简体中文", "zh_CN"), ("日本語", "ja"), ("繁體中文", "zh_TW"), ("한국어", "ko"), ("Čeština", "cs"), ("Ελληνικά", "el"), ("Ελληνικά", "el"), ("босански", "bs"), ("Български", "bg"), ("Монгол хэл","mn"), ("русский язык", "ru"), ("Српски", "sr"), ("українська мова", "uk"), ("Հայերեն", "hy"), ("עִבְרִית", "he"), ("العربية", "ar"), ("فارسی", "fa"), ("ภาษาไทย", "th"), ] 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 = os.path.abspath(os.path.join(filedir, "..", "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(r"(^.*?)( ?\(.+?\))?$", "\\1", str) if not currentTranslation: setLang("en_US", local=False) anki-2.1.15+dfsg/anki/latex.py000066400000000000000000000114701353113723000160530ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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?") return msg # setup q/a filter addHook("mungeQA", mungeQA) anki-2.1.15+dfsg/anki/media.py000066400000000000000000000512061353113723000160160ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 import pathlib import json import os from anki.utils import checksum, isWin, isMac from anki.db import DB, DBError from anki.consts import * from anki.latex import mungeQA from anki.lang import _ class MediaManager: soundRegexps = [r"(?i)(\[sound:(?P[^]]+)\])"] imgRegexps = [ # src element quoted case r"(?i)(]* src=(?P[\"'])(?P[^>]+?)(?P=str)[^>]*>)", # unquoted case r"(?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(r"(?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 # pylint: disable=import-error 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 (pre-APFS Macs will autoconvert to NFD), # and return an NFC-encoded reference fname = unicodedata.normalize("NFC", fname) # ensure it's a valid filename base = self.cleanFilename(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 = r" \((\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(r"{{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%".+?", "\\2", 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 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 and paths ########################################################################## _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 def cleanFilename(self, fname): fname = self.stripIllegal(fname) fname = self._cleanWin32Filename(fname) fname = self._cleanLongFilename(fname) if not fname: fname = "renamed" return fname def _cleanWin32Filename(self, fname): if not isWin: return fname # deal with things like con/prn/etc p = pathlib.WindowsPath(fname) if p.is_reserved(): fname = "renamed" + fname assert not pathlib.WindowsPath(fname).is_reserved() return fname def _cleanLongFilename(self, fname): # a fairly safe limit that should work on typical windows # paths and on eCryptfs partitions, even with a duplicate # suffix appended namemax = 136 if isWin: pathmax = 240 else: pathmax = 1024 # cap namemax based on absolute path dirlen = len(os.path.dirname(os.path.abspath(fname))) remaining = pathmax - dirlen namemax = min(remaining, namemax) assert namemax > 0 if len(fname) > namemax: head, ext = os.path.splitext(fname) headmax = namemax - len(ext) head = head[0:headmax] fname = head + ext assert(len(fname) <= namemax) return fname # 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"): # previous entries may not have been in NFC form normname = unicodedata.normalize("NFC", name) self.cache[normname] = [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 normname = unicodedata.normalize("NFC", f.name) if not isMac: if f.name != normname: # wrong filename encoding which will cause sync errors if os.path.exists(normname): os.unlink(f.name) else: os.rename(f.name, normname) else: # on Macs we can access the file using any normalization pass # newly added? mtime = int(f.stat().st_mtime) if normname not in self.cache: added.append((normname, mtime)) else: # modified since last time? if mtime != self.cache[normname][1]: # and has different checksum? if self._checksum(normname) != self.cache[normname][0]: added.append((normname, mtime)) # mark as used self.cache[normname][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 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.15+dfsg/anki/models.py000066400000000000000000000452301353113723000162220ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import copy, re, json from anki.utils import intTime, joinFields, splitFields, ids2str,\ checksum 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.ensureNotEmpty() self.col.db.execute("update col set models = ?", json.dumps(self.models)) self.changed = False def ensureNotEmpty(self): if not self.models: from anki.stdmodels import addBasicModel addBasicModel(self.col) return True # 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), 0] full = self.col._renderQA(data)['q'] data = [1, 1, m['id'], 1, t['ord'], "", joinFields(b), 0] 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( r"(?s){{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.15+dfsg/anki/mpv.py000066400000000000000000000456221353113723000155460ustar00rootroot00000000000000# 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 # pylint: disable=import-error,no-name-in-module 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: # pylint: disable=import-error 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", "--keep-open=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.daemon = True 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, _retry=1): """Send a command to the mpv process and collect the result. """ self.ensure_running() try: self._send_message(message, timeout) return self._get_response(timeout) except MPVCommandError as e: raise MPVCommandError("%r: %s" % (message["command"], e)) except MPVTimeoutError as e: if _retry: print("mpv timed out, restarting") self._stop_process() return self._send_request(message, timeout, _retry-1) else: raise # # 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"): # pylint: disable=no-member 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.daemon = True 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.15+dfsg/anki/notes.py000066400000000000000000000122051353113723000160630ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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.15+dfsg/anki/sched.py000066400000000000000000001427561353113723000160400ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 nameMap = self.col.decks.nameMap() 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, nameMap) 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.checkIntegrity() 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: p = parent(deck['name']) # new nlim = self._deckNewLimitSingle(deck) if p: 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,ord 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 -is:learn" % 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 # pylint: disable=undefined-loop-variable 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.15+dfsg/anki/schedv2.py000066400000000000000000001541331353113723000163000ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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.dynReportLimit = 99999 self.reps = 0 self.today = None self._haveQueues = False self._lrnCutoff = 0 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 # once a card has been answered once, the original due date # no longer applies if card.odue: card.odue = 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 nameMap = self.col.decks.nameMap() 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, nameMap) 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.checkIntegrity() 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) childMap = self.col.decks.childMap() for deck in decks: p = parent(deck['name']) # new nlim = self._deckNewLimitSingle(deck) if p: 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, childMap) # 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,ord 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.dynReportLimit 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 ########################################################################## # scan for any newly due learning cards every minute def _updateLrnCutoff(self, force): nextCutoff = intTime() + self.col.conf['collapseTime'] if nextCutoff - self._lrnCutoff > 60 or force: self._lrnCutoff = nextCutoff return True return False def _maybeResetLrn(self, force): if self._updateLrnCutoff(force): self._resetLrn() def _resetLrnCount(self): # sub-day self.lrnCount = self.col.db.scalar(""" select count() from cards where did in %s and queue = 1 and due < ?""" % ( self._deckLimit()), self._lrnCutoff) or 0 # day self.lrnCount += self.col.db.scalar(""" select count() from cards where did in %s and queue = 3 and due <= ?""" % (self._deckLimit()), self.today) # previews self.lrnCount += self.col.db.scalar(""" select count() from cards where did in %s and queue = 4 """ % (self._deckLimit())) def _resetLrn(self): self._updateLrnCutoff(force=True) 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): self._maybeResetLrn(force=collapse and self.lrnCount == 0) 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) card.due = int(time.time() + delay) # due today? if card.due < self.dayCutoff: # add some randomness, up to 5 minutes or 25% maxExtra = min(300, int(delay*0.25)) fuzz = random.randrange(0, maxExtra) card.due = min(self.dayCutoff-1, card.due + fuzz) 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) if len(conf['delays']) > 1: delay2 = self._delayForGrade(conf, left-1) else: delay2 = delay1 * 2 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 == 3: 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.dynReportLimit 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, childMap): dids = [did] + self.col.decks.childDids(did, childMap) 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, random() limit ?""" % (ids2str(self.col.decks.active())), self.today, lim) if self._revQueue: # preserve order self._revQueue.reverse() 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 1 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) suspended = self._checkLeech(card, conf) and card.queue == -1 if conf['delays'] and not suspended: card.type = 3 delay = self._moveToFirstStep(card, conf) else: # no relearning steps self._updateRevIvlOnFail(card, conf) self._rescheduleAsRev(card, conf, early=False) # need to reset the queue after rescheduling if suspended: card.queue = -1 delay = 0 return delay def _lapseIvl(self, card, conf): ivl = max(1, conf['minInt'], int(card.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 hardFactor = conf.get("hardFactor", 1.2) if hardFactor > 1: hardMin = card.ivl else: hardMin = 0 ivl2 = self._constrainedIvl(card.ivl * hardFactor, conf, hardMin, 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 = max(ivl, prev+1, 1) ivl = min(ivl, conf['maxIvl']) 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 = 1 # early 3/4 reviews shouldn't decrease previous interval minNewIvl = 1 if ease == 2: factor = conf.get("hardFactor", 1.2) # hard cards shouldn't have their interval decreased by more than 50% # of the normal factor minNewIvl = factor / 2 elif ease == 3: factor = card.factor / 1000 else: # ease == 4: factor = card.factor / 1000 ease4 = conf['ease4'] # 1.3 -> 1.15 easyBonus = ease4 - (ease4-1)/2 ivl = max(elapsed * factor, 1) # cap interval decreases ivl = max(card.ivl*minNewIvl, ivl) * easyBonus 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)) self.col.db.execute(""" update cards set did = odid, %s, due = (case when odue>0 then odue else due end), 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 = self._daysSinceCreation() # 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 = int(time.mktime(date.timetuple())) return stamp def _daysSinceCreation(self): startDate = datetime.datetime.fromtimestamp(self.col.crt) startDate = startDate.replace(hour=self.col.conf.get("rollover", 4), minute=0, second=0, microsecond=0) return int((time.time() - time.mktime(startDate.timetuple())) // 86400) # 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 # pylint: disable=undefined-loop-variable 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, schedVer=2): # remove review cards from relearning if schedVer == 1: self.col.db.execute(""" update cards set due = odue, queue = 2, type = 2, mod = %d, usn = %d, odue = 0 where queue in (1,3) and type in (2, 3) """ % (intTime(), self.col.usn())) else: self.col.db.execute(""" update cards set due = %d+ivl, queue = 2, type = 2, mod = %d, usn = %d, odue = 0 where queue in (1,3) and type in (2, 3) """ % (self.today, 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()) # adding 'hard' in v2 scheduler means old ease entries need shifting # up or down def _remapLearningAnswers(self, sql): self.col.db.execute("update revlog set %s and type in (0,2)" % sql) def moveToV1(self): self._emptyAllFiltered() self._removeAllFromLearning() self._moveManuallyBuried() self._resetSuspendedLearning() self._remapLearningAnswers("ease=ease-1 where ease in (3,4)") def moveToV2(self): self._emptyAllFiltered() self._removeAllFromLearning(schedVer=1) self._remapLearningAnswers("ease=ease+1 where ease in (2,3)") anki-2.1.15+dfsg/anki/sound.py000066400000000000000000000275721353113723000161000ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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, runHook from anki.utils import tmpdir, isWin, isMac, isLin from anki.lang import _ # Shared utils ########################################################################## _soundReg = r"\[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: # pylint: disable=no-member # 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): runHook("mpvWillPlay", 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") def on_idle(self): runHook("mpvIdleHook") def setMpvConfigBase(base): mpvConfPath = os.path.join(base, "mpv.conf") MpvManager.default_argv += [ "--no-config", "--include="+mpvConfPath, ] mpvManager = None def setupMPV(): global mpvManager, _player, _queueEraser mpvManager = MpvManager() _player = mpvManager.queueFile _queueEraser = mpvManager.clearQueue atexit.register(cleanupMPV) def cleanupMPV(): global mpvManager, _player, _queueEraser if mpvManager: mpvManager.close() mpvManager = None _player = None _queueEraser = None # Mplayer in slave mode ########################################################################## # if anki crashes, an old mplayer instance may be left lying around, # which prevents renaming or deleting the profile def cleanupOldMplayerProcesses(): # pylint: disable=import-error import psutil exeDir = os.path.dirname(os.path.abspath(sys.argv[0])) for proc in psutil.process_iter(): try: info = proc.as_dict(attrs=['pid', 'name', 'exe']) if not info['exe'] or info['name'] != 'mplayer.exe': continue # not anki's bundled mplayer if os.path.dirname(info['exe']) != exeDir: continue print("terminating old mplayer process...") proc.kill() except: print("error iterating mplayer processes") mplayerCmd = ["mplayer", "-really-quiet", "-noautosub"] if isWin: mplayerCmd += ["-ao", "win32"] cleanupOldMplayerProcesses() 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() if isWin: cleanupOldMplayerProcesses() addHook("unloadProfile", stopMplayer) # PyAudio recording ########################################################################## try: import pyaudio import wave PYAU_FORMAT = pyaudio.paInt16 PYAU_CHANNELS = 1 PYAU_INPUT_INDEX = None except: pyaudio = 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: self.cleanup() if ret: raise Exception(_( "Error running %s") % " ".join(cmd)) def cleanup(self): if os.path.exists(processingSrc): os.unlink(processingSrc) 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: data += stream.read(chunk, exception_on_overflow=False) 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 if not pyaudio: PyAudioRecorder = None # Audio interface ########################################################################## _player = queueMplayer _queueEraser = clearMplayerQueue def play(path): _player(path) def clearAudioQueue(): _queueEraser() Recorder = PyAudioRecorder anki-2.1.15+dfsg/anki/stats.py000066400000000000000000001015401353113723000160720ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 # pylint: disable=unnecessary-lambda 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 get_start_end_chunk(self, by='review'): start = 0 if self.type == 0: end, chunk = 31, 1 elif self.type == 1: end, chunk = 52, 7 elif self.type == 2: end = None if self._deckAge(by) <= 100: chunk = 1 elif self._deckAge(by) <= 700: chunk = 7 else: chunk = 31 return start, end, chunk def dueGraph(self): start, end, chunk = self.get_start_end_chunk() 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, xunit=chunk, 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): start, days, chunk = self.get_start_end_chunk() data = self._added(days, chunk) if not data: return "" conf = dict( xaxis=dict(tickDecimals=0, max=0.5), yaxes=[dict(min=0), dict(position="right", min=0)]) if days is not None: # pylint: disable=invalid-unary-operand-type conf['xaxis']['min'] = -days+0.5 def plot(id, data, ylabel, ylabel2): return self._graph( id, data=data, conf=conf, xunit=chunk, ylabel=ylabel, ylabel2=ylabel2) # graph repdata, repsum = self._splitRepData(data, ((1, colLearn, ""),)) txt = self._title( _("Added"), _("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 data]) 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): start, days, chunk = self.get_start_end_chunk() data = self._done(days, chunk) if not data: return "" conf = dict( xaxis=dict(tickDecimals=0, max=0.5), yaxes=[dict(min=0), dict(position="right", min=0)]) if days is not None: # pylint: disable=invalid-unary-operand-type conf['xaxis']['min'] = -days+0.5 def plot(id, data, ylabel, ylabel2): return self._graph( id, data=data, conf=conf, xunit=chunk, ylabel=ylabel, ylabel2=ylabel2) # reps (repdata, repsum) = self._splitRepData(data, ( (3, colMature, _("Mature")), (2, colYoung, _("Young")), (4, colRelearn, _("Relearn")), (1, colLearn, _("Learn")), (5, colCram, _("Cram")))) txt1 = self._title( _("Review Count"), _("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(data, ( (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(_("Review Time"), _("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] = [] 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_), chunk = 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"), xunit=chunk, 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): start, end, chunk = self.get_start_end_chunk() lim = "and grp <= %d" % end if end else "" 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())), chunk # 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], # [4,4] [6,1],[7,2],[8,3],[9,4], [11, 1],[12,2],[13,3],[14,4]] if self.col.schedVer() != 1: ticks.insert(3, [4,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="bars", 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) days = self._periodDays() 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 = "" if self.col.schedVer() == 1: ease4repl = "3" else: ease4repl = "ease" 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 %s else ease end), count() from revlog %s group by thetype, ease order by thetype, ease""" % (ease4repl, 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 if self.col.schedVer() == 1: sd = datetime.datetime.fromtimestamp(self.col.crt) rolloverHour = sd.hour else: rolloverHour = self.col.conf.get("rollover", 4) 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-(rolloverHour*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=None, type="bars", xunit=1, ylabel=_("Cards"), ylabel2=""): if conf is None: conf = {} # 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 xunit is None: conf['timeTicks'] = False else: conf['timeTicks'] = {1: _("d"), 7: _("w"), 31: _("mo")}[xunit] # 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": print("deprecated - use 'bars' instead") 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" ))) 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): start, end, chunk = self.get_start_end_chunk() if end is None: return None return end * chunk 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.15+dfsg/anki/statsbg.py000066400000000000000000000006341353113723000164050ustar00rootroot00000000000000# from subtlepatterns.com; CC BY-SA 3.0. bg = """\ iVBORw0KGgoAAAANSUhEUgAAABIAAAANCAMAAACTkM4rAAAAM1BMVEXy8vLz8/P5+fn19fXt7e329vb4+Pj09PTv7+/u7u739/fw8PD7+/vx8fHr6+v6+vrs7Oz2LjW2AAAAkUlEQVR42g3KyXHAQAwDQYAQj12ItvOP1qqZZwMMPVnd06XToQvz4L2HDQ2iRgkvA7yPPB+JD+OUPnfzZ0JNZh6kkQus5NUmR7g4Jpxv5XN6nYWNmtlq9o3zuK6w3XRsE1pQIEGPIsdtTP3m2cYwlPv6MbL8/QASsKppZefyDmJPbxvxa/NrX1TJ1yp20fhj9D+SiAWWLU8myQAAAABJRU5ErkJggg== """ anki-2.1.15+dfsg/anki/stdmodels.py000066400000000000000000000060561353113723000167400ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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\n{{type:"+_("Back")+"}}" t['afmt'] = "{{"+_("Front")+"}}\n\n
\n\n{{type:"+_("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.15+dfsg/anki/storage.py000066400000000000000000000261251353113723000164050ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import copy import re import json import os from anki.lang import _ from anki.utils import intTime, isWin 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, 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") db.execute("pragma cache_size = 10000") if not isWin: db.execute("pragma journal_mode = wal") 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.15+dfsg/anki/sync.py000066400000000000000000000700401353113723000157100ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import io import gzip import random import requests import json import os from anki.db import DB, DBError from anki.utils import ids2str, intTime, platDesc, checksum, devMode from anki.consts import * from anki.utils import versionWithBuild 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'] self.uname = meta.get("uname", "") self.hostNum = meta.get("hostNum") 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: startup and deletions runHook("sync", "meta") rrem = self.server.start(minUsn=self.minUsn, lnewer=self.lnewer) # apply deletions to server lgraves = self.removed() while lgraves: gchunk, lgraves = self._gravesChunk(lgraves) self.server.applyGraves(chunk=gchunk) # then apply server deletions here 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 _gravesChunk(self, graves): lim = 250 chunk = dict(notes=[], cards=[], decks=[]) for cat in "notes", "cards", "decks": if lim and graves[cat]: chunk[cat] = graves[cat][:lim] graves[cat] = graves[cat][lim:] lim -= len(chunk[cat]) # anything remaining? if graves['notes'] or graves['cards'] or graves['decks']: return chunk, graves return chunk, None 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 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 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 usnLim(self): return "usn = -1" def finish(self, mod=None): 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 # mark the objects as having been sent 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 = [] 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) self.col.db.execute("update graves set usn=? where usn=-1", self.maxUsn) return dict(cards=cards, notes=notes, decks=decks) def remove(self, graves): # pretend to be the server so we don't set usn = -1 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 = False # Models ########################################################################## def getModels(self): 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): 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): 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 # Wrapper for requests that tracks upload/download progress ########################################################################## class AnkiRequestsClient: verify = True timeout = 60 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=self.timeout, 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, headers=headers, timeout=self.timeout, 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) # allow user to accept invalid certs in work/school settings if os.environ.get("ANKI_NOVERIFYSSL"): AnkiRequestsClient.verify = False import warnings warnings.filterwarnings("ignore") 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, hostNum=None): self.hkey = hkey self.skey = checksum(str(random.random()))[:8] self.client = client or AnkiRequestsClient() self.postVars = {} self.hostNum = hostNum self.prefix = "sync/" def syncURL(self): if devMode: url = "https://l1sync.ankiweb.net/" else: url = SYNC_BASE % (self.hostNum or "") return url + self.prefix 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 rawSize = 0 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 rawSize += len(data) 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) if size >= 100*1024*1024 or rawSize >= 250*1024*1024: raise Exception("Collection too large to upload to AnkiWeb.") 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, hostNum): HttpSyncer.__init__(self, hkey, hostNum=hostNum) 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"%(versionWithBuild(), platDesc()))).encode("utf8")), badAuthRaises=False) if not ret: # invalid auth return return json.loads(ret.decode("utf8")) def applyGraves(self, **kw): return self._run("applyGraves", kw) 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, hostNum): HttpSyncer.__init__(self, hkey, client, hostNum=hostNum) self.postVars = dict( k=self.hkey, v="ankidesktop,%s,%s"%(anki.version, platDesc()), ) self.col = col def download(self): runHook("sync", "download") localNotEmpty = self.col.db.scalar("select 1 from cards") 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" remoteEmpty = not d.scalar("select 1 from cards") d.close() # accidental clobber? if localNotEmpty and remoteEmpty: os.unlink(tpath) return "downloadClobber" # 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") if ldirty: 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") if ldirty: 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, hostNum): self.col = col HttpSyncer.__init__(self, hkey, client, hostNum=hostNum) self.prefix = "msync/" 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.15+dfsg/anki/tags.py000066400000000000000000000141101353113723000156660ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html """ 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. """ import json from anki.utils import intTime, ids2str from anki.hooks import runHook import re 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.match("^"+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.15+dfsg/anki/template/000077500000000000000000000000001353113723000161745ustar00rootroot00000000000000anki-2.1.15+dfsg/anki/template/LICENSE000066400000000000000000000020431353113723000172000ustar00rootroot00000000000000Copyright (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.15+dfsg/anki/template/README.anki000066400000000000000000000005501353113723000177750ustar00rootroot00000000000000Anki 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.15+dfsg/anki/template/__init__.py000066400000000000000000000003711353113723000203060ustar00rootroot00000000000000from 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.15+dfsg/anki/template/furigana.py000066400000000000000000000017001353113723000203400ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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.15+dfsg/anki/template/hint.py000066400000000000000000000011761353113723000175150ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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.15+dfsg/anki/template/template.py000066400000000000000000000202201353113723000203550ustar00rootroot00000000000000import 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(r"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: val = stripHTMLMedia(val).strip() 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.""" repCount = 0 while 1: if repCount > 100: print("too many replacements") break repCount += 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(r"^(.*?)(?:\((.*)\))?$", 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%r"\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.15+dfsg/anki/template/view.py000066400000000000000000000064741353113723000175330ustar00rootroot00000000000000from 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.15+dfsg/anki/utils.py000066400000000000000000000300441353113723000160740ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 from contextlib import contextmanager from anki.lang import _, ngettext # some add-ons expect json to be in the utils module import json # pylint: disable=unused-import # 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 ############################################################################## reComment = re.compile("(?s)") reStyle = re.compile("(?si).*?") reScript = re.compile("(?si).*?") reTag = re.compile("(?s)<.*?>") reEnts = re.compile(r"&#?\w+;") reMedia = re.compile("(?i)]+src=[\"']?([^\"'>]+)[\"']?[^>]*>") def stripHTML(s): s = reComment.sub("", 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(r"\[sound:[^]]+\]", "", s) s = re.sub(r"\[\[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 ############################################################################## @contextmanager def noBundledLibs(): oldlpath = os.environ.pop("LD_LIBRARY_PATH", None) yield if oldlpath is not None: os.environ["LD_LIBRARY_PATH"] = oldlpath 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: # pylint: disable=no-member si.dwFlags |= subprocess._subprocess.STARTF_USESHOWWINDOW else: si = None # run try: with noBundledLibs(): 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", "") 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": import distro r = distro.linux_distribution(full_distribution_name=False) theos = "lin:%s:%s" % (r[0], r[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() # Version ############################################################################## def versionWithBuild(): from anki import version try: from anki.buildhash import build except: build = "dev" return "%s (%s)" % (version, build) anki-2.1.15+dfsg/aqt/000077500000000000000000000000001353113723000142245ustar00rootroot00000000000000anki-2.1.15+dfsg/aqt/__init__.py000066400000000000000000000266571353113723000163550ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # 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 argparse 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) # - have a method reopen(*args), called if the user ask to open the window a second time. Arguments passed are the same than for original opening. #- 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: if instance.windowState() & Qt.WindowMinimized: instance.setWindowState(instance.windowState() & ~Qt.WindowMinimized) instance.activateWindow() instance.raise_() if hasattr(instance,"reopen"): instance.reopen(*args) 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) def fn__(arg): print("accessing _ without importing from anki.lang will break in the future") print("".join(traceback.format_stack()[-2])) from anki.lang import _ return _(arg) def fn_ngettext(a, b, c): print("accessing ngettext without importing from anki.lang will break in the future") print("".join(traceback.format_stack()[-2])) from anki.lang import ngettext return ngettext(a, b, c) builtins.__dict__['_'] = fn__ builtins.__dict__['ngettext'] = fn_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 = 30000 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 QMessageBox.warning(None, "Anki Already Running", "If the existing instance of Anki is not responding, please close it using your task manager, or restart your computer.") sys.exit(1) 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 = argparse.ArgumentParser(description="Anki " + appVersion) parser.usage = "%(prog)s [OPTIONS] [file to import]" parser.add_argument("-b", "--base", help="path to base folder", default="") parser.add_argument("-p", "--profile", help="profile name to load", default="") parser.add_argument("-l", "--lang", help="interface language (en, de, etc)") return parser.parse_known_args(argv[1:]) def setupGL(pm): if isMac: return mode = pm.glMode() # work around pyqt loading wrong GL library if isLin: import ctypes ctypes.CDLL('libGL.so.1', ctypes.RTLD_GLOBAL) # catch opengl errors def msgHandler(type, ctx, msg): if "Failed to create OpenGL context" in msg: QMessageBox.critical(None, "Error", "Error loading '%s' graphics driver. Please start Anki again to try next driver." % mode) pm.nextGlMode() return else: print("qt:", msg) qInstallMessageHandler(msgHandler) if mode == "auto": return elif isLin: os.environ["QT_XCB_FORCE_SOFTWARE_OPENGL"] = "1" else: os.environ["QT_OPENGL"] = mode def run(): try: _run() except Exception as e: traceback.print_exc() 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) # profile manager from aqt.profiles import ProfileManager pm = ProfileManager(opts.base) # gl workarounds setupGL(pm) # opt in to full hidpi support? if not os.environ.get("ANKI_NOHIGHDPI"): QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) # create the app QCoreApplication.setApplicationName("Anki") QGuiApplication.setDesktopFileName("anki.desktop") app = AnkiApp(argv) 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) # proxy configured? from urllib.request import proxy_bypass, getproxies if 'http' in getproxies(): # if it's not set up to bypass localhost, we'll # need to disable proxies in the webviews if not proxy_bypass("127.0.0.1"): print("webview proxy use disabled") proxy = QNetworkProxy() proxy.setType(QNetworkProxy.NoProxy) QNetworkProxy.setApplicationProxy(proxy) # 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 pm.setupMeta() if opts.profile: pm.openProfile(opts.profile) # i18n setupLang(pm, app, opts.lang) if isLin and pm.glMode() == "auto": from aqt.utils import gfxDriverIsBroken if gfxDriverIsBroken(): pm.nextGlMode() QMessageBox.critical(None, "Error", "Your video driver is incompatible. Please start Anki again, and Anki will switch to a slower, more compatible mode.") sys.exit(1) # 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.15+dfsg/aqt/about.py000066400000000000000000000110711353113723000157100ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 anki.utils import versionWithBuild from aqt.utils import supportText, tooltip from anki.lang import _ 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) # Copy debug info ###################################################################### def onCopy(): addmgr = mw.addonManager addons = "\n".join(addmgr.annotatedName(d) for d in addmgr.allAddons()) info = "\n".join((supportText(), "Add-ons:\n\n{}".format(addons))) QApplication.clipboard().setText(info) tooltip(_("Copied to clipboard"), parent=dialog) btn = QPushButton(_("Copy Debug Info")) btn.clicked.connect(onCopy) abt.buttonBox.addButton(btn, QDialogButtonBox.ActionRole) abt.buttonBox.button(QDialogButtonBox.Ok).setFocus() # WebView contents ###################################################################### 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") % versionWithBuild() + '
' 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", "Arman High", "Arthur Milchior", )) 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.setMinimumWidth(800) abt.label.setMinimumHeight(600) dialog.show() abt.label.stdHtml(abouttext, js=" ") return dialog anki-2.1.15+dfsg/aqt/addcards.py000066400000000000000000000177051353113723000163550ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 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() 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.15+dfsg/aqt/addons.py000066400000000000000000000615571353113723000160640ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 from collections import defaultdict import markdown from send2trash import send2trash import jsonschema from jsonschema.exceptions import ValidationError from aqt.qt import * from aqt.utils import showInfo, openFolder, isWin, openLink, \ askUser, restoreGeom, saveGeom, restoreSplitter, saveSplitter, \ showWarning, tooltip, getFile from zipfile import ZipFile import aqt.forms import aqt from aqt.downloader import download from anki.lang import _, ngettext from anki.utils import intTime from anki.sync import AnkiRequestsClient class AddonManager: ext = ".ankiaddon" _manifest_schema = { "type": "object", "properties": { "package": {"type": "string", "meta": False}, "name": {"type": "string", "meta": True}, "mod": {"type": "number", "meta": True}, "conflicts": { "type": "array", "items": {"type": "string"}, "meta": True } }, "required": ["package", "name"] } 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) l.sort() if os.getenv("ANKIREVADDONS", ""): l = reversed(l) 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 isEnabled(self, dir): meta = self.addonMeta(dir) return not meta.get('disabled') def toggleEnabled(self, dir, enable=None): meta = self.addonMeta(dir) enabled = enable if enable is not None else meta.get("disabled") if enabled is True: conflicting = self._disableConflicting(dir) if conflicting: addons = ", ".join(self.addonName(f) for f in conflicting) showInfo( _("The following add-ons are incompatible with %(name)s \ and have been disabled: %(found)s") % dict(name=self.addonName(dir), found=addons), textFormat="plain") meta['disabled'] = not enabled self.writeAddonMeta(dir, meta) def addonName(self, dir): return self.addonMeta(dir).get("name", dir) def annotatedName(self, dir): buf = self.addonName(dir) if not self.isEnabled(dir): buf += _(" (disabled)") return buf # Conflict resolution ###################################################################### def addonConflicts(self, dir): return self.addonMeta(dir).get("conflicts", []) def allAddonConflicts(self): all_conflicts = defaultdict(list) for dir in self.allAddons(): if not self.isEnabled(dir): continue conflicts = self.addonConflicts(dir) for other_dir in conflicts: all_conflicts[other_dir].append(dir) return all_conflicts def _disableConflicting(self, dir, conflicts=None): conflicts = conflicts or self.addonConflicts(dir) installed = self.allAddons() found = [d for d in conflicts if d in installed and self.isEnabled(d)] found.extend(self.allAddonConflicts().get(dir, [])) if not found: return [] for package in found: self.toggleEnabled(package, enable=False) return found # Installing and deleting add-ons ###################################################################### def readManifestFile(self, zfile): try: with zfile.open("manifest.json") as f: data = json.loads(f.read()) jsonschema.validate(data, self._manifest_schema) # build new manifest from recognized keys schema = self._manifest_schema["properties"] manifest = {key: data[key] for key in data.keys() & schema.keys()} except (KeyError, json.decoder.JSONDecodeError, ValidationError): # raised for missing manifest, invalid json, missing/invalid keys return {} return manifest def install(self, file, manifest=None): """Install add-on from path or file-like object. Metadata is read from the manifest file, with keys overriden by supplying a 'manifest' dictionary""" try: zfile = ZipFile(file) except zipfile.BadZipfile: return False, "zip" with zfile: file_manifest = self.readManifestFile(zfile) if manifest: file_manifest.update(manifest) manifest = file_manifest if not manifest: return False, "manifest" package = manifest["package"] conflicts = manifest.get("conflicts", []) found_conflicts = self._disableConflicting(package, conflicts) meta = self.addonMeta(package) self._install(package, zfile) schema = self._manifest_schema["properties"] manifest_meta = {k: v for k, v in manifest.items() if k in schema and schema[k]["meta"]} meta.update(manifest_meta) self.writeAddonMeta(package, meta) return True, meta["name"], found_conflicts def _install(self, dir, zfile): # previously installed? base = self.addonsFolder(dir) if os.path.exists(base): self.backupUserFiles(dir) if not self.deleteAddon(dir): self.restoreUserFiles(dir) return os.mkdir(base) self.restoreUserFiles(dir) # extract for n in zfile.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 zfile.extract(n, base) # true on success def deleteAddon(self, dir): try: send2trash(self.addonsFolder(dir)) return True except OSError as e: showWarning(_("Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again.\n\nDebug info: %s") % e, textFormat="plain") return False # Processing local add-on files ###################################################################### def processPackages(self, paths): log = [] errs = [] self.mw.progress.start(immediate=True) try: for path in paths: base = os.path.basename(path) ret = self.install(path) if ret[0] is False: if ret[1] == "zip": msg = _("Corrupt add-on file.") elif ret[1] == "manifest": msg = _("Invalid add-on manifest.") else: msg = "Unknown error: {}".format(ret[1]) errs.append(_("Error installing %(base)s: %(error)s" % dict(base=base, error=msg))) else: log.append(_("Installed %(name)s" % dict(name=ret[1]))) if ret[2]: log.append(_("The following conflicting add-ons were disabled:") + " " + " ".join(ret[2])) finally: self.mw.progress.finish() return log, errs # 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("_", " ") name = os.path.splitext(fname)[0] ret = self.install(io.BytesIO(data), manifest={"package": str(n), "name": name, "mod": intTime()}) if ret[0] is False: if ret[1] == "zip": msg = _("Corrupt add-on file.") elif ret[1] == "manifest": msg = _("Invalid add-on manifest.") else: msg = "Unknown error: {}".format(ret[1]) errs.append(_("Error downloading %(id)s: %(error)s") % dict( id=n, error=msg)) else: log.append(_("Downloaded %(fname)s" % dict(fname=name))) if ret[2]: log.append(_("The following conflicting add-ons were disabled:") + " " + " ".join(ret[2])) 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", 0) < (ts or 0): updated.append(sid) return updated # Add-on Config ###################################################################### _configButtonActions = {} _configUpdatedActions = {} 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, encoding="utf-8") 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) def configUpdatedAction(self, addon): return self._configUpdatedActions.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 setConfigUpdatedAction(self, module, fn): addon = self.addonFromModule(module) self._configUpdatedActions[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) # Web Exports ###################################################################### _webExports = {} def setWebExports(self, module, pattern): addon = self.addonFromModule(module) self._webExports[addon] = pattern def getWebExports(self, addon): return self._webExports.get(addon) # 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.installFromFile.clicked.connect(self.onInstallFiles) 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.form.addonList.itemDoubleClicked.connect(self.onConfig) self.form.addonList.currentRowChanged.connect(self._onAddonItemSelected) self.setAcceptDrops(True) self.redrawAddons() restoreGeom(self, "addons") self.show() def dragEnterEvent(self, event): mime = event.mimeData() if not mime.hasUrls(): return None urls = mime.urls() ext = self.mgr.ext if all(url.toLocalFile().endswith(ext) for url in urls): event.acceptProposedAction() def dropEvent(self, event): mime = event.mimeData() paths = [] for url in mime.urls(): path = url.toLocalFile() if os.path.exists(path): paths.append(path) self.onInstallFiles(paths) def reject(self): saveGeom(self, "addons") return QDialog.reject(self) def redrawAddons(self): addonList = self.form.addonList mgr = self.mgr self.addons = [(mgr.annotatedName(d), d) for d in mgr.allAddons()] self.addons.sort() selected = set(self.selectedAddons()) addonList.clear() for name, dir in self.addons: item = QListWidgetItem(name, addonList) if not mgr.isEnabled(dir): item.setForeground(Qt.gray) if dir in selected: item.setSelected(True) addonList.repaint() def _onAddonItemSelected(self, row_int): try: addon = self.addons[row_int][1] except IndexError: addon = '' self.form.viewPage.setEnabled(bool(re.match(r"^\d+$", addon))) self.form.config.setEnabled(bool(self.mgr.getConfig(addon) or self.mgr.configAction(addon))) 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: if not self.mgr.deleteAddon(dir): break self.form.addonList.clearSelection() self.redrawAddons() def onGetAddons(self): GetAddons(self) def onInstallFiles(self, paths=None): if not paths: key = (_("Packaged Anki Add-on") + " (*{})".format(self.mgr.ext)) paths = getFile(self, _("Install Add-on(s)"), None, key, key="addons", multi=True) if not paths: return False log, errs = self.mgr.processPackages(paths) if log: log_html = "
".join(log) if len(log) == 1: tooltip(log_html, parent=self) else: showInfo(log_html, parent=self, textFormat="rich") if errs: msg = _("Please report this to the respective add-on author(s).") showWarning("

".join(errs + [msg]), parent=self, textFormat="rich") self.redrawAddons() def onCheckForUpdates(self): try: updated = self.mgr.checkForUpdates() except Exception as e: showWarning(_("Please check your internet connection.") + "\n\n" + str(e), textFormat="plain") return 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: log_html = "
".join(log) if len(log) == 1: tooltip(log_html, parent=self) else: showInfo(log_html, parent=self, textFormat="rich") if errs: showWarning("\n\n".join(errs), parent=self, textFormat="plain") 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 Add-ons"), 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: log_html = "
".join(log) if len(log) == 1: tooltip(log_html, parent=self) else: showInfo(log_html, parent=self, textFormat="rich") if errs: showWarning("\n\n".join(errs), textFormat="plain") 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.setupFonts() self.updateHelp() self.updateText(self.conf) restoreGeom(self, "addonconf") restoreSplitter(self.form.splitter, "addonconf") self.show() def onRestoreDefaults(self): default_conf = self.mgr.addonConfigDefaults(self.addon) self.updateText(default_conf) tooltip(_("Restored defaults"), parent=self) def setupFonts(self): font_mono = QFontDatabase.systemFont(QFontDatabase.FixedFont) font_mono.setPointSize(font_mono.pointSize() + 1) self.form.editor.setFont(font_mono) 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, conf): self.form.editor.setPlainText( json.dumps(conf, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ': '))) def onClose(self): saveGeom(self, "addonconf") saveSplitter(self.form.splitter, "addonconf") def reject(self): self.onClose() super().reject() def accept(self): txt = self.form.editor.toPlainText() try: new_conf = json.loads(txt) except Exception as e: showInfo(_("Invalid configuration: ") + repr(e)) return if not isinstance(new_conf, dict): showInfo(_("Invalid configuration: top level object must be a map")) return if new_conf != self.conf: self.mgr.writeConfig(self.addon, new_conf) # does the add-on define an action to be fired? act = self.mgr.configUpdatedAction(self.addon) if act: act(new_conf) self.onClose() super().accept() anki-2.1.15+dfsg/aqt/browser.py000066400000000000000000002206211353113723000162640ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import sre_constants import html import time import re import unicodedata 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, htmlToTextLine, \ isWin, intTime, \ isMac, bodyClass from aqt.utils import saveGeom, restoreGeom, saveSplitter, restoreSplitter, \ saveHeader, restoreHeader, saveState, restoreState, getTag, \ showInfo, askUser, tooltip, openHelp, showWarning, shortcut, mungeQA, \ getOnlyText, MenuList, SubMenu, qtMenuShortcutWorkaround from anki.lang import _ from anki.hooks import runHook, addHook, remHook, runFilter from aqt.webview import AnkiWebView from anki.consts import * from anki.sound import 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()) # scroll if the selection count has changed if count != len(self.selectedCards): # 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)) def isRTL(self, index): col = index.column() type = self.columnType(col) if type != "noteFld": return False row = index.row() c = self.getCard(index) nt = c.note().model() return nt['flds'][self.col.models.sortIdx(nt)]['rtl'] # Line painter ###################################################################### COLOUR_SUSPENDED = "#FFFFB2" COLOUR_MARKED = "#ccc" flagColours = { 1: "#ffaaaa", 2: "#ffb347", 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 if self.model.isRTL(index): option.direction = Qt.RightToLeft col = None if c.userFlag() > 0: col = flagColours[c.userFlag()] elif c.note().hasTag("Marked"): col = COLOUR_MARKED elif c.queue == -1: col = COLOUR_SUSPENDED 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) 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): # pylint: disable=unnecessary-lambda # 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.actionOrange_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)) # 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) runHook("browser.onContextMenu", self, m) qtMenuShortcutWorkaround(m) 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 ") # grab search text and normalize txt = self.form.searchEdit.lineEdit().text() txt = unicodedata.normalize("NFC", txt) # update history 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 self.card = 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) self.form.tableView.setStyleSheet("QTableView{ selection-background-color: rgba(127, 127, 127, 50); }") self.singleCard = False 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._updateFlagsMenu() runHook("browser.rowChanged", self) self._renderPreview(True) def refreshCurrentCard(self, note): self.model.refreshNote(note) self._renderPreview(False) def onLoadNote(self, editor): self.refreshCurrentCard(editor.note) 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: self.model.endReset() 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(self.onTreeCollapse) self.itemCollapsed.connect(self.onTreeCollapse) 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.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"), (_("Orange 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) class CardInfoDialog(QDialog): silentlyClose = True def reject(self): saveGeom(self, "revlog") return QDialog.reject(self) d = CardInfoDialog(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() 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 _lastPreviewState = None def onTogglePreview(self): if self._previewWindow: self._closePreview() else: self._openPreview() def _openPreview(self): self._previewState = "question" self._lastPreviewState = None 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._previewBothSides = self.col.conf.get("previewBothSides", False) self.previewShowBothSides.setChecked(self._previewBothSides) self.previewShowBothSides.toggled.connect(self._onPreviewShowBothSides) 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 = "" self._lastPreviewState = None else: if self._previewBothSides: self._previewState = "answer" elif cardChanged: self._previewState = "question" currentState = self._previewStateAndMod() if currentState == self._lastPreviewState: # nothing has changed, avoid refreshing return # need to force reload even if answer txt = c.q(reload=True) questionAudio = [] if self._previewBothSides: questionAudio = allSounds(txt) 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._lastPreviewState = self._previewStateAndMod() 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() def _previewStateAndMod(self): c = self.card n = c.note() n.load() return (self._previewState, c.id, n.mod) # Card deletion ###################################################################### def deleteNotes(self): focus = self.focusWidget() if focus != self.form.tableView: return 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): # flag needs toggling off? if n == self.card.userFlag(): n = 0 self.col.setUserFlag(n, self.selectedCards()) self.model.reset() def _updateFlagsMenu(self): flag = self.card and self.card.userFlag() flag = flag or 0 f = self.form flagActions = [f.actionRed_Flag, f.actionOrange_Flag, f.actionGreen_Flag, f.actionBlue_Flag] for c, act in enumerate(flagActions): act.setChecked(flag == c+1) qtMenuShortcutWorkaround(self.form.menuFlag) 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("loadNote", self.onLoadNote) 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("loadNote", self.onLoadNote) 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 = anki.find.fieldNamesForNotes(self.mw.col, sf) 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), }, parent=self) 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), key=lambda x: x.lower()) 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() 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 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() QDialog.accept(self) def onHelp(self): openHelp("browsermisc") anki-2.1.15+dfsg/aqt/clayout.py000066400000000000000000000453631353113723000162710ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 from anki.lang import _, ngettext 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): did = None if hasattr(self.parent,"deckChooser"): did = self.parent.deckChooser.selectedId() self.cards = self.col.previewCards(self.note, 2, did=did) 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(r"\[\[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: for key in ("bfont", "bsize"): if key in t: del t[key] 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") self.pform.frontWeb = None self.pform.backWeb = None return QDialog.reject(self) def onHelp(self): openHelp("templates") anki-2.1.15+dfsg/aqt/customstudy.py000066400000000000000000000151451353113723000172070ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 * from anki.lang 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_REVIEW = 2 TYPE_ALL = 3 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)) smin = -DYN_MAX_SIZE 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)) smin = -DYN_MAX_SIZE 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 elif type == TYPE_REVIEW: terms = "-is:new " ord = DYN_RANDOM 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.15+dfsg/aqt/deckbrowser.py000066400000000000000000000244211353113723000171130ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 from anki.utils import ids2str, fmtTimeSpan from anki.errors import DeckRenameError import aqt from anki.sound import clearAudioQueue from anki.hooks import runHook from copy import deepcopy from anki.lang import _, ngettext 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() self.__renderPage(None) return self.web.evalWithCallback("window.pageYOffset", self.__renderPage) def __renderPage(self, offset): 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() if offset is not None: self._scrollToOffset(offset) def _scrollToOffset(self, offset): self.web.eval("$(function() { window.scrollTo(0, %d, 'instant'); });" % offset) 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 = "" nameMap = self.mw.col.decks.nameMap() for node in nodes: buf += self._deckRow(node, depth, len(nodes), nameMap) if depth == 0: buf += self._topLevelDragRow() return buf def _deckRow(self, node, depth, cnt, nameMap): 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, nameMap): 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.15+dfsg/aqt/deckchooser.py000066400000000000000000000062241353113723000170730ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 from anki.lang import _ 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.setAutoDefault(False) 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") if ret.name: 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.15+dfsg/aqt/deckconf.py000066400000000000000000000244041353113723000163560ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 from anki.lang import _, ngettext 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 int(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)) f.hardFactor.setValue(int(c.get("hardFactor", 1.2)*100)) if self.mw.col.schedVer() == 1: f.hardFactor.setVisible(False) f.hardFactorLabel.setVisible(False) # 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() c['hardFactor'] = f.hardFactor.value()/100.0 # 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.15+dfsg/aqt/downloader.py000066400000000000000000000043411353113723000167360ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import time, re from aqt.qt import * from anki.sync import AnkiRequestsClient from anki.hooks import addHook, remHook import aqt from anki.lang import _ 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 = _("Unexpected response code: %s" % resp.status_code) return except Exception as e: self.error = _("Please check your internet connection.") + "\n\n" + str(e) return finally: remHook("httpRecv", recvEvent) self.fname = re.match("attachment; filename=(.+)", resp.headers['content-disposition']).group(1) self.data = data anki-2.1.15+dfsg/aqt/dyndeckconf.py000066400000000000000000000116371353113723000170750ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 from anki.lang import _ 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) if self.mw.col.schedVer() == 1: if d['delays']: f.steps.setText(self.listToUser(d['delays'])) f.stepsOn.setChecked(True) else: f.steps.setVisible(False) f.stepsOn.setVisible(False) 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 if self.mw.col.schedVer() == 1 and f.stepsOn.isChecked(): steps = self.userToList(f.steps) if steps: d['delays'] = steps else: 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.15+dfsg/aqt/editcurrent.py000066400000000000000000000052161353113723000171320ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 tooltip import aqt.editor from aqt.utils import saveGeom, restoreGeom from anki.hooks import addHook, remHook from anki.utils import isMac from anki.lang import _ 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.card = self.mw.reviewer.card 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, taking care not to retain webview # pylint: disable=unnecessary-lambda self.mw.progress.timer(100, lambda: self.editor.web.setFocus(), False) def onReset(self): # lazy approach for now: throw away edits try: n = self.editor.note n.load()#reload in case the model changed 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 reopen(self,mw): tooltip("Please finish editing the existing card first.") self.onReset() 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.15+dfsg/aqt/editor.py000066400000000000000000001062311353113723000160670ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import re import urllib.request, urllib.parse, urllib.error import warnings import html import mimetypes import base64 import unicodedata import json from anki.lang import _ from aqt.qt import * from anki.utils import isWin, namedtmp, stripHTMLMedia, \ checksum import anki.sound from anki.hooks import runHook, runFilter, addHook from aqt.sound import getAudio from aqt.webview import AnkiWebView from aqt.utils import shortcut, showInfo, showWarning, getFile, \ openHelp, tooltip, qtMenuShortcutWorkaround import aqt from bs4 import BeautifulSoup import requests from anki.sync import AnkiRequestsClient pics = ("jpg", "jpeg", "png", "tif", "tiff", "gif", "svg", "webp") audio = ("wav", "mp3", "ogg", "flac", "mp4", "swf", "mov", "mpeg", "mkv", "m4a", "3gp", "spx", "oga", "webm") _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), fldsTitle=_("Customize Fields"), cardsTitle=shortcut(_("Customize Card Templates (Ctrl+L)"))) 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.encodebytes(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 icon.startswith("qrc:/"): iconstr = icon elif 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+M, C", self.insertMathjaxChemistry), ("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, nid, txt) = cmd.split(":", 3) ord = int(ord) try: nid = int(nid) except ValueError: nid = 0 if nid != self.note.id: print("ignored late blur") return 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): if txt in ('
', '

'): return '' 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); setNoteId(%s)" % ( json.dumps(data), json.dumps(self.fonts()), json.dumps(focusTo), json.dumps(self.note.id)), oncallback) def fonts(self): return [(runFilter("mungeEditingFontName", f['font']), f['size'], f['rtl']) for f in self.note.model()['flds']] def saveNow(self, callback, keepFocus=False): "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(%d)" % keepFocus, 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.note.flush() 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): self.saveNow(self._onCloze, keepFocus=True) 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 _addMediaFromData(self, fname, data): return self.mw.col.media.writeData(fname, data) def onRecSound(self): try: file = getAudio(self.widget) except Exception as e: showWarning(_( "Couldn't record audio. Have you installed 'lame'?") + "\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 None 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 inlinedImageToFilename(self, txt): prefix = "data:image/" suffix = ";base64," for ext in ("jpg", "jpeg", "png", "gif"): fullPrefix = prefix + ext + suffix if txt.startswith(fullPrefix): b64data = txt[len(fullPrefix):].strip() data = base64.b64decode(b64data, validate=True) if ext == "jpeg": ext = "jpg" return self._addPastedImage(data, "."+ext) return "" def inlinedImageToLink(self, src): fname = self.inlinedImageToFilename(src) if fname: return self.fnameToLink(fname) return "" # ext should include dot def _addPastedImage(self, data, ext): # hash and write csum = checksum(data) fname = "{}-{}{}".format("paste", csum, ext) return self._addMediaFromData(fname, data) 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: reqs = AnkiRequestsClient() reqs.timeout = 30 r = reqs.get(url) 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 elif src.startswith("data:image/"): # and convert inlined data tag['src'] = self.inlinedImageToFilename(src) 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(_("MathJax chemistry")) a.triggered.connect(self.insertMathjaxChemistry) a.setShortcut(QKeySequence("Ctrl+M, C")) 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")) qtMenuShortcutWorkaround(m) 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('\\\\[', '\\\\]');") def insertMathjaxChemistry(self): self.web.eval("wrap('\\\\(\\\\ce{', '}\\\\)');") # 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, mode): extended = self.editor.mw.app.queryKeyboardModifiers() & Qt.ShiftModifier mime = self.editor.mw.app.clipboard().mimeData(mode=mode) html, internal = self._processMime(mime) if not html: return self.editor.doPaste(html, internal, extended) def onPaste(self): self._onPaste(QClipboard.Clipboard) def onMiddleClickPaste(self): self._onPaste(QClipboard.Selection) 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 # favour url if it's a local link if mime.hasUrls() and mime.urls()[0].toString().startswith("file://"): types = (self._processUrls, self._processImage, self._processText) else: types = (self._processImage, self._processUrls, self._processText) for fn in types: 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() # inlined data in base64? if txt.startswith("data:image/"): return self.editor.inlinedImageToLink(txt) # if the user is pasting an image or sound link, convert it to local if self.editor.isURL(txt): url = txt.split("\r\n")[0] link = self.editor.urlToLink(url) if link: return link # not media; add it as a normal link if pasting with shift link = '{}'.format( url, html.escape(txt) ) return link # normal text; convert it to HTML txt = html.escape(txt) txt = txt.replace("\n", "
")\ .replace("\t", " "*4) # if there's more than one consecutive space, # use non-breaking spaces for the second one on def repl(match): return match.group(1).replace(" ", " ") + " " txt = re.sub(" ( +)", repl, txt) 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): if not mime.hasImage(): return 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 data = open(path, "rb").read() fname = self.editor._addPastedImage(data, ext) if fname: return self.editor.fnameToLink(fname) 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() if not isMac and not clip.ownsClipboard(): return 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()) # QFont returns "Kozuka Gothic Pro L" but WebEngine expects "Kozuka Gothic Pro Light" # - there may be other cases like a trailing 'Bold' that need fixing, but will # wait for further reports first. def fontMungeHack(font): return re.sub(" L$", " Light", font) addHook("mungeEditingFontName", fontMungeHack) anki-2.1.15+dfsg/aqt/errors.py000066400000000000000000000124751353113723000161230ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import sys, traceback import html import re from anki.lang import _ from aqt.qt import * from aqt.utils import showText, showWarning, supportText from aqt import mw 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 "database or disk is full" in error or "Errno 28" in error: return showWarning(_("Your computer's storage may be full. Please delete some unneeded files, then try again.")) 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 error = supportText() + self._addonText(error) + "\n" + error else: txt = stdText error = supportText() + "\n" + error # show dialog txt = txt + "
" + error + "
" showText(txt, type="html", copyBtn=True) def _addonText(self, error): matches = re.findall(r"addons21/(.*?)/", error) if not matches: return "" # reverse to list most likely suspect first, dict to deduplicate: addons = [mw.addonManager.addonName(i) for i in dict.fromkeys(reversed(matches))] txt = _("""Add-ons possibly involved: {}\n""") # highlight importance of first add-on: addons[0] = "{}".format(addons[0]) return txt.format(", ".join(addons)) anki-2.1.15+dfsg/aqt/exporting.py000066400000000000000000000131371353113723000166220ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # 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, \ checkInvalidFilename, showInfo 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) html = getattr(self.exporter, "includeHTML", None) if html is not None: self.frm.includeHTML.setVisible(True) self.frm.includeHTML.setChecked(html) else: self.frm.includeHTML.setVisible(False) # 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()) self.exporter.includeHTML = ( self.frm.includeHTML.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) if not self.isVerbatim and self.isApkg and self.exporter.includeSched and self.col.schedVer() == 2: showInfo("Please switch to the regular scheduler before exporting a single deck .apkg with scheduling.") return 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.15+dfsg/aqt/fields.py000066400000000000000000000131011353113723000160400ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # 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 from anki.lang import _, ngettext 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.15+dfsg/aqt/forms/000077500000000000000000000000001353113723000153525ustar00rootroot00000000000000anki-2.1.15+dfsg/aqt/forms/__init__.py000066400000000000000000000027751353113723000174760ustar00rootroot00000000000000# 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.15+dfsg/aqt/forms/about.py000066400000000000000000000034051353113723000170400ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/about.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/addcards.py000066400000000000000000000055131353113723000174750ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/addcards.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/icons/anki.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) Dialog.setWindowIcon(icon) 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")) from . import icons_rc anki-2.1.15+dfsg/aqt/forms/addfield.py000066400000000000000000000067431353113723000174720ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/addfield.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/addmodel.py000066400000000000000000000034651353113723000175050ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/addmodel.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/addonconf.py000066400000000000000000000067251353113723000176710ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/addonconf.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.splitter = QtWidgets.QSplitter(Dialog) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setObjectName("splitter") self.editor = QtWidgets.QPlainTextEdit(self.splitter) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(3) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.editor.sizePolicy().hasHeightForWidth()) self.editor.setSizePolicy(sizePolicy) self.editor.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap) self.editor.setObjectName("editor") self.scrollArea = QtWidgets.QScrollArea(self.splitter) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(0) 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, 80, 470)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents) self.verticalLayout_2.setContentsMargins(6, 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.splitter) 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.15+dfsg/aqt/forms/addons.py000066400000000000000000000070471353113723000172040ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/addons.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.ExtendedSelection) 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.installFromFile = QtWidgets.QPushButton(Dialog) self.installFromFile.setObjectName("installFromFile") self.verticalLayout.addWidget(self.installFromFile) 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.installFromFile.setText(_("Install from file...")) 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.15+dfsg/aqt/forms/browser.py000066400000000000000000000441121353113723000174110ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/browser.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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)) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/icons/anki.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) Dialog.setWindowIcon(icon) 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.actionRed_Flag = QtWidgets.QAction(Dialog) self.actionRed_Flag.setCheckable(True) self.actionRed_Flag.setObjectName("actionRed_Flag") self.actionOrange_Flag = QtWidgets.QAction(Dialog) self.actionOrange_Flag.setCheckable(True) self.actionOrange_Flag.setObjectName("actionOrange_Flag") self.actionGreen_Flag = QtWidgets.QAction(Dialog) self.actionGreen_Flag.setCheckable(True) self.actionGreen_Flag.setObjectName("actionGreen_Flag") self.actionBlue_Flag = QtWidgets.QAction(Dialog) self.actionBlue_Flag.setCheckable(True) 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.actionOrange_Flag) self.menuFlag.addAction(self.actionGreen_Flag) self.menuFlag.addAction(self.actionBlue_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.actionReschedule.setShortcut(_("Ctrl+Alt+R")) self.actionSelectAll.setText(_("Select &All")) self.actionSelectAll.setShortcut(_("Ctrl+Alt+A")) self.actionUndo.setText(_("&Undo")) self.actionUndo.setShortcut(_("Ctrl+Alt+Z")) self.actionInvertSelection.setText(_("&Invert Selection")) self.actionInvertSelection.setShortcut(_("Ctrl+Alt+S")) 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 Notes...")) self.actionAdd.setShortcut(_("Ctrl+E")) self.actionChange_Deck.setText(_("Change Deck...")) self.actionChange_Deck.setShortcut(_("Ctrl+D")) self.actionRed_Flag.setText(_("Red Flag")) self.actionRed_Flag.setShortcut(_("Ctrl+1")) self.actionOrange_Flag.setText(_("Orange Flag")) self.actionOrange_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.15+dfsg/aqt/forms/browserdisp.py000066400000000000000000000064351353113723000202770ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/browserdisp.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/browseropts.py000066400000000000000000000067171353113723000203300ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/browseropts.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/changemap.py000066400000000000000000000032131353113723000176460ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/changemap.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/changemodel.py000066400000000000000000000135261353113723000202010ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/changemodel.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/clayout_top.py000066400000000000000000000047651353113723000203020ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/clayout_top.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/customstudy.py000066400000000000000000000127651353113723000203420ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/customstudy.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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) 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 review cards in random order")) item = self.cardType.item(3) item.setText(_("All cards in random order (don\'t reschedule)")) self.cardType.setSortingEnabled(__sortingEnabled) anki-2.1.15+dfsg/aqt/forms/dconf.py000066400000000000000000000507621353113723000170270ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/dconf.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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, 5, 0, 1, 3) self.hardFactorLabel = QtWidgets.QLabel(self.tab_3) self.hardFactorLabel.setObjectName("hardFactorLabel") self.gridLayout_3.addWidget(self.hardFactorLabel, 4, 0, 1, 1) self.hardFactor = QtWidgets.QSpinBox(self.tab_3) self.hardFactor.setMinimum(5) self.hardFactor.setMaximum(120) self.hardFactor.setObjectName("hardFactor") self.gridLayout_3.addWidget(self.hardFactor, 4, 1, 1, 1) self.label_15 = QtWidgets.QLabel(self.tab_3) self.label_15.setObjectName("label_15") self.gridLayout_3.addWidget(self.label_15, 4, 2, 1, 1) 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.hardFactor) Dialog.setTabOrder(self.hardFactor, 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.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.hardFactorLabel.setText(_("Hard interval")) self.label_15.setText(_("%")) 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.15+dfsg/aqt/forms/debug.py000066400000000000000000000036311353113723000170150ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/debug.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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) 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.15+dfsg/aqt/forms/dyndconf.py000066400000000000000000000166361353113723000175440ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/dyndconf.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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(392, 472) 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.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.steps = QtWidgets.QLineEdit(self.groupBox_2) self.steps.setEnabled(False) self.steps.setObjectName("steps") self.gridLayout_2.addWidget(self.steps, 4, 0, 1, 1) self.stepsOn = QtWidgets.QCheckBox(self.groupBox_2) self.stepsOn.setObjectName("stepsOn") self.gridLayout_2.addWidget(self.stepsOn, 3, 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) self.stepsOn.toggled['bool'].connect(self.steps.setEnabled) 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.stepsOn) Dialog.setTabOrder(self.stepsOn, self.steps) 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")) self.steps.setText(_("1 10")) self.stepsOn.setText(_("Custom steps (in minutes)")) anki-2.1.15+dfsg/aqt/forms/editaddon.py000066400000000000000000000027671353113723000176730ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/editaddon.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/editcurrent.py000066400000000000000000000031751353113723000202620ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/editcurrent.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/icons/anki.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) Dialog.setWindowIcon(icon) 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")) from . import icons_rc anki-2.1.15+dfsg/aqt/forms/edithtml.py000066400000000000000000000026511353113723000175420ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/edithtml.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/exporting.py000066400000000000000000000075131353113723000177510ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/exporting.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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, 223) 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.includeHTML = QtWidgets.QCheckBox(ExportDialog) self.includeHTML.setObjectName("includeHTML") self.vboxlayout1.addWidget(self.includeHTML) 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")) self.includeHTML.setText(_("Include HTML and media references")) anki-2.1.15+dfsg/aqt/forms/fields.py000066400000000000000000000124551353113723000172010ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/fields.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/finddupes.py000066400000000000000000000055201353113723000177070ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/finddupes.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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 filter:")) self.label.setText(_("Search in:")) from aqt.webview import AnkiWebView anki-2.1.15+dfsg/aqt/forms/findreplace.py000066400000000000000000000064741353113723000202130ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/findreplace.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/getaddons.py000066400000000000000000000044131353113723000176760ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/getaddons.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/icons_rc.py000066400000000000000000001060011353113723000175210ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Resource object code # # Created by: The Resource Compiler for PyQt5 (Qt v5.12.3) # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore qt_resource_data = b"\ \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\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\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\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\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\x09\ \x08\x97\x87\xa7\ \x00\x68\ \x00\x65\x00\x61\x00\x72\x00\x74\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\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\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\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\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x06\xe5\ \x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x04\x0a\ \x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xa1\ \x00\x00\x00\x78\x00\x00\x00\x00\x00\x01\x00\x00\x11\xd5\ \x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x17\x42\ " 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\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x06\xe5\ \x00\x00\x01\x37\x58\x6b\x1d\xa0\ \x00\x00\x00\x28\x00\x00\x00\x00\x00\x01\x00\x00\x04\x0a\ \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\ \x00\x00\x00\x64\x00\x00\x00\x00\x00\x01\x00\x00\x0d\xa1\ \x00\x00\x01\x5f\xb2\xe6\x4b\xb0\ \x00\x00\x00\x78\x00\x00\x00\x00\x00\x01\x00\x00\x11\xd5\ \x00\x00\x01\x5f\xb2\xe6\x4b\xb0\ \x00\x00\x00\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x17\x42\ \x00\x00\x01\x5f\xb2\xe6\x4b\xb0\ " qt_version = [int(v) for v in 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.15+dfsg/aqt/forms/importing.py000066400000000000000000000123451353113723000177410ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/importing.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/main.py000066400000000000000000000202301353113723000166450ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/main.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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+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.15+dfsg/aqt/forms/modelopts.py000066400000000000000000000057671353113723000177510ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/modelopts.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/models.py000066400000000000000000000047511353113723000172160ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/models.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/preferences.py000066400000000000000000000343221353113723000202310ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/preferences.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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(423, 508) 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.hwAccel = QtWidgets.QCheckBox(self.tab_1) self.hwAccel.setObjectName("hwAccel") self.verticalLayout.addWidget(self.hwAccel) 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.newSched = QtWidgets.QCheckBox(self.tab_1) self.newSched.setObjectName("newSched") self.verticalLayout.addWidget(self.newSched) 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.hwAccel) Preferences.setTabOrder(self.hwAccel, 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.newSched) Preferences.setTabOrder(self.newSched, 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.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.hwAccel.setText(_("Hardware acceleration (faster, may cause display issues)")) 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.newSched.setText(_("Experimental V2 scheduler")) 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(_("You can restore backups via File>Switch Profile.")) 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.15+dfsg/aqt/forms/preview.py000066400000000000000000000031211353113723000174020ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/preview.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/profiles.py000066400000000000000000000072711353113723000175560ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/profiles.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/icons/anki.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) MainWindow.setWindowIcon(icon) 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...")) from . import icons_rc anki-2.1.15+dfsg/aqt/forms/progress.py000066400000000000000000000031411353113723000175670ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/progress.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/reposition.py000066400000000000000000000063441353113723000201260ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/reposition.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/reschedule.py000066400000000000000000000070601353113723000200520ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/reschedule.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/setgroup.py000066400000000000000000000031071353113723000175750ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/setgroup.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/setlang.py000066400000000000000000000030001353113723000173520ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/setlang.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/stats.py000066400000000000000000000072011353113723000170620ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/stats.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/studydeck.py000066400000000000000000000035521353113723000177300ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/studydeck.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/taglimit.py000066400000000000000000000057121353113723000175430ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/taglimit.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/forms/template.py000066400000000000000000000123261353113723000175430ustar00rootroot00000000000000# -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ # Form implementation generated from reading ui file 'designer/template.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # 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.15+dfsg/aqt/importing.py000066400000000000000000000360401353113723000166110ustar00rootroot00000000000000# coding=utf-8 # Copyright: Ankitects Pty Ltd and contributors # 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, showInfo 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() self.deck.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) head, ext = os.path.splitext(file) ext = ext.lower() if ext == ".anki": showInfo(_(".anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website.")) return elif ext == ".anki2": showInfo(_(".anki2 files are not directly importable - please import the .apkg or .zip file you have received instead.")) return importFile(mw, file) def importFile(mw, file): importerClass = None done = False for i in importing.Importers: if done: break for mext in re.findall(r"[( ]?\*\.(.+?)[) ]", i[0]): if file.endswith("." + mext): importerClass = i[1] done = True break if not importerClass: # if no matches, assume TSV importerClass = importing.Importers[0][1] importer = importerClass(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'": 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: try: importer.run() finally: mw.progress.finish() 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) 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 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 replaceWithApkg(mw, importer.file, mw.restoringBackup) 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.15+dfsg/aqt/main.py000066400000000000000000001317701353113723000155330ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 import platform 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, runFilter import aqt import aqt.progress import aqt.webview import aqt.toolbar import aqt.stats import aqt.mediasrv import anki.sound import anki.mpv from aqt.utils import saveGeom, restoreGeom, showInfo, showWarning, \ restoreState, getOnlyText, askUser, showText, tooltip, \ openHelp, openLink, checkInvalidFilename, getFile from aqt.qt import sip from anki.lang import _, ngettext 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 # 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. if isWin: fn = self.setupProfileAfterWebviewsLoaded else: fn = self.setupProfile self.progress.timer(10, fn, False, requiresCollection=False) def setupUI(self): self.col = None self.setupCrashLog() self.disableGC() self.setupAppMsg() self.setupKeys() self.setupThreads() self.setupMediaServer() self.setupSound() self.setupSpellCheck() 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() def setupProfileAfterWebviewsLoaded(self): for w in (self.web, self.bottomWeb): if not w._domDone: self.progress.timer(10, self.setupProfileAfterWebviewsLoaded, False, requiresCollection=False) return else: w.requiresCol = True self.setupProfile() # 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): 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() 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:")).strip() if name: 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).strip() 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(self.pm.name + " - Anki") # 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: print("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): if isWin: return 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.hide() 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: # pylint: disable=not-callable 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) # force webengine processes to load before cwd is changed if isWin: for o in self.web, self.bottomWeb: o.requiresCol = False o._domReady = False o._page.setContent(bytes("", "ascii")) 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 setupSpellCheck(self): os.environ["QTWEBENGINE_DICTIONARIES_PATH"] = ( os.path.join(self.pm.base, "dictionaries")) 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 setupStyle(self): buf = "" if isWin and platform.release() == '10': # add missing bottom border to menubar buf += """ QMenuBar { border-bottom: 1px solid #aaa; background: white; } """ # qt bug? setting the above changes the browser sidebar # to white as well, so set it back buf += """ QTreeWidget { background: #eee; } """ # allow addons to modify the styling buf = runFilter("setupStyle", buf) # allow users to extend styling p = os.path.join(aqt.mw.pm.base, "style.css") if os.path.exists(p): buf += open(p).read() self.app.setStyleSheet(buf) # Key handling ########################################################################## def setupKeys(self): globalShortcuts = [ ("Ctrl+:", self.onDebug), ("d", lambda: self.moveToState("deckBrowser")), ("s", self.onStudyKey), ("a", self.onAddCard), ("b", self.onBrowse), ("t", self.onStats), ("y", self.onSync) ] self.applyShortcuts(globalShortcuts) self.stateShortcuts = [] def applyShortcuts(self, shortcuts): qshortcuts = [] for key, fn in shortcuts: scut = QShortcut(QKeySequence(key), self, activated=fn) scut.setAutoRepeat(False) qshortcuts.append(scut) 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.col.sched.reset() self.reviewer.cardQueue.append(card) self.reviewer.nextCard() runHook("revertedCard", cid) else: self.reset() tooltip(_("Reverted to state prior to '%s'.") % n.lower()) runHook("revertedState", n) 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']) # 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) if qtminor < 11: m.actionUndo.setShortcut(QKeySequence(_("Ctrl+Alt+Z"))) 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) addHook("mpvWillPlay", self.onMpvWillPlay) addHook("mpvIdleHook", self.onMpvIdle) self._activeWindowOnPlay = None 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.""")) def _isVideo(self, file): head, ext = os.path.splitext(file.lower()) return ext in (".mp4", ".mov", ".mpg", ".mpeg", ".mkv", ".avi") def onMpvWillPlay(self, file): if not self._isVideo(file): return self._activeWindowOnPlay = self.app.activeWindow() or self._activeWindowOnPlay def onMpvIdle(self): w = self._activeWindowOnPlay if not self.app.activeWindow() and w and not sip.isdeleted(w) and w.isVisible(): w.activateWindow() w.raise_() self._activeWindowOnPlay = None # 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) # if an error has directed the user to check the database, # silently clean up any broken reset hooks which distract from # the underlying issue while True: try: self.reset() break except Exception as e: print("swallowed exception in reset hook:", e) continue 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) if unused: b = QPushButton(_("Delete Unused Files")) 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() self.progress.start(immediate=True) try: lastProgress = 0 for c, f in enumerate(unused): path = os.path.join(mdir, f) if os.path.exists(path): send2trash(path) now = time.time() if now - lastProgress >= 0.3: lastProgress = now label = _("Deleted %s files...") % (c+1) self.progress.update(label) finally: self.progress.finish() 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) font = QFontDatabase.systemFont(QFontDatabase.FixedFont) font.setPointSize(frm.text.font().pointSize() + 1) frm.text.setFont(font) frm.log.setFont(font) 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)) s = self.debugDiagShort = QShortcut(QKeySequence("ctrl+l"), d) s.activated.connect(frm.log.clear) s = self.debugDiagShort = QShortcut(QKeySequence("ctrl+shift+l"), d) s.activated.connect(frm.text.clear) 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): cursor = frm.text.textCursor() position = cursor.position() cursor.select(QTextCursor.LineUnderCursor) line = cursor.selectedText() pfx, sfx = "pp(", ")" if not line.startswith(pfx): line = "{}{}{}".format(pfx, line, sfx) cursor.insertText(line) cursor.setPosition(position + len(pfx)) frm.text.setTextCursor(cursor) 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: # pylint: disable=exec-used 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, requiresCollection=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, requiresCollection=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) 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.15+dfsg/aqt/mediasrv.py000066400000000000000000000124721353113723000164160ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 import re # 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() daemon = True def __init__(self, mw, *args, **kwargs): super().__init__(*args, **kwargs) self.mw = mw def run(self): RequestHandler.mw = self.mw 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 mw = None 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) try: isdir = os.path.isdir(path) except ValueError: # path too long exception on Windows self.send_error(HTTPStatus.NOT_FOUND, "File not found") return None if isdir: 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)) def _redirectWebExports(self, path): # catch /_anki references and rewrite them to web export folder targetPath = os.path.join(os.getcwd(), "_anki", "") if path.startswith(targetPath): newPath = os.path.join(_exportFolder, path[len(targetPath):]) return newPath # catch /_addons references and rewrite them to addons folder targetPath = os.path.join(os.getcwd(), "_addons", "") if path.startswith(targetPath): try: addMgr = self.mw.addonManager except AttributeError: return path addonPath = path[len(targetPath):] try: addon, subPath = addonPath.split(os.path.sep, 1) except ValueError: return path if not addon: return path pattern = addMgr.getWebExports(addon) if not pattern: return path if not re.fullmatch(pattern, subPath): return path newPath = os.path.join(addMgr.addonsFolder(), addonPath) return newPath return path # work around Windows machines with incorrect mime type RequestHandler.extensions_map['.css'] = "text/css" anki-2.1.15+dfsg/aqt/modelchooser.py000066400000000000000000000051621353113723000172650ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 from anki.lang import _ 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.15+dfsg/aqt/models.py000066400000000000000000000157741353113723000160770ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # 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.clayout from anki import stdmodels from aqt.utils import saveGeom, restoreGeom import collections from anki.lang import _, ngettext 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.15+dfsg/aqt/overview.py000066400000000000000000000161571353113723000164560ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.utils import openLink, shortcut, tooltip, askUserDialog import aqt from anki.sound import clearAudioQueue from anki.lang import _ 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) if self.mw.col.schedVer() == 1: 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.15+dfsg/aqt/pinnedmodules.py000066400000000000000000000012121353113723000174400ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # this file is imported as part of the bundling process to ensure certain # modules are included in the distribution # pylint: disable=import-error,unused-import # required by requests library import queue from anki.utils import isWin # external module access in Windows if isWin: import pythoncom import win32com import pywintypes # included implicitly in the past, and relied upon by some add-ons import cgi import uuid # useful for add-ons import logging import logging.handlers import logging.config anki-2.1.15+dfsg/aqt/preferences.py000066400000000000000000000170341353113723000171040ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 openHelp, showInfo, askUser import aqt from anki.lang import _ class Preferences(QDialog): def __init__(self, mw): 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() if isMac: f.hwAccel.setVisible(False) else: f.hwAccel.setChecked(self.mw.pm.glMode() != "software") 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) else: f.newSched.setChecked(True) def updateCollection(self): f = self.form d = self.mw.col if not isMac: wasAccel = self.mw.pm.glMode() != "software" wantAccel = f.hwAccel.isChecked() if wasAccel != wantAccel: if wantAccel: self.mw.pm.setGlMode("auto") else: self.mw.pm.setGlMode("software") showInfo(_("Changes will take effect when you restart Anki.")) 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() self._updateSchedVer(f.newSched.isChecked()) d.setMod() # Scheduler version ###################################################################### def _updateSchedVer(self, wantNew): haveNew = self.mw.col.schedVer() == 2 # nothing to do? if haveNew == wantNew: return if haveNew and not wantNew: if not askUser(_("This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?")): return self.mw.col.changeSchedulerVer(1) return if not askUser(_("The experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?")): return self.mw.col.changeSchedulerVer(2) # 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']) 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.15+dfsg/aqt/profiles.py000066400000000000000000000346431353113723000164330ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # 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 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 import anki.lang from aqt.utils import showWarning from aqt import appHelpSite import aqt.forms from send2trash import send2trash import anki.sound from anki.lang import _ 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): self.name = None self.db = None # instantiate base folder self._setBaseFolder(base) anki.sound.setMpvConfigBase(self.base) def setupMeta(self): # load metadata self.firstRun = self._loadMeta() # profile load on startup def openProfile(self, profile): 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, and qt may not be print("unable to create base folder") 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: from aqt.winpaths import get_personal return os.path.join(get_personal(), "Anki") else: p = os.path.expanduser("~/Anki") if os.path.isdir(p): return p return os.path.expanduser("~/Documents/Anki") def maybeMigrateFolder(self): oldBase = self._oldFolderLocation() if oldBase and not os.path.exists(self.base) and os.path.isdir(oldBase): shutil.move(oldBase, self.base) # Profile load/save ###################################################################### def profiles(self): def names(): return self.db.list("select name from profiles where name != '_global'") n = names() if not n: self._ensureProfile() n = names() return n def _unpickle(self, data): class Unpickler(pickle.Unpickler): def find_class(self, module, name): if module == "PyQt5.sip": try: import PyQt5.sip # pylint: disable=unused-import except: # use old sip location module = "sip" 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: QMessageBox.warning( None, _("Profile Corrupt"), _("""\ Anki could not read your profile data. Window sizes and your sync login \ details have been forgotten.""")) 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 Exception as e: self.db.rollback() if "WinError 5" in str(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: from aqt.winpaths import get_appdata return os.path.join(get_appdata(), "Anki2") 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 for suffix in ("", "-journal"): fpath = path + suffix if os.path.exists(fpath): os.unlink(fpath) 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." self.create(_("User 1")) p = os.path.join(self.base, "README.txt") open(p, "w", encoding="utf8").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): # 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) # OpenGL ###################################################################### def _glPath(self): return os.path.join(self.base, "gldriver") def glMode(self): if isMac: return "auto" path = self._glPath() if not os.path.exists(path): return "software" mode = open(path, "r").read().strip() if mode == "angle" and isWin: return mode elif mode == "software": return mode return "auto" def setGlMode(self, mode): open(self._glPath(), "w").write(mode) def nextGlMode(self): mode = self.glMode() if mode == "software": self.setGlMode("auto") elif mode == "auto": if isWin: self.setGlMode("angle") else: self.setGlMode("software") elif mode == "angle": self.setGlMode("software") anki-2.1.15+dfsg/aqt/progress.py000066400000000000000000000152031353113723000164430ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 from anki.lang import _ # 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, requiresCollection=True): def handler(): if self.inDB or self._levels: # retry in 100ms self.timer(100, func, False, requiresCollection) elif not self.mw.col and requiresCollection: # ignore timer events that fire after collection has been # unloaded print("Ignored progress func as collection unloaded: %s" % repr(func)) 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.15+dfsg/aqt/qt.py000066400000000000000000000025441353113723000152270ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # make sure not to optimize imports on this file # pylint: disable=unused-import 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 * try: from PyQt5 import sip except ImportError: import sip from PyQt5.QtCore import pyqtRemoveInputHook # pylint: disable=no-name-in-module def debug(): from pdb import set_trace pyqtRemoveInputHook() set_trace() import sys, traceback if os.environ.get("DEBUG"): def info(type, value, tb): 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 qtminor < 9 or qtminor == 10: raise Exception("Anki does not support your Qt version.") # GUI code assumes python 3.6+ if sys.version_info[0] < 3 or sys.version_info[1] < 6: raise Exception("Anki requires Python 3.6+") anki-2.1.15+dfsg/aqt/reviewer.py000066400000000000000000000577671353113723000164540ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Copyright: Ankitects Pty Ltd and contributors # 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 import json from anki.lang import _, ngettext from aqt.qt import * from anki.utils import stripHTML, bodyClass from anki.hooks import addHook, runHook, runFilter from anki.sound import playFromText, clearAudioQueue, play from aqt.utils import mungeQA, tooltip, askUserDialog, \ downArrow, qtMenuShortcutWorkaround 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", "") fade="" if self.mw.pm.glMode() == "software": fade="" return """
{}
{} """.format(fade, 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)), ("*", 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.bottom.web.evalWithCallback("selectedAnswerButton()", self._onAnswerButton) def _onAnswerButton(self, val): # button selected? if val and val in "1234": self._answerCard(int(val)) else: 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 = r"\[\[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 = self.mw.col.media.strip(self.typeCorrect) cor = re.sub("(\n|
|)+", " ", cor) cor = stripHTML(cor) # ensure we don't chomp multiple whitespace cor = cor.replace(" ", " ") cor = parser.unescape(cor) cor = cor.replace("\xa0", " ") cor = cor.strip() 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(r"\{\{c%s::(.+?)\}\}"%idx, txt, re.DOTALL) 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, 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): currentFlag = self.card and self.card.userFlag() opts = [ [_("Flag Card"), [ [_("Red Flag"), "Ctrl+1", lambda: self.setFlag(1), dict(checked=currentFlag == 1)], [_("Orange Flag"), "Ctrl+2", lambda: self.setFlag(2), dict(checked=currentFlag == 2)], [_("Green Flag"), "Ctrl+3", lambda: self.setFlag(3), dict(checked=currentFlag == 3)], [_("Blue Flag"), "Ctrl+4", lambda: self.setFlag(4), dict(checked=currentFlag == 4)], ]], [_("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) qtMenuShortcutWorkaround(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]) qtMenuShortcutWorkaround(subm) continue if len(row) == 4: label, scut, func, opts = row else: label, scut, func = row opts = {} a = m.addAction(label) if scut: a.setShortcut(QKeySequence(scut)) if opts.get("checked"): a.setCheckable(True) a.setChecked(True) 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): # need to toggle off? if self.card.userFlag() == flag: flag = 0 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.15+dfsg/aqt/sound.py000066400000000000000000000027151353113723000157330ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # 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, showWarning from anki.lang import _ if not Recorder: print("pyaudio not installed") def getAudio(parent, encode=True): "Record and return filename" # record first if not Recorder: showWarning("pyaudio not installed") return 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.setDefault(True) 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() r.cleanup() 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.15+dfsg/aqt/stats.py000066400000000000000000000056011353113723000157360ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 from anki.lang import _ # 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.show() self.refresh() 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, parent=self) 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.15+dfsg/aqt/studydeck.py000066400000000000000000000112651353113723000166020ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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 from anki.lang import _ class StudyDeck(QDialog): def __init__(self, mw, names=None, accept=None, title=None, help="studydeck", current=None, cancel=True, parent=None, dyn=False, buttons=None, geomKey="default"): QDialog.__init__(self, parent or mw) if buttons is None: buttons = [] 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) 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.15+dfsg/aqt/sync.py000066400000000000000000000421301353113723000155520ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import time import gc from aqt.qt import * 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 from anki.lang import _ # 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'], hostNum=self.pm.profile.get("hostNum"), ) 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 self.pm.profile['hostNum'] = self.thread.hostNum 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, requiresCollection=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 == "downloadClobber": showInfo(_("Your AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.")) 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 or "socket.gaierror" 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): self.mw.progress.finish() 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" self.mw.progress.start(immediate=True) 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.""")) # Sync thread ###################################################################### class SyncThread(QThread): event = pyqtSignal(str, str) def __init__(self, path, hkey, auth=None, media=True, hostNum=None): QThread.__init__(self) self.path = path self.hkey = hkey self.auth = auth self.media = media self.hostNum = hostNum 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, hostNum=self.hostNum) 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": self.syncMsg = self.client.syncMsg return else: self.fireEvent("error", "Unknown sync return code.") self.syncMsg = self.client.syncMsg self.uname = self.client.uname self.hostNum = self.client.hostNum # 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, hostNum=self.hostNum) try: if f == "upload": if not self.client.upload(): self.fireEvent("upbad") else: ret = self.client.download() if ret == "downloadClobber": self.fireEvent(ret) return 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, hostNum=self.hostNum) 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.15+dfsg/aqt/tagedit.py000066400000000000000000000076571353113723000162360ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # 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) 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): if sip.isdeleted(self.completer): return 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.15+dfsg/aqt/taglimit.py000066400000000000000000000073231353113723000164150ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # License: GNU AGPL, version 3 or later; http://www.gnu.org/copyleft/agpl.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.15+dfsg/aqt/toolbar.py000066400000000000000000000061501353113723000162420ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * from anki.lang 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) self.web.requiresCol = False 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") % "T"], ["sync", _("Sync"), _("Shortcut key: %s") % "Y"], ] return self._linkHTML(links) def _linkHTML(self, links): buf = "" for ln, name, title in links: buf += ''' %s''' % ( name, 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.15+dfsg/aqt/update.py000066400000000000000000000042351353113723000160640ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # 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, showText from anki.utils import platDesc, versionWithBuild from anki.lang import _ 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": versionWithBuild(), "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.15+dfsg/aqt/utils.py000066400000000000000000000447001353113723000157430ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- 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, subprocess import aqt from anki.sound import stripSounds from anki.utils import isWin, isMac, invalidFilename, noBundledLibs, \ versionWithBuild from anki.lang import _ 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", textFormat=None): "Show a small warning with an OK button." return showInfo(text, parent, help, "warning", title=title, textFormat=textFormat) def showCritical(text, parent=None, help="", title="Anki", textFormat=None): "Show a small critical error with an OK button." return showInfo(text, parent, help, "critical", title=title, textFormat=textFormat) def showInfo(text, parent=False, help="", type="info", title="Anki", textFormat=None): "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) if textFormat == "plain": mb.setTextFormat(Qt.PlainText) elif textFormat == "rich": mb.setTextFormat(Qt.RichText) elif textFormat is not None: raise Exception("unexpected textFormat type") mb.setText(text) mb.setIcon(icon) 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", copyBtn=False): 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) if copyBtn: def onCopy(): QApplication.clipboard().setText(text.toPlainText()) btn = QPushButton(_("Copy to Clipboard")) btn.clicked.connect(onCopy) box.addButton(btn, QDialogButtonBox.ActionRole) 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"): QMessageBox.__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, multi=False): "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) mode = QFileDialog.ExistingFiles if multi else QFileDialog.ExistingFile d.setFileMode(mode) if os.path.exists(dir): d.setDirectory(dir) d.setWindowTitle(title) d.setNameFilter(filter) ret = [] def accept(): files = list(d.selectedFiles()) if dirkey: dir = os.path.dirname(files[0]) aqt.mw.pm.profile[dirkey] = dir result = files if multi else files[0] if cb: cb(result) ret.append(result) d.accepted.connect(accept) if key: restoreState(d, key) d.exec_() if key: saveState(d, key) 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" if isMac and widget.windowState() & Qt.WindowFullScreen: geom = None else: geom = widget.saveGeometry() aqt.mw.pm.profile[key] = geom 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) ensureWidgetInScreenBoundaries(widget) else: if adjustSize: widget.adjustSize() def ensureWidgetInScreenBoundaries(widget): handle = widget.window().windowHandle() if not handle: # window has not yet been shown, retry later aqt.mw.progress.timer(50, lambda: ensureWidgetInScreenBoundaries(widget), False) return # ensure widget is smaller than screen bounds geom = handle.screen().availableGeometry() wsize = widget.size() cappedWidth = min(geom.width(), wsize.width()) cappedHeight = min(geom.height(), wsize.height()) if cappedWidth > wsize.width() or cappedHeight > wsize.height(): widget.resize(QSize(cappedWidth, cappedHeight)) # ensure widget is inside top left wpos = widget.pos() x = max(geom.x(), wpos.x()) y = max(geom.y(), wpos.y()) # and bottom right x = min(x, geom.width()+geom.x()-cappedWidth) y = min(y, geom.height()+geom.y()-cappedHeight) if x != wpos.x() or y != wpos.y(): widget.move(x, y) 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 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, requiresCollection=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) def qtMenuShortcutWorkaround(qmenu): if qtminor < 10: return for act in qmenu.actions(): act.setShortcutVisibleInContextMenu(True) ###################################################################### def supportText(): import platform from aqt import mw if isWin: platname = "Windows " + platform.win32_ver()[0] elif isMac: platname = "Mac " + platform.mac_ver()[0] else: platname = "Linux" def schedVer(): try: return mw.col.schedVer() except: return "?" return """\ Anki {} Python {} Qt {} PyQt {} Platform: {} Flags: frz={} ao={} sv={} """.format(versionWithBuild(), platform.python_version(), QT_VERSION_STR, PYQT_VERSION_STR, platname, getattr(sys, "frozen", False), mw.addonManager.dirty, schedVer()) ###################################################################### # adapted from version detection in qutebrowser def opengl_vendor(): old_context = QOpenGLContext.currentContext() old_surface = None if old_context is None else old_context.surface() surface = QOffscreenSurface() surface.create() ctx = QOpenGLContext() ok = ctx.create() if not ok: return None ok = ctx.makeCurrent(surface) if not ok: return None try: if ctx.isOpenGLES(): # Can't use versionFunctions there return None vp = QOpenGLVersionProfile() vp.setVersion(2, 0) try: vf = ctx.versionFunctions(vp) except ImportError as e: return None if vf is None: return None return vf.glGetString(vf.GL_VENDOR) finally: ctx.doneCurrent() if old_context and old_surface: old_context.makeCurrent(old_surface) def gfxDriverIsBroken(): driver = opengl_vendor() return driver == "nouveau" anki-2.1.15+dfsg/aqt/webview.py000066400000000000000000000320371353113723000162530ustar00rootroot00000000000000# Copyright: Ankitects Pty Ltd and contributors # -*- coding: utf-8 -*- # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import json import sys import math from anki.hooks import runHook from aqt.qt import * from aqt.utils import openLink from anki.utils import isMac, isWin, isLin from anki.lang import _ # Page for debug messages ########################################################################## class AnkiWebPage(QWebEnginePage): def __init__(self, onBridgeCmd): QWebEnginePage.__init__(self) self._onBridgeCmd = onBridgeCmd self._setupBridge() def _setupBridge(self): class Bridge(QObject): @pyqtSlot(str, result=str) def cmd(self, str): return json.dumps(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 = function (arg, cb) { var resultCB = function (res) { // pass result back to user-provided callback if (cb) { cb(JSON.parse(res)); } } channel.objects.py.cmd(arg, resultCB); return false; } 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 buf = "JS error on line %(a)d: %(b)s" % dict(a=line, b=msg+"\n") # ensure we don't try to write characters the terminal can't handle buf = buf.encode(sys.stdout.encoding, "backslashreplace").decode(sys.stdout.encoding) sys.stdout.write(buf) def acceptNavigationRequest(self, url, navType, isMainFrame): if not isMainFrame: return True # data: links generated by setHtml() if url.scheme() == "data": return True # catch buggy links from aqt import mw if url.matches(QUrl(mw.serverURL()), QUrl.RemoveFragment): print("onclick handler needs to return false") return False # load all other links in browser openLink(url) return False def _onCmd(self, str): return 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._page.setBackgroundColor(self._getWindowColor()) # reduce flicker self._domDone = True self._pendingActions = [] self.requiresCol = True self.setPage(self._page) self._page.profile().setHttpCacheType(QWebEngineProfile.NoCache) self.resetHandlers() self.allowDrops = False self._filterSet = 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) def eventFilter(self, obj, evt): # disable pinch to zoom gesture if isinstance(evt, QNativeGestureEvent): return True elif evt.type() == QEvent.MouseButtonRelease: if evt.button() == Qt.MidButton and isLin: self.onMiddleClickPaste() return True return False 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 onMiddleClickPaste(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): # discard any previous pending actions self._pendingActions = [] self._domDone = True 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 _getWindowColor(self): if isMac: # standard palette does not return correct window color on macOS return QColor("#ececec") return self.style().standardPalette().color(QPalette.Window) def stdHtml(self, body, css=None, js=None, head=""): if css is None: css = [] if js is None: js = ["jquery.js"] palette = self.style().standardPalette() color_hl = palette.color(QPalette.Highlight).name() if isWin: #T: include a font for your language on Windows, eg: "Segoe UI", "MS Mincho" family = _('"Segoe UI"') widgetspec = "button { font-size: 12px; font-family:%s; }" % family widgetspec += "\n:focus { outline: 1px solid %s; }" % color_hl fontspec = 'font-size:12px;font-family:%s;' % family elif isMac: family="Helvetica" fontspec = 'font-size:15px;font-family:"%s";'% \ family widgetspec = """ button { font-size: 13px; -webkit-appearance: none; background: #fff; border: 1px solid #ccc; border-radius:5px; font-family: Helvetica }""" else: family = self.font().family() color_hl_txt = palette.color(QPalette.HighlightedText).name() color_btn = palette.color(QPalette.Button).name() fontspec = 'font-size:14px;font-family:"%s";'% family widgetspec = """ /* Buttons */ button{ font-size:14px; -webkit-appearance:none; outline:0; background-color: %(color_btn)s; border:1px solid rgba(0,0,0,.2); border-radius:2px; height:24px; font-family:"%(family)s"; } button:focus{ border-color: %(color_hl)s } button:hover{ background-color:#fff } button:active, button:active:hover { background-color: %(color_hl)s; color: %(color_hl_txt)s;} /* Input field focus outline */ textarea:focus, input:focus, input[type]:focus, .uneditable-input:focus, div[contenteditable="true"]:focus { outline: 0 none; border-color: %(color_hl)s; }""" % {"family": family, "color_btn": color_btn, "color_hl": color_hl, "color_hl_txt": color_hl_txt} 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(), self._getWindowColor().name(), fontspec, widgetspec, head, body) #print(html) self.setHtml(html) def webBundlePath(self, path): from aqt import mw return "http://127.0.0.1:%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: def handler(val): if self._shouldIgnoreWebEvent(): print("ignored late js callback", cb) return cb(val) self.page().runJavaScript(js, handler) 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 _shouldIgnoreWebEvent(self): # async web events may be received after the profile has been closed # or the underlying webview has been deleted from aqt import mw if sip.isdeleted(self): return True if not mw.col and self.requiresCol: return True return False def _onBridgeCmd(self, cmd): if self._shouldIgnoreWebEvent(): print("ignored late bridge cmd", cmd) return if not self._filterSet: self.focusProxy().installEventFilter(self) self._filterSet = True if cmd == "domDone": self._domDone = True self._maybeRunActions() else: return 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): if qvar is None: from aqt import mw mw.progress.timer(1000, mw.reset, False) return height = math.ceil(qvar*self.zoomFactor()) self.setFixedHeight(height) anki-2.1.15+dfsg/aqt/winpaths.py000066400000000000000000000111621353113723000164340ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ System File Locations Retrieves common system path names on Windows XP/Vista Depends only on ctypes, and retrieves path locations in Unicode """ import ctypes from ctypes import windll, wintypes __license__ = "MIT" __version__ = "0.2" __author__ = "Ryan Ginstrom" __description__ = "Retrieves common Windows system paths as Unicode strings" class PathConstants(object): """ Define constants here to avoid dependency on shellcon. Put it in a class to avoid polluting namespace """ CSIDL_DESKTOP = 0 CSIDL_PROGRAMS = 2 CSIDL_PERSONAL = 5 CSIDL_FAVORITES = 6 CSIDL_STARTUP = 7 CSIDL_RECENT = 8 CSIDL_SENDTO = 9 CSIDL_BITBUCKET = 10 CSIDL_STARTMENU = 11 CSIDL_MYDOCUMENTS = 12 CSIDL_MYMUSIC = 13 CSIDL_MYVIDEO = 14 CSIDL_DESKTOPDIRECTORY = 16 CSIDL_DRIVES = 17 CSIDL_NETWORK = 18 CSIDL_NETHOOD = 19 CSIDL_FONTS = 20 CSIDL_TEMPLATES = 21 CSIDL_COMMON_STARTMENU = 22 CSIDL_COMMON_PROGRAMS = 23 CSIDL_COMMON_STARTUP = 24 CSIDL_COMMON_DESKTOPDIRECTORY = 25 CSIDL_APPDATA = 26 CSIDL_PRINTHOOD = 27 CSIDL_LOCAL_APPDATA = 28 CSIDL_ALTSTARTUP = 29 CSIDL_COMMON_ALTSTARTUP = 30 CSIDL_COMMON_FAVORITES = 31 CSIDL_INTERNET_CACHE = 32 CSIDL_COOKIES = 33 CSIDL_HISTORY = 34 CSIDL_COMMON_APPDATA = 35 CSIDL_WINDOWS = 36 CSIDL_SYSTEM = 37 CSIDL_PROGRAM_FILES = 38 CSIDL_MYPICTURES = 39 CSIDL_PROFILE = 40 CSIDL_SYSTEMX86 = 41 CSIDL_PROGRAM_FILESX86 = 42 CSIDL_PROGRAM_FILES_COMMON = 43 CSIDL_PROGRAM_FILES_COMMONX86 = 44 CSIDL_COMMON_TEMPLATES = 45 CSIDL_COMMON_DOCUMENTS = 46 CSIDL_COMMON_ADMINTOOLS = 47 CSIDL_ADMINTOOLS = 48 CSIDL_CONNECTIONS = 49 CSIDL_COMMON_MUSIC = 53 CSIDL_COMMON_PICTURES = 54 CSIDL_COMMON_VIDEO = 55 CSIDL_RESOURCES = 56 CSIDL_RESOURCES_LOCALIZED = 57 CSIDL_COMMON_OEM_LINKS = 58 CSIDL_CDBURN_AREA = 59 # 60 unused CSIDL_COMPUTERSNEARME = 61 class WinPathsException(Exception): pass def _err_unless_zero(result): if result == 0: return result else: raise WinPathsException("Failed to retrieve windows path: %s" % result) _SHGetFolderPath = windll.shell32.SHGetFolderPathW _SHGetFolderPath.argtypes = [wintypes.HWND, ctypes.c_int, wintypes.HANDLE, wintypes.DWORD, wintypes.LPCWSTR] _SHGetFolderPath.restype = _err_unless_zero def _get_path_buf(csidl): path_buf = ctypes.create_unicode_buffer(wintypes.MAX_PATH) result = _SHGetFolderPath(0, csidl, 0, 0, path_buf) return path_buf.value def get_local_appdata(): return _get_path_buf(PathConstants.CSIDL_LOCAL_APPDATA) def get_appdata(): return _get_path_buf(PathConstants.CSIDL_APPDATA) def get_desktop(): return _get_path_buf(PathConstants.CSIDL_DESKTOP) def get_programs(): """current user -> Start menu -> Programs""" return _get_path_buf(PathConstants.CSIDL_PROGRAMS) def get_admin_tools(): """current user -> Start menu -> Programs -> Admin tools""" return _get_path_buf(PathConstants.CSIDL_ADMINTOOLS) def get_common_admin_tools(): """all users -> Start menu -> Programs -> Admin tools""" return _get_path_buf(PathConstants.CSIDL_COMMON_ADMINTOOLS) def get_common_appdata(): return _get_path_buf(PathConstants.CSIDL_COMMON_APPDATA) def get_common_documents(): return _get_path_buf(PathConstants.CSIDL_COMMON_DOCUMENTS) def get_cookies(): return _get_path_buf(PathConstants.CSIDL_COOKIES) def get_history(): return _get_path_buf(PathConstants.CSIDL_HISTORY) def get_internet_cache(): return _get_path_buf(PathConstants.CSIDL_INTERNET_CACHE) def get_my_pictures(): """Get the user's My Pictures folder""" return _get_path_buf(PathConstants.CSIDL_MYPICTURES) def get_personal(): """AKA 'My Documents'""" return _get_path_buf(PathConstants.CSIDL_PERSONAL) get_my_documents = get_personal def get_program_files(): return _get_path_buf(PathConstants.CSIDL_PROGRAM_FILES) def get_program_files_common(): return _get_path_buf(PathConstants.CSIDL_PROGRAM_FILES_COMMON) def get_system(): """Use with care and discretion""" return _get_path_buf(PathConstants.CSIDL_SYSTEM) def get_windows(): """Use with care and discretion""" return _get_path_buf(PathConstants.CSIDL_WINDOWS) def get_favorites(): return _get_path_buf(PathConstants.CSIDL_FAVORITES) def get_startup(): """current user -> start menu -> programs -> startup""" return _get_path_buf(PathConstants.CSIDL_STARTUP) def get_recent(): return _get_path_buf(PathConstants.CSIDL_RECENT) anki-2.1.15+dfsg/designer/000077500000000000000000000000001353113723000152375ustar00rootroot00000000000000anki-2.1.15+dfsg/designer/about.ui000066400000000000000000000043551353113723000167170ustar00rootroot00000000000000 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.15+dfsg/designer/addcards.ui000066400000000000000000000053271353113723000173520ustar00rootroot00000000000000 Dialog 0 0 453 366 Add :/icons/anki.png:/icons/anki.png 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.15+dfsg/designer/addfield.ui000066400000000000000000000071251353113723000173370ustar00rootroot00000000000000 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.15+dfsg/designer/addmodel.ui000066400000000000000000000035541353113723000173560ustar00rootroot00000000000000 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.15+dfsg/designer/addonconf.ui000066400000000000000000000072741353113723000175430ustar00rootroot00000000000000 Dialog Qt::ApplicationModal 0 0 631 521 Configuration Qt::Horizontal 3 0 QPlainTextEdit::NoWrap 1 0 QFrame::NoFrame true 0 0 80 470 6 0 0 0 Qt::RichText Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop true true 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.15+dfsg/designer/addons.ui000066400000000000000000000056311353113723000170530ustar00rootroot00000000000000 Dialog Qt::ApplicationModal 0 0 577 379 Add-ons true Changes will take effect when Anki is restarted. QAbstractItemView::ExtendedSelection Get Add-ons... Install from file... Check for Updates Qt::Vertical 20 40 View Add-on Page Config View Files Toggle Enabled Delete anki-2.1.15+dfsg/designer/browser.ui000066400000000000000000000426641353113723000172750ustar00rootroot00000000000000 Dialog 0 0 750 493 400 400 :/icons/anki.png:/icons/anki.png 12 12 6 12 12 4 0 Qt::Vertical 3 1 0 0 0 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... Ctrl+Alt+R Select &All Ctrl+Alt+A &Undo Ctrl+Alt+Z &Invert Selection Ctrl+Alt+S &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 Notes... Ctrl+E Change Deck... Ctrl+D true Red Flag Ctrl+1 true Orange Flag Ctrl+2 true Green Flag Ctrl+3 true 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.15+dfsg/designer/browserdisp.ui000066400000000000000000000057751353113723000201570ustar00rootroot00000000000000 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.15+dfsg/designer/browseropts.ui000066400000000000000000000070351353113723000201740ustar00rootroot00000000000000 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.15+dfsg/designer/changemap.ui000066400000000000000000000037241353113723000175270ustar00rootroot00000000000000 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.15+dfsg/designer/changemodel.ui000066400000000000000000000121531353113723000200460ustar00rootroot00000000000000 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.15+dfsg/designer/clayout_top.ui000066400000000000000000000042201353113723000201360ustar00rootroot00000000000000 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.15+dfsg/designer/customstudy.ui000066400000000000000000000122641353113723000202060ustar00rootroot00000000000000 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 review cards in random order All cards in random order (don't reschedule) 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.15+dfsg/designer/dconf.ui000066400000000000000000000544421353113723000167000ustar00rootroot00000000000000 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 12 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 12 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 Hard interval 5 120 % Qt::Vertical 20 152 Lapses 12 12 12 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 12 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 12 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 hardFactor buryRev lapSteps lapMult lapMinInt leechThreshold leechAction maxTaken showTimer autoplaySounds replayQuestion desc buttonBox accepted() Dialog accept() 254 320 157 274 buttonBox rejected() Dialog reject() 322 320 286 274 anki-2.1.15+dfsg/designer/debug.ui000066400000000000000000000026131353113723000166660ustar00rootroot00000000000000 Dialog 0 0 643 580 Debug Console 0 1 16777215 100 QPlainTextEdit::NoWrap 0 8 Qt::ClickFocus true anki-2.1.15+dfsg/designer/dyndconf.ui000066400000000000000000000167241353113723000174140ustar00rootroot00000000000000 Dialog 0 0 392 472 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 false 1 10 Custom steps (in minutes) Qt::Vertical 20 40 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Help search limit order search_2 limit_2 order_2 resched previewDelay secondFilter stepsOn steps 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 stepsOn toggled(bool) steps setEnabled(bool) 194 351 190 378 anki-2.1.15+dfsg/designer/editaddon.ui000066400000000000000000000032021353113723000175260ustar00rootroot00000000000000 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.15+dfsg/designer/editcurrent.ui000066400000000000000000000034011353113723000201240ustar00rootroot00000000000000 Dialog 0 0 400 300 Dialog :/icons/anki.png:/icons/anki.png 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.15+dfsg/designer/edithtml.ui000066400000000000000000000030111353113723000174030ustar00rootroot00000000000000 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.15+dfsg/designer/exporting.ui000066400000000000000000000072621353113723000176240ustar00rootroot00000000000000 ExportDialog 0 0 295 223 Export 100 0 <b>Export format</b>: <b>Include</b>: Include scheduling information true Include media true Include tags true Include HTML and media references 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.15+dfsg/designer/fields.ui000066400000000000000000000122071353113723000170460ustar00rootroot00000000000000 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.15+dfsg/designer/finddupes.ui000066400000000000000000000063071353113723000175650ustar00rootroot00000000000000 Dialog 0 0 531 345 Find Duplicates Optional filter: Search in: 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.15+dfsg/designer/findreplace.ui000066400000000000000000000064701353113723000200610ustar00rootroot00000000000000 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.15+dfsg/designer/getaddons.ui000066400000000000000000000046131353113723000175520ustar00rootroot00000000000000 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.15+dfsg/designer/icons.qrc000066400000000000000000000004471353113723000170660ustar00rootroot00000000000000 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.15+dfsg/designer/icons/000077500000000000000000000000001353113723000163525ustar00rootroot00000000000000anki-2.1.15+dfsg/designer/icons/anki.png000066400000000000000000000032701353113723000200040ustar00rootroot00000000000000PNG  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.15+dfsg/designer/icons/collection.svg000066400000000000000000000100451353113723000212260ustar00rootroot00000000000000 anki-2.1.15+dfsg/designer/icons/deck.svg000066400000000000000000000025511353113723000200040ustar00rootroot00000000000000 anki-2.1.15+dfsg/designer/icons/heart.svg000066400000000000000000000020061353113723000201740ustar00rootroot00000000000000 anki-2.1.15+dfsg/designer/icons/media-record.png000077700000000000000000000000001353113723000266112../../web/imgs/media-record.pngustar00rootroot00000000000000anki-2.1.15+dfsg/designer/icons/notetype.svg000066400000000000000000000025251353113723000207460ustar00rootroot00000000000000 anki-2.1.15+dfsg/designer/icons/tag.svg000066400000000000000000000020601353113723000176440ustar00rootroot00000000000000 anki-2.1.15+dfsg/designer/importing.ui000066400000000000000000000115161353113723000176120ustar00rootroot00000000000000 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.15+dfsg/designer/main.ui000066400000000000000000000145671353113723000165370ustar00rootroot00000000000000 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+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.15+dfsg/designer/modelopts.ui000066400000000000000000000056251353113723000176140ustar00rootroot00000000000000 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.15+dfsg/designer/models.ui000066400000000000000000000053461353113723000170710ustar00rootroot00000000000000 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.15+dfsg/designer/preferences.ui000066400000000000000000000370761353113723000201140ustar00rootroot00000000000000 Preferences 0 0 423 508 Preferences Qt::StrongFocus 0 Basic 12 12 12 12 12 Interface language: 0 0 QComboBox::AdjustToMinimumContentsLengthWithIcon Hardware acceleration (faster, may cause display issues) 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 Experimental V2 scheduler 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 12 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 12 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 You can restore backups via File>Switch Profile. 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 hwAccel showEstimates showProgress pastePNG nightMode dayLearnFirst newSched useCurrent newSpread dayOffset lrnCutoff timeLimit 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.15+dfsg/designer/preview.ui000066400000000000000000000021441353113723000172600ustar00rootroot00000000000000 Form 0 0 335 282 Form 0 Front Preview 0 Back Preview 0 anki-2.1.15+dfsg/designer/profiles.ui000066400000000000000000000060311353113723000174210ustar00rootroot00000000000000 MainWindow 0 0 423 356 Profiles :/icons/anki.png:/icons/anki.png Open true Add Rename Delete Quit Qt::Vertical 20 40 Open Backup... false 0 0 423 22 false anki-2.1.15+dfsg/designer/progress.ui000066400000000000000000000030431353113723000174420ustar00rootroot00000000000000 Dialog 0 0 310 69 Dialog 6 Qt::Vertical 0 0 Qt::AlignCenter 24 Qt::Vertical QSizePolicy::MinimumExpanding 0 0 anki-2.1.15+dfsg/designer/reposition.ui000066400000000000000000000067001353113723000177740ustar00rootroot00000000000000 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.15+dfsg/designer/reschedule.ui000066400000000000000000000106151353113723000177240ustar00rootroot00000000000000 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.15+dfsg/designer/setgroup.ui000066400000000000000000000035731353113723000174560ustar00rootroot00000000000000 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.15+dfsg/designer/setlang.ui000066400000000000000000000031061353113723000172330ustar00rootroot00000000000000 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.15+dfsg/designer/stats.ui000066400000000000000000000107411353113723000167370ustar00rootroot00000000000000 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.15+dfsg/designer/studydeck.ui000066400000000000000000000034161353113723000176010ustar00rootroot00000000000000 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.15+dfsg/designer/taglimit.ui000066400000000000000000000057431353113723000174210ustar00rootroot00000000000000 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.15+dfsg/designer/template.ui000066400000000000000000000116711353113723000174170ustar00rootroot00000000000000 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.15+dfsg/dtop.iml000066400000000000000000000005221353113723000151070ustar00rootroot00000000000000 anki-2.1.15+dfsg/locale/000077500000000000000000000000001353113723000146765ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/af/000077500000000000000000000000001353113723000152645ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/af/LC_MESSAGES/000077500000000000000000000000001353113723000170515ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/af/LC_MESSAGES/anki.mo000066400000000000000000001677771353113723000203610ustar00rootroot00000000000000,/> >>?" ?,? .?8?K?j?8|????"?$ @$2@&W@"~@@4@2@A-A"JA$mA$A$A AAB*B2BABRBgB~BB BBBBBBBB BBBB B CCCC C*C 0C;C MCXC_CwCCCCCC0C CDD D !D,D2DED\D`DbDeDmDtDyD~DDDTDD,D(E7E!VExEfEE FF ,F 9FDFTFfF{FeFF7G GG5GX-HYH%HkI rI ~III I II I IIIIJ J$J ]PJ]]]] ^8^G^N^d^^^ ^^^^ ^ ^^ ^ ^^ ^^^)_08_i__4_!___````` `.`a a aa *a 8aDaKa Ra`a xaaaaaaaaaa a bbN,b"{bbbbbbbcccc ccccc d dd %d1d6d=d BdOdWd\dmd.sdFdde "e .e4;epee e1eeeef*fFf gg hh">h"ah hhhhhh h i)i:iiiijjj*j:j Aj KjYjljrj<jj jjjj jk kk$k 9k CkOkVkgk{kkkkkk k kkk ll l&l.l 2lz aznz vzzzzzzz*{'G{o{@u{6{ {!{?|Z|`| p| ~|||| || | | || }}2}O} W} d} q}{} }}!}d} G~R~V~e~n~s~ ~~(~~ ~~X+s"&0+4>`F'*(91b,I '##e38ɅCY(rƆ9> Qu[/чMOU  !AF'd.,B ITUs$Ɋ"S"0v$"̋ {^}5܌U q{  Ɛ Аڐߐ 4JOWZbj pz| =IO&V}@ɓ /&B(i&,3F-0t"$ٕ&$%(J&sՖ ޖ $7Naquy}   ėʗЗ֗ߗ  1 ?M^r7 ˜Θޘ (,.19@EJNRWV.-ߙ "-Ph 9 O]qz,4ߜ !@4Uut˝-@n   4 AOk} &˟   O*z2ۢ _{?l MEJަ VZ"'5 ]~@ ֨ 9JPcy$֩ܩ  !#%Ek )4:CKS \ f q} ȫEϫc+ ˬެ/FN&`  έح!ޭ6 CNT7sv 1<;E6\5 :Hhov} Ȱϰְ ݰ    + 8 ER Yetѱ#  #-==F-޲  #2*E(p$J׳\"PBдL`zh F5=$R w ŶӶ  !(1;ZJ*,F a3 ;2Gz$ Ź˹ ѹ޹  1DSgw Z&AXaw } HUZr{¼ Ӽ   ! /;@W9[N /D= 6' #1;A} 8#J'n*(%. BL,\$)N#_ BQVgz   ,2ELl  ,<P al|?#-5/c : ^en! !&)?>~*Q|  ' 5 CMVhx   #)/&Y*`< VI50&$K$]6?BQ Yc$l/8#,LR cqy /w!(8 @CM "$  $1V.m   #\, 8(a<}& ( ?K R _m4!60OM? %$OJ  % 9&E l v !/:j $- FS'X%q,W01425FhM*&(0O/.E%/%U&7^7H;o? =^S - ."QY al5/ " .":Z]=_3}%#w? YHf    '16?CT[w D-1/ >Ev- a`rO@YJcze^/qB$823sruSIUyhZ8T {K<AU C@+nua6N'iXS,j5?,}TH<7Is~|B lPC!g!E|"=#%.{`\Vq P7)*=+R2-o% Kmzr_bD0ozwJA\V)]a2v&sc+&#(TW(%Nv,bfU~1>6"Meq8dg]Z BXj c#\/*Wm}' LxYE ?WIh]4L!emQ~ f07f Mi;93;Vxy|@x3(`R}.:wkpt?K$S9A_&GZ [;GX45F$M0Ok4^HtL.<Gw5*uDjpnFQ )g RQ=N[PdbOH16J{t9hd_ l '^:[il:"kYp>CFnyo (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).../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.

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, 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 save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+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+WCumulativeCumulative %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 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 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 intervalLowest 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...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 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.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 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 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 matchesUpload 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: 2019-07-02 11:47+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: 2019-07-04 05:44+0000 X-Generator: Launchpad (build 19007) 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).../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: %sBygevoegVandag BygevoegDuplikaat van eerste veld bygevoeg: %sWeerWeer vandagWeer Telling: %sAlle PakkeAlle VeldeAlle 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 die lêer, %s stoor nieDrilSkep KaartpakSkep 'n Gefilterde Kaartpak ...GeskepCtrl+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+WKumulatieweKumulatiewe %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 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:Fout 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 tussenpouseLaagste 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...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 PyAudioverwyder 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.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).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 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 pasLaai 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.15+dfsg/locale/ar/000077500000000000000000000000001353113723000153005ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ar/LC_MESSAGES/000077500000000000000000000000001353113723000170655ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ar/LC_MESSAGES/anki.mo000066400000000000000000001133421353113723000203500ustar00rootroot00000000000000 <! !!!"!! !! "+"8="v""""""$"$#&(#"O#r#4#2###"$$>$$c$$$ $$$$%%#%8%O%b% w%%%%%%%% %%%%%% %&& && &"& (&3&<& N&Y&`&x&&&&&&&0& ''!' '' 2'='C'V'm'q's'v'{'''''''T'','($(M(!l((f( ) #)0) B) O)Z)j)|))e)*7*H*)9- c.m.5.X.Y/%i/k/ / 00010 B0 L0V0 l0 z0 00 000'0001 1$1<1 B1N1^1o1 ~1 1,1K1 2-21B2t2!3"5(5 -5;5S5e5G6I6R7vh7778 8w8EE9@9999R9=:#X:#|: ::(:; ;; ,;9;J; O; \; j;x;;;;;;;;<<,<<<B<I< N< X<)b<'<<p=w=|==== = = = = == ===3>8>SL>>>> > >>>> ??"2?U?0]???&?? ?? ?@ @ %@2@D@J@ h@s@y@-@@@@ @(@5A CQC bCoC CCCCC CCCCC C D D D%D(9DbDDDDDDDDDDD DDD E'E .E8EME ^EkE pE|EEFEEEEEF %F2FNFmFrFyF ~F FFF FFF F F F FFG"G 9GDGKGSG YGeG }GGGG6GH6HSH [HeHtH}H8H H!HHH H"I#I(I_ Z_ e_ p_ {__!_______ _ _ _ ` ````CFa"a#aaaybbbb bbb c$c6cc<dfd4h j$jW?jj)kIk-l ll m*m@m]mom+mmmmmn)n%8n8^n nn nn8n o>o>\o&o oooLp^pQp$4qfYqqrmuuuuuurwr(xzxyyYz1{K{r{^Q| |||j|%Q}(w}8}5}5~JE~ ~~~~"~ %<)R|1B6K bm܀ Y/Y! &8IZtՃ#2QPbXЄ )5 <G]s )#ׅE ZDg%2/FO e"/ 9 0 >!JUl ˆ ψڈ 6H#l=#\! Ŋ̊ӊڊ   '.5< C P ] j w ŋ ً̋!%=cyF )8?U(i1K؍M$?r ŎЎ ׎($* OZi*l ʏ ' .; ݐ &)P#k8ȑ ϑڑ  "$/ T_h{-9; Q^mv!@ÓB@GP8ٔ  3 >-Iw W4 < GU'h# זe)xIwhN%J^js}Tf|*l+X,y];./ >_tS8TwFDve[OlZSK_Jv32LxHns9b@6i75Oc!";D-?#$%45&8'(a,qr)*GK+~d< g@[kF&<UC.~(EE4tP/^!1nB02'XVAZ1>AMU|R:L# gad MyV\0`3?kjbr7Q=$mCPYNW `W: BohYp uR"z9i{={cou ]Hf6}q pIG  -\ mQz (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).../0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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.Appeared twice in file: %sAre you sure you wish to delete %s?At least one card type is required.Attach pictures/audio/video (F3)Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage intervalBackBack PreviewBack TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Bold text (Ctrl+B)BrowseBrowse Add-onsBrowser 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.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 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 UnusedClear Unused TagsCloseClose and lose current input?Closing...Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...ContinueCopyCouldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCreate DeckCreate Filtered Deck...CreatedCtrl+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+WCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDeauthorizeDeckDecksDefaultDeleteDelete CardsDelete DeckDelete EmptyDelete TagsDelete Unused FilesDelete this note type and all its cards?Delete this unused note type?Delete unused media?DialogE&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.Jump to tags with Ctrl+Shift+TKeepLapsesLeftMap to %sMap to TagsMoreNetworkNotes tagged.NothingOpenPassword:PercentagePreferencesProcessing...Recording...
Time: %0.1fRemove Tags...Require one or more of these tags:RescheduleReviewReviewsRightSelect &AllSelect tags to exclude:Show AnswerShow new cards before reviewsShow new cards in order addedShow new cards in random orderSome settings will take effect after you restart Anki.Study by card state or tagSupermemo XML export (*.xml)SuspendSuspendedTag DuplicatesTag OnlyTagsThis 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: 2019-07-02 11:47+1000 PO-Revision-Date: 2018-07-26 16:23+0000 Last-Translator: PassBir 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: 2019-07-04 05:44+0000 X-Generator: Launchpad (build 19007) Language: ar (غير مفعل) مغلق (تشغيل) فيها %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 ملاحظة تم تحديثها%(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 من ملفات الوسائط منزلةملاحظة %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 صحيح)(ملاحظة محذوفة)نهايةتصفيةدراسة(جديد)%d :حد الوالدأختر بطاقة من فضلك.../0d1 101 شهر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النسخ الاحتياطية
آنكي سينشىء نسخة احتياطية لمجموعتك كلما أُغلق أو زُمِن.صيغة التصدير:بحث:حجم الخط:الخط:في:اشتملحجم السطر:استبدل مع:تزامنمزامنة
ليس مفعلًا حاليًا. اضغط زر المزامنة في النافذة الرئيسية للتفعيل.

يلزم حساب

.حساب، ثم إدخال التفاصيل في الأسفل تسجيل يلزم حساب مجاني لإبقاء مجموعتك متزامنة. الرجاء

Anki تم تحديث

Anki %s تم إصدار

خطأ

حدث خطأ. يرجى تشغيل آنكي مع الضغط على زر shift، ما سيوقف الإضافات التي ثبّتّها مؤقتًا.

إذا كان المشكلة تحدث فقط عندما تكون الإضافات مفعلة، استخدم زر القائمة أدوات<إضافات لإيقاف بعض الإضافات وأعد تشغيل آنكي. أعد الكرّة حتى تكتشف الإضافة التي تسبب المشكلة.

عندما تكتشف الإضافة التي تسبب المشكلة، يرجى الإبلاغ عن المشكلة في قسم الإضافات في موقع الدعم.

معلومات التصحيح:

خطأ

حدث خطأ. الرجاء استخدام أدوات<التحقق من قاعدة البيانات. لترى إن كان ذلك يحل المشكلة

إذا استمرت المشكلة، الرجاء الإبلاغ عنها في موقع الدعم. الرجاء نسخ المعلومات في الأسفل ولصقها في تقريرك.

نص غير يونيكود (unicode)<.لعرض الرزمة الحالية enter اكتب هنا للبحث. اضغظ زر>شكرا جزيلا لكل الاشخاص الذين زودونا بإقتراحاتهم،تقارير الاخطاء وكذلك تبرعاتهمسهولةبطاقة هي حجم الفترة الزمنية التالية التي ستظهر بعدها مجددًا عندما تجيب بـ"جيد" في مراجعة لها.لا يمكن لرزمة مفلترة أن تحوي رزمًا فرعيةحدثت مشكلة أثناء مزامنة الوسائط. الرجاء استخدام أدوات>التحقق من الوسائط، ثم المزامنة مجددًا لحل المشكلة.%s :أحبطحول آنكيإضافةأضف (طريق مختصرة: ctrl+enter)أضف نوع البطاقةأضف حقلًاأضف وسائطاضافة مجموعة جديدة (Ctrl+N)أضف نوع ملحوظاتأضف ملحوظاتأضف بطاقة معكوسةإضافة سمات Tagsأضف سماتأضف إلى:ليس للإضافة إعدادات.الإضافة لم تُنزَّل من آنكي ويب.إضافاتاضافة: %sاُضيفتمضاف اليوم%s :أضيفت بطاقة حقلها الأول مكررمرة أخرىالبطاقات المجابة بـ "مجددًا" اليوم%s :"عدد البطاقات المجابة بـ "مجددًاكل البطاقات المدفونةكل أنواع البطاقاتكل المجموعاتجميع الحقولكل البطاقات بترتيب عشوائي (لا تعد الجدولة)كل البطاقات، الملحوظات، الوسائط لهذا الملف الشخصي ستُحذف. هل أنت متأكد؟كل البطاقات التي تحتاج مراجعة بترتيب عشوائياسمح بـ HTML في الحقولدائمًا ضمّن جانب السؤال عند إعادة تشغيل الملفات الصوتية.فشل تشغيل إضافة قد أضفتها. إذا استمرت المشاكل، اذهب إلى قائمة أدوات>إضافات، وأوقف الإضافة واحذفها '%(name)s' حين التشغيل %(traceback)s .حدث خطأ حين الوصول إلى قاعدة البيانات :أسباب محتملة .برنامج مضاد فيروسات، جدار حماية، نسخ احتياطي، أو مزامنة قد يتعارض مع آنكي. حاول إيقاف البرنامج وتحقق إذا حُلّت المشكلة - .قد يكون قرصك الصلب ممتلئ - .قد تكون الوثائق/آنكي على قرص على الشبكة - .قد لا يكون مجلد الوثائق/آنكي قابلًا للكتابة - .قد يحوي قرصك الصلب على أخطاء - .يُنصح بتشغيل أدوات>فحص قاعدة البيانات للتأكد من أن المجموعة ليست مخرّبة %s حدث خطأ عند فتحآنكيمجموعة آنكي 2.0حزمة مجموعة آنكيحزمة رزمة آنكي.آنكي لا يستطيع إعادة تسمية ملفك الشخصي لأنه لا يستطيع إعادة تسمية مجلد الملف الشخصي على القرص. تأكد أن لديك الإذن بالكتابة إلى الوثائق/آنكي وأنه لا توجد برامج أخرى تحاول الوصول إلى مجلدات ملفك الشخصي ثم أعد المحاولة.آنكي لا يستطيع إيجاد الخط بين السؤال والجواب. الرجاء ضبط النموذج يدويًا لتبديل مكان السؤال والجواب.آنكي لا يدعم الملفات في المجلدات الفرعية لمجلد وسائط المجموعةآنكي خفيف, ذكي في نظام التعليم المتباعد. وكذلك مجاني و مفتوح المصدر..الرجاء إلقاء نظرة على ملف الرخصة في نسخة المصدر لمزيد من المعلومات .AGPL3 آنكي مرخص تحت رخصة.لم يستطع آنكي أن يفتح ملف مجموعتك. إذا استمرت المشاكل بعد إعادة تشغيل حاسوبك، الرجاء استخدام زر فتح النسخ الاحتياطية في مدير الملف الشخصي :معلومات التصحيح .معرف آنكي ويب أو كلمة السر غير صحيحة. حاول مجددًا:معرف آنكي ويب.آنكي ويب صادف خطأ. أعد المحاولة بعد عدة دقائق وإذا استمرت المشكلة أرسل تقرير عطلآنكي ويب مشغول جدًا الآن. الرجاء المحاولة مجددًا بعد عدة دقائق..آنكي ويب قيد الصيانة. الرجاء المحاولة بعد عدة دقائقإجابةأزرار الإجابةالإجابات.مضاد فيروسات أو جدار حماية يمنع آنكي من الاتصال بالإنترنت%s :ظهر مرتين في الملف؟ %s هل أنت متأكد من حذفيلزم نوع ملحوظة واحد على الأقل.(F3) ألحق صور/ملفات صوتية/فيديوشغل الملفات الصوتية تلقائيًازامن تلقائيًا عند فتح/إغلاق الملف الشخصيالمعدلمعدل الوقتمعدل زمن الإجابةمعدل السهولةمعدل الفاصل الزمنيالخلفإلقاء نظرة إلى الخلفنموذج الخلف...يجري النسخ الاحتياطينُسخ احتياطيةأساسبطاقة أساسية وبطاقة معكوسةبطاقة أساسية وبطاقة معكوسة اختيارية(مع كتابة الجواب) بطاقة أساسية(Ctrl+B) خط غامقتصفّحتصفّح الإضافاتمظهر المتصفّح...مظهر المتصفّحخيارات المتصفحبناءمدفونةالطلبادفن البطاقةادفن الملحوظةادفن البطاقات الجديدة ذات الصلة حتى اليوم التاليادفن البطاقات التي تحتاج مراجعة حتى اليوم التاليافتراضيا؛ سيكتشف أنكي Anki الرموز بين الحقول مثل التاب tab، الفاصلة، و البقية. إذا كان كشف أنكي Anki عن هذه الرموز خاطئا؛ تستطيع إدخالها هنا استخدم \t لتمثل التاب tab.إلغاء الأمربطاقة%d البطاقة1 البطاقة2 البطاقةمُعرف البطاقةقائمة البطاقاتحالة البطاقةنوع البطاقة:نوع البطاقةأنواع البطاقات%s أنواع البطاقات لـ.دُفِنت البطاقة.أُوقِفت البطاقةالبطاقات.لا يمكن نقل البطاقات يدويًا إلى رزمة مفلترةبطاقات بنص عادي.ستعود البطاقات إلى رزمها الأصلية بعد أن تراجعهاكروت...وسطتعديلتغيير %s الى:غيّر الرزمة...غيّر الرزمةغيّر نوع الملحوظة(Ctrl+N) غيّر نوع الملحوظة...غيّر نوع الملحوظة(F8) غيّر اللونغيّر الرزمة اعتمادًا على نوع الملحوظةغُيِّر.ستجري التغييرات عند إعادة تشغيل آنكي...%Media فحصتحقق من وجود تحديثاتفحص الملفات في مجلد الوسائط...فحص الوسائط...يجري الفحصاختراختر الرزمةاختر نوع الملحوظةاختر سماتاحذف غير المستخدمةاحذف السمات غير المستخدمةإغلاقاغلاق وخسارة المدخلات الحالية?...إغلاقالرمز:.تم تصدير المجموعة.المجموعة مخرّبة. الرجاء مراجعة دليل الاستخدامنقطتانفاصلةضبطإعدادتعديل واجهة اللغات و الخياراتتهانينا لقد انتهيت من هذه المجموعة الآنجاري الإتصال...تابعنسخ.فشل الاتصال بآنكي ويب. الرجاء التحقق من الاتصال بالشبكة والمحاولة مجددًا؟'lame' لا يمكن تسجيل الصوت. هل ثبّتّ%s :لا يمكن حفظ الملفمجموعة جديدة...أنشئ رزمة مفلترةإنشاءCtrl+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+Wتراكمي%s تراكميإجابات تراكميةبطاقات تراكميةالرزمة الحالية:نوع الملحوظة الحاليدراسة مخصصةدورة دراسة مخصصةقص.تم إعادة بناء قاعدة البيانات وتحسينهاالتاريخسحب الصلاحياتمجموعةمجموعاتافتراضيحذفاحذف بطاقاتحذف مجموعةاحذف البطاقات الفارغةحذف السماتاحذف الملفات غير المستخدمةهل تريد حذف نوع الملحوظة هذا وكل بطاقاته؟هل تريد حذف نوع الملحوظة غير المستخدم هذا؟هل تريد حذف الوسائط غير المستخدمة؟حوار&خروجتسهيلسهلتحريرالكروت الفارغة...اختر سمات Tags لإصافتها:اختر سمات Tags لحذفها:تصديرتصدير....F1حقل %d من الملف يكون:تخطيط الحقلالحقولالحقول...بحث و استبد&ال...بحث و استبدلاول مراجعةجيدHTML محررصعبمساعدةاذا كنت مساهم في البرنامج وإسمك غير موجود في القائمة ، الرجاء اتصل بنا.تجاهل هذا التحديثاستيرادفشل الااستيراد خيارات الاستيراداشمل معلومات الجدولةاشمل السمات Tagsتعبير عادي غير صالحCtrl+Shift+T انتقل إلى السمات بواسطةحفظهفواتيسارخريطة إلى %sخريطة السمات Tagsالمزيدالشبكة(tags) ملحوظات بِسِماتﻻ شيءافتحكلمة السر:النسبة المئويةالتفضيلاتمعالجة...يتم التسجيل...
الوقت: %0.1f...احذف السمات:يلزم واحد أو أكثر من هذه السماتاعادة جدولةمراجعةمراجعاتيميناختر ال&كل:حدد سمات لإقصائهااظهر الإجابةاظهر البطاقات الجديدة قبل المراجعةاظهار البطاقات الجديدة بحسب الاضافةاظهار البطاقات الجديدة بشكل عشوائيبعض الإعدادات سوف تفعل بعد إعادة تشغيل آنكي..ادرس حسب حالة البطاقة أو السمةSupermemo XML تصدير (*.xml)تعليقموقوفأضف سمة للبطاقات المكررةأضف سمة فقطالسماتهذا الملف موجود. هل أنت متأكد أنك تريد استبداله؟الوقت الكليعامل المدخلات كأي تعبير عاديالنوعتراجع %sاﻻصدارة %sهل ترغب بتحميله الآن؟اياممخطط إلى %sمخطط إلى الوسومدقائقanki-2.1.15+dfsg/locale/az/000077500000000000000000000000001353113723000153105ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/az/LC_MESSAGES/000077500000000000000000000000001353113723000170755ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/az/LC_MESSAGES/anki.mo000066400000000000000000000040771353113723000203640ustar00rootroot00000000000000+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: 2019-07-02 11:47+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: 2019-07-04 05:44+0000 X-Generator: Launchpad (build 19007) 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.15+dfsg/locale/bg/000077500000000000000000000000001353113723000152665ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/bg/LC_MESSAGES/000077500000000000000000000000001353113723000170535ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/bg/LC_MESSAGES/anki.mo000066400000000000000000002105031353113723000203330ustar00rootroot00000000000000 )(8 )848;8"A8d8 f8p8888888"9$&9$K9&p9"99492:5:F:"c:$:$:$: :;+;C;K;Z;k;;;; ;;;;;;;; ;< < <<!<'<+< 2<<< B<M< _<j<<<<<<<0< < = = =(=.=E=I=K=N=V=]=b=g=k=o=Ts==,=(= >!?>a>fy>> >? ? "?-?=?O?d?e{??7@ @5@XAY\A%AkA HBSBWB rB |BB B BBBBB B$BC CC (C 2CK=CC"CC CCCDRLEvE7F NFwZFEF@GYG`GoGRwGGMH#hH#HHH(HI I&I :IGI`IqI vI IIIIIIIIJJ J)J'AJiJ%K,K1K9K@KGK OK YK cKnK KK3KKSK/L8L?L FL TL`LqLL"LLL&L M M M M 1M =MGMMMkM-qMMM(M5M NNNN8N5NPOjO OOO OOOOOOO O O O P P #P0P 7P BPPPcP tPP PPPPP P PP/P-Q3QHQ%PQvQ }Q Q Q Q Q QQ,Q( R4RRRFgRNRPR>NSPSS]S ET8QTTTTTT TTTT T T U U U(U /Ua!Rata|aa,aa#bkbc c)c1c@c OcZc`c ocyccc c cc,c#dV@dEdd*d0ePeme,ee-e+e8#f\f efqfyff#f0f f gg1g:g KgYg^gegug|gggggigCh Jh Vhch thh h"h1h hi i @i Mi Yifivii-iii iiij j ,j:jVRjj jj,FkskGk kkl"l >lKl Sl_lolllll*l'$mLm@Rm6m m!m?m7n Gn Un`n fntn zn n nnnnn no!0odRo ooooo oo(p+p EpfpXp+p"q&)qPq+jq>qFq'r*Dr(or1r,rIrAs'1tYt#Eueiuu8vvCwrwFx Kx/UxMxxxzy y y y!y'yyyyzz.zLz^z,vzz zz$zz" {0-{$^{"{{{5"|X| a}k}s}y} }}}} } }}}}}}}}~~~~ ~'~)~:~  G!ik~a @K\a[ CfSk#W@UgeVeW")z#Ȇ܆&F#dćȇ̇ Їۇ߇) FP`r #̈7 EY-v ʼn ݉D0 @K)b0Ɗʊ̊ ъފg͋25#h2>q) ōЍ(#1'U"}MqwVPDlœ.֓3$+X03$'<M:g ,ŕ(5ƖA>CWl!^s қޛ͜tOĝ ӝ=G:(7cXn cp1,.4+=i/> "/$Rw%=^iQN  . ;.Hw)ܦ x" H S`o4?ߨ7aW7̩TYt.Ϫ^si{X UdЬU@Q:"*7Mïʯ ѯޯ  +4I%d*°**C]V:ѱ e}'3Ҳ&&@(g**&) N7bNS8qx4DV!m#ӹ   -)3W, Ϻ!)J> bDy680._5t4߾y&ӿ / I V c"q'&&& 1F\2x=7N :. -#+Q}9  + E Pq + V%#@I@&7$|0v`*)3`]9Q(JNsQ[^p2#&7Jae+>2JPi( 7't "94n 05# =ZJ*91 @a} $'&84_!*6F!_8_2)\r-*X:%>OXA]slG  /=)D n|TI(FrE}*"RMZJ&FFm$Kv%k)2Q\F[qQD -+:-f $:+>jM,9HW/nVg!wRG4!N3p6U31et=9<v!@]`+9Y})BQD*0H!bj]c+Ly`V ug; =ps  &">\R=i8M &: Ij ^1?.]}f OqI( B4wq8yPMDQ@{SVwB8Ogdot k^ fj 1 6 sO   i d { O n J 8h G = <' d |*    )/ @K\ e3 !% PH&-\oz"|J%'CNT.d}jefI(k4( !D?{Ug[h:Vj8WmR4R11?sLx{bR`lDU.\kDn8b3FP  3$dFz$wB0=];/g+| uc<Ol8Qx6G@'= Zzy_%5nn;kGxbw1 X77*Wyt{O9 >9 V&e#)v!} F l'aS,&7M<Aqc|;W3$0*<^I#2TK5YLO[()p*+,S- @ZqM "P"g:J@q/9Murjv4-H_`,_)Ey6tCKf~i] c2[Hud>Bv>6 .^Ls0 arXV: 2phhB?ZYG+IeY5ENA/Jso`UmaQ]Xo=C~rASfTm\E^}tK #Q%~piwN!i (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).../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, 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 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+WCumulativeCumulative %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 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 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 intervalLowest 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...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 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.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 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 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 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: 2019-07-02 11:47+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: 2019-07-04 05:44+0000 X-Generator: Launchpad (build 19007) 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 верни)(край)(филтрирани)(в процес на научаване)(нов)(моля, изберете една карта).../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Всички тестетаВсички полетаВсички карти, бележки и медийни файлове в този профил ще бъдат изтрити. Сигурни ли сте?Разрешаване на 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. Проверете интернет връзката си и опитайте отново.Файлът %s не можа да бъде запазенСъздаване на тестеСъздаване на филтрирано тестеСъздаденаCtrl + Alt + FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl + Shift + LCtrl + Shift + MCtrl + Shift + NCtrl+Shift+PCtrl+Shift+SCtrl + WНарастващоНарастващо в %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Грешка при установяването на сигурна връзка. Това обикновено се причинява от антивирусен софтуер, 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Предната част на тази карта е празна. Моля, отворете Инструменти > Празни картиВъведеният текст би генерирал празен въпрос във всички карти.Броят на новодобавените карти.Броят на въпросите, на които сте отговорили.Броят преглеждания, насрочени за по-късно.Колко пъти сте натиснали всеки бутон.Даденият файл не е валиден .apkg файл.Даденото търсене няма резултати. Искате ли да го прегледате отново?Заявената промяна изисква пълно качване на базата данни при следващото синхронизиране. Ще бъдат загубени прегледите или промените по тестетата по всички други устройства, които не са синхронизирани все още. Продължаване?Необходимото време за отговаряне на въпросите.Има още нови карти, но дневният лимит за преглеждане е достигнат. Можете да увеличите лимита в "опции", но имайте предвид, че колкото повече нови карти се включват, толкова повече ще трябва да ги преговаряте.Трябва да има поне един профил.Не може да сортирате по тази карта, но може да изберете конкретни тестета от страничния панел отляво.Файлът не прилича на валиден .apkg файл. Ако получавате грешката при файл от AnkiWeb, вероятно изтеглянето се е провалило. Опитайте отново; ако проблемът продължава, опитайте с друг браузър.Файлът съществува. Наистина ли искате да го презапишете?Тази директория съдържа цялата Anki информация на едно място, за по-лесно създаване на резервни копия. За използване на друго място, погледнете тук: %s Това е специално тесте за учене извън стандартната програма.Това ще изтрие сегашната колекция и ще я замени с данните от импортирания файл. Сигурни ли сте?ВремеЗа прегледЗа да ги прегледате сега, изберете бутон "Изравяне" по-долу.За да учите извън нормалната програма, изберете "Учене извън програмата" по-долу.ДнесДостигнахте дневното ограничение за преговори, но има още карти за преглед. За най-добра памет обмислете увеличаване на дневния лимит в опциите.ОбщоОбщо времеОбщо картиОбщо бележкиВъзприемане на входните данни като регулярен изразНе може да се импортира от файл, достъпен само за четене.ИзравянеОтмянаОтмяна на %sНеразпознат файлов формат.НепрегледаниОбновяване на съществуващи бележки, когато първото поле пасва.Качване в AnkiWebКачване в AnkiWeb...Използвани в картите, но липсващи в медийната директория:Потребител 1Версия %sИзчакване за приключване на редактирането.При добавяне, по подразбиране на се използва текущото тесте.Цялата колекцияИскате ли да го изтеглите сега?Имате много тестета. Погледнете %(a)s. %(b)sНе сте записали все още своя глас.Трябва да имате поне една колона.Промените ще повлияят на няколко тестета. За да промените само текущото тесте, създайте нова група от опции.Някой медиен файл или колекцията са твърде големи за синхронизация.Колекцията беше успешно качена в AnkiWeb. Ако използвате други устройства, ги синхронизирайте сега, и изберете сваляне на колекцията, която току-що качихте от този компютър. След това, бъдещите прегледи и добавените карти ще бъдат добавени и слети автоматично.[няма тесте]резервни копиякартикарти от тестетоколекциятадднитестецелия живот на тестетодубликатпомощскриванечасачаса след полунощпо-малко от 0.1 карти в минутамин.минутимпрегледисекундистатистикатази страницас.цялата колекцияanki-2.1.15+dfsg/locale/bn/000077500000000000000000000000001353113723000152755ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/bn/LC_MESSAGES/000077500000000000000000000000001353113723000170625ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/bn/LC_MESSAGES/anki.mo000066400000000000000000000065461353113723000203540ustar00rootroot000000000000002C<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: 2019-07-02 11:47+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: 2019-07-04 05:44+0000 X-Generator: Launchpad (build 19007) Language: bn (%d এর ১) এটির %dটি কার্ড আছে এটির %dটি কার্ড আছে%%টি সঠিক%dটি কার্ড%dটি কার্ড%dটি কার্ড মুছে ফেলা হয়েছে।%dটি কার্ড মুছে ফেলা হয়েছে।%d টি নির্বাচিত%s অনুলিপি%s মিনিট%sমিনিট%s সেকেন্ড%s সেকেন্ড&সম্পাদনা&রপ্তানি...ফা&ইল&অনুসন্ধানযা&ও&সহায়িকা&আমদানি...নির্বাচন &উল্টো&পরবর্তী কার্ড&পছন্দসমূহ...পূর্ব&বর্তী কার্ড&টুলসবাতিল &করো(নতুন).../:যোগক্ষেত্র যোগ করোট্যাগ যোগ করুনআবারসবকটি ক্ষেত্রউত্তরগড়পেছনে যাওসাধারণকার্ডকেন্দ্রডিফল্টদেয়%s চালাতে সমস্যা হয়েছে।%s চালুকরণে ত্রুটিঅতিরিক্তপূর্বাভাসসম্মুখঘণ্টাব্যবধানশিক্ষাবামanki-2.1.15+dfsg/locale/ca/000077500000000000000000000000001353113723000152615ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ca/LC_MESSAGES/000077500000000000000000000000001353113723000170465ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ca/LC_MESSAGES/anki.mo000066400000000000000000002353521353113723000203370ustar00rootroot00000000000000 9L L L(L/L"5LXL ZLdLwLL8LLLMM"&M$IM$nM&M"MM4M2%NXNiN"N$N$N$N O9ONOfOnO}OOOOO OOPP P PPP P$P;PBPRP[P aPlPrPxP|P PP PPP PPPPPQQ"Q2Q9Q0?Q pQ}QQ Q QQQQQQQQQQQQQRRT R`R,bR(RR!RRfSxS SS S SSSSSeTyT7#UH[U)W XX5XX!YYzY%YkY fZ rZ}ZZZ Z ZZ Z Z ZZ [[['8[`[h[p[ v[$[[ [[[[ [ [,[K+\ w\\1\\]"p__ ____`I6aRavaJb7b ,cw8cEc@c7d>dMdRUddd4e#Oe#see ezeRf(kff ff ffff f g g"g*g0gJgig gggJgghh+h;hAhHhXh ]h gh)qh'hhiiiiii i i i i ii ii jj3%jYjSmjjjj j jjkk,k@k"Skvk~k0l/9lilyl&ll ll ll l m m m)m/m MmXm^m|mm-mmmm m(m5n EnSnnn8n5oPTo1ooo oo#p;pCpJpQpXp _p jp up p pppppppppp p p p p q q %q 2q ?q LqYq `q kqyqq qq qqqqqr "r /r ;rIrNr/_rrrr%rr r r r s s s*s>sHTs,s(sstF&tNmtPt> uPLuu]u v8vIvPvfv{vvv vvvv v vv v v vw ww w)/w0Ywwww4w!wx#x#9x]xvxx yy7y >y.Hywy}yyy y yyy yy yy+y*z1z :zDzLzUzfzzzzzz z zzNz"6{Y{m{ r{|{{{{{U|^|c|}| |||||| ||| | }} }8(},a}}} }}}}}.}F}A~Z~ z~ ~4~~~ ~1~ 0P_*s <J iv"" ܁!5> P?Z $)2-28GW ^ hv<ބ  5S dpw  ȅ ԅ ޅ %9?PXr N -3; ?&Ip  ‡ڇ !"+Dp#!ƈ܈ < ;H]Xa!, N\dg,y#nk  19H Wb h t~5 " ? JU,t#Vō8EU*Ҏ0.K,a-+Տ8: COWr#0 ِ )7<CSZbsǑ# 8Gib̒Ӓ / =J [f~ "ē ̓1ד 1 Bc j w -֔( 5;@W` gq x ĕVܕ3 CM,ЖG- u"  $)64`И* '8`h@n6 !?MS ŚК֚ܚ ,? Zh n y ӛ - :DU Z{!d  $3<A Vd(i ͝X+A"m&z20L+}>F'/*W(1,ݠI T'Dl#X_|eܣB89rC(FForg) ui/ߨM]c . 4 ? K!Wy~g'L,y«׫.ޫ +=,U  UϬ%$Di"zZS0L$}"Ů ˮb׮{:^Ұ51gUp}ƴ DNV\p  ѵ1LcjǶ϶ ն߶ ̸ ܸ " &%=cCuɹڹ--4-b1+º>C>!''ݻ''-+U ȼ׼ 3DSW[_dh lx   ȽԽܽ  0B"Il~¾վ ܾ1 (9 > HSYl?6AAx!! )A{X?~cl Kl8d( 3  :Gaw $1 6 @ L X)f 8 [D0I31"2U Z#hN_fJH*szOIT I~!.$ $0U#7"Z bo$3;#X| W0F_ u  5- 7  ",=Par <4[I  7,Mz21.d!9 3 8CVg ! :+ fpu }13 D6Z&2! $ /;BIP W b m x     $ 1 ? MZa jv !/NS iv3 /6>O`sZ5AFw8-D%MjODgM h (I4~  &->R Xd s1D.IaYh.&($Afz&%;a~ @! # )6MVJ_   2<L]cx<5<KQn 9 D!Npw 0 <HQ=b'  1GK%( DMks@"556Kv#,0'"(Js N.@*[@$H #<CIXpw D '= S`iR~ =J jw $C] b n{^  & *87p  +*!VCx$.%(N S aoN~ s&8KOWAv1r~# (IYjr  !&:" ]j-r  /3 09 mj E `   0 ; ' G 4b  2 3 F f  o } ,  : ? V l 6t         ''?gv $-"8|Q '(FA  , 2>EQ !  0F&`33 & BN Wb i#u #gV fr= ;"\f-')$Q v !=Q&,x-7( >46s U? T'aOY39K]l{0# ,: K.X$#+ =*Ju<a z  . #$Hed2(6&]B .O Q~ O + !'L!-t!3!2!@ "J"4Y##}$z$e%~%B&&A'3'J(|Y((X)^) y))M*3*W+k+p+),;,J,\, b,n, ,+,,%,,;m-_- ..-. 4.?._. |.B.%...7/K/ T/ _//"/f/0,90f0{0Q0Z02=1!p1"111q1|;2M2}4]445|8 99$9-9?9 Z9g9i9n9 s9999999999:*:?:F:b:v:::::::::::~?2``y:%7 WUdX\`^9T:65<=>?/@B~Ggr:"sns Q p1Ch!Q<?O{.;{ b-.[ |2tr{QVGhSvOX YW;wx+<)]&MgA%F AdHRm3Z>Dpmay-e|z.tiU@.tPKK=MY{ e Ukx&>HaYFTq3I|_xDW^ ('()*~c 2j45678}C+k#pf-w/}f0U8k=Pok[ K|lhJ*n9Nv5Sjr=pIKoX^DB \ zc@(m$sS8*Vy *e9@Ze1 qdZ HuQIcxuDXF5 '&Hsw_iSh~JuJ}+\L+,%!$b/OBN1AGvLb>gq)4037w )#GVa_"a;7 z\E_92Nr#!}0'%#l 6P4bli,OzFC,Aq(o$VyoB4'YE0R[["`-]t$W"i /T E 8lLR1<,vng!3E6:duTfZ;]J^?PCcjIjLM]&MmNfnR (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).../0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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+WCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCustom steps (in minutes)CutDatabase 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 Unused FilesDelete 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 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 %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 filter: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 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.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 in:Search 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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable 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?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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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: 2019-07-02 11:47+1000 PO-Revision-Date: 2018-09-16 00:55+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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) 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…/0d1 101 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 notaAfegir Notes...Afegeis el dorsAfegeix etiquetesAfegeix etiquetes...Afegeix a:La extensió no te cap configuracióLa extensió no va ser descargada des de AnkiWeb.Extensió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 (sense reprogramar)S'eliminaran totes les targetes, notes i arxius multimèdia d'aquest perfil. N'esteu segur?Totes les cargetes per repasar en ordre aleatoriPermet 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)Navegar complementsAspecte 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ïEls canvis tindran efecte quan reiniciis Anki.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 etiquetesEliminar 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 grabar l'audio. Has instalat "lame"?No s'ha pogut guardar l'arxiu: %sEstudiar de valentCrear mallCrear mall filtrat...Crea imatges rescalables amb svisvgmS'ha afegitCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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+WAcumulatAcumulat %sRespostes acumuladesTargetes acumuladesMall actualTipus de nota actual:Estudi personalitzatSessió d'estudi personalitzadapassos personalitzats (en minuts)TallaS'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 Arxius no UtilitzatsVoleu 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 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 %sPlanificador experimental V2ExportaExporta...%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ícilInterval dificilAcceleració per hardware (més ràpid, pot causar problemes)Has 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.Facilitat més baixaGestionaGestiona els Tipus de NotaGestiona els Tipus de Nota...Gestionar…Targuetes enterrades manualmentAssocia a %sAssocia a les etiquetesMarcar notaBloc de MathJacxquímica MathJaxMathJacx 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 has estudiat cap targueta avuiNo 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....Filtre 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, 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 intermediariPreguntaÚ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 mallRepeteix les targuetes fallides desprésReemplaç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 :Buscar 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)Mostrar les targuetes en aprenentatge amb esglaons més grans abans dels repassosMostra 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.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...Estudiats %(a)s %(b)s avui (%(secs).1fs/targeta)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.El planificador experimental pot haver causat una planificació incorrecta. Sisplau assegurat que has llegit abans la documentació. Vols procedir?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ó.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?Aixó resetarà qualsevol carta en aprenentatge, buidarà malls filtrats, i canviarà la versió del planificador. Vols porcedir?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'ha pogut accedir al directori de Anki media. Els permisos del teu sistema de directori temporals porden estar incorrectes.No é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 complementsPujar 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+AprenentLa teva col·lecció d'AnkiWeb no conté cap carta. Sisplau, sincronitza un altre cop i escull la opció "Pujar".Els 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àginawtota la col·lecció~anki-2.1.15+dfsg/locale/ca@valencia/000077500000000000000000000000001353113723000170645ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ca@valencia/LC_MESSAGES/000077500000000000000000000000001353113723000206515ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ca@valencia/LC_MESSAGES/anki.mo000066400000000000000000000025051353113723000221320ustar00rootroot00000000000000 | "!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: 2019-07-02 11:47+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: 2019-07-04 05:48+0000 X-Generator: Launchpad (build 19007) 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.15+dfsg/locale/cs/000077500000000000000000000000001353113723000153035ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/cs/LC_MESSAGES/000077500000000000000000000000001353113723000170705ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/cs/LC_MESSAGES/anki.mo000066400000000000000000002336041353113723000203570ustar00rootroot000000000000009L L LLL"L MM MM2MQM8cMMMMM"M$N$)N&NN"uNN4N2NO$O"AO$dO$O$O OO P!P)P8PIP^PuPP PPPPPPPP PPPP QQ Q'Q-Q3Q7Q >QHQ NQYQbQ tQQQQQQQQQQ0Q +R8RGR MR XRcRiR|RRrRj SuSwSzSSSSSSSSTSS,S((TQT!pTTfTU 'U4U FU SU^UnUUUeUV7VHV)=Y gZqZ5ZXZY[%m[k[ [ \\\5\ F\ P\Z\ p\ ~\ \\ \\\'\\] ] ]$]@] F]R]b]s] ] ],]K] ^1^1F^x^"\`` ```d`!abIbRbv$c7c cwcEWd@ddddRdOeXee#e#f>f ]fz~ff(g;g CgPg dgqggg g g gggggh +h5hHhJOhhhhhhhhh i i)i'Biji&j-j2j:jAjHj Pj Zj ej oj zjj jjjj3jkSkhkqkxk k kkkkkk"kl%l0l/lm m&2mYm kmwm ~mm m mm mmm mmn#n)n->nlnrnxn n(n5n nn~ooooo8o5o1pPFp1ppp pp# q-q5qrKrRr Yr drrrr rr rrr!rs%s)sIs Ns [s gsuszs/ssss%st t t $t 1t =t JtVtjtHt,t(tu=uFRuNuPu>9vPxvv]v 0w8|a|u| z||||||]}f}k}} }}}}}} }}} ~ ~~8"~,[~~~ ~~~~~.~ ~F~E^ ~ 4 1$4Tc*w!@ bp ""߂ #8GYn ? $)DȄ2.Cbgm| ą<օ )9> G5R  ӆ ݆ )/@Hb| N #+ /&9` o} ʈ!+4`#p!̉щ ى < +8]Ha":!N8p =,"*-,?l#4kXčɍ ؍  (4 : FPhw5 ێ & 1<,[#&Vӏ8*Ecɐ*6 0Bs$,ˑ-+?8k ܒ#0 CQZy ē̓ݓ )1#Qui̔6= Q]/w  ŕЕ " . 61As  ߖ  ;-R ė ˗֗ V/ ,#PeG ș" 6C KWgw)К *+'V~@6͛ !?1MqŜ ՜  ,$Q lz Ɲ* 2 ? LVg l!dž '26ENS hv({ ߟX+S"&zɠD0^+>F'A*i(1,If'V~#j_eT8KC(XFrȨg; ũu{/M!ou %1@ F Q ]!i'L֬#*BGOd.kʭ, ! 2=U\$׮"Z Sf0$"3 9{E^5 VU_ Ǵʹ  #(.BWnԵ۵  %-08@ FPRce F P ^ l,x  )Ѹt ;ԹDCU5OϺ ^@R&DD^PPJES,#5>Tq#Ҿ &,37 ;Fbi  ˿ ۿ ) 4Udw @% - ;FNgn WD4^ R?Zi k?p_Y *8[Wea,{ HU\d  3#>"b '   18?Qx7:U#8=M amBfumL dPKE  Q ^s$"%G#m"P>k# ' 4BR Z"e-   &2D7Z7s{ 1A7yR /Db{- *. #)<f 0M \j8  "0(Yrk  !2@K6`=D0 & - 8 C N Ydkt{ '. 5?Ofy,.-6djz0 1K R`qh'V2~,R cWJ_  , 6 BNd{   -F TnG -H " -^;  .# R\dm t ,,  19B ) .< KVo Q-A o y7 > I)cD B/r%> !%'%*M,x & =BG7*: &CLRc|K*2DW ]g<w  +<Uho"0RN  8+;Ph w &:B}&=( % / < JnXg7\"!)7WRqC </l):d   $ 7  I S d  s         5% [ b &j    % - . 2F ]y G Y y  0 > 7 *X  * 7  ,:FK  -ZL! % 8CRhz /#'<X!n  :!N&p 0! R `Gn   ,8K\n'$  ( 4 >I P"Z} M u 5*`#v   $4>'s%**:9R W66'FFnV ) ? JU[o/ ((Q+V  !*L9fi  ) ?LUn}0X%^!^ 0x - J M"!*p!!!!!)!! "T+""##&I$lp$w$U%1% &=&%'u*'l'x ((( (()B0*Ss***U+i+~++ + ++%++$+5,VK,,,,,,,A -%K-q--4- ---..U5.9. ..Z.hI/*/%/!0%0,0;0t0B41!w12I5[5c5i5y555555 5 55555%6%<6,b6(66666747:7@7 E7Q7X7 ^7l7 t77IA9 v$Bf,/:hlbN"6XX| \ych'(oL"{_& H%uJVA<Uk52EnOVL=G&`r|P3Sik]0G'{S\[Yem.)#wYQ +R UUJCr;FK<Q3u7?@!)DBCE=lGH3jl^,-$C.Q0D1gm,/MiN+5FZz)k:tM$qQ ;v R1R (9R  a|^f>a"  SejXt@{}]@F|?se]. xv+gsjb%jcBWayy_ 8Z7~g'1zL^zmK4~*GD 12\@c47%y56"Y:Zz 7{H<giT0ksTpPZMSt6xH#mJoW`Xp% Ww}D&LYd9u]K!PxI4-./0;}tEAW68`U :u<d=F-I8~Ebh}Vd/ #8Cbw34_-5* ?OIB_n p>h  Ar[(O,f'd!>qNVn2q~fTN(?=`$c& #T[vM^K;)JxaqPlp2>!nreiwO[*\o9s*o+ (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 Collection PackageAnki Deck PackageAnki could not read your profile data. Window sizes and your sync login details have been forgotten.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.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)Basic (type in the answer)Blue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 %sExperimental V2 schedulerExportExport...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 EditorHardHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Interface language:IntervalInterval modifierIntervalsInvalid code, or add-on not available for your version of Anki.Invalid code.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 intervalLowest 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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.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 deckRestored defaultsResume 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 in:Search 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.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 %(a)s %(b)s today (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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?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 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: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-06-27 12:23+0000 Last-Translator: Kristýna Kociánová 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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) Language: (1 z %d) (zakázáno) (zakázáno) (povoleno) Má %d kartu. Má %d karty. Má %d karet."Segoe UI"%% Správně%(a)0.1f %(b)s/den%(a)0.1fkB odesláno, %(b)0.1fkB staženo%(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%(n)d: %(name)s%(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žen%d soubory médií staženy%d souborů médií staženo%d poznámka%d poznámky%d poznámek%d poznámka přidána%d poznámky přidány%d poznámek přidáno%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ámky importovány.%d poznámek importováno.%d poznámka nezměněna%d poznámky nezměněny%d poznámek nezměněno%d poznámka aktualizována%d poznámky aktualizovány%d poznámek aktualizováno%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...Prohlížet a instalovat...&Karty&Zkontrolovat databázi&Biflovat...&Upravit&Exportovat...&Soubor&Najít&Jdi na&Příručka&Příručka...&Nápověda&Importovat...&Info...&Invertovat výběr&Následující kartaPoz&námky&Otevřít složku s doplňky...&Předvolby...&Předchozí karta&Přeplánovat...Podpořte &Anki...&Přepnout profilNás&troje&Zpět'%(row)s' mělo %(num1)d polí, namísto očekávaných %(num2)d(%s správně)(Poznámka smazána)(konec)(filtrováno)(učí se)(nové)(rodičovský limit: %d)(prosím vyberte 1 kartu)....anki soubory pocházejí z velmi staré verze Anki. Můžete je importovat pomocí Anki 2.0, který je dostupný na webových stránkách Anki..anki2 soubory nelze importovat přímo - prosím importujte místo toho .apkg nebo .zip soubor, který máte./0 dní1 101 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.

Chyba

Nastala chyba. Prosím spusťte Anki, zatímco držíte stisknutou klávesu shift, což dočasně zakáže doplňky, které máte nainstalované.

Jestliže problém nastane pouze v případě, kdy jsou doplňky povoleny, prosím použijte menu Nástroje>Doplňky, zakažte některé doplňky a restartujte Anki, opakujte, dokud neobjevíte doplněk, který způsobuje problém.

Když objevíte doplněk, který způsobuje problém, prosím nahlaste chybu v sekci doplňky na stránkách podpory.

Informace o ladění:

Chyba

Nastala chyba. Prosím použijte Nástroje > Zkontrolovat databázi a zjistěte, zdali to problém vyřešilo.

Jestliže problémy přetrvávají, prosím nahlaste problém na stránkách podpory. Prosím zkopírujte informace níže a vložte je do vaší zprávy.

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 AnkiPřidatPřidat (zkratka: ctrl+enter)Přidat typ karty...Přidat polePřidat médiaPřidat nový balík (Ctrl+N)Přidat typ poznámkyPřidat poznámky...Přidat rub kartyPřidat štítkyPřidat štítky...Přidat k:Doplněk nemá žádné nastavení.Doplněk nebyl stažen z AnkiWebu.DoplňkyPřidat: %sPřidánoDnes přidánoPřidána duplicita s prvním polem: %sZnovuDnes znovuPočet Znovu: %sVšechny kartyVšechny typy karetVšechny balíkyVšechna poleVšechny kartičky v náhodném pořadí (nepřehazovat)Všechny karty, poznámky a média tohoto profilu budou smazány. Jste si jistý?Všechny kartičky na opakování v náhodném pořadíPovolit HTML v políchVždy zahrnout stranu s otázkou při přehrávání zvukuPř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 Anki kolekceBalík AnkiAnki nemohl přečíst vaše profilová data. Velikosti oken a vaše přihlašovací informace k synchronizaci byly zapomenuty.Anki 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 nepodporuje soubory v podsložkách složky collection.media.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.AnkiWeb ID:Nastal 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.Kterýkoli příznakKarty 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.Připojit obrázky/zvuk/video (F3)Automatická synchronizace a zálohování byly zrušeny během procesu obnovení. Pro obnovení těchto nastavení zavřete profil, nebo restartujte Anki.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ý intervalRubNáhled rubuŠablona rubuZálohuje se...ZálohyZákladníZákladní (plus obrácená karta)Základní (plus volitelná obrácená karta)Základní (napsat odpověď)Modrý příznakTučný text (Ctrl+B)ProhlížetProhlížet (%(cur)d karta zobrazena; %(sel)s)Prohlížet (%(cur)d karty zobrazeny; %(sel)s)Prohlížet (%(cur)d karet zobrazeno; %(sel)s)Procházet doplňkyZobrazení v prohlížečiZobrazení v prohlížeči...Možnosti prohlížečeSestavitPřeskočenéPohřbení sourozenciPř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.ZrušitKartaKarta %dKarta 1Karta 2ID kartySeznam karetStav kartyTyp kartyTyp karty:Typy karetTypy karet pro %sKarta přeskočena.Karta odložena.Karta zařazena mezi pijavice.KartyKarty 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ěnit balík...Změň typ poznámkyZměň typ poznámky (Ctrl+N)Změna typu poznámky...Změnit barvu (F8)Změň balík v závislosti na typu poznámkyZměněnoZměny níže ovlivní %(cnt)d poznámku, která používá tento typ karty.Změny níže ovlivní %(cnt)d poznámky, které používají tento typ karty.Změny níže ovlivní %(cnt)d poznámek, které používají tento typ karty.Změny se projeví po restartování Anki.Změny se projeví až po restartování Anki.Zkontrolovat &média...Zkontrolovat aktualizaceZkontrolovat soubory v adresáři médiíKontrolují se multimédia…Kontroluje se...ZvolitVybrat BalíkVyber typ poznámkyVyber štítkyVymazat nepoužívanéVymazat nepoužívané štítkyNaklonovat: %sZavřítZavřít a zrušit momentálně vkládaná data?Zavírá se...DoplňovačkaDoplňovačka (Ctrl+Shift+C)Kód:Kolekce exportována.Kolekce je poškozena. Nahlédněte prosím do manuálu.DvojtečkaČárkaNastaveníNastaveníNastavit 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čovatZkopírováno do schránkyKopírovatZkopírovat debugovací informaceZkopírovat do schránkySprávných odpovědí u zralých karet: %(a)d/%(b)d (%(c).1f%%)Správně: %(pct)0.2f%%
(%(good)d z %(tot)d)Poškozený doplňkový soubor.Nepodařilo se připojit na AnkiWeb. Zkontrolujte prosím své připojení a zkuste to později.Zvuk nebylo možné nahrát. Máte nainstalovaný „lame“?Nelze uložit soubor: %sBiflovatVytvořit balíkVytvořit filtrovaný balík...Vytvářejte škálovatelné obrázky s dvisvgm.VytvořenoCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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+ZSouhrnněKumulativní %sKumulativní odpovědiKumulativní kartySoučasný balíkSoučasný typ poznámky:Vlastní studiumVlastní studijní sezeníVlastní kroky (v minutách)Přizpůsobit rozložení kartiček (Ctrl+L)Přizpůsobit poleVyjmoutDatabáze zrekonstruována a optimalizována.DatumStudováno dníZrušit oprávněníLadící konzoleBalíkPřepsat balík...Balí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ítkyVymazat nepoužívané souboryVymazat pole z %s?Smazat %(num)d vybraný doplněk?Smazat %(num)d vybrané doplňky?Smazat %(num)d vybraných doplňků?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 AnkiWebuStažen %(fname)sStahuje se z AnkiWebu...Ke zkoušeníJen karty k opakováníZítra ke zkoušeníU&končitObtížnostJednoduchéBonus za jednoduchostInterval jednoduchostiUpravitUpravit "%s"Upravit 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: %sZapnout druhý filtrKonecZadejte 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 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 %sExperimentální V2 plánovačExportovatExportovat...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...Fil&trVerze souboru neznámá, zkouším importovat.FiltrovatFiltr 2Filtr...Filtr: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říznakPříznak kartyPř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.LícNáhled líceŠablona líceZákladníVygenerovaný soubor: %sVygenerováno v %sZískat doplňky...Stáhnout sdílenéDobréInterval postupováníZelený příznakHTML editorTěžkéHardwarová akcelerace (rychlejší, může způsobovat problémy se zobrazením)Nainstalovali jste si latex a dvipng/dvisvgm?ZáhlavíNápovědaNejvyšší jednoduchostHistorieDomůHodinové rozděleníHodinHodiny s méně než 30 opakováními nejsou zobrazeny.Totožný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ámceIgnorovat aktualizaciImportovatImportovat souborImportovat, i když existující poznámka má stejné první poleImport 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 HTML a odkazy na médiaZahrnout 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 doplňkuInstalace doplňku (doplňků)Instalovat ze souboru...Jazyk rozhraní:IntervalModifikátor intervaluIntervalyNeplatný kód nebo doplněk není dostupný pro vaši verzi Anki.Neplatný kód.Neplatný název souboru, prosím, přejmenujte jej: %sVadný 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.Neplatné vyhledávání - prosím zkontrolujte překlepy.Odložení provedeno.Kurzíva (Ctrl+I)Skočit na štítky přes Ctrl+Shift+TZachovatLaTeXRovnice v LaTeXuMatem. proměnná LaTeXuChybyPoslední 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...Místní kolekce nemá žádné karty. Stáhnout z AnkiWebu?Nejdelší intervalNejnižší jednoduchostSpravovatSpráva typů poznámekSpráva typů poznámek...Spravovat...Přiřadit na %sPřiřadit ke štítkůmOznačit poznámkuZraléMaximální intervalMaximum opakování za denMé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:Víceznakové oddělovače nejsou podporovány. Prosím, vložte pouze jeden znak.Poz&námkyNázev již existuje.Jméno balíku:Název:SíťNovéNové kartyNové karty v balíku převyšující dnešní limit: %sJen nové kartyNových karet na denNázev nového balíku:Nový intervalNový název:Nový typ poznámky:Nový název skupiny nastavení:Nová pozice (1...%d):Další den začíná vŽádný příznakŽádné karty k opakování.Dnes nebyly studovány žádné karty.Žá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.Žádné aktualizace nejsou k dispozici.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ámky přidané ze souboru: %dPoznámky nalezené v souboru: %dPoznámka jako prostý textPoznámky vyžadují alespoň jedno pole.Přeskočené poznámky, které jsou již v kolekci: %dPoznámky oštítkovány.Poznámky, které nemohly být importovány, protože se změnil typ poznámky: %dPoznámky aktualizovány, protože soubor měl novější verzi: %dNicOKNejstarší 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řítOtevřít zálohu...Optimalizuje se...Volitelný filtr:MožnostiMožnosti pro %sSkupina voleb:Možnosti...Oranžový příznakPořadíPořadí přidáníPořadí opakováníPřepsat šablonu rubu:Přepsat typ písma:Přepsat šablonu líce:Zabalený Anki doplněkZabalený Anki balík/kolekce (*.apkg *.colpkg *.zip)Heslo: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.Zkontrolujte prosím své připojení k internetu.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 pojmenujte filtr:Prosím nainstalujte PyAudioOdstraňte prosím složku %s a zkuste to znova.Prosím nahlašte tuto věc autorovi/autorům tohoto doplňku.Pro dokončení změny jazyka prosím Anki restartujte.Prosím spusťte Nástroje>Prázdné kartyProsím vyberte balík.Nejdříve prosím vyberte jeden doplně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át zvuk (F5)Nahrává se...
Čas: %0.1fČervený příznakRelativní opožděnostZnovu učenéPři přidávání si pamatovat poslední vstupOdebrat %s z uložených hledání?Odebrat typ karty...Odebrat současný filtr...Odstranit štítky...Odstranit formátování (Ctrl+R)Odstraně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 typ karty...Přejmenovat balíkZopakovat chybné kartičky potéNahradit kolekci předchozí zálohou?Přehrát zvukPřehrát vlastní zvukZměnit pořadíZměnit pořadí typu karty...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íkuPůvodní nastavení obnovenaPokračovatText zprava doleva (RTL)Obnovit ze zálohyNavrá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íVpravoUložitUložit současný filtr...Uložit PDFUloženo.Oblast: %sHledatHledat v:Hledat 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íčkyNastavit barvu popředí (F7)Byla 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 obě stranyZobrazit duplikátyZobrazovat čas odpovědiZobrazit karty jako bílá na černé (noční mód)Zobrazit 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íPostranní panelVelikost: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.Setřídit poleSetřídit prohlížeč dle tohoto poleTřízení dle toho sloupce není podporováno. Vyberte prosím jiný.Zvuk a video na kartách nebude fungovat, dokud nebude nainstalován mpv nebo mplayer.MezeraPočáteční pozice:Úvodní jednoduchostStatistikyStatistikyKrok:Kroky (v minutách)Kroky musí být v číslech.Dnes studováno %(a)s %(b)s (%(secs).1fs/kartu)Dnes studováno %(a)s %(b)s.Dnes nastudovánoStudovatStudijní balíkyStudovat balík...Studovat teďStudovat podle stavu karty nebo štítkuStylNastavení vzhledu (sdílené mezi kartami)Dolní index (Ctrl+=)Supermemo XML export (*.xml)Horní index (Ctrl++)OdložitOdložit kartuOdložit poznámkuOdloženéOdložené a přeskočenéSynchronizaceSynchronizovat i obrázky a zvukySynchronizace selhala: %sSynchronizace neúspěšná; internet v režimu off-line.Synchronizace 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.Experimentální plánovač by mohl způsobit nesprávné plánování. Ujistěte se prosím, že jste si nejdříve přečetli dokumentaci. Pokračovat?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ěď.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 hledat jednotlivé typy karet, například „card:1“.Podle tohoto sloupce nelze seřazovat, ale můžete prohledávat jednotlivé balíky tak, že kliknete na balík 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.Bude vytvořena %d karta. Pokračovat?Budou vytvořeny %d karty. Pokračovat?Bude vytvořeno %d karet. Pokračovat?Tímto se smaže vaše současná kolekce a nahradí se daty ze souboru, který importujete. Jste si jistý?To obnoví všechny karty v procesu učení, vyprázdní filtrované balíčky a změní verzi plánovače. Pokračovat?ČasLimit pro časový boxK opakováníChcete-li procházet doplňky, prosím klikněte na tlačítko prohlížet níže.

Pokud jste našli doplněk, který se vám líbí, prosím vložte jeho kód níže. Je možné vložit více kódů oddělených mezerami.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í.Přepnout povoleníPřepnout označeníPřepnout odložení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í.Nelze přesunout stávající soubor do koše - prosím zkuste restartovat počítač.Zruš přeskočeníPodtržený text (Ctrl+U)ZpětZpět %sNeznámý formát souboru.NenastudovanéAktualizovat existující poznámku, když je první pole stejnéAktualizovat následující doplňky?Nahrát na AnkiWebNahrává se na AnkiWeb...Použito v kartách, ale chybí ve složce s médii:Uživatel 1Verze %sZobrazit stránku doplňkuZobrazit souboryČeká se na dokončení změn.Pozor, doplňovačky nebudou fungovat, dokud nezměníte typ výše na Doplňovačku.Při přidávání standardně nastaven aktuální balíkCelá kolekceChcete ji stáhnout nyní?Napsáno Damienem Elmesem se záplatami, překlady, testováním a designem od:

%(cont)sMáte zvolený typ poznámky doplňovačka, ale žádné doplňovačky 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ůlnociza %s denza %s dnyza %s dníza %s hodinuza %s hodinyza %s hodinza %s minutuza %s minutyza %s minutza %s měsícza %s měsíceza %s měsícůza %s sekunduza %s sekundyza %s sekundza %s rokza %s rokyza %s letchybmé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.15+dfsg/locale/da/000077500000000000000000000000001353113723000152625ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/da/LC_MESSAGES/000077500000000000000000000000001353113723000170475ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/da/LC_MESSAGES/anki.mo000066400000000000000000001651721353113723000203420ustar00rootroot00000000000000-0= 1=<=C="I=l= n=x==8====" >$.>$S>&x>">>4>2 ?=?N?"k?$?$?$? ?@3@K@S@b@s@@@@ @@@@@@@@ @ AA A#A)A/A3A :ADA JAUA gArAAAAAAA0A BB B %B0B6BIB`BdBfBiBqBxB}BBBBTBB,B(C;C!ZC|CfCC DD 0D =DHDXDjDDeDD7E EE5EX1FYF%Fk G vG GGG G GG G GGGH H H$H@H FHRH bH lHKwHHH"JJ JJKKRjLvL74M lMwxMEM@6NwN~NNRNNkO#O#OOO(P/P 7PDP XPeP~PP P PPPPPPPQ Q&Q +Q 5Q)?Q'iQQMRTRYRaRhRoR wR R RR RRRR3RSS%SySSS S SSSS"S TT&$T KTWT ^TjT {T TTTTT-TTT(T5$U ZUhUUU8U53VPiVVV VVV W WWW"W)W0W 7W DW QW ^W kWxW W WWW WW WWWX"X 'X 4X @XNX/SXXXX%XX X X X X Y YY,4Y(aYYYFYNZPSZ>ZPZ4[]=[ [8[[[[\\ ,\9\?\D\ I\ T\b\ g\ t\~\ \\\)\0\]]4]!Q]s]]]]7^K^\^ c^m^s^u^x^ ^ ^^^ ^^ ^^^^__)_9_N___ f_ q_~_N_"_``!`8`>`E```aa #a1a@aHa[a kava{a aaaa aaaaa.aF bSblb b b4bbb b1c2cBcbcqc*cc Ne\e {ee"e"e ef$f3fGfPf bf lf)zff(gDg[gzggggg g gggg<g+h 4hAhQhVh _hjh {hhh h hhhhhhhii8i =i IiTihi ni{iiii ii ii i iiij'j:j+Pj|j#j!jjj j j<j 1k>k]Nkakl!"l DlRlZl]l,oll#dmkmm mnnn -n8n >n JnTnln{n nnnn n nn,o#AoVeo8oEo;p*Rp}pp,pp-p+$q8Pqq qqqq#q qrr-r6r GrUrZrarqrxrrrrrrirTs [s gsts ss s"ss s1s t&t Ctdt kt xt tttt-tu u uu$uDu Ku WueuV}uu uu,qvvGv vw -w:w BwNw^wpwwww*w'x;x@Ax6x x!x?x&y,y ,}Fk}'}*}(~1.~,`~I~~'#ۀee8\C%(ir u'/M̈́!… ȅ Ӆ ߅! '0X_dl.Ɇ,  U?$"ˇS0B$s" {͈^I5މU =GOUi { ʍэ#&.6 <FHY[  $ 2#@d fpAא+ 381l95ؑC#1g$,ϒ4(1)Z$Ǔړ.DZ ky ̔Ӕٔߔ   (H Zh{ 4 Օ 59;>GMPSVYh\Ŗ+ǖ5)!Ik )B U_qq$< !-BKSe2H{ "*!2 T ao ˜ ל& ( > LLX&П"ce2j j>KS U % פ 11 cn}ȥݥ'!6,X æ Ϧ3ܦ8I  '. 6@ ISdu:ިWI Q[bq%%+: IW`d!.5 "/ɫ1Ы5R8׬   " / < IV] fsӭ&"7Ia1j .ɮ   # .;J%\'ǯIQ0R8հKZnc ұDޱ#*=S&Y  Ųβ   &AC@!%")Lc . 9DKMPi y  ɵ ѵ۵& 5 ANeQ5Ѷ!8@H 19Ujs   ƸѸظ4>;z ¹;й ) 3:@{!ĺ.ٺ!Ǽ'+$0P4ʽ  3,`#0T[ ao ͿҿD * 5CV ^ ku  ! %*.Yw |   " / 9Gcy(1)3%Y^ f pAz|Xa  ?] "C  !. FQq * &2=+pPD[2)$,B2a8J !,=[,q     &2;Mf|*u%, <J ]j* : !9 [fy&(%6 =K#Pt z Q ";h$w  !"/#&S0z2 GE2 x#H  ",2DYhp 4! (7 GS!h/Y/@D Vbj 4V )w%"7(<?e@**%<)b-L2;!x<Hx*jW[k~N_Sd i s }$.  158n- 'U?[_/)+YsGE,.&7HMbrz| (,58I R \gixFi[*lS_I) JFEG_K8+ZhJU3mT>.DEH#A?e<c-m)$ f;^:Pd]bO+N> Wa9MBv ~w7#h'grbbl7Z<2 4Ro$ =/; 6T:5OfhnM!:YH0L .K{iwB^$,z|?Q 3^pPE%= A{QUm|I/? kxeV'1SIZ5 xLYQ 0~4scN}`FVoR`gDc\!xj@KrX%9DuTn+@iwy }pul a.v/a(d)q*\t,48-sPg&-[Y&Xz]MB(pkN"RoqOG=G> k|yvV2s5Ut%(1nS~2Jr*z@X"C3&07LCC1!'{[}]#e6,;WAHW`jfy9<"\djqu_6 t8  (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).../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, 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 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+WCumulativeCumulative %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 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 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 intervalLowest 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...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 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.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 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 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 matchesUpload 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: 2019-07-02 11:47+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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) 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).../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, 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 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+WVoksendeKumulativ %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 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 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 intervalSvæ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...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 PyAudioFjern 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.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.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.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 matchesUploader 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.15+dfsg/locale/de/000077500000000000000000000000001353113723000152665ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/de/LC_MESSAGES/000077500000000000000000000000001353113723000170535ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/de/LC_MESSAGES/anki.mo000066400000000000000000002543301353113723000203410ustar00rootroot00000000000000l;`O aO lOxOO"O OO OOOO8PTNT]TlT}TTT0T TTT T TU UU3Ur7UjUVVVV'V.V3V8VOzPzz]z F{8R{{{{{{{ {{{| | |"| '| 1| >|H| O|\|b|)q|0||||4|!0}R}e}#{}}}:~+N~z~~~ ~.~~~~~  &- 4B Zd+l   % 0=NU"ǀۀ  Á́с )9 HSX l w 8,ς "3.9 hFr҃ 4 @S Z1fȄׄ*! ֆ "0"S v͇  $.?G 5$)22҉1PU[jz <Ċ ', 55@v  ˋ !07H\bs{ ˌNߌ. 4APV^ b&l  ̍֍'/!E+g#!ǎ <! ^k]{aُ;Um!8 ܐ=,(U]`,r#gk *2A P [g m yÓ5ؓ < Y do,#&ߔV8]Eܕ*6>0uÖ$ٖ,+-D+r8ח #!0E vŘ ֘ 2NWlt#̙iy /  + @"Nq y1 țӛ " ) 6 BO_~-Ü(˜ &0 7Bb i uV  ,ўG 4Uf"  ßӟ)4Tq*̠''-@56v !?ڡMhn ~  ͢,٢ !/ 5 @ NXs{ʣߣ   !B!Udw ܤ +(0Y sX+"4&Wz~0VD+0ǧ>F7'~*(Ѩ1,,IY'#_˫e+8CQ(Frgx u/.M^S bn} !ȲͲg'SL{ȳ^e}.ô*,Bo v U$1V"gZS09$j" bķ{'^5TW]U}  ǾҾԾپ ޾ +B]vʿ޿  $&79 *1<8 u 2G,<Ma5t77<3p[cE:Y'+8-!:O! &7J am~ !  (3BI Ycu 6! Xew~+&(+08?FMSY`.'-"Ux*9P cn}LI*tyn cg8Q a l)x!-G_}:8 -= MZm  9L37JK.]Z!(YrL1BS=2p x \}-( ,"A CPg *;C#^"hL#f' " !Y6Y   / < F Q]qF A a lv~ &'88<1n!'# (9P!e * F! ht z "@ < 6]x_& / ") 0 ; F Q \gnw~   *1 8 BOc|*&) 9&Fms| =)&PYiyz+w8/ c(OlNIv h D08L[ dqy  '-@U[(*!Su/7 9E7U   U cj s~   #dB1  7 @J#, EQk   I8/ "C Te^!"Y2 S1/a{/o21 d ?{  , / /2 2b         3 =  M !X Sz   Z +V 5   [F|$*+4 :G ` mz"P")A\bsV . GU u )0A&Ipz  D!3 CO_~")09+N2z  TD[m"s'OLVf? H'p8V*3"Il  "'#=a>  /  44AJv1/m#Ai)=g2GG)F p 2 0  -!46!Tk!! !!%!"2"9O""""'"""#%#-#4#K# S#a#{#"##"# #V#>K$$$$$$ %%%*%O%9&J&]&#n&&&6& & 'V''i'''>'' ( (:( @(M(7]((,((E(5) <)F)e) w) )) )!))))()* * **7E+}++y+(2,[,m,,,, ,,,,-G-Cb-%-(-D-,:.;g.5. .. .[.FY/ /2/S/30 000 1 1 "101H1_1-s11 11 11 1-1,2(12Z2w22 222 2221 3#<39`33&14 X4b4{4 44 4444 4#585sX595-6%46Z6X78q7\748Q<8P8@8) 9 J91k96949e :'o:/;;+<<=6>;R??iB@,@@v\AABB BJBCHDcEwE}EkFFFF FFF)FG%GBG7GHHfI~I IIIII8I*)J TJaJvJ6J J J JKKf5K4K8K LL[0L]LBL-M-MM {M MvM NNOPIP7$Q\RSV VVVVWW&W(W-W4WGWOW UW`WhWWWWWWX X)XHX!aXXXXXX X XXXX0)f2/3\/bdb(Hnj1N"9;XDil=cajp@+5  ,#yel1IH&[M]Tb_)PN Oz.+VlOr<Vb}P 8AXpK'z{`9ME/xLphK:!N2J g+6SA^wG@'$ZP*yS4-7C`d"aq7'3%cwd[\ `  T  s G9K7 w?$;=Ou:~R5E}@F(BCyJW>vlk~01?d&q <>F?ARLM|ZTvQB^${*tX 0c|#4DIm6a_R[|E5Z4z,meI\ x*gs3%hUwf ;t;v4`5nf^Mnv=#!orW_Wu=?"AGt&]>y)9<YD_JL*U%$u) sWBC}ENF8IKQapxrV:TQFi.RYg<.'|sokie Y6#>f8"678 @ (UkD~(-jm^mCJ~2B-3,xLqqHu\}oc{hjk [Z/ ]Ugzn,V-%.t 0:1SP+&e]{OXQoGHr !Y2!Shi (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-07-29 19:27+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: 2019-07-30 04:37+0000 X-Generator: Launchpad (build 19010) Language: de (1 von %d) (deaktiviert) (aus) (ein) Dort befindet sich %d Karte. Dort befinden sich %d Karten."Segoe UI"%% 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 …&BearbeitenExportieren...&DateiS&uchen&Gehe zu&Anleitung&Anleitung …&Hilfe&Importieren...&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)….anki-Dateien stammen von einer sehr alten Version von Anki. Sie können diese mit Anki 2.0 importieren. Diese Version steht Ihnen auf der Webseite von Anki zur Verfügung..anki2-Dateien können nicht direkt importiert werden - bitte importieren Sie die .apkg- oder .zip-Datei, die Sie stattdessen erhalten haben..0d1 101 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 Erweiterungen temporär deaktiviert.

Wenn das Problem nur auftritt, wenn die Erweiterungen aktiviert sind, dann benutzen Sie bitte den Menueintrag Extras>Erweiterungen um die problembehaftete Erweiterung durch selektives Deaktivieren herauszufinden.

Wenn Sie die entsprechende Erweiterung 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 Extras > 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.

Ein großes Dankeschön an alle Personen, die mit Vorschlägen, Fehlerberichten und Spenden zur Weiterentwicklung von Anki 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ügenNotiz hinzufügen....Gegenrichtung hinzufügenSchlagworte hinzufügenSchlagwörter hinzufügen …Hinzufügen zu:Die Erweiterung bietet keine Konfigurationsmöglichkeiten.Die Erweiterung wurde nicht von AnkiWeb heruntergeladen.ErweiterungenMöglicherweise beteiligte Erweiterungen: {} Hinzufügen: %sHinzugefügtHeute hinzugefügtDoppeltes zu %s hinzugefügtNochmalHeute fehlgeschlagenFalsch: %sAlle zurückgestellten KartenAlle KartentypenAlle StapelAlle FelderAlle Karten in zufälliger Reihenfolge (nicht neu planen)Alle Karten, Notizen und Medien dieses Profils werden gelöscht. Fortfahren?Alle zu wiederholende Karten in zufälliger ReihenfolgeHTML 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 kann Benutzerprofil nicht lesen. Persönliche Einstellungen wurden nicht übernommen.Anki 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. Anki ist kostenlos und quelltextoffene Software.Anki ist lizenziert unter der AGPL3-Lizenz. Bitte lesen Sie für weitere Informationen die Datei LICENSE im Hauptverzeichnis des Quellcodes.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)Erweiterungen durchsuchenDarstellung 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 zuweisenInhalt geändertUnten vorgenommene Änderungen werden %(cnt)d Notiz betreffen, die diesen Kartentyp verwendet.Unten vorgenommene Änderungen werden %(cnt)d Notizen betreffen, die diesen Kartentyp verwenden.Änderungen werden nach einem Neustart von Anki wirksam.Die Ä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ählenUnbenutzte 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.FortsetzenIn die Zwischenablage kopiertKopierenDebug-Informationen kopierenIn die Zwischenablage kopierenRichtige Antworten bei alten Karten: %(a)d/%(b)d (%(c).1f%%)Korrekt: %(pct)0.2f%%
(%(good)d von %(tot)d)Fehlerhafte Add-on-DateiEs konnte keine Verbindung zu AnkiWeb aufgebaut werden. Bitte die Netzwerkverbindung überprüfen und nochmal versuchen.Die Audioaufnahme konnte nicht durchgeführt werden. Haben Sie die Software 'lame' installiert?Konnte Datei nicht speichern: %sPaukenStapel erstellenAuswahlstapel erstellen …Skalierbare Vektorgrafiken mit dvisvgm erzeugenErstelltCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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+ZKumulativ%s insgesamtAntworten insgesamtWiederholungen insgesamtAktueller StapelAktueller Notiztyp:Benutzerdefiniertes LernenBenutzerdefinierte SitzungBenutzerdefinierte Lernstufen (in Minuten)Vorlagen für Karten anpassen (Strg+L)Felder anpassenAusschneidenDatenbank 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 benutzte Dateien löschenFeld aus %s entfernen?Möchten Sie die %(num)d ausgewählte Erweiterung löschen?Möchten Sie die %(num)d ausgewählten Erweiterungen 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...Angezeigte Karte bearbeitenHTML eingebenLernfortschritt geändertSchriftart festlegenLeerenLeere 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 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 Installieren von %(base)s: %(error)sFehler beim Ausführen von %sExperimenteller V2-ZeitplanerExportierenExportieren …%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&Duplikate 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 herunterladen …Stapel herunterladenGutIntervall für Aufstieggrüne MarkierungHTML-EditorSchwerIntervall für "Schwer"Hardwarebeschleunigung (schneller, kann Darstellungsprobleme verursachen)Haben Sie LaTeX und dvipng/dvisvgm installiert?KopfzeileHilfeGrößte LeichtigkeitVerlaufPos1Gedächtnisleistung nach TageszeitStundenUhrzeiten mit weniger als 30 Wiederholungen werden nicht angezeigt.IdentischWer 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.HTML und Verweise auf Mediendateien miteinbeziehenEinschließlich MedienEinschließlich Zeitplanungsdaten (u.a. Fälligkeit von Karten)Schlagworte 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 installierenErweiterung(en) installierenAus Datei installieren....%(name)s installiertSprache der Benutzeroberfläche:IntervallIntervallfaktorIntervalleUngültiges Erweiterungs-ManifestUngültiger Code, oder Erweiterung ist für Ihre Version von Anki nicht verfügbar.Ungültiger Code.Ungültige Konfiguration: Ungültige Konfiguration: Das Objekt auf oberster Ebene muss eine map-Funktion darstellen.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 Text (Strg+I)Schlagworte mit Strg+Umschalt+T bearbeitenBehaltenLaTeXLaTeX-FormelLaTeX-MathematikumgebungFehlschlägeLetzte KarteLetzte PrüfungErstelldatum (neuste zuerst)LernenGrenzwert für vorgezogenes 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 IntervallNiedrigste LeichtigkeitVerwaltenNotiztypen verwaltenNotiztypen verwalten …Verwalten …Manuell zurückgestellte Karten%s zuordnenSchlagworte zuordnenNotiz kennzeichnenAbgesetzes MathJax-ElementMathJax-ChemieformelInzeiliges 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.Heute wurden (noch) keine Karten gelernt.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 hinzugefügt von Datei: %dNotizen gefunden in Datei: %dNotizen mit unformatiertem TextNotizen benötigen mindestens ein Feld.Notizen übersprungen, da sich diese bereits in folgender Sammlung befinden: %dSchlagworte hinzugefügt.Notizen, die nicht importiert werden konnten, weil sich der Notiztyp geändert hat: %dAktualisierte Notizen, da die Datei eine neuere Version ist: %dKeineOKerstem 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 …Optionaler Filter:OptionenOptionen für %sOptionengruppe:Einstellungen …orange MarkierungReihenfolgeErstelldatum (älteste zuerst)FälligkeitVorlage für Rückseite festlegen:Schriftart festlegen:Vorlage für Vorderseite festlegen:Komprimierte Anki-ErweiterungKomprimierte Anki-Stapeldatei/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 überprüfen Sie Ihre Internetverbindung.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 den Ordner %s löschen und erneut versuchen.BItte setzen Sie den jeweiligen Add-on-Verfasser hierüber in Kenntnis.Bitte starten sie Anki neu um die Änderung der Sprache abzuschließen.Bitte Extras → Leere Karten ausführen.Bitte einen Stapel wählen.Bitte zuerst eine einzelne Erweiterung auswä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 …Benutzerprofil defektProfileProxy-Server verlangt AuthentifizierungFrageEnde 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 Erstellen einer neuen Notiz den Inhalt aus der zuvor erstellten Notiz übernehmenMö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 planenMeine Antworten in diesem Auswahlstapel sollen die Zeitplanung von Karten beeinflussenStandardeinstellungen wiederhergestelltJetzt 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: %sSucheSuchen in:Mit 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:ÜbersprungenEinige Karten wurden zurückgestellt. Sie werden in einer späteren Sitzung wieder gezeigt.Einige Einstellungen werden erst nach einem Neustart von Anki wirksam.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 …Heute %(a)s %(b)s gelernt (%(secs).1fs/Karte)Heute %(a)s %(b)s 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.Der experimentelle Zeitplaner kann eine inkorrekte Zeitplanung für die Fälligkeit der Karten verursachen. Bitte lesen Sie unbedingt die entsprechende Dokumentation auf der Webseite durch, bevor Sie diesen Schritt durchführen. Möchten Sie fortfahren?Das erste Feld ist leer.Das erste Feld des Notiztyps muss auf Karten erscheinen.Die folgenden Erweiterungen sind inkompatibel mit %(name)s und wurden deaktiviert: %(found)sDas folgende Zeichen kann nicht verwendet werden: %sDie folgenden miteinander in Konflikt stehenden Erweiterungen wurden deaktiviert:Die 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 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?Dieser Vorgang wird alle bereits im Lernmodus befindlichen Karten zurücksetzen, gefilterte Stapel löschen und die Version des Zeitplaners ändern. Möchten Sie 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. Dazu wählen Sie oben links in diesem Menü: Bearbeiten > Notiztyp ändernUm 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.Aktivieren/DeaktivierenKennzeichnung an-/ausschaltenKarte(n) ein-/aussetzenGesamtGesamtzeitKarten insgesamtNotizen insgesamtEingabe als regulären Ausdruck behandelnTypAntwort eingeben: Unbekanntes Feld %sEs kann nicht auf den Medienordner von Anki zugegriffen werden. Die Zugriffsrechte auf den temporären Ordner Ihres Systems könnten ggf. falsch gesetzt sein.Import 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.Erweiterung konnte nicht aktualisiert oder entfernt werden. Bitte starten Sie Anki bei gedrückter Umschalttaste, um Erweiterungen zu deaktivieren und versuchen Sie es erneut. Debug-Information: %sZurückstellen aufhebenText unterstreichen (Strg+U)RückgängigRückgängig: %sUnerwarteter Antwortcode: %sUnbekannter Dateityp.NeuNotizen mit übereinstimmendem erstem Feld aktualisierenDie folgenden Erweiterungen aktualisieren?AktualisiertZu AnkiWeb hochladenZu AnkiWeb wird hochgeladen …In einigen Karten benutzt, aber nicht im Medienordner:Benutzer 1Version %sWebseite der Erweiterung öffnenDateien anzeigenWarte 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 Sie %(a)s. %(b)sStimme noch nicht aufgezeichnetMindestens eine Spalte muss angezeigt werden.Junge KartenJunge KartenIhre AnkiWeb-Sammlung enthält keine Karten. Bitte synchronisieren Sie erneut und wählen Sie stattdessen 'Hochladen'.Die Ä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 Speicherplatz auf Ihrem Computer dürfte vollständig belegt sein. Bitte löschen Sie einige nicht benötigte Dateien und versuchen Sie es anschließend erneut.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 nachSammlungdTageStapelStapel-LebensdauerdoppeltHilfeAusblendenStundenStunden 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.15+dfsg/locale/el/000077500000000000000000000000001353113723000152765ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/el/LC_MESSAGES/000077500000000000000000000000001353113723000170635ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/el/LC_MESSAGES/anki.mo000066400000000000000000001015521353113723000203460ustar00rootroot00000000000000 K|$ $$$"$$ $$%8%N%_%r%"%$%$%&%"&:&M&^&"{&$&$&$& '.'C'['c'r''''' '''''(( ( (("( ((3(9(?(C( J(T( Z(e( w((((((((0( )$) *) 5)@)F)J)L)O)W)^)c)h)l)p)t),v)())!) *f%** ** * ****+e'+7+ ++5+X,%q, ,,, , ,, , ,---- $-$0-U- [-g- w- -K--"-. .#.5.R.7 / D/EP/@////R/H0#c0#000(0 1 1!1 51B1[1l1 q1 ~111111111 2 222 2'2 .2 82 B2M2_2o23u22S233!3 (3 63B3S3m3"33&3 33 33 4 444=4C4-I4w4}4(454 4454+5 B5N5f5 n5y555555 5 5 5 55 5 55 6 6(6 ;6H6]6a66 6 66/66666 7 7 7 &7 27 ?7K7(a77>77 77885898?8D8 I8T8 Y8 f8p8 w8888888889 9999 9 <9H9O9 V9d9 |9999999 9999: :::&:.: 3:?:D:K:P:X:^:w: :: ::: ::;;%; .; 8;F;L; [; e;s;y;; ;;; ; ;;; ;; ;;;; < < <$<3<F< K< U<`<h<0=5=== L= W=a= g= r=}==== ===== = == =>> >!>'>:> Q>_> e> p> ~>>>>> > > > >?!,? N?Y?]?f? k?y?~? ??"??*@1<@'n@#@8@@ @A AA A#A"4A$WA|AA AAAA AAAAAAAB BBBB$B&B7B9BCCD3DFD HDUDoD|DDE-EOKE?EGEW#F[{FF+FW!G]yGQGU)HcH[H3?I1sIIIII J'J7CJ{JJJJJJJJJJJK %K3K GK QK_KpKK&KK5K L"(L KL lLLLGLL MM3MBMKMOMQM TM aMlMsMzMMMM9M<MAN%GNmNN#]OO3O"OOP%P-EPsPPZPPQQQnjRRR3S}O}j}3y}U}6~[:~/~Q~NagQ{ ĀՀ:-Hh *  9H)Q.{= 3HJh4pV2,b5uA  aJSI=aGTtv[SPn|O5Z|WX (MW[L)dTlXo\A9<w#,p_!h; P}8r-#vVH*?d!u7GxB6=%{Fkfx/goE"c&j'K(Y1*]j+H8D)3LF%:z9-Q7?C. tmN0  RY&\b+}e^ Bq .;hU">c2 $MgZ46KE^q``s~y~kn{Di_QRsUCw>0I$i/ lNm@1@] 3f<:eJy'Ozr (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).../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 save file: %sCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCumulativeCumulative %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 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 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 PyAudioPositionRandomReviewReview 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: 2019-07-02 11:47+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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) 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 σωστά)(τέλος)(φιλτραρίστηκε)(μάθηση)(νέο).../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)Δεν μπόρεσα να αποθηκεύσω το αρχείο: %sΔημιουργία τράπουλαςΔημιουργία Φιλτραρισμένης Τράπουλας...ΔημιουργήθηκεCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WΑθροιστικόΑθροιστικό %sΣυγκεντρωτικές ερωτήσειςΣυγκεντρωτικές κάρτες.Τρέχουσα τράπουλαΤρέχων τύπος σημείωσης:Προσαρμογή μελέτηςΠροσαγμογή μελέτης συνεδρίαςΑποκοπήΗ βάση δεδομένων ξαναδημιουργήθηκε και βελτιώθηκε.ΗμερομηνίαΗμέρες μελέτηςΚονσόλα ΑποσφαλμάτωσηςΤράπουλαΗ Τράπουλα θα εισαχθεί μόλις δημιουργηθεί ένα προφίλ.ΤράπουλεςΦθίνοντα διαστήματαΠροεπιλογήΔιαγραφήΔιαγραφή καρτώνΔιαγραφή ΤράπουλαςΔιαγραφή κενούΔιαγραφή ΣημείωσηςΔιαγραφή ΣημειώσεωνΔιαγραφή ετικετώνΔιαγραφή πεδίου από %s;Διαγραφή αυτού του τύπου σημείωσης και όλων των καρτών τους;Διαγραφή αυτού του μη χρησιμοποιημένου τύπου σημείωσης;Διαγεγραμμένη %d σημείωση χωρίς κάρτες.Διαγεγραμμένες %d σημείωσεις χωρίς κάρτες.ΔιαγράφτηκεΠεριγραφήΠλαίσιο διαλόγουΛήψη από το AnkiWebΛήψη από το AnkiWeb...ΛόγωΈ&ξοδοςΕυκολίαΕύκολοΕύκολο bonusΕπεξεργασίαΕπεξεργασία τρέχοντοςΕπεξεργασία HTMLΕπεξεργάστηκεΕπεξεργασία ΓραμματοσειράςΚενόΚενές Κάρτες...ΤέλοςΕισαγωγή ετικετών για προσθήκη:Εισαγωγή ετικετών για διαγραφή:Σφάλμα κατά την έναρξη: %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.15+dfsg/locale/en_GB/000077500000000000000000000000001353113723000156505ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/en_GB/LC_MESSAGES/000077500000000000000000000000001353113723000174355ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/en_GB/LC_MESSAGES/anki.mo000066400000000000000000002314201353113723000207160ustar00rootroot00000000000000l;`O aO lOxOO"O OO OOOO8PTNT]TlT}TTT0T TTT T TU UU3Ur7UjUVVVV'V.V3V8VOzPzz]z F{8R{{{{{{{ {{{| | |"| '| 1| >|H| O|\|b|)q|0||||4|!0}R}e}#{}}}:~+N~z~~~ ~.~~~~~  &- 4B Zd+l   % 0=NU"ǀۀ  Á́с )9 HSX l w 8,ς "3.9 hFr҃ 4 @S Z1fȄׄ*! ֆ "0"S v͇  $.?G 5$)22҉1PU[jz <Ċ ', 55@v  ˋ !07H\bs{ ˌNߌ. 4APV^ b&l  ̍֍'/!E+g#!ǎ <! ^k]{aُ;Um!8 ܐ=,(U]`,r#gk *2A P [g m yÓ5ؓ < Y do,#&ߔV8]Eܕ*6>0uÖ$ٖ,+-D+r8ח #!0E vŘ ֘ 2NWlt#̙iy /  + @"Nq y1 țӛ " ) 6 BO_~-Ü(˜ &0 7Bb i uV  ,ўG 4Uf"  ßӟ)4Tq*̠''-@56v !?ڡMhn ~  ͢,٢ !/ 5 @ NXs{ʣߣ   !B!Udw ܤ +(0Y sX+"4&Wz~0VD+0ǧ>F7'~*(Ѩ1,,IY'#_˫e+8CQ(Frgx u/.M^S bn} !ȲͲg'SL{ȳ^e}.ô*,Bo v U$1V"gZS09$j" bķ{'^5TW]U}  ǾҾԾپ ޾ +B]vʿ޿  $&79  '."4 Wb dn8 "0$S$x&"42/bs"$$$ "CXpx   $.EL\e kv|    ,<C0I z rjYTH,J(w!ga w eb7 ED) 5fYn%s b ny}   '4\d $   ,KF 1" dN0IRvQ7r wE.@tR&/## 4zU( ' ;Har w   J&q )'A  ' 1 < F Q\ n{3S?HO V dp"0/& 0 BN Ua r ~  -CIO V(d5 U^rw85P1n # ! ( 3 > I T_fov}  ") 0 ;I\ mz ! % 2 >LQ/b%   !-AHW,(F)NpP>PO] 8LUk    %)40^4!(#>b{+=Nh o.y   '+/[b ku} N"g    / :F K8Y, . +F5| 4 1)[k*!w  "" 9Zo~ ? JX5p$)y2-= D N\ou<  59 JV]o    &7?Ys x N " &&0W ft  ! ++W#g!  < "/]?a1!E8g =,!$,6c#,kP   , 2 >H`o5   )4,S#&V8"E[*6 0: k  $ ,  - +7 8c      # 0  ; I Y b              1 9 #Y }    i > E  Y e /       " 6 A1L~     'F-](   * 1 =KVc ,WG ."G jw )49Wu*'>6< s!~?M.4 D R]ci| ,    9A`s    'dC  (% ? `X+"&)zP0V+m0>F 'P*x(1,I+u'e#y_ec8Z  C#!(g!F!r!gJ""" ""u#/$M0$~$$%% 4%@%O% U% `% l%!x%%%g%'%&QM&&5'<'T'Y'a'~''.''''(,(F( M(X( i(t(U(($)-)">)Za)S)0*$A*"f** *b*{*z+^,5,+-W4.U.}0 `1j1r1x11 1111 1 1111112242M2h22222222222 22230)f2/3\/bdb(Hnj1N"9;XDil=cajp@+5  ,#yel1IH&[M]Tb_)PN Oz.+VlOr<Vb}P 8AXpK'z{`9ME/xLphK:!N2J g+6SA^wG@'$ZP*yS4-7C`d"aq7'3%cwd[\ `  T  s G9K7 w?$;=Ou:~R5E}@F(BCyJW>vlk~01?d&q <>F?ARLM|ZTvQB^${*tX 0c|#4DIm6a_R[|E5Z4z,meI\ x*gs3%hUwf ;t;v4`5nf^Mnv=#!orW_Wu=?"AGt&]>y)9<YD_JL*U%$u) sWBC}ENF8IKQapxrV:TQFi.RYg<.'|sokie Y6#>f8"678 @ (UkD~(-jm^mCJ~2B-3,xLqqHu\}oc{hjk [Z/ ]Ugzn,V-%.t 0:1SP+&e]{OXQoGHr !Y2!Shi (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-05-18 08:15+0000 Last-Translator: Stephan Woidowski 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: 2019-07-04 05:48+0000 X-Generator: Launchpad (build 19007) Language: (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customise Card Templates (Ctrl+L)Customise FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryin-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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed for a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to rubbish bin. Please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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.15+dfsg/locale/eo/000077500000000000000000000000001353113723000153015ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/eo/LC_MESSAGES/000077500000000000000000000000001353113723000170665ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/eo/LC_MESSAGES/anki.mo000066400000000000000000002407461353113723000203620ustar00rootroot00000000000000l;`O aO lOxOO"O OO OOOO8PTNT]TlT}TTT0T TTT T TU UU3Ur7UjUVVVV'V.V3V8VOzPzz]z F{8R{{{{{{{ {{{| | |"| '| 1| >|H| O|\|b|)q|0||||4|!0}R}e}#{}}}:~+N~z~~~ ~.~~~~~  &- 4B Zd+l   % 0=NU"ǀۀ  Á́с )9 HSX l w 8,ς "3.9 hFr҃ 4 @S Z1fȄׄ*! ֆ "0"S v͇  $.?G 5$)22҉1PU[jz <Ċ ', 55@v  ˋ !07H\bs{ ˌNߌ. 4APV^ b&l  ̍֍'/!E+g#!ǎ <! ^k]{aُ;Um!8 ܐ=,(U]`,r#gk *2A P [g m yÓ5ؓ < Y do,#&ߔV8]Eܕ*6>0uÖ$ٖ,+-D+r8ח #!0E vŘ ֘ 2NWlt#̙iy /  + @"Nq y1 țӛ " ) 6 BO_~-Ü(˜ &0 7Bb i uV  ,ўG 4Uf"  ßӟ)4Tq*̠''-@56v !?ڡMhn ~  ͢,٢ !/ 5 @ NXs{ʣߣ   !B!Udw ܤ +(0Y sX+"4&Wz~0VD+0ǧ>F7'~*(Ѩ1,,IY'#_˫e+8CQ(Frgx u/.M^S bn} !ȲͲg'SL{ȳ^e}.ô*,Bo v U$1V"gZS09$j" bķ{'^5TW]U}  ǾҾԾپ ޾ +B]vʿ޿  $&79   0 JUW`*tO"63I5}55?_VrR/-1]1357+cx+<AFKQV[c{     "%) O\ k w@   %,Lhlugimr{Q08'&`!i* AOe tmD9B%2h WBhT+ } "3IZ ny+ &  )FMgy )Y"Hk7{wSCKiq}EzM> (O2 ~ $,Qq"85M  )5:!Tv a1CXiq 2,=   % 6 A L V al}=R0 ( GQ&&+D2X  ''- U `!j4%1" Ta %>94xU:Xw !   $+4;BIPW^ e r   +;M\r"0 -5:M +  #1B]ey28'K$sIRK5Eo 7lA A *BJ_py   1"CTF%:X+vT1p A (24!7Y lw~ P " - 9CLbx Y9V     !7HM `l { F)# 6A GS+YS" )B7z:&#54GP|-4*H.s*.#9Oh z E1)*[3]@t"  ' E R_qC# 0 ; GOT   8C T `n} !37PbG  7 N _ q        " "* 9M  , 1   ! 1  : OD   t XC . ,  " D1 v A C  :;v)6y`  % 3 ?I\ap''3 2<!C e ,.'!Q@:[#)M1eA4$3'L+t3FH/x "=9 MYw , JVg#o3 ^#(? ' :D\ u'>" ''Oo0%#I<Q!   !&5 Die 9$`$`' #0<T="$) %A 3g /    ^ 3K! !(!:!N!?"G"X" i" u"""" "1""#$# ,#8# H#!R#t#z## ## ##$$&$ .$$9$^$4y$s$"%2%6%J%^%g% {%%/%%%%\&)l&*&)&~&j'/'P' (4*(P_(4(,(')9:)2t)1)F) *. +8+ ,^;,t,-5.6.A.. />:/y/s/m0s0 00{X171V 2c2k23 3/3A3 F3 Q3 _3#l33$3r3)-4_W44p5y55 5555=5.6 L6Y6l686 6 666 7W&7~7&7 77T7Q>878$8$899i&9~9#:j3;=;;l<T>=m?@ @@%@:@P@X@Z@`@ h@ r@|@@@@@@@@A$A ;AHAdAxAAAAAA AAA AA0)f2/3\/bdb(Hnj1N"9;XDil=cajp@+5  ,#yel1IH&[M]Tb_)PN Oz.+VlOr<Vb}P 8AXpK'z{`9ME/xLphK:!N2J g+6SA^wG@'$ZP*yS4-7C`d"aq7'3%cwd[\ `  T  s G9K7 w?$;=Ou:~R5E}@F(BCyJW>vlk~01?d&q <>F?ARLM|ZTvQB^${*tX 0c|#4DIm6a_R[|E5Z4z,meI\ x*gs3%hUwf ;t;v4`5nf^Mnv=#!orW_Wu=?"AGt&]>y)9<YD_JL*U%$u) sWBC}ENF8IKQapxrV:TQFi.RYg<.'|sokie Y6#>f8"678 @ (UkD~(-jm^mCJ~2B-3,xLqqHu\}oc{hjk [Z/ ]Ugzn,V-%.t 0:1SP+&e]{OXQoGHr !Y2!Shi (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-06-23 07:17+0000 Last-Translator: Dennis V 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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) Language: eo (1 el %d) malvalidigita malŝaltita ŝaltita Ĝi enhavas %d karton. Ĝi enhavas %d kartojn."Segoe UI"%% Ĝusta%(a)0.1f %(b)s/tago%(a)0.1fkB alŝutita, %(b)0.1fkB elŝutita%(a)0.1fs (%(b)s)%(a)d el %(b)d noto estas ĝisdatigita%(a)d el %(b)d notoj estas ĝisdatigitaj%(n)d: %(name)s%(tot)s %(unit)s%.01f kartoj/minuto%d karto%d kartoj%d karto estas forigita.%d kartoj estas forigitaj.%d karto estas elportita.%d kartoj estas elportitaj.%d karto estas enportita.%d kartoj estas enportitaj.%d karto estis lernata en%d kartoj estis lernataj en%d kartaro estas ĝisdatigita.%d kartaroj estas ĝisdatigitaj.%d grupo%d grupoj%d ŝanĝita aŭdovidaĵo estas alŝutata%d ŝanĝitaj aŭdovidaĵoj estas alŝutataj%d aŭdividaĵa dosiero estas elŝutita%d aŭdividaĵaj dosieroj estas elŝutitaj%d noto%d notoj%d noto estas aldonita%d notoj estas aldonitaj%d noto estas forigita.%d notoj estas forigitaj.%d noto estas elportita%d notoj estas elportitaj%d noto estas enportita.%d notoj estas enportitaj.%d noto restas senŝanĝa%d notoj restas senŝanĝaj%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...&Foliumi kaj instali...&Kartoj&Kontroli datumbazon&Studegi...&Redakti&Elporti...&Dosiero&Trovi&Ek&Gvidlibro&Gvidlibro...&HelpoE&nporti&Informo...&Inversigi elekton&Sekva karto&Notoj&Malfermi dosierujon de aldonaĵoj...&Preferoj...&Antaŭa karto&Replani...&Subteni AnkiŜanĝi &profilon&Iloj&Malfari'%(row)s' havis %(num1)d kampojn, anstataŭ la atendita %(num2)d(%s ĝusta)(Noto estas forigita)(fino)(filtrita)(lernado)(nova)(limigo de patraj kartaroj: %d)(bonvole elektu unu karton)....anki-dosieroj devenas de malnovegaj versioj de Anki. Vi povas enporti ilin per Anki 2.0, kiu estas havebla sur la retpaĝo de Anki..anki2-dosieroj ne estas senpere enportebla - bonvolu enporti anstataŭe la .apkg aŭ .zip-dosieron, kiun vi ricevis./0 t1 101 monato1 jaro10 atm10 ptm3 atm4 atm4 ptmEraro 504: Gateway timeout. Bonvolu provi malaktivigi la senvirusigilon portempe.:%d karton%d kartojnMalfermi 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ŭ samtempigata.Elportoformato:Trovi:Tipara grando:Tiparo:En:Inkluzive:Grandeco de linio:Anstataŭigi per:SamtempigoSamtempigo
Nuntempe ne ebligita; klaki la Samtempigo-butonon en la ĉefa fenestro por ebligi ĝin.

Konto necesas

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

Anki ĝisdatigita

Anki %s estas eldonita.

h1>Eraro

Eraro okazis. Bonvolu relanĉi Anki kaj premu la supran registrumon (Shift), por ke Anki malvalidigu la instalitajn aldonaĵojn portempe.

Se la problemo nur okazas, kiam aldonaĵoj estas validigitaj, bonvolu ruli Iloj>Aldonaĵoj por malvalidigi aldonaĵojn kaj relanĉi Anki ĝis kiam vi eltrovos la aldonaĵon, kiu kaŭzas la problemon.

Kiam vi eltrovis la problemkaŭzan aldonaĵon, bonvolu raporti ĝin al la aldonaĵo-sekcio de nia subteno-retpaĝo.

Sencimiga informo:

Eraro

Eraro okazis. Bonvolu uzi la menueron Iloj> Kontroli datumbazon por kontroli, ĉu ĝi solvas la problemon.

Se problemo daŭras, bonvolu raporti ĝin sur nia subteno-retpaĝo. Bonvolu kopii la jenajn informojn en vian raporton.

Dankegon al ĉiuj kiuj donis sugestojn, cimraportojn kaj donacojn.La facileco de karto estas la longeco de la sekva intertempo, kiam vi respondas "Bona" je ripeto.Filtrita kartaro ne povas havi subkartarojnProblemo okazis dum la samtempigo de aŭdovidaĵoj. Por korekti la eraron, bonvolu uzi la menueron Iloj>Kontroli aŭdvidaĵojn. Poste reprovu ĝin.Nuligita: %sPri AnkiAldoniAldoni (fulmoklavo: Ctrl+Enter)Aldoni kartotipon...Aldoni kamponAldoni aŭdovidaĵonAldoni novan kartaron (Ctrl+N)Aldoni nototiponAldoni notojn...Aldoni malan direktonAldoni etikedojnAldoni etikedojn...Aldoni al:La aldonaĵo ne havas agordojn.La aldonaĵo ne estas elŝutita de AnkiWeb.AldonaĵojAldonaĵoj, kiuj eble misfunkciis: {} Aldoni: %sAldonitaAldonita hodiaŭAldono de duoblaĵo kun la unua kampo: %sDenoveHodiaŭaj Denove markitajDenove-nombro: %sĈiuj portage kaŝitaj kartojĈiuj kartotipojĈiuj kartarojĈiuj kampojĈiuj kartoj en hazarda ordo (ne replani)Ĉiuj kartoj, notoj, kaj aŭdovidaĵoj al ĉi tiu profilo estos forigitaj. Ĉu vi certas?Ĉiuj ripetokartoj en hazarda ordoPermesi HTML en kampojĈiam inkluzivi la demandoflankon dum la reludo de sonoAldonaĵo, kion vi instalis, ne povis esti ŝarĝita. Se problemoj persistas, bonvolu malvalidigi aŭ forigi la aldonaĵon per la menuero Iloj>Aldonaĵoj. Dum la ŝarĝado de '%(name)s': %(traceback)s Eraro okazis dum la atingo de la datumbazo. Eblaj kaŭzoj: - Senvirusigilo, fajroŝirmilo, sekurkopia aŭ samtempiga programaro malhelpas Anki. Provu malkapabligi tiajn programarojn kaj kontroli, ĉu ĝi forigas la problemon. - Via disko estas plena. - La dokumento-/Anki-dosierujo estas sur reta disko. - Dosieroj en la dokumento-/Anki-dosierujo ne estas skribebla. - Via diskaparato estas mankohava. Estas bona ideo ruli Iloj>Kontroli datumbazon por certigi, ke via kolekto ne estas difektohava. Okazis eraro dum malfermo de %sAnkioAnki 2.0 kartaroAnki-kolektopakaĵoPakaĵa Anki-kartaroAnki ne povis legi vian profilan datumojn. Fenestro-grandoj kaj viaj detaloj de la sinkonigo-ensaluto estis forgesitaj.Anki ne povis alinomi vian profilon, ĉar ĝi ne povis alinomi vian profildosierujon sur la disko. Bonvolu certigi vin, ĉu vi havas skriborajton sur Documents/Anki kaj neniu alia programo atingas vian profildosierujon. Poste reprovu ĝin.Anki ne trovis la dividon inter la demando kaj la respondo. Bonvolu permane adapti la ŝablonon por ŝanĝi demandon kaj respondon.Anki ne subtenas dosierojn en subdosierujoj de la dosiero collection.media.Ankio estas amikeca, inteligenta interspaca lernsistemo. Ĝi estas senkosta kaj la kodo estas malfermita.Anki estas licencita sub la AGPL3-licenco. Bonvolu legi la licencodosieron en la fontodisdono por pli da informojAnki ne povis malfermi vian kolektodosieron. Se problemoj daŭras post restartigo de la komputilo, bonvolu uzi la butonon Malfermi sekurkopion en la profila administrilo. Sencimiga informo: 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.AnkiWeb estas vartata. Bonvolu reprovi ĝin en kelkaj minutoj.RespondoRespondobutonojRespondojKontraŭvirusilo aŭ fajroŝirmilo malebligas, ke Anki konektu al la interreto.Ĉiu flagoĈ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?Almenaŭ unu kartotipo necesas.Almenaŭ unu paŝo necesas.Aldoni bildojn/sonojn/videojn (F3)Aŭtomata samtempigo kaj sekurkopioj estas malvalidigitaj dum la restaŭrado. Por revalidigi ilin, fermi la profilon aŭ relanĉi Anki.Aŭtomate ludi sononAŭtomate samtempigi je fermo aŭ malfermo de profiloMeznombroMezuma tempoMezuma respondotempoMezuma facilecoMeznombro por lerntagojMezuma intertempoReenDorso-antaŭmontroDorso-ŝablonoKreado de sekurkopioj...SekurkopiojBazaBaza (en ambaŭ direktoj)Baza (en unu aŭ ambaŭ direktoj)Baza (entajpi la respondon)Blua flagoGrasa teksto (Ctrl+B)FoliumiFoliumi (%(cur)d karto estas montrata; %(sel)s)Foliumi (%(cur)d kartoj estas montrataj; %(sel)s)Foliumi aldonaĵojnFoliumila aspektoFoliumila aspekto...Foliumilo-opciojKunmetikaŝita por tagoportage kaŝitaj parencaj kartojKaŝi por tagoKaŝi karton por tagokaŝi noton por tagoKaŝi rilatajn novajn kartojn ĝis la venonta tagoKaŝi rilatajn ripetojn ĝis la venonta tagoLaŭnorme Anki detektos la signojn inter kampoj, kiel ekzemple tabulatoron, komon, ktp. Se Anki malĝuste detektas signon, vi povas enmeti ĝin ĉi tie. Uzu \t por reprezenti tabulatoron.NuligiKarto%d-a karto1-a karto2-a kartoKarto-identigilo&KartlistoKartostatoKartotipoKartotipo:KartotipojKartotipoj al %sKarto estas kaŝita por tago.Karto estas daŭre kaŝitaLa karto estis sangosuĉanto.KartojOni ne povas permane alilokigi kartojn en filtritan kartaron.Kartoj en plata tekstoKartoj estos aŭtomate remetitaj al siaj originalaj kartaroj post vi ripetos ilin.Kartoj...CentreŜanĝiŜanĝi %s al:Ŝanĝi kartaronŜanĝi kartaron...Ŝanĝi nototiponŜanĝi nototipon (Ctrl+N)Ŝanĝi noto&tipon...Ŝanĝi koloron (F8)Ŝanĝi kartaron laŭ nototipoŜanĝitaLa jenaj ŝanĝoj efikos sur %(cnt)d noto, kiu uzas tiun kartotipon.La jenaj ŝanĝoj efikos sur %(cnt)d notoj, kiuj uzas tiun kartotipon.Ŝanĝoj efikos post relanĉo de Anki.Ŝanĝoj efikos post relanĉo de Anki.Kontroli &aŭdovidaĵojnSerĉi ĝisdatigojnKontroli la dosierojn en la aŭdovidaĵo-dosierujoKontrolado de aŭdovidaĵoj...Kontrolado...ElektiElekti kartaronElekti nototiponElekti etikedojnForigi neuzatajnForigi neuzatajn etikedojnKloni: %sFermiĈu fermi kaj perdi nunan enmetitaĵon?Fermado...TrutekstoTruteksta malpleno (Ctrl+Shift+C)Kodo:Kolekto estas elportita.Kolekto estas difektita. Bonvolu vidi la gvidlibron.DupunktoKomoAgordoAgordoAgordi interfacan lingvon kaj opciojnGratulon! Vi finis ĉi tiun kartaron por hodiaŭ.Konektado...Tempolimo de konekto. Aŭ okazas problemo ĉe via interreta konekto aŭ vi havas tre grandan dosieron en via aŭdovidaĵa dosierujo.DaŭrigiKopiita en la tondujonKopiiKopii sencimigo-informonKopii al la tondujoĜustaj respondoj ĉe maljunaj kartoj: %(a)d/%(b)d (%(c).1f%%)Ĝusta: %(pct)0.2f%%
(%(good)d el %(tot)d)Difekta aldonaĵo-dosieroKonekto al AnkiWeb ne estas ebla. Bonvolu kontroli vian retkonekton kaj reprovu ĝin.La registro de sono ne estas ebla. Ĉu vi instalis 'lame'?Ne povis konservi dosieron: %sStudegoKrei kartaronKrei filtritan kartaron...Krei skaleblan bildon per dvisvgmKreitaCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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+ZAkumulaAkumula %sAkumulaj respondojAkumulaj kartojAktuala kartaroAktuala nototipo:Propra lernadoKrei lernadan seanconPropraj paŝoj (en minutoj)Akomodi la kartoŝablonon (Crtl+L)Akomodi kampojnEltondiLa datumbazo estas rekunmetita kaj optimumigita.DatoTagoj de lernadoMalrajtigiSencimiga konzoloKartaroSuperskribi kartaron...La kartaro estos enportita, kiam profilo estas malfermita.Kartarojmalkreskaj intertempojDefaŭltaIntertempoj ĝis ripetoj denove montriĝas.ForigiForigi kartojnForigi kartaronForigi malplenajnForigi notonForigi notojnForigi etikedojnForigi neuzatajn dosierojnĈu forigi la kampon el %s?Ĉu vi volas forigi %(num)d elektitan aldonaĵon?Ĉu vi volas forigi %(num)d elektitajn aldonaĵojn?Ĉu forigi la kartotipon '%(a)s' kaj ĝiajn %(b)s?Ĉu forigi ĉi tiun nototipon kaj ĉiujn ĝiajn kartojn?Ĉu forigi ĉi tiun neuzatan nototipon?Ĉu forigi neuzatajn aŭdovidaĵ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.%d noto kun malĝusta nombro de kampoj estas forigita.%d notoj kun malĝusta nombro de kampoj 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ŝutis %(fname)sElŝutado el AnkiWeb...LimdatoNur lernendaj kartojLernenda morgaŭ&ForlasiFacilecoFacilaFacileca premioIntertempo de facila respondoRedaktiRedakti "%s"Redakti aktualanRedakti HTMLRedaktitaRedakta tiparoMalplenigiMalplenaj kartoj...Nombro de malplenaj kartoj: %(c)s Kampoj: %(f)s Malplenaj kartoj estas trovita. Bonvolu ruli Iloj>Malplenaj kartoj.Malplena unua kampo: %sAktivigi duan filtrilonFinoEntajpu kartaron por enmeti %s novajn kartojn, aŭ lasu ĝin malplena:Entajpu novan kartopozicion (1...%s):Entajpu aldonotajn etikedojn:Entajpu forigotajn etikedojn:Eraro dum la elŝutado de %(id)s: %(error)sEraro dum lanĉo: %sSekura konekto ne estas starigebla. Tio ordinare estas kaŭzita de senvirusigilo, fajroŝirmilo, VPN programaro aŭ problemoj kun via retkonekta provizanto.Eraro dum la plenumo de %s.Eraro dum instalado de %(base)s: %(error)sEraro dum la rulo de %s.Eksperimenta V2 planiloElportiElporti...%d aŭdovidaĵo estas elportita%d aŭdovidaĵoj estas elportitajKromaĵojFF1Kampo %d de dosiero estas:Akordigo de kampojKamponomo:Kampo:KampojKampoj por %sKampoj estas apartigataj per: %sKampoj...Fil&triloLa versio de la dosiero estas nekonata. Tamen estas provata realigi la enporton.FiltriloFiltrilo 2Filtrilo...Filtrilo:Filtrita%d-a filtrita kartaroTrovi &duoblaĵojn...Trovi duoblaĵojnSerĉi kaj &anstataŭigi...Serĉi kaj anstataŭigiFini&Unua kartoUnua ripetoLa unua kampo estas egala al: %sNevalidaj ecoj de %d karto estas korektita.Nevalidaj ecoj de %d kartoj estas korektitaj.La kartaro-superskribo-cimo de AnkiDroid estas korektita.Korekto de la nototipo: %sFlagoFlagi kartonRenversiLa 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 enportas tiun pakaĵon en la LaTex-ĉapon.PrognozoFormularoMi trovis %(a)s-n en %(b)s.AntaŭoFronto-antaŭmontroFronto-ŝablonoĜeneralaKreita dosiero: %sKreita je %sHavigi aldonaĵojn...Elŝuti kartaronBonaGradiga intertempoVerda flagoHTML-redaktiloMalfacilaIntertempo de malfacila respondoAparatara plirapidigo (pli rapida, eble kaŭzos vidigilajn problemojn)Ĉu vi instalis latex kaj dvipng/dvisvgm?ĈapoHelpoPlej alta facilecoAntaŭaĵoHejmoHora disigoHorojHoroj kun malpli ol 30 ripetoj ne videblas.IdentaBonvolu kontakti nin, se vi kontribuis, sed via nomo ne troviĝas en ĉi tiu listo.Se vi lernus ĉiutageIgnori respondotempon pli longa olIgnori uskleconIgnori kamponIgnori liniojn, en kiuj la unua kampo kongruas kun ekzistanta notoIgnori ĉ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ŭdovidaĵo-dosierujo, sed ne uzita de iu karto:Por senerare interŝanĝi vian kolekton inter aparatoj, la horloĝo de via komputilo devas esti ĝuste agordita. La horloĝo povas esti malĝusta, eĉ se ĝi montras la ĝustan tempon. Bonvolu kontroli la jenajn tempoagordojn: - atm/ptm - tago, monato kaj jaro - horzono - somera aŭ vintra tempo Diferenco disde la ĝusta tempo: %s.Inkluzivi HTML kaj aŭdovidaĵajn referencojnInkluzivi aŭdovidaĵ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ĵonInstali aldonaĵo(j)nInstali el dosiero...%(name)s estas instalitaInterfaca lingvo:IntertempoIntertempo-modifiloIntertempojNevalida aldonaĵa manifestoNevalida kodo, aŭ aldonaĵo ne estas havebla por via versio de Anki.Nevalida kodo.Nevalida agordo: Nevalida agordo: supra objekto devas esti bildigoNevalida dosiera nomo, bonvolu alinomi: %sMalvalida dosiero. Bonvolu rekreu ĝin el savkopio.Malvalidaj ecoj estas trovitaj sur karto. Bonvolu uzi la menueron Iloj>Kontroli datumbazon. Se la problemo daŭras aŭ reaperas, turni vin al la subteno-retpaĝo.Nevalida regulesprimo.Nevalida serĉo - bonvolu kontroli, ĉu vi skribis ĉion ĝuste.Ĝi estis daŭre kaŝita.Kursiva teksto (Ctrl+I)Salti al etikedoj per Ctrl+Shift+TKonserviLaTeXLaTeX-formuloLaTeX matematika ĉirkaŭaĵoMisrespondoj&Lasta kartoPlej lasta ripetoplej laste aldonitaj unuafojeLerniAntaŭ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Ŝarĝado...La loka kolekto havas neniujn kartojn. Ĉu vi volas elŝuti kartojn de AnkiWeb?Plej longa intertempoPlej malalta facilecoAdministriAdministri nototipojnAdministri nototipojn...Administri...Permane portage kaŝitaj kartojMapi al %sMapi al etikedojMarki notonMathJax blokoMathJax ĥemioEnlinia MathJax-ElementoMaljunaMaksimuma intertempoMaksimumaj ripetoj/tagoAŭdovidaĵoMinimuma intertempoMinutojMiksi novajn kartojn kaj ripetojnMnemosyne 2.0 kartaro (*.db)Pliplej multaj misrespondojAlilokigi kartojnAlilokigi kartojn en kartaron:Plursignaj disigiloj ne estas subtenataj. Bonvolu enigi nur unu signon.&NotoLa nomo jam ekzistas.Nomo de la kartaro:Nomo:RetoNovaNovaj kartojNovaj kartoj en la kartaro super la hodiaŭa limigo: %sNur novaj kartojNovaj kartoj/tagoNomo de la nova kartaro:Nova intertempoNova nomo:Nova nototipo:Nomo de nova opciogrupo:Nova pozicio (1...%d):Sekva tago komencas jeNeniu flagoNeniuj kartoj estas jam lernendaj.Hodiaŭ vi lernis neniujn kartojn.Neniuj kartoj kongruis kun la kriterioj, kiujn vi enigis.Neniu malplena karto.Hodiaŭ vi lernis neniujn maljunajn kartojn.Neniu neuzata aŭ mankanta dosiero estis trovita.Neniu ĝisdatigo estas havebla.NotoNoto-identigiloNototipoNototipojNoto kaj ĝia %d karto estas forigita.Noto kaj ĝia %d kartoj estas forigitaj.Noto estas kaŝita por tago.La noto estas daŭre kaŝitaNoto: aŭdovidaĵ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, kiuj estas aldonitaj de la dosiero: %dNotoj, kiuj estas trovitaj en la dosiero: %dNotoj en plata tekstoNotoj bezonas almenaŭ unu kampon.Notoj estas preterpasitaj, ĉar ili jam troviĝas en via kolekto: %dEtikedoj estas aldonitajNotoj, kiuj ne estas enportebla, ĉar la nototipo ŝanĝiĝis: %dNotoj estas ĝisdatigitaj, ĉar dosiero havas pli novan version: %dNenioBoneplej frue viditaj unuafojeĈe la venonta samtempigo, devigi ŝanĝojn en unu direktoUnu aŭ pli da notoj ne estas enportitaj, ĉar ili ne kreis kartojn. Tio 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.Nur unu kliento povas atingi AnkiWeb samtempe. Se antaŭa samtempigo malsukcesis, bonvolu reprovi ĝin en kelkaj minutoj.MalfermiMalfermi sekurkopion...Optimumigado...Malnepra filtrilo:OpciojOpcioj por %sOpciogrupo:Opcioj...Oranĝkolora flagoOrdoordo de aldonoordo de endecoAnstataŭigu la dorsoflankan ŝablonon:Anstataŭigu la tiparon:Anstataŭigu la frontflankan ŝablonon:Pakita Anki-aldonaĵoPakita Anki-Kartaro/Kolekto (*.apkg *.colpkg *.zip)Pasvorto:AlgluiAlglui tondujajn 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 kontroli vian retkonektonBonvolu konekti mikrofonon kaj certigu ke neniuj aliaj programoj uzas la sonilon.Bonvolu redakti ĉi tiun noton kaj aldoni trutekston. (%s)Bonvolu kontroli, ĉu profilo estas malferma kaj Anki ne estas okupata. Poste reprovu ĝin.Bonvolu doni nomon al via filtrilo:Bonvolu instali PyAudioBonvolu forigi la dosierujon %s kaj reprovi ĝin.Bonvolu raporti ĉi tion al la respektiva(j) aldonaĵo-kreinto(j)Bonvolu relanĉi Anki pro finfari la lingvoŝanĝon.Bonvolu ruli Iloj > Malplenaj kartojBonvolu elekti kartaron.Bonvolu unue elekti unuopan aldonaĵon.Bonvolu elekti kartojn el nur unu nototipo.Bonvolu elekti ion.Bonvolu ĝisdatigi al la plej lasta versio de Anki.Bonvolu uzi la menueron Dosiero>Enporti por enporti ĉi tiun dosieron.Bonvolu viziti AnkiWeb, ĝisdatigi vian kartaron kaj reprovi ĝin poste.PozicioPreferojAntaŭmontroAntaŭmontri elektitan karton (%s)Antaŭmontri novajn kartojnAntaŭmontri novajn kartojn, kiuj estas aldonitaj en la lasta%d prilaborita aŭdovidaĵo%d prilaboritaj aŭdovidaĵojLaborado...La profilo estas difektohava.ProfilojRajtigo de prokurilo necesas.DemandoFino de la vico: %dKomenco de la vico: %dForlasihazardeHazardigi ordonPritaksoRekunmetiRegistri sian sononRegistri sonon (F5)Registrado...
Tempo: %0.1fRuĝa flagoRelativa malfruoRelerniMemori lastan enigon kiam aldonanteĈu vi volas forigi %s el viaj konservitaj serĉoj?Forigi kartotiponForigi aktualan filtrilon...Forigi etikedojn...Forigi aranĝon (Ctrl+R)Forigo de ĉi tiu kartotipo forigus unu aŭ pli notojn. Bonvolu krei antaŭe novan kartotipon.AlinomiAlinomi kartotipon...Alinomi kartaronRipeti malsukcese lernitajn kartojn postĈu vi volas anstataŭigi vian kolekton per antaŭa sekurkopio?Reludi sononReludi sian voĉonRepoziciiRepozicii kartotipon...Repozicii novajn kartojnRe&poziciiNepri unu aŭ pli el ĉi tiuj etikedoj:ReplaniReplaniReplani kartojn laŭ miaj respondoj donitaj en ĉi tiu kartaroImplicitaj agordoj estas rekreitajDaŭrigi nunDekstre-maldekstren tekstodirekto (RTL)Reiri al la stato de sekurkopioReirita al stato antaŭ '%s'.ripetoNombro de ripetojTempo de ripetoRipeti antaŭeRipeti antaŭe alRipeti kartojn, kiujn vi forgesis en la lasta(j)Ripeti forgesitajn kartojnSukceso-proporcio al horoj de la tagoRipetojLernendaj ripetoj en la kartaro super la hodiaŭa limigo: %sDekstraKonserviKonservi la aktualan filtrilon...Konservi kiel PDFKonservita.Kartaro: %sSerĉiSerĉi en:Serĉi ene de aranĝo (malrapida)Elekti&Elekti ĉiujnElekti ¬ojnElektu etikedojn por ekskluzivi:La elektita dosiero ne havis la datumaranĝon UTF-8. Bonvolu atenti la ĉapitron "Import" en la manlibro.Selektiva lernadoPunktokomoLa servilo ne estas trovita. Aŭ via konekto interrompiĝis aŭ senvirusigila/fajroŝirmila programaro malhelpas Anki starigi konekton al la interreto.Ĉu agordi ĉiujn kartarojn sub %s al ĉi tiu opciogrupo?Agordi al ĉiuj subkartarojDifini la koloron de la malfono (F7)La supra registrumo estis premita. Preterpaso de aŭtomata samtempigo kaj ŝarĝo de aldonaĵoj.Ŝovi pozicion de ekzistantaj kartojFulmoklavo: %sFulmoklavo: sago maldekstrenFulmoklavo: sago dekstren aŭ enenklavoFulmoklavo: %sMontri %sMontri la respondonMontri ambaŭ flankojnMontri duoblaĵojnMontri tempomezurilon por respondojMontri la kartotekston blanka sur nigra fono (nokta reĝimo)Montri lernkartojn kun pli grandaj paŝoj antaŭ ripetokarojnMontri 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 ripetadoFlankostrioGrando:PreterpasitaKelkaj rilataj aŭ portage kaŝitaj kartoj estis flankenmetitaj. Ili reaperos en posta seanco.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.Sonoj aŭ videoj de kartoj nur funkcios, kiam mpv aŭ mplayer estas instalita.SpacetoKomenca pozicio:Komenca facilecoStatistikojStatistikojPaŝo:Paŝoj (en minutoj)Paŝoj devas esti nombroj.Haltado...Vi hodiaŭ lernis %(a)s %(b)s (%(secs).1fs/karto)Vi hodiaŭ lernis %(a)s %(b)s.Hodiaŭ lernitajLernadoLernkartaro&Lernkartaro...Nun lerniLerni laŭ kartostato aŭ etikedoStiloStilo (kunhava inter kartoj)Suba indico (Ctrl+=)Supermemo XML elportaĵo (*.xml)Supra indico (Ctrl++)Daŭre kaŝiDaŭre kaŝi kartonDaŭre kaŝi notonDaŭre kaŝitaKaŝataSamtempigiSamtempigi ankaŭ sonojn kaj bildojnSamtempigo malsukcesis: %sSamtempigo malsukcesis; interreto estas nekonektita.Samtempigo necesigas, ke la horloĝo ĉe via komputilo estu agordita. Bonvolu agordi la horloĝon kaj provu denove.Samtempigado...TabEtikedi duoblaĵojnAldoni nur etikedonEtikedojCelkartaro (Ctrl+D)Celkampo:TekstoTeksto apartigite per taboj 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 eksperimenta planilo povus kaŭzi malĝustan planadon. Bonvolu nepre legi la dokumentaron sur la retpaĝaro unue. Daŭrigi?La unua kampo estas malplena.La unua kampo de la nototipo devas esti mapita.La jenaj aldonaĵoj malkongruas kun %(name)s kaj estis malvalidigitaj: %(found)sĈi tiu signo estas neuzebla: %sLa jenaj malakordaj aldonaĵoj estas malvalidigitaj:La fronta flanko de la karto estas malplena. Bonvolu ruli Iloj>Malplenaj kartoj.Tiu enigo farus malplenan demandon sur ĉiuj kartoj.La nombro de novaj kartoj, kiujn vi aldonis.Nombro de demandoj, kiujn vi respondis.La nombro de ripetoj, kiuj estas lernendaj en la estonto.Nombro de fojoj kiam vi premis specifajn butonojn.La elektita dosiero ne estas valida .apkg-dosieroLa donita serĉo ne kongruis kun iu karto. Ĉu vi ŝatus revizii ĝin?La petita modifo necesigos tutan alŝuton de la datumbazo, kiam vi venontfoje samtempigos vian kolekton. Se ŝanĝoj troviĝas sur aliaj aparatoj, kiuj ankoraŭ ne estis samtempigitaj, tiuj ŝanĝoj perdiĝos. Ĉu vi volas daŭrigi?La tempo, kiu pasis 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 da kartoj vi enkondukas, des pli ŝarĝanta via mallongdaŭra ripetado estos.Devas esti almenaŭ unu profilo.Tiu kolumno estas neordigebla, sed vi povas serĉi unuopajn kartotipojn ekzemple per 'card:1'.Tiu kolumno estas neordigebla, sed vi povas serĉi specifan kartaron per klaki sur kartaro ĉe la maldekstra flanko.Tiu dosiero verŝajne ne estas valida .apkg-dosiero. Se tiu eraro okazas ĉe dosiero, kiun vi elŝutis de AnkiWeb, la elŝutado verŝajne malsukcesis. Bonvolu reprovi ĝin kaj se la problemo daŭras, bonvolu reprovi ĝin per alia foliumilo.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 ekster la normala plano.Tiu estas {{c1::ekzempla}} truteksta malpleno.Tio kreos %d karton. Daŭrigi?Tio kreos %d kartojn. Daŭrigi?Ĉi tio forigos vian ekzistantan kolekton kaj anstataŭigos ĝin per la datumoj en la dosiero, kiun vi enportas. Ĉu vi certas?Tiu procezo nuligos ĉiujn kartojn en lernado, forigi filtritajn kartarojn kaj ŝanĝi la planiloversion. Daŭrigi?TempoTempokadra limigoPor ripetiPor foliumi aldonaĵojn, bonvolu alklaki la butonon sube.

Kiam vi trovis aldonaĵon, kiu plaĉas al vi, bonvolu enmeti ĝian kodon sube. Vi povas enmeti plurajn kodojn, disigitaj per spacetoj.Por 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 Malkaŝi.Por lerni ekster 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.Baskuli aktiveconBaskuli markondaŭre (mal)kaŝiSumoSuma tempoKartoj entuteNotoj entuteTrakti enigon kiel regulan esprimonTipoEntajpu respondon: nekonata kampo %sLa aŭdovidaĵa dosierujo de Anki estas neatingebla. La atingopermeso al la labora dosierujo eble estas malĝusta.Enporto el nurlega dosiero ne estas ebla.Ne eblas movi la ekzistantan dosieron en la rubujon - bonvolu provi restartigi vian komputilon.Ne eblas ĝisdatigi aŭ forigi aldonaĵon. Bonvolu relanĉi Anki premante la supran registrumon (shift) por portempe malvalidigi aldonaĵojn. Poste reprovu ĝin. Sencimiga informo: %sMalkaŝiSubstreki (Ctrl+U)Malfari&Malfari %snNeatendita responda kodo: %sNekonata dosierformato.NevidataĜisdatigi ekzistantan noton, kiam la unua kampo kongruas kunĈu vi volas ĝisdatigi la jenajn aldonaĵojn?ĜisdatigitaAlŝuto al AnkiWebAlŝutado al AnkiWeb...Uzita sur kartoj sed mankanta el aŭdovidaĵo-dosierujo:1-a uzantoVersio %sRetpaĝo de la aldonaĵoDosierujo de la aldonaĵoAtendado por la fino de redakto.Averto! Trutekstaj malplenoj ne funkcios, ĝis vi supre elektos la nototipon Truteksto.Kion vi volas malkaŝi?Ĉe aldono, apriori al aktuala kartaroTuta kolektoĈu vi volas elŝuti ĝin nun?Skribita de Damien Elmes, kun flikaĵoj, tradukoj, testado kaj fasono de:

%(cont)sVi elektis la nototipon truteksto, sed ne faris trutekstajn malplenojn. Daŭrigi?Vi havas multege da kartaroj. Bonvolu legi %(a)s. %(b)sVi ankoraŭ ne registris vian sonon.Oni devas havi almenaŭ unu kolonon.JunaJuna + lernataVia AnkiWeb-kolekto enhavas neniujn kartojn. Bonvolu refoje samtempigi ĝin kaj tiufoje elekti 'Alŝuto'.Viaj ŝanĝoj efikos sur multaj kartaroj. Se vi nur volas ŝanĝi la aktualan kartaron, bonvolu unue aldoni novan opciogrupon.Via kolektodosiero ŝajne estas difektohava. Tio povas okazi kiam dosiero estas kopiita aŭ movita dum Anki estas malferma aŭ kiam la kolekto troviĝas sur reta aŭ nuba disko. Se problemoj daŭras post restartigo de via komputilo, bonvolu malfermi aŭtomatan sekurkopion en la profilmenuo.Via kolekto estas en memkontraŭa stato. Bonvolu ruli Iloj>Kontroli datumbazon kaj samtempigi ĝin denove.Via koletko aŭ aŭdovidaĵo estas tro grando por samtempigo.Via kolekto estis sukcese alŝutita al AnkiWeb. Se vi uzas aliajn aranĝaĵojn, bonvolu samtempigi ilin nun kaj elŝuti la kolekton, kiun vi ĵus alŝutis de ĉi tiu komputilo. Estontaj ripetoj kaj aldonitaj kartoj estos aŭtomate kunfanditaj.La memoro de via komputilo eble estas plena. Bonvolu forigi kelkajn nebezonatajn dosierojn kaj reprovi ĝin.La kartaroj ĉi tie kaj sur AnkiWeb diferencas tiel, ke ili estas nekunfandebla. Tial necesas superskribi la kartarojn sur unu flanko per la kartaroj de la alia. Se vi elektas elŝuton, Anki elŝutos la kolekton de AnkiWeb kaj vi perdos ĉiujn ŝanĝojn sur ĉi tiu komputilo, kiun vi faris ekde la lasta samtempigo. Se vi elektas alŝuton, Anki alŝutos vian kolekton al AnkiWeb kaj vi perdos ĉiujn ŝanĝojn sur AnkiWeb aŭ aliaj aranĝaĵoj ekde ties lasta samtempigo. Post kiam ĉiuj aranĝaĵoj estas samtempigitaj, estontaj ripetoj kaj aldonitaj kartoj povos esti aŭtomate kunfanditaj.Via fajroŝirmilo aŭ senvirusigilo malhelpas Anki krei konekton al si mem. Bonvolu aldoni escepton por Anki.[neniu kartaro]sekurkopiojnkartojkartoj de la kartarokartoj elektitaj laŭkolektottagojkartaroEkde kreoduoblaĵohelpokaŝihorojhoroj post noktomezoen %s tagoen %s tagojen %s horoen %s horojen %s minutoen %s minutojen %s monatoen %s monatojen %s sekundoen %s sekundojen %s jaroen %s jarojmisrespondojmalpli ol 0,1 kartoj/minutomapita al %smapita al Etikedojminutojminutojmoripetojsekundojstatistikojĉi tiun retpaĝonstuta kolekto~anki-2.1.15+dfsg/locale/es/000077500000000000000000000000001353113723000153055ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/es/LC_MESSAGES/000077500000000000000000000000001353113723000170725ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/es/LC_MESSAGES/anki.mo000066400000000000000000002470051353113723000203610ustar00rootroot00000000000000l;`O aO lOxOO"O OO OOOO8PTNT]TlT}TTT0T TTT T TU UU3Ur7UjUVVVV'V.V3V8VOzPzz]z F{8R{{{{{{{ {{{| | |"| '| 1| >|H| O|\|b|)q|0||||4|!0}R}e}#{}}}:~+N~z~~~ ~.~~~~~  &- 4B Zd+l   % 0=NU"ǀۀ  Á́с )9 HSX l w 8,ς "3.9 hFr҃ 4 @S Z1fȄׄ*! ֆ "0"S v͇  $.?G 5$)22҉1PU[jz <Ċ ', 55@v  ˋ !07H\bs{ ˌNߌ. 4APV^ b&l  ̍֍'/!E+g#!ǎ <! ^k]{aُ;Um!8 ܐ=,(U]`,r#gk *2A P [g m yÓ5ؓ < Y do,#&ߔV8]Eܕ*6>0uÖ$ٖ,+-D+r8ח #!0E vŘ ֘ 2NWlt#̙iy /  + @"Nq y1 țӛ " ) 6 BO_~-Ü(˜ &0 7Bb i uV  ,ўG 4Uf"  ßӟ)4Tq*̠''-@56v !?ڡMhn ~  ͢,٢ !/ 5 @ NXs{ʣߣ   !B!Udw ܤ +(0Y sX+"4&Wz~0VD+0ǧ>F7'~*(Ѩ1,,IY'#_˫e+8CQ(Frgx u/.M^S bn} !ȲͲg'SL{ȳ^e}.ô*,Bo v U$1V"gZS09$j" bķ{'^5TW]U}  ǾҾԾپ ޾ +B]vʿ޿  $&79 /:I X&d  &A3CTj---1 +=i:|C# '0'X'')  0<M^s  &?[ cpy  !'7G V d7n !%})*,/4:AFKOSW7:"R!u{+KZw t@-ni` Gg0t) 7 ! <Jf %* ;)H r ~ '  $48E_~/M*x3L tvQ&kxhRWZ?Y  Ut!*(,S#"o6 3FNl$ +EYN >G X=f5 $4EVo:_ q}  ) GR30&Wp2  !7 NY)` < ,/<0l <F^"eE6)iF4& $/'Fnu|    $ 1 > K X e r    !5,W( /!QWo4~   7mO320$$U?zIYA^k j M 6B]v } 3VJ[45"j#$, AX^`"c C4< EP Yct  a 4o   &!7?Tc}  R$9 ^io1 O%;'a E A'i570-%Io/2'* 7Mbz  ,W s  G 4 G g ' JE   $      % 5 D _ "h D         # Q/         * >J]n !,;_S<BXm # !$&F<m&2#A F Q ^Tlu$#+O&dE??$dil?1MSo~ !#!6X;x )  .(/W,-p;Si"679n<0'*7R30C  O Y f*t;A ;Iaj     =H X&c*   $   ? 8!J! c!o!!!*! ! !?!-?"m"!}""!""""##*/#Z#4u##5#### $ $ '$3$ :$&E$ l$x$$#$i$+% =%J%@%&%0&dV&,&&)&'%' M' W'b't''!'='J'/F(,v(,(&(G(:?) z)))T);)***9*Fd*W*+ +"+ 4+ B+P+V+i+ +0++++ +,,/,,\,&c,,",, ,,, -- "-0.-!_-;--F. W.c.x. ....2..* /!4/cV/5/+/-0J00:0Z81+1:1Z1SU2/2+2/33537i3I3374(5!666o6 )7;38o8@.9$o9C9x9Q::: ; ;;5Y<_<<<==== == >)>=>(B>k>9>b-?? @@@ @#@@ @BA0JA {AAA:A A AA B&+BQRBB>BBCW+CZC0CD%+DQDZDooDDJ_E~F[)GG{HIxK LL2L;LML hLsLuL{L L LLLLLLLLM'MDM[McMMMMMMMM M MMMN0)f2/3\/bdb(Hnj1N"9;XDil=cajp@+5  ,#yel1IH&[M]Tb_)PN Oz.+VlOr<Vb}P 8AXpK'z{`9ME/xLphK:!N2J g+6SA^wG@'$ZP*yS4-7C`d"aq7'3%cwd[\ `  T  s G9K7 w?$;=Ou:~R5E}@F(BCyJW>vlk~01?d&q <>F?ARLM|ZTvQB^${*tX 0c|#4DIm6a_R[|E5Z4z,meI\ x*gs3%hUwf ;t;v4`5nf^Mnv=#!orW_Wu=?"AGt&]>y)9<YD_JL*U%$u) sWBC}ENF8IKQapxrV:TQFi.RYg<.'|sokie Y6#>f8"678 @ (UkD~(-jm^mCJ~2B-3,xLqqHu\}oc{hjk [Z/ ]Ugzn,V-%.t 0:1SP+&e]{OXQoGHr !Y2!Shi (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-08-13 09:11+0000 Last-Translator: Noemí Jiménez 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: 2019-08-14 04:34+0000 X-Generator: Launchpad (build 19022) X-Poedit-Country: SPAIN Language: es X-Poedit-Language: Spanish (1 de %d) (desactivado) (desactivado) (activado) Tiene %d tarjeta. Tiene %d tarjetas."Segoe UI"%% Correctos%(a)0.1f %(b)s/día%(a)0.1fkB subidos, %(b)0.1fkB bajados%(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%s d%s h%s m%s meses%s s%s años&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)…Archivos de .anki son de una versión muy vieja de Anki. Puedes importarlos con Anki 2.0, disponible en el sitio web de Anki.Los archivos .anki2 no se pueden importar directamente - por favor importe los archivos .apkg o .zip que ha recibido en su lugar./0d1 101 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 Notas...Añadir reversoAñadir etiquetasAñadir etiquetas...Añadir a:La extensión no tiene configuraciónEl complemento no se descargó de AnkiWeb.ComplementosComplementos posiblemente implicados: {} 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 (sin replanificar)Todas las tarjetas, notas y archivos multimedia de este perfil se eliminarán. ¿Estás seguro?Todas las tarjetas en repaso en orden aleatorioPermitir 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 pudo consultar los datos de su perfil. Se han olvidado los tamaños de las ventanas y la información de acceso de la sincronización.Anki 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 tarjeta mostrada; %(sel)s)Navegar (%(cur)d tarjetas mostradas; %(sel)s)Navegar extensionesApariencia 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 %(cnt)d 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 reinicieLos cambios se aplicarán cuando reinicies Anki.Comprobar &multimedia...Comprobar actualizacionesComprobar los archivos en el directorio multimediaComprobando media...Comprobando…SeleccionarElegir mazoElegir tipo de notaElige las etiquetasElimina 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.SiguienteCopiado al portapapelesCopiarCopiar información de depuraciónCopiar al PortapapelesRespuestas correctas en las tarjetas maduras: %(a)d/%(b)d (%(c).1f%%)Aciertos: %(pct)0.2f%%
(%(good)d de %(tot)d)El archivo del complemento está dañado.No se ha podido conectar con AnkiWeb. Por favor, comprueba tu conexión a internet y vuelve a intentarlo.No se pudo grabar el audio. Tienes instalado "lame"?No se ha podido guardar el archivo: %sEstudiar intensivamenteCrear mazoCrear mazo filtrado...Crea imágenes reescalables con svisvgmCreadaCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 personalizadaPasos personalizados (en minutos)Personalizar plantillas de tarjetas (Ctrl+L)Personalizar camposCortarBase 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 archivos sin uso¿Eliminar campo de %s?¿Quiere eliminar %(num)d complemento seleccionado?¿Quiere eliminar los %(num)d complementos seleccionados?¿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 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 instalar %(base)s: %(error)sError al ejecutar %sPlanificador experimental V2ExportarExportar...%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 tarjetaInvertirLa 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ícilInterval difícilAceleración por hardware (rápido, pero puede causar problemas de visualización)Ha instalado latex y dvipng/dvisvgm?EncabezadoAyudaFacilidad más altaHistoriaInicioDistribución horariaHorasLas horas con menos de 30 repasos no se muestran.IdénticoSi 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 referencias a HTML y archivos multimediaIncluir 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 complementoInstalar complemento(s)Instalar desde archivo…Se instaló %(name)sIdioma de la interfaz:IntervaloModificador de intervaloIntervalosEl manifiesto del complemento no es válido.El código no es válido o el complemento no está disponible para su versión de Anki.Código inválido.Configuración no válida: Configuración inválida: El objeto del nivel superior debe ser un mapaNombre 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 largoFacilidad más bajaAdministrarAdministra los Tipos de NotaAdministrar tipos de nota...Gestionar…Tarjetas enterradas manualmenteAsignar a %sAsignar a etiquetasMarcar notaBloque de MathJacxQuímica MathJaxMathJacx 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 ha sido estudiada hoy.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 añadidas desde el archivo: %dNotas encontradas en el archivo: %dNotas en texto planoLas notas requieren al menos un campo.Se han omitido las notas porque ya se encuentran en tu colección: %dNotas etiquetadas.Notas que no pudieron importarse debido a un cambio de tipo: %dNotas actualizadas; existía una nueva versión del archivo: %dNadaOKMostrar 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...Filtro opcionalOpcionesOpciones para %sGrupo de opciones:Opciones…Bandera NaranjaOrdenOrden añadidoOrden de programadasReemplazar plantilla del reverso:Reemplazar fuente:Reemplazar plantilla del anverso:Complemento empaquetado de AnkiMazo 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, compruebe su conexión a Internet.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 elimina la carpeta %s y vuelve a intentarlo.Informe de esto a los autores del respectivo complemento.Por favor, reinicia Anki para completar el cambio de idioma.Por favor, ejecuta Herramientas>Tarjetas vacíasSelecciona un mazo.Primero seleccione solo un complemento.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...El perfil está dañadoPerfilesAutenticación proxy requerida.PreguntaÚ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 mazoRepetir tarjetas fallidas tras¿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 mazoSe restauró la configuración predeterminadaContinuar 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:Buscar 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 las tarjetas en aprendizaje con pasos mayores antes de los repasosMostrar 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:SaltadoAlgunas tarjetas relacionadas o enterradas fueron aplazadas a una sesión posterior.Algunos ajustes tendrán efecto después de reiniciar Anki.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...Estudiadas %(a)s %(b)s hoy (%(secs).1fs/tarjeta)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).El planificador experimental pudo causar una planificación errónea. Por favor, asegurate de haber leído la documentación antes. Deseas proceder?El primer campo está vacío.El primer campo del tipo de nota debe ser asignado a algo.Los complementos siguientes son incompatibles con %(name)s y se han desactivado: %(found)sNo se puede usar el siguiente carácter: %sSe desactivaron los complementos incompatibles siguientes:El 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.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?Esto reseteará cualquier tarjeta en aprendizaje, vaciará los mazos filtrados, y cambiará la versión del planificador. Deseas proceder?TiempoLímite de sesión de estudioA repasarPara explorar los complementos, pulse en el botón siguiente.

Cuando encuentre un complemento que le interese, pegue su código debajo. Puede pegar varios códigos; sepárelos mediante espacios.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 se puede acceder a la carpeta multimedia de Anki. Los permisos de tu sistema sobre directorios temporales pueden estar incorrectos.No 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.No se puede actualizar ni eliminar el complemento. Inicie Anki mientras mantiene presionada la tecla Mayús para desactivar temporalmente los complementos y, a continuación, intente de nuevo la operación. Información de depuración: %sDesenterrarSubrayar texto (Ctrl+U)DeshacerDeshacer %sCódigo de respuesta inesperada: %sFormato de archivo desconocido.No vistasActualizar las tarjetas existentes cuando el primer campo coincida¿Quiere actualizar los complementos siguientes?ActualizadoSubir 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+AprendiendoTu colección de AnkiWeb no contiene ninguna carta. Por favor, sincroniza otra vez y escoja la opción "Subir".Tus 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.Es posible que el almacenamiento del equipo esté lleno. Elimine archivos que no necesite e intente de nuevo la operación.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 horasen %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.15+dfsg/locale/et/000077500000000000000000000000001353113723000153065ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/et/LC_MESSAGES/000077500000000000000000000000001353113723000170735ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/et/LC_MESSAGES/anki.mo000066400000000000000000000254721353113723000203640ustar00rootroot00000000000000  " "$:$_" #6 KYjnrvz ~  0  Q^d{,( 3@ R _j| X  " &0FOW ]i o y R#2(Kt |   &( +9AHOV ]j q}   -: ?KPFU ") . 8DKPX` e o {    6?v 8 ! "#FLQe{  L*V*,* :6q *=AEIM Q[krx~   8 U c k           / - $!7! P!]! r!!!!! !T!:"J"Z" _"j"""" """ """"m #x##$##8## $$*$>$ T$_$v$N%T%c%j%p%!%%(%)% % &&&!&(& /&<&D&X&`&h&o&u&{&!&& && &&''"'1'C' G'U'['H_'''''' (#( ;( F(Q(W(k(((( (( ( ( (((( () ) ))!+)(M))v)9)))) *F* Z*$d** *&*** **+ +&+40'iq#fEb<z`QANh1Zgx9 @Y6~v:sd kH>)TP/$CK(8"73;MBw?nu\D F] S,2-Vm} jI!y^%WeRU|_={J*paLr+G.[tXl& 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+FDeleteDelete 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: 2019-07-02 11:47+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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) 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+FKustutaKustuta 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.15+dfsg/locale/eu/000077500000000000000000000000001353113723000153075ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/eu/LC_MESSAGES/000077500000000000000000000000001353113723000170745ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/eu/LC_MESSAGES/anki.mo000066400000000000000000001761211353113723000203630ustar00rootroot00000000000000'1B B BBB"BB BBB8C:CKC^C"oC$C$C&C"D&D49D2nDDD"D$D$E$HCHGHKHTOHH,H(HH!I=IfUII II I I JJ+J@JeWJJ7gK KK5KXKYKL%LkL 7M CMNMRMmM ~M MM M MM MMM'M$N,N4N :N$FNkN qN}N N NKNNO"P Q QQ/QRRRvR7_S SwSET@aTTTTRTUU#U#UU V9V(RV{V VV VVVV V V V WWW1WPWcWjW}WWW W W)W'WWXXXXXX X X X Y YY +Y8YHYZY3`YYSYYZ Z Z !Z-Z>ZXZlZ"ZZZZ&ZZ [[ [$[ 5[ A[K[Q[ o[z[[-[[[[ [([5[ 4\B\\\8\5 ]PC]]] ]]]]]]] ] ^ ^^ ^)^0^7^>^E^L^S^ Z^ g^ t^ ^ ^ ^ ^ ^ ^ ^^ ^ ^^_ _-_ @_M_b_f__ _ _ __/___`% `0` 7` D` P` ]` i` v``,`(`` aF!aNhaPa>bPGbb]b b8 cDcKcac}cc cccc c cc c c cc cdd)d0?dpdd4d!ddd e#eeee e.e ffff 1f ?fKfRf Yfgf fff ffffffffg g !g.gNFg"ggggggghhhh hhhh i i&i+i ?iKiPiWi \iiiqivii.iFijj x0ixxx,xx-y+Ay8myy yyyy#y0z EzSz\z{zz zzzzzzzzz {"{*{J{^{iy{{ { {| || 4|"B|e| m|1x| || || | } } }0}O}-f}}}}}} }}}} } } ~V!~x~ ~~,BGW "  ".>N`}*؀'+@16r !?ց , :EK^ u  ӂۂ *? G T ak| !d׃ <GKZch }( ӄX+h"&ޅ0+)>UF'ۆ*(.1W,I'#e(8CN(Fruz u/ M=2 8 C O![}'ȏϏ .?Q,i UҐ$(M"^S0Ց$"+N T{`^ܒ5;qUz Жږ  % /9>CI]ry×˗Η֗ޗ  ™ Й ܙ %C7{'+ۚ+!3+U@Cԛ#(#L'p)œ'& @M]mŝԝ %-CZ c q} žܞ"1C Vdm8v  ͟ ן  %)+ .9@EJNRrVɠ-ˠ/")%Lro'F Zhxe¢(7 #/?ASnդ3Dx !;Q`r̦ * : F R\)k  ЧIާ(%>$d]4w6 AMO׭H' pz T{"'"(2?r!!Ұ!3 I U$a)ı̱  7.<fejpy  ó ϳ۳,93mR ִ  8L'_*  3 EQWv1˶Զٶ /(GV=51^g!Ƹ  '.5 < G R]dmt{ Ź ҹ ߹   ' 0<O_q'޺ 5 P] p,{ ӻ߻/$-T% ?ɼB PL0[ν *e5 E  0!;]p w ȿ ׿ 3BI;%)C1Z B!##&J eqy   *?R Ygz^.'@!O q~ >IOov !5> Tb9iG34JC` J+2DwC#& $(M^r:" - C O\oQ' / <IXmu  ' :[c 0I Xew!7!8<X Q(l<m&/Vgot:+w;A Ubj{  ('Pp y".,cAji416f'/*2:]? !2BO% $ /:T#g @ ANay4 C(l:{ (8a7{   );aX/c^'7!H,j ,-1*_'57 I)As,:8 AK _lu"    $9 Mn  $3 ~>  #9<@)}$#^ O p"0&C'>k$'(6>>u'f\<t:TFh_ g t~GWHDL\k,{3 #. K;V; 'lD+ a/h%%jy> #1!), 3? NXajo   & 3@ BO(T,n>IzygZ(Sc>VU}xc] PXl 0|Qh\jlNF/V9kpW;1jN2OKJ'C],t~Pgwvf b##ems`0m*Io]W}  FLDa"!yu;wFq<N {G3eL^edt%2G$8[p8Y sOmJ~qv:_D.z91D4xgH"S&4Y+CiX)[4{:5k  /5-$2 0@ JP }&6 6o=<bR7">|-j? f=ZSh,|Ek' `tAiuXTx\Hf7LQ)s !O^En3I_Wr E3w(~7G6poH)a*V+8*-h^./@A+ $yaYKzUMRMM#[ ;:={RTZru\%B v`_d!1dn5'l?C?bK@q.BcQ9U & rA <i%B (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).../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: %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 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 save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+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+WCumulativeCumulative %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 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 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 intervalLowest 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...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 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.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 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 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 matchesUpload 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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-03-05 03:30+0000 Last-Translator: Damien Elmes 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: 2019-07-04 05:44+0000 X-Generator: Launchpad (build 19007) 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.../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: %sErantsitaGaur erantsitagehitu bikoiztua lehengo eremuarekin : %sBerriroGaur berriroBerriro zenbaketa: %sBilduma guztiakEremu guztiakProfil 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 fitxategia gorde: %sgogor ikasisorta sortuiragazitako sorta sortuSortutaKtrl+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+WMetatutaMetatuta %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 etiketakzutabea 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 etiketakAbiarazteko 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.IragarpenaForma%(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 handienaerraztasuna 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...OptimizatzenAukerak%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 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 diraEremuaren 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 banaketaLehengo 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-kopuruaEmandako 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 eguneratuKargatu 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.15+dfsg/locale/fa/000077500000000000000000000000001353113723000152645ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/fa/LC_MESSAGES/000077500000000000000000000000001353113723000170515ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/fa/LC_MESSAGES/anki.mo000066400000000000000000002013061353113723000203320ustar00rootroot00000000000000|+:::: ::-:8?:x:::":$:$:&;"A;d;w;;$; ;;<< </<@<U<l<< <<<<<<<< <<< <<<<= == ="= 4=?=W=g=v====0= == = ==>>->1>3>6>>>E>J>O>S>W>T[>>,>(>?!'?I?fa?? ?? ? @@%@7@L@ec@@7sA AA5AXAYWB B BBB B BB C C+C4CQgQQFQNQP0R>RPRS]S xS8SSSSSS TTT!T &T 1T?T DT QT[T bToTuT)T0TTT4T!.UPUcUyUUUU UUUU U UVV V#V ;VEVLVTV]VnVVVVV V VVVVVWWWWW WWWXX &X1X6X JXVX[XbX gXtX|XXX.XFXY'Y GY4SYYY Y1YYYZZ*3Z ^ZlZ ZZ"Z"Z Z[4[C[W[`[ r[ |[)[[[[\ \\ \0\ 7\ A\O\b\h\<z\\ \\\\ \\ ]]] /] 9]E]L]]]q]w]]]]] ] ]]] ]^^^$^ (^2^ A^O^ ^^ k^u^^^^^+^_#_!<_^_ c_ m_<x_ __]_a0``!````,`a#aa bbb(b 7bBb Hb Tb^bvbb bbb b bb,c#.cVRc8cEc(d?d\d,rdd-d+d8eKe Te`ehee#e eeeee fff#f3f:fBfSfofwfifg g g!g 2g=g Rg"`gg g1g gg gh h %h 1h>hNhmh-hhh hhhh h iiV*ii ii,jKjG`j jj jj jj kk:kXkvk*k'kk6k %l!0l?Rlll l llll ll m m m(mCmKmjmm m m m mm!md n nnyn}nnn nn(nn noX2o+o"o&op0p+Lp>xpFp*p()q1RqIqq'rr#ses\t8SuuCv(`vrvvw wuwMwwwx x x x!xxx'xy&y+y3yHy.Oy~yy,yy yyUz$\zz"zSz0 {$:{"_{{ {{{^|o|Ux}   #-27=QXs ʀ̀݀ т ݂  7Uf Ƀ$ (4#J"n!Ä ڄ   #1 E O Y es x ʅ ߅  +/Aq8ц#'7=K  ȇ/Ӈ.268<ENV^els%<C2"։"ߊ .?]{'fQy ̏2ُ "':"b ِ9 Ubz;h> (x!{f~592Gl0+g,(/".QXp#/›1Db1{SAJC Ԟ+A%Zg=6Ҡ۠ *A"l6ơڡ:2L#^0ˢڢE )6H< 4GУ 1 <NI9Ҥ+d)  $ 1 > KXn Ŧݦ0"JmCt çTo#m!1E^n.˩VSQ;E?'Lg<L >KU X!c2%ʭ (@ R_w9خp s?#,c/)߰$ .@ U`'c DZ.ܱ  &2D b+%β )&<c l8yĴ(˴ "-L0hյ ܵ ! @LK:$G_ tȷ8=vY%V#"z a 94n:Jº: JH'ϻ)-H^]#>5G"M+pͽ@"&1^X=ҾARWg% ˿&ؿ."7 Z { 5 %)+O{!4Nk|*$6R=&O;CRh>#2i@*WOwT$,Qb 4. 9KbjIy @]Lx}f(tT,X,xapx  9.)hG(09Ocl u3J^ %*P%g/N@%WT}&,AJ^p%;+? Ta ju'  ;y+x4D?8 LZn#NGFE6QP fst?D  -9g G*C13u5/9Yi( C=[6/6C<2#oL0s: MHIE&I<|rcLr) a!l A-VL<w-%4^ _ l=xd`L(D986oxo ) -: ANW gt }&*&3! U ` kx  @p {*``lBjX|D7znNvk<AM/'}9x`\xQ.RnvR8/,5iw$L:#HasuK|%I2W=Tm]0Su$oG9QCce>hU+j MFP[JJFS], !"C#?O8%>*&Av<_I=a{O?!Hl cQt_BS<W'X2 ~)~ i1 ok%"Nzo(y7.s&Hp =b1FaJ3qX*(GCWem KABlUw\PGt+h4i3+Z;T6t.>Pw|:ErZkq]r0gxpD1- "sb)4@-r dYLjUe?ZIY):h4M7 Du f d(L^d#Eq m-$;5~fV8fV2}yNY&}\z96K,5@ g^R c_yE^[[gb; '0/3{!T6VnO (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).../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, 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 save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCumulativeCumulative %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 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 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 intervalLowest 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...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 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 matchesUpload 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: 2019-07-02 11:47+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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) 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)(لطفا یک کارت انتخاب کنید).../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 ممکن نیست. لطفاً اتصال به شبکه خود را بررسی کنید و دوباره تلاش کنید.پرونده ذخیره نمی‌شود: %sیادگیری با شتابایجاد دستهایجاد دسته فیلتر شده ...ایجادشدهکنترل+آلت+FCtrl+Dکنترل+Eکنترل+Fکنترل+Nکنترل+Pکنترل+Qکنترل+شیفت+Fکنترل+شیفت+Lکنترل+شیفت+Mکنترل+شیفت+Pمرکبیکجا %sپاسخهای یکجاکارتهای انباشتهدسته ی فعلینوع یادداشت فعلی:مطالعه سفارشیجلسه مطالعه سفارشیبرشپایگاه داده بازسازی و بهینه‌سازی شد.تاریخروزهای مطالعه شدهلغو مجوزکنسول رفع اشکالدستهوقتی یک نمایه باز شده باشد، دسته وارد خواهد شد.دسته (ها)کاهش بازه های زمانیپیش‌فرضتاوقتی که مرورها دوباره نشان داده شوند به تاخیر انداخته شود.حذف کردنحذف کارتهاحذف کردن دستهحذف خالیحذف یادداشتحذف یادداشتحذف برچسب هاحذف فیلد از %s?حذف '%(a)s' نوع کارت, و آن %(b)s?این نوع یاددداشت و همه آن کارتها را حذف می کنید؟این نوع یادداشتهای بلااستفاده را حذف می کنید؟رسانه بلااستفاده را حذف می کنید؟حذف شد%d کارتهایی با یادداشت های مفقود.حذف شد %d کارتهایی با قالبهای مفقود.حذف شد %d یادداشتهایی با نوع یادداشت مفقود.حذف شد%d یادداشتهایی با هیچ کارتی.حذف شد %d یادداشتهایی با تعدای فیلد اشتباه.حذف شد.حذف کردن این دسته از لیست دسته ها همه کارتهای باقیمانده را به دسته اصلی اشان برخواهد گرداند.توضیحاتتوصیف برای نمایش در صحفه مطالعه (فقط دسته فعلی):گفتگوبارگیری از انکی وبدرحال بارگیری از انکی‌وب ...موعد مرورموعد مرور فقط کارتهاموعد مرور فرداخروجسهولتآسانامتیاز آسانیمدت آسانیویرایشوایرایش فعلیویرایش HTMLویرایش شدهویرایش فونتخالیکارتهای خالی ...تعداد کارت خالی: %(c)s فیلدها: %(f)s کارت خالی پیدا نشد. لطفا این مسیر را اجرا کنید ابزار>کارت خالی.اولین فیلد خالی: %sپایانبرای قرادادن %s کارت جدید دسته‌ای را وارد کنید، یا خالی بگذارید:موقعیت کارت جدید را وارد کنید (1...%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شکل‌بندی فایل ناشناخته می‌باشد.دیده‌نشدهوقتی اولین فیلد مطابقت داده شد یادداشت های موجود را بروز رسانی کن.بارگذاری در انکی‌وبدرحال بارگذاری در انکی‌وب ...کارتهای استفاده شده اما از پوشه رسانه مفقود گردیده :کاربر 1نسخه %sبرای ویرایش تا پایان منتظر بمانیداخطار، جای خالی تا وقتی که شما نوع را از بالا به جای خالی تغییر ندهید بطور صحیح کار نخواهد کرد.هنگام افزدون کارت جدید، دسته فعلی به عنوان پیش فرض باشدتمام مجموعهآیا میخواهید اکنون این را بارگیری نمایید؟یک نوع یادداشت با جای خالی دارید اما هیچ جای خالی ایجاد نشده است.ادامه می دهید؟تعدادی دسته دارید. لطفا ببینید %(a)s. %(b)sهنوز صدای ضبط شده تان را ندارید.حداقل باید یک ستون داشته باشید.موقتموقت+آموزشتغییرات شما بر روی چندین دسته تأثیر خواهد گذاشت. اگر می خواهید تغییرات فقط بر روی دسته فعلی تأثیر بگذارد، لطفا ابتدا یک گروه اختیارات جدید اضافه کنید.مجموعه شما در حالت متناقض می باشد. لطفا این مسیر : ابزار< بررسی پایگاه داده را اجرا کرده، سپس مجددا یکپارچه سازی کنید.اگر از هیچ دستگاه دیگری استفاده نمی کنید، لطفا الان آنها را یکپارچه سازی کنید و با انتخاب بارگیری شما مجموعه بارگذاری شده از این رایانه را خواهید داشت. بعد از انجام این عمل، در آینده مرورها و کارتهای جدید بصورت خودکار ادغام خواهند شد.دسته شما در اینجا و آنکی وب با یکدیگر فرق دارند و به همین جهت قادر به ادغام با یکدیگر نیستند. لازم است که از یک طرف دسته ها بازنویسی شوند و از طرف دیگر با همدیگر ادغام شوند. اگر بارگیری را انتخاب کنید، آنکی مجموعه را از آنکی وب بارگیری می کند و هر تغییری که شما در رایانه تان ایجاد کرده اید تا آخرین یکپارچه سازی از بین خواهد رفت. اگر بارگذاری را انتخاب کنید، آنکی مجموعه را در آنکی وب بارگذاری کرده و هر تغییری که شما در آنکی وب یا دستگاههای دیگر ایجاد کرده اید تا آخرین یکپارچه سازی بر روی این دستگاه از بین خواهد رفت.[بدون دستهپشتیبان (ها)کارتهاکارتهای دستهکارتهای منتخب به وسیلهمجموعهروزروز(ها)دستهعمر دستهراهنمامخفیساعاتساعت از نیمه شب گذشتهدوره های سپری شدهکمتر از 0.1 کارت در دقیقهبرنامه ریزی شده %sبرنامه ریزی شده برچسب هادقیقهدقایقمرورهاثانیه(ها)آماریاین صحفهه‍فتهمجموعه سالمanki-2.1.15+dfsg/locale/fi/000077500000000000000000000000001353113723000152745ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/fi/LC_MESSAGES/000077500000000000000000000000001353113723000170615ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/fi/LC_MESSAGES/anki.mo000066400000000000000000002050551353113723000203470ustar00rootroot00000000000000)d?2C C CCC"C CC CDD8,DeDuDDD"D$D$D&E">EaE4tE2EEE" F$-F$RF$wF FFFFFGG'G>GQG fGtGGGGGGG GGGGGG GGGGH HH H"H+H =HHHOHgHwHHHHHH0H HII I !I,I2IEI\Ir`IIIIIIIIIIITJWJ,YJ(JJ!JJfKoK KK K KKKKKe LpL7M RM\M5oMXMYM%XNk~N N NOO O 1O ;OEO [O iO vOO OOOOO O$OO OOPP (P 2P,=PKjP PP1PQ"S%S *S8SPSdbSSTI-URwUvU7AV yVwVEV@CWWWWRWWWX#X#XX Y$Y(=YfY nY{Y YYYY Y Y YYYZZ;Z VZ`ZsZzZZZZZZZ Z Z)Z'[;[[[\ \\\ !\ +\ 6\ @\ K\V\ h\u\\\3\\S\9]B]I] P] ^]j]y]]]]"]]0]/'^W^g^&y^^ ^^ ^^ ^ ^^ ___ ;_F_L_R_-g___ _(_5_ ``````8`5 aCaPXaaa aa#a bbb#b*b 1b rfPfg] g ig8ugggggg gh hh h "h0h 5h ?h LhVh ]hjhph)h0hhh4h!)iKi^itiij#j4j ;j.Ejtjzj|jj j jjj jj jjjk kk0k@kUkfk mk xkkNk"kl#l(l?lElLllm m$m *m8mGmOmbm rm}mm mmmm mmmmm.mFnZnsn n n4nnn n1o9oIoioxo*oo Uqcq qq"q"q qr+r:rNrWr ir sr)rr/sKsbswssssss s ssss< tGt Pt]tmtrt {tt ttt t ttttuuu u:uTu Yu eupuu uuuuu uu uu u uvv,vCvVv+lvv#v!vvv v w<w MwZw]jwaw*x!>x `xnxvxyx,xx#ykyz z#z+z:z IzTz Zz fzpzzz zzzz z {{,0{#]{V{8{E|W|*n|0|||,|*}-C}+q}8}} }}}~# ~0D~ u~~~~~ ~~~~~~~+@Hih    #"1T \1g   >-U ǁ ΁ ځVW gq,!G6 ~"Ƀ   /Lj*'҄@6A x!? - DR X c q{چ  8!Kdm ҇݇ !(&O iX+"*&Mt0+>F*'q*(Ċ1,IL'#e$8TC((rQĐɐ ܐu/\Mڑ !̒ђ'#+@.Gv,͓ ԓߓU$Ty"S0$2"Wz {^5gU ( :EGL Q [ejou՚ښ ՜ݜ , ;FHQh[z֝*%"P"s6,͞[4l 2Ÿ6.,,[P8٠* ALdwġۡ  !-AI ^kt |  ̢ ); P^ p{< ˣ  "59 ĤϤפݤyo0q-#Хk+ ʦ٦ }49o JʨfZ|,ש~0ܪ9Tn ī Ϋګ0 '1AE ¬EѬa8y:ǭi%lqΰ@TQs:]F SqncCD V!.ٶ,"5X%x? ޷ /Jix Ǹո"+3 LZnt̹ԹDB= &09 BP _ k y Ի="6YY Ƽ̼ Ӽ& 4S,g?<ݽ-!Ce| о%  ?& fs< ֿ %Idvu <)1fF +5#M q|     % 2 ?L]n  7Kf/n) 2I= $7/P67#e]yyW Sr^N '5H ao# &/>E0W?E&6]w!^w2  %: NY b lw" {-0 " *61CL_s   KMQ"* V%| I5;K<Z22,8_7 $ :H>[(W, #/SZJy   3D"Mp$" /KSds    $/Hbz#,/9% _lR,Q"8:s <3 #:M ku'| !%()NR=iI+XJ" /0#@:d@ "!8;<t*& -9LUf|,um~ 2#-7ev> "%! 9EW$f%  (#?Kc |AJ_*2%K/q (%,D3q=B&l,L+M# q~! '+4`%i (#(1Ly~ $6 KV lz3H Rr*8*F>C* 2-H4vT!("K-Z+ X(:yc Ce S]  *7J-c'3 -J?1  #^(- \-9&g&vjC@  &   ' - = L Q Y ` u &}             + 2 qm+%  ]?hV "S^a(*+ ,-.D/0GH;<uvk:<K 'zM>?HEC `|%Yc%_%&3'|pRu'e o@s4\ $Q#zll4M.*oVX8')"I4zWc69w&FINa$8gDdq"mJeUp7Js]pM7GOL t!5ieFwRniA Z; 1\b23hc56789:=n f&SyxyZ[ {r_ t,Vd-/(X~0yjKtTZ1;Q=iLvBx^UKq| f(@Bg0E*b59NCd-:As~R^PW3N`$moQ#P"kDFb<Ah1u[rE)}f+/2j)>UnWL?vgIH{Jj=B{C .},S!T!G~w>6k)(a#!Y $] `\T #rXO }lO [ @x&PY_ (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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%(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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-onsAdd: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 Collection PackageAnki Deck PackageAnki could not read your profile data. Window sizes and your sync login details have been forgotten.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.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)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)BrowseBrowser 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 will take effect when Anki is restarted.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...ClozeCode:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigurationConfigure 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.ContinueCopied to clipboardCopyCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 Unused FilesDelete 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 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.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 intervalLowest 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...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 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.ReviewsRightSaveScope: %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.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 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 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 matchesUpload 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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-08-03 08:52+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: 2019-08-04 05:48+0000 X-Generator: Launchpad (build 19014) Language: fi (1/%d) (ei käytössä) (pois päältä) (päällä) Siinä on %d kortti. Siinä on %d korttia."Segoe UI"%% 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.%(n)d: %(name)s%(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...&Selaa ja asenna...&Kortit&Tarkasta tietokantaOp&iskele...&Muokkaa&Vie...&Tiedosto&Etsi&Siirry&Käyttöohje&Käyttöohje...&Ohje&Tuo...&Tiedot...&Käänteinen valinta&Seuraava kortti&Muistiinpanot&Avaa liitännäiskansio&Asetukset...&Edellinen kortti&Ajasta uudelleen...&Tue Ankia...&Vaihda profiiliaT&yökalut&Kumoa'%(row)s':ssa oli %(num1)d kenttää, pitäisi olla %(num2)d(%s oikein)(Muistiinpano poistettu)(loppu)(suodatettu)(opiskeltavana)(uusi)(emorajoitus: %d)(valitse 1 kortti)....anki-tiedostot ovat todella vanhasta Ankin versiosta. Voit tuoda ne Anki 2.0 -versiolla, jonka voit ladata Ankin verkkosivulta./0d1 101 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ää kortin tyyppi...Lisää kenttäLisää mediatiedostoLisää uusi pakka (Ctrl + N)Lisää muistiinpanotyyppiLisää muistiinpanoja...Lisää kääntöpuoliLisää tunnisteitaLisää tunnisteita...Lisää kohteeseen:LisäosatLisää: %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 haudatut kortitKaikki korttien tyypitKaikki pakatKaikki kentätKaikki kortin satunnaisessa järjestyksessä (älä ajasta uudelleen)Kaikki tämän käyttäjätilin kortit, muistiinpanot ja mediatiedostot poistetaan. Oletko varma?Kaikki kerrattavat kortit satunnaisessa järjestyksessäSalli HTML kentissäSisällytä aina kysymyspuoli, kun äänitettä toistetaanTietokannan 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-kokoelmapakettiAnki-pakkapakkausAnki ei voinut lukea profiilisi tietoja. Ikkunoiden koot ja synkronoinnin sisäänkirjautumistiedot on unohdettu.Anki 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 ei tue tiedostoja, jotka ovat collection.media.folder-kansion alikansioissa.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.Mikä tahansa lippuKortit, 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.Liitä kuva/äänite/video (F3)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 mallineTehdään varmuuskopiota...VarmuuskopiotPerusasetuksetPerusmalli (ja käännetty kortti)Perusmalli (valinnainen käännetty kortti)Perus (kirjoita vastaus)Sininen lippuLihavointi (Ctrl+B)SelaaSelaimen ulkoasuSelaimen ulkoasu...SelainasetuksetKokoaHaudattuHaudatut sisaruksetPiilotaPiilota 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 tilaKortin tyyppiKorttityyppi:KorttityypitKorttityypit 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 pakkaaVaida pakkaa...Vaihda muistiinpanotyyppiäVaihda muistiinpanotyyppiä (Ctrl + N)Vaihda muistiinpanotyyppiä...Vaihda väriä (F8)Vaihda pakkaa muistiinpanotyypistä riippuenMuutettuMuutokset tulevat voimaan, kun Anki käynnistetään uudelleen.Muutokset tulevat voimaan, kun käynnistät Ankin uudelleen.Tarkista &media...Tarkista päivityksetTarkasta tiedostot mediakansiossaTarkistetaan mediaa...Tarkistetaan...ValitseValitse pakkaValitse muistiinpanotyyppiValitse tunnisteetTyhjennä käyttämättömätPoista käyttämättömät tunnisteetKloonaa: %sSuljeAvoinna olevan kortin tiedot katoavat. Haluatko sulkea ikkunan?Suljetaan...AukkotehtäväKoodi:Kokoelma viety.Kokoelma on vioittunut. Katso käyttöohjeista mitä tehdä.KaksoispistePilkkuAsetuksetKä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.JatkaKopioitu leikepöydälleKopioiKopioi leikepöydälleVarmojen korttien oikeat vastaukset: %(a)d/%(b)d (%(c).1f%%)Oikein: %(pct)0.2f%%
(%(good)d/%(tot)d)Korruptoitunut add-on -tiedostoEi yhteyttä AnkiWebiin. Tarkista verkkoyhteytesi ja yritä uudestaan.Ei voitu tallentaa tiedostoa: %sOpiskellutLuo pakkaLuo suodatettu pakka...Luo skaalattavia kuvia dvisvgm:lläLuomisaikaCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl + Alt + FCtrl+Alt+RCtrl+Alt+SCtrl+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+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ät tiedostotHaluatko 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 "%s"Muokkaa 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 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.Kursivointi (Ctrl+I)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äliMatalin 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...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 PyAudioPoista 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 tunneittainKertauksetOikeaTallennaKohde: %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.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.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ä.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ää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.15+dfsg/locale/fr/000077500000000000000000000000001353113723000153055ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/fr/LC_MESSAGES/000077500000000000000000000000001353113723000170725ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/fr/LC_MESSAGES/anki.mo000066400000000000000000002517721353113723000203670ustar00rootroot00000000000000l;`O aO lOxOO"O OO OOOO8PTNT]TlT}TTT0T TTT T TU UU3Ur7UjUVVVV'V.V3V8VOzPzz]z F{8R{{{{{{{ {{{| | |"| '| 1| >|H| O|\|b|)q|0||||4|!0}R}e}#{}}}:~+N~z~~~ ~.~~~~~  &- 4B Zd+l   % 0=NU"ǀۀ  Á́с )9 HSX l w 8,ς "3.9 hFr҃ 4 @S Z1fȄׄ*! ֆ "0"S v͇  $.?G 5$)22҉1PU[jz <Ċ ', 55@v  ˋ !07H\bs{ ˌNߌ. 4APV^ b&l  ̍֍'/!E+g#!ǎ <! ^k]{aُ;Um!8 ܐ=,(U]`,r#gk *2A P [g m yÓ5ؓ < Y do,#&ߔV8]Eܕ*6>0uÖ$ٖ,+-D+r8ח #!0E vŘ ֘ 2NWlt#̙iy /  + @"Nq y1 țӛ " ) 6 BO_~-Ü(˜ &0 7Bb i uV  ,ўG 4Uf"  ßӟ)4Tq*̠''-@56v !?ڡMhn ~  ͢,٢ !/ 5 @ NXs{ʣߣ   !B!Udw ܤ +(0Y sX+"4&Wz~0VD+0ǧ>F7'~*(Ѩ1,,IY'#_˫e+8CQ(Frgx u/.M^S bn} !ȲͲg'SL{ȳ^e}.ô*,Bo v U$1V"gZS09$j" bķ{'^5TW]U}  ǾҾԾپ ޾ +B]vʿ޿  $&7<9 v (  ))G;+))!)K.uXAT e99''"+Jv% #: MZ^bfko s,   9 ?LUm}" BVeu {  o  a&27)"B~Z  *;J\x8F Pz q{\[H0 "2C"Wz 5J$S x8   (DU?e_4 :>[b1).>Zn!(R`sqU~2JFCL `Kj)[-% /*A(0?Z#l %9 Y g uO&) DNUqy>0  - ?M\l LE* pz! '8`i99<v2)AW#q'  G) q} 4D ! $B/8r`<)-f)   # . 9 DO Vahov}   %9 JXl$,3LQc|4 @ R\q"\2xA'#[9EbI>g c _4k" 5 >HO"_ 6;<xL*'(P,o"j0! )?EG$Jo B)2 ; FT\n%9@X     & 7AYj  T,Dqz A [$l)709<B8<@- H %\  ' * ' * > U j #       B& i x K " 5 5  J f  &         ;EL[   TXm  -<MT g. +/&D^k T!v')Gc9r#042Q  ]3CtS]"& Ij$y>GF9$J9~  3AWr9" 4@=OE4,s58X%;a-|EH.9!h/G-0'NCv . 0% 6V       # "! *!4! E! Q!^!n!$!!!!&!,"A""_""""=#F#c#+v#<### # $"$<$,M$z$ $9$$$$%-9% g% q% |%%%-%%>& ?&GJ&& &&& & &&&# ' 1'<' P'^'y'' ((G("()p.)())!),)'* 6*B*W*o**8*V*2.+1a+8+%+@+:3,n, ~,,Q,L,.-)C-Em-K--.. 0. =.J.Q."b..7.'..//-/C/!W/y/#//// //00000/@0#p0800d1 w11 1 11 11E12#42X2jp2:223)I3s348"4\[464;4U+5B565?5Y;6G666I7!^7J889w9}c::=;9<J<53=Di==1>>!> >??C@o@ 9AGAB+B>BQB WBeB|B2BBBBA^CnCDDDD E E+E;EICE%E EEE?E 4F BFMFeF-{FF6G%SGyG0GyGk8HIH*H&I @I JIwTIIa}JKMmLGLvNzNoQQ RR!R7R RR]R_RgR nR|RRRRRRRRRS-SHSQSlSS SSS SS S SSSS0)f2/3\/bdb(Hnj1N"9;XDil=cajp@+5  ,#yel1IH&[M]Tb_)PN Oz.+VlOr<Vb}P 8AXpK'z{`9ME/xLphK:!N2J g+6SA^wG@'$ZP*yS4-7C`d"aq7'3%cwd[\ `  T  s G9K7 w?$;=Ou:~R5E}@F(BCyJW>vlk~01?d&q <>F?ARLM|ZTvQB^${*tX 0c|#4DIm6a_R[|E5Z4z,meI\ x*gs3%hUwf ;t;v4`5nf^Mnv=#!orW_Wu=?"AGt&]>y)9<YD_JL*U%$u) sWBC}ENF8IKQapxrV:TQFi.RYg<.'|sokie Y6#>f8"678 @ (UkD~(-jm^mCJ~2B-3,xLqqHu\}oc{hjk [Z/ ]Ugzn,V-%.t 0:1SP+&e]{OXQoGHr !Y2!Shi (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-05-15 13:35+0000 Last-Translator: Michel Smits 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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) 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."Segoe UI"%% 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 .anki proviennent d’une version très ancienne d’Anki. Vous pouvez les importer avec Anki 2.0, disponible sur le site web d'Anki.Les fichiers .anki2 ne sont pas directement importables. Veuillez importer le fichier .apkg ou .zip que vous avez reçu à la place./0j1 101 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 des notes...Ajouter le versoAjouter des marqueursAjouter des marqueurs...Ajouter à :Le greffon n'est pas configuréLe greffon n'a pas été téléchargé depuis AnkiWebGreffonsGreffons éventuellement inclus: {} Ajouter : %sAjoutéAjouté aujourd’huiUn doublon a été ajouté avec comme premier champ : %sÀ revoirÀ nouveau aujourd’huiOublis : %sToutes les cartes enfouiesToutes les sortes de cartesTous les paquetsTous les champsToutes les cartes dans un ordre aléatoire (ne pas replanifier)L’intégralité des cartes, notes et médias du profile seront supprimées. Êtes-vous sûr ?Toutes les cartes à revoir dans un ordre aléatoireTolérer du HTML dans les champsToujours inclure le côté question lors de la relecture audioUn 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 lire les données de votre profil. Les taille des fenêtres et les informations de connexion à la synchronisation ont été oubliées.Anki 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)Parcourir les modules complémentairesApparence du navigateurApparence du navigateur...Options de l’explorateurGénérerEnfouiEnfouir les cartes connexesEnfouirEnfouir 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.Les modifications prendront effet au redémarrage d'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 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'.ContinuerCopié dans le presse-papiersCopierCopier les informations de débogageCopier dans le presse-papiersRéponses exactes sur les cartes matures : %(a)d/%(b)d (%(c).1f%%)Connues : %(pct)0.2f%%
(%(good)d sur %(tot)d)Fichier de greffon corrompu.Impossible de se connecter à Ankiweb. Merci de vérifier votre connexion réseau et réessayez.Impossible d'enregistrer le son. Avez-vous installé 'lame'?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+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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èresPas personnalisés (en minutes)Personnaliser les modèles de carte (Ctrl+L)Personnaliser les champsCouperLa 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 fichiers inutilisésRetirer le champ de %s ?Supprimer le greffon %(num)d sélectionné ?Supprimer les greffons %(num)d sélectionné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.uppression d’%d 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 : %sActiver un second filtreFinIndiquez 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 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.Erreur d'installation %(base)s: %(error)sProblème à l’exécution de %sExpérimental, planificateur V2ExporterExporter...%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égerFiltre 2Filtrer...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 hypertexteDifficileIntervalle difficilAccélération matérielle (plus rapide, peut entraîner des problèmes d'affichage)Avez-vous installé latex et dvipng/dvisvgm?En-têteAidePlus grande facilitéHistoriqueAccueilRépartition horaireHeuresLes heures insignifiantes (révisions < 30) ne sont affichées.IdentiqueSi 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 des références HTML et médiatiquesInclure 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 greffonInstaller le(s) greffon(s)Installer à partir d'un fichier...%(name)s installéLangue de l’interfaceIntervalleModificateur d’intervalleIntervallesManifeste de greffon invalide.Code invalide ou greffon non-disponible pour votre version d'Anki.Code invalide.Configuration invalide Configuration invalide : l'objet de niveau supérieur doit être un dossierNom 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 intervallePlus petite facilitéGérerGérer les types de noteGérer le types de notes...Gérer…Cartes enfouies manuellementAssocier à %sAssocier aux marqueursMarquez la noteBloc de MathJaxMathJax chimieMathJax en ligneMatureIntervalle 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 étudiée aujourd'hui.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 ajoutées depuis fichier: %dNotes trouvées dans fichier: %dNotes en textePas de note sans remplir de champ !Notes sautées car elles sont déjà dans votre collection: %dMarqueurs ajoutés.Notes ne pouvant pas être importées car le type de note a changé: %dNotes mises à jour car le fichier avait une version plus récente: %dRienValiderLes 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...Filtre optionnel:OptionsOptions pour %sProfil de réglages :Options...Marqueur orangeOrdre d’apparitionOrdre d'ajoutOrdre des échéancesRemplacer le modèle versoRemplacer la policeRemplacer le modèle rectoGreffon Anki paquetéFichier 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 vérifier votre connexion Internet.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 enlever le dossier %s et réessayer.Veuillez le signaler à l'auteur ou aux auteurs du greffon concerné.S'il vous plat, redémarrez Anki pour finaliser le changement de langue.Merci d'utiliser le menu Outils > Cartes videsVeuillez sélectionner un paquet.Veuillez sélectionner un seul greffon d'abord.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...Profil CorrompuComptesAuthentification Proxy demandéeQuestionFin 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 paquetRépéter les cartes non connues plus tard.Remplacer 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 paquetValeurs par défaut restauréesReprendre 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 dans :Rechercher 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ètreMontrer les cartes texte blanc sur fond noir (mode nuit)Montrer les cartes en cours d'apprentissage avec de plus grand pas avant de les revoirPlacer 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 :Sauté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.Trier selon le champTrier selon ce champ dans l’explorateurLe tri sur cette colonne n’est pas permis. Choisissez-en une autre.Le son et les vidéos des cartes ne fonctionneront pas sans mpv ou mplayer.EspacePosition de départ :Facilité initialeStatistiquesStatistiquesPas :Pas (en minutes)Les pas doivent être des nombres.Arrêt en cours...Étudié(s) %(a)s %(b)s aujourd'hui (%(secs).1fs/carte)Aujourd'hui %(a)s %(b)s d'étudiée(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 statutLe planificateur expérimental peut causer une planification incorrecte. Assurez-vous d'avoir lu la documentation auparavant. Voulez-vous continuer?Le premier champ est videLe premier champ du type de note ne peut pas être vide.Les greffons suivants sont incompatibles avec %(name)s et ont été désactivés : %(found)sLe caractère suivant ne peut pas être utilisé : %sLes greffons conflictuels suivants ont été désactivés :Le 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.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 ?Ceci réinitialisera toutes les cartes et cours d'apprentissage, supprimera les paquets filtrés et changera la version du planificateur. Voulez-vous continuer?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ésactiverMarquer/démarquerSuspendre/RependreTotalDurée totaleNombre total de cartesNombre total de notesTraiter la saisie comme une expression régulièreTypeChamp inconnu %sImpossible d'accéder au dossier média d'Anki. Les permissions du dossier temporaire de votre système peuvent être incorrectes.Incapable 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.Impossible de mettre à jour ou de supprimer le greffon. Veuillez démarrer Anki en maintenant la touche majuscule enfoncée pour désactiver temporairement les greffons et réessayez. Info de débogage: %sexhumerSouligné (Ctrl+U)AnnulerAnnuler %sRéponse inattendue, code: %sFormat inconnu.Non-vueMettre à jour la note existante lorsque le premier champs est identiqueMettre à jour les greffons suivants?Mis à jourEnvoyer 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).Que voudriez-vous déterrer?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 collection AnkiWeb ne contient aucune carte. Veuillez synchroniser à nouveau et choisissez 'Upload' à la place.Votre 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é téléchargée avec succès sur AnkiWeb. Si vous utilisez d'autres appareils, veuillez les synchroniser maintenant et choisir de télécharger la collection que vous venez d'uploader depuis cet ordinateur. Après cela, les futures révisions et les cartes ajoutées seront fusionnées automatiquement.La mémoire de votre ordinateur est peut-être pleine. Veuillez supprimer certains fichiers inutiles, puis réessayez.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 minuiten %s jouren %s joursen %s heureen %s heuresen %s minuteen %s minutesen %s moisen %s moisen %s secondeen %s secondesen %s annéeen %s annéesfaux pasmoins de 0,1 cartes/minuteassocié à %sassocié à Marqueursminute(s)minutesmorévisionssecondesstatistiquescette pagesemtoute la collection~anki-2.1.15+dfsg/locale/fr_CA/000077500000000000000000000000001353113723000156505ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/fr_CA/LC_MESSAGES/000077500000000000000000000000001353113723000174355ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/fr_CA/LC_MESSAGES/anki.mo000066400000000000000000000010031353113723000207060ustar00rootroot00000000000000$,89Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2019-07-02 11:47+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: 2019-07-04 05:48+0000 X-Generator: Launchpad (build 19007) anki-2.1.15+dfsg/locale/ga/000077500000000000000000000000001353113723000152655ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ga/LC_MESSAGES/000077500000000000000000000000001353113723000170525ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ga/LC_MESSAGES/anki.mo000066400000000000000000000212521353113723000203330ustar00rootroot00000000000000    "$A$f"$$4CTi      )0@O`g mz    , 9D7[         $. 3AHPX ]ks y ! (39? ES\ amu|        # 0 = J W d q ~      -:=EMO`b .9 ?KMUhz?QQD!=HP^) !&&Cj$  ' /:CTlu      + 9=?BG NX`hov}  43 BL^o     ( 0:@ E R ] gu      / 9 C Q W ` g s       ! !!! !'!.!5! AHl?B7SZYm (1 of %d) (off) (on)%% Correct%(a)0.1f %(b)s/day%(a)0.1fs (%(b)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 group%d groups%d note%d notes%d note deleted.%d notes deleted.%d note exported.%d notes exported.%d note imported.%d notes imported.%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 year%s years%sm%smo%ss%sy&About...&Cards&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Next Card&Notes&Preferences...&Previous Card&Support Anki...&Tools&Undo(%s correct)(Note deleted)(end)(filtered)(learning)(new)(please select 1 card).../0d1 101 month1 year10AM10PM3AM4AM4PM:Export format:Find:Font Size:Font:In:Synchronisation

Anki Updated

Anki %s has been released.

About AnkiAddAdd FieldAdd MediaAdd New Deck (Ctrl+N)Add Notes...Add TagsAdd Tags...Add-onsAddedAdded TodayAgainAgain TodayAll DecksAnkiAnki 2.0 DeckAnswerAnswersAverageBackBacking Up...BackupsBasicBlue FlagBold text (Ctrl+B)BrowseBrowse Add-onsCancelCardCard %dCard 1Card 2CardsCards...CenterChangeChange DeckChange Deck...Change colour (F8)ChangedChooseClosing...Code:ColonCommaConfigurationContinueCopyCreate DeckCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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+ZCutDateDeckDecksDeleteDelete CardsDelete DeckDelete NoteDelete NotesDeleted.DescriptionDownload from AnkiWebDownloading from AnkiWeb...Due tomorrowmoreviewssecondswwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-04-01 22:04+0000 Last-Translator: Kevin Murphy 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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) (1 as %d) (as) (ar siúl)%% Ceart%(a)0.1f %(b)s/lá%(a)0.1fs (%(b)s)%.01f cártaí/nóiméad%d cárta%d cards%d cártaí%d cárta scriosta.%d cártaí scriosta.%d cártaí scriosta.%d cárta easpórtáilte.%d cártaí easpórtáilte.%d cártaí easpórtáilte.%d cárta iompórtáilte.%d cártaí iompórtáilte.%d cártaí iompórtáilte.%d grúpa%d grúpaí%d grúpaí%d nóta%d nótaí%d nótaí%d nóta scriosta..%d nótaí scriosta.%d nótaí scriosta.%d nóta exported.%d nótaí easpórtáilte.%d nótaí easpórtáilte.%d nótaí iompórtáilte.%d nótaí iompórtáilte.%d nótaí iompórtáilte.%d roghnaithe%d roghnaithe%d roghnaithe%s lá%s laethanta%s laethanta%s uair%s uaireanta%s uaireanta%s nóiméad%s nóiméid%s nóiméid%s nóiméad%s nóiméid%s nóiméid%s mí%s míonna%s míonna%s soicind%s soicindí%s soicindí%s bliain%s blianta%s blianta%sm%smí%ss%sb&Maidir Le...&Cártaí&Eagar&Easpórtáil...&Comhad&Aimsigh&Téigh&Treoir&Treoir...&Cabhair&Iompórtáil...An Chéa&d Chárta Eile&Nótaí&Sainroghanna...An Cárta &Roimhe Seo&Cabhraigh le hAnki...&Uirlisí&Cealaigh(%s ceart)(Nótaí scriosta)(críoch)(Scagtha)(ag foghlaim)(nua)(roghnaigh aon chárta amháin le do thoil).../0d1 101 mhí1 bhliain10 r.n.10 i.n.3 r.n.4 r.n.4 i.n.:Easpórtáil formáid:Aimsigh:Clómhéid:Cló:I:Sioncronú

Anki Nuashonraithe

Anki %s scaoilte.

Maidir le AnkiCuir LeisCuir Réimse LeisCuir Meáin LeisCuir Paca Nua Leis (Ctrl+N)Cuir Nótaí Leis...Cuir Clibeanna LeisCuir Clibeanna Leis...ForlíontáinCurtha leisCurtha Leis InniuArísInniu arísPaca ar fadAnkiAnki 2.0 PacaFreagraFreagraíMeánSiarAg cúltacúCúltacaíBunúsachBratach ghormTéacs trom (Ctrl+B)BrabhsáilBrabhsáil ForlíontáinCealaighCártaCárta %dCárta 1Cárta 2CártaíCártaí...LárAthraighAthraigh PacaAthraigh Paca...Athraigh dath (F8)AthraitheRoghnaighAg dúnadh...Cód:IdirstadCamógCumraíochtLean ar aghaidhCóipeáilCruthaigh PacaCruthaitheCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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+ZGearrDátaPacaPacaíScriosScrios CártaíScrios PacaScrios NótaScrios NótaíScriostaTuairiscÍoslódáil ón AnkiWebAg íoslódáil ón AnkiWebDlite amárachmoléirmheasannasoicindwan cnuasach ar fad~anki-2.1.15+dfsg/locale/gl/000077500000000000000000000000001353113723000153005ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/gl/LC_MESSAGES/000077500000000000000000000000001353113723000170655ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/gl/LC_MESSAGES/anki.mo000066400000000000000000001701141353113723000203500ustar00rootroot00000000000000-0= 1=<=C="I=l= n=x==8====" >$.>$S>&x>">>4>2 ?=?N?"k?$?$?$? ?@3@K@S@b@s@@@@ @@@@@@@@ @ AA A#A)A/A3A :ADA JAUA gArAAAAAAA0A BB B %B0B6BIB`BdBfBiBqBxB}BBBBTBB,B(C;C!ZC|CfCC DD 0D =DHDXDjDDeDD7E EE5EX1FYF%Fk G vG GGG G GG G GGGH H H$H@H FHRH bH lHKwHHH"JJ JJKKRjLvL74M lMwxMEM@6NwN~NNRNNkO#O#OOO(P/P 7PDP XPeP~PP P PPPPPPPQ Q&Q +Q 5Q)?Q'iQQMRTRYRaRhRoR wR R RR RRRR3RSS%SySSS S SSSS"S TT&$T KTWT ^TjT {T TTTTT-TTT(T5$U ZUhUUU8U53VPiVVV VVV W WWW"W)W0W 7W DW QW ^W kWxW W WWW WW WWWX"X 'X 4X @XNX/SXXXX%XX X X X X Y YY,4Y(aYYYFYNZPSZ>ZPZ4[]=[ [8[[[[\\ ,\9\?\D\ I\ T\b\ g\ t\~\ \\\)\0\]]4]!Q]s]]]]7^K^\^ c^m^s^u^x^ ^ ^^^ ^^ ^^^^__)_9_N___ f_ q_~_N_"_``!`8`>`E```aa #a1a@aHa[a kava{a aaaa aaaaa.aF bSblb b b4bbb b1c2cBcbcqc*cc Ne\e {ee"e"e ef$f3fGfPf bf lf)zff(gDg[gzggggg g gggg<g+h 4hAhQhVh _hjh {hhh h hhhhhhhii8i =i IiTihi ni{iiii ii ii i iiij'j:j+Pj|j#j!jjj j j<j 1k>k]Nkakl!"l DlRlZl]l,oll#dmkmm mnnn -n8n >n JnTnln{n nnnn n nn,o#AoVeo8oEo;p*Rp}pp,pp-p+$q8Pqq qqqq#q qrr-r6r GrUrZrarqrxrrrrrrirTs [s gsts ss s"ss s1s t&t Ctdt kt xt tttt-tu u uu$uDu Ku WueuV}uu uu,qvvGv vw -w:w BwNw^wpwwww*w'x;x@Ax6x x!x?x&y,y ,}Fk}'}*}(~1.~,`~I~~'#ۀee8\C%(ir u'/M̈́!… ȅ Ӆ ߅! '0X_dl.Ɇ,  U?$"ˇS0B$s" {͈^I5މU =GOUi { ʍэ#&.6 <FHY[ $ 3"?b dnA֐--@-n1-ΑXFh#'' '4(\) ē &=Mdv  ĔΔ֔ڔ  $'L]o 6ޕ  *AEGJPV[`dhrlߖ2=#R!v3Sb{ ƘޘxB# fqCdɚq.0ћk |ܜ# 5 @LU)d ͝aݝ?XWv{ hIA8z~R:[ J$)ڥ #7D |  Ʀ)=F$d ̧֧;52h_h p { Ω (?1q^  $;[+u/+ AL&Sz~. ¬.Ǭ, #1 ȭ@ϭ5ZF&ȮϮޮ   '. 5 C Q _ m{  ïЯ(!JO `m,հ--<N^p75Ա$ ,/?\AW޲?6gv ޳i SH_ɴ   '29Pfm }5ǵFD_Nc/(* !6X"ܷ!! * 6@B!Eg} ¸̸Ըܸ 5JSdtg1,IQfu} % 2#=ai ̻л  #*@/F8v!(ѼH!jA67P2g t'.1'0*X  > K " ?IO_ y$H ;F[q z    0DV!^.AUi x28'S.{ Y/?VbK&a;0~    . O]$c (/#c<=[:2J&})"43K  )6 $2#;_h|   $pA /)? i uA!&#6FX+n1 & 1=O#b^ A(`+S ",*)J tD7 V8s &?!(; N\bu  1 %: PZl {$9t  2 @(U~W6.-,\:)OU^ *)/*8ZA*#l x:t>i0qKP o|@U?K Q]o(~':  %!1SA[6 "K4*J$!F'd{&O   $ ?JLR X fpv~   '48JFi[*lS_I) JFEG_K8+ZhJU3mT>.DEH#A?e<c-m)$ f;^:Pd]bO+N> Wa9MBv ~w7#h'grbbl7Z<2 4Ro$ =/; 6T:5OfhnM!:YH0L .K{iwB^$,z|?Q 3^pPE%= A{QUm|I/? kxeV'1SIZ5 xLYQ 0~4scN}`FVoR`gDc\!xj@KrX%9DuTn+@iwy }pul a.v/a(d)q*\t,48-sPg&-[Y&Xz]MB(pkN"RoqOG=G> k|yvV2s5Ut%(1nS~2Jr*z@X"C3&07LCC1!'{[}]#e6,;WAHW`jfy9<"\djqu_6 t8  (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).../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, 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 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+WCumulativeCumulative %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 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 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 intervalLowest 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...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 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.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 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 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 matchesUpload 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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-03-05 03:30+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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) (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).../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 camposVan 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 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+WAcumulado%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 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 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 largoMais 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 %d 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...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 PyAudioPor 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.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)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.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 campoEnviar 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.15+dfsg/locale/gu/000077500000000000000000000000001353113723000153115ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/gu/LC_MESSAGES/000077500000000000000000000000001353113723000170765ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/gu/LC_MESSAGES/anki.mo000066400000000000000000000107651353113723000203660ustar00rootroot00000000000000SqL+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: 2019-07-02 11:47+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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) Language: gu %%d પસંદ થયેલ%s નકલ%s દિવસ%s દિવસો%s કલાક%s કલાકોસંપાદન (&E)ફાઇલ (&F)શોધો (&F)જાઓ (&G)મદદ (&H)પ્રાથમિકતાઓ (&P)...સાધનો (&T)પાછું લાવો (&U)(નવુ)/:ઉમેરવુંટેગ્સ ઉમેરોફરીસરેરાશપાછાબ્રાઉઝરદ કરોપત્તાં...કેન્દ્રબદલોબદલાયેલચકાસી રહ્યા છીએ...બંધ કરોમહાવિરામઅલ્પવિરામજોડાઈ રહ્યા છીએ...કૉપિ કરોબનાવાયેલકાપોતારીખપત્તાની થપ્પીઓડિલીટ કરોવર્ણનસંવાદ&બહાર નીકળોસહેલુંફેરફાર કરોખાલીઅંત કરો%s ચલાવવામાં ભૂલ.%s ચલાવવામાં ક્ષતિનિકાસનિકાસ કરો...વધારાનુંF1ફિલ્ટર:નકલી શોધોશોધો અને બદલોફુટરઅંદાજસ્વરૂપઆગળસામાન્યસરસHTML સંપાદકઅઘરુંહેડરમદદઇતિહાસહોમકલાકઆયાતફાઈલ આયાત કરોડાબુંમિનીટોટકાવારીજગ્યારેન્ડમઉપરછલ્લી સમજજમણુંલેખનકુલકુલ સમયજોયેલ નથીકલાકોમિનિટોanki-2.1.15+dfsg/locale/he/000077500000000000000000000000001353113723000152725ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/he/LC_MESSAGES/000077500000000000000000000000001353113723000170575ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/he/LC_MESSAGES/anki.mo000066400000000000000000001312571353113723000203470ustar00rootroot00000000000000* * *(*/*"5*X* Z*d*w**8***++"&+$I+$n+&+"++4+2%,X,i,",$,$,$, -9-N-f-n-}----- --.. . .. ..6.=.M.V. \.g.m.s.w. ~.. ... ...... //-/4/0:/ k/x// / /////r/jJ0000000000T041,61(c11!11f1L2 b2o2 2 2222e2=373H4)h6 757X7%+8kQ8 8 8888 9 99 .9 <9 I9U9 ^9j9r9'99999 99 9 :: *: 4:,?:Kl: :::;"== ===d=D>R&?vy??7@ @w@EVA@AAAARANB#B#B C:C(SC|C CC CC CCCCCD3DJ:DDD D D'DDEEEEEE E E E E EE FFF3%FYFSmFFFF F FFGG,G@G"SGvG0H/1HaHqH&HH HH HH H HIII ;I-FItIzI I(I5I IIJJ8J5JJPK1bKKK KK#KKLLLL L 'L 2L =L HLSLZLcLjLqLxLLLL L L L L L L L L L MMM $M /M=MPM aMnM M!MMMMM M M NNN/'NWN]N%eNN N N N N N NNNHO,PO(}OOOFON PPoP>PP]Q fQ8rQQQQQQQR RR R &R 3R=RDRJR0YR!RRR#RRS S#S&S BSPSWShS|SSS S SNST T(T -T9T>TETFJTTTTT*TT U!U"AUdUsUUUU UUUU U U UV VV+V:V BVLV [ViVxV!VV!VVV V V<V :WGWWWqW WWWW WWW,W8X OX[XvX XXXiX0Y DYPY jY1uYYYYYYY Z ZZ 0Z)\'\%]8^FN^M^^ ^ ^ _! _._,6_ c_"n_{_^ `l`r```` ``````b b b bCbc c)c,?clcW~cccc'd?=d?}d?dCd9Ae{eIe=e!f/;f1kf1f1f=g3?gsgggggggh2hLh]hshwh{hhhhhhh h h h iii %i1i @i Ji Widiyi i$iiiij&j ;jEj;Mj jjj jjjj"jkkk-l/l2l BlPlVl\lblhlnllIl2=m pm'mmsmEncnrnnnnnnnro5Xpptsudu^tuIuv vvv,v#!wEwUw%gwwwwww w x"+x Nx/[x x xxxx(x xy.yM>yny6y2zRz,{.}$~)~=~V~q~clF ςۂ[jXƃ * BeO9m..օ"J( s~Æ ن /A1)sq09SJe Љ+C\%vڊX$Duiߋ   2G^~.ڌKKNd4 َ͎ )4 ^,i 3֏ +>) hv$-R66bܑ;?"{!=ے/6=D K V a l w Ó Г ݓ    + 8EL S ^l ܔ?=Z9c  Ǖ Օ7 1>;Rі)/]D@G4+(`_cMMa T/ HT]b ~ ǛΛ[7I. -*0[oxǝݝ %  ƞԞ ۞K;YbvV9!C5Gy$Ӡ 6?Zx'ҡ 7"X{*#آC@ IUeeyߣ$ $2Wp y 2ҤA_. 83ԥ !3U*64k`?' =&H o|*Ҩ;$ ?E26?/CU/jªܪ  "BA8^6\S=7?&]fĮS\l: ׯJ ,,8e6ϱ) "-'FnG !}2O~!5\mV*`7mB7|xIKdw[8   MX wF#pYn=}%&j%bIv\ioZt=E4{OdRDqeJ' uW_(@9+ zVH` L&EQl-.ikMUs]1hH@$3cql3bA[ 'f;Ngr8h>aJe(XY1LDF?A:Sc*x|Z2uRTKg0T]Pno "<C;U>? ^/sB<:Wpf9"G{SQ~Nr,v5ak)4^_jt6Pz+)y,0-6 .#$/Cy (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%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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./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: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 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAgainAgain TodayAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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 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 card type is required.Attach pictures/audio/video (F3)Automatically play audioAutomatically sync on profile open/closeAverageAverage TimeAverage answer timeAverage easeAverage intervalBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browse Add-onsBuryBury CardBury NoteBury 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.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 typeChanges 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear UnusedClear Unused TagsCloseClose and lose current input?Closing...Collection is corrupt. Please see the manual.ColonCommaConfigurationConfigure 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)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 StudyCustomize Card Templates (Ctrl+L)Customize FieldsCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck Override...Deck will be imported when a profile is opened.DecksDefaultDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete Unused FilesDelete 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.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...E&xitEaseEasyEasy intervalEditEdit "%s"Edit CurrentEdit HTMLEditedEmptyEmpty Cards...Empty cards found. Please run Tools>Empty Cards.Enter new card position (1...%s):Enter tags to add:Enter tags to delete:Error downloading %(id)s: %(error)sError during startup: %sExportExport...F1Field %d of file is:Field mappingFieldsFiltered Deck %dFind &Duplicates...Find DuplicatesFind and Re&place...Find and ReplaceFirst CardFirst ReviewFixed %d card with invalid properties.Fixed %d cards with invalid properties.FooterGeneralGoodHTML 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 byInstall Add-onInvalid regular expression.It has been suspended.KeepLaTeXLast CardLeftManage Note TypesManage Note Types...Map to %sMap to TagsMark NoteMoreMove CardsMove cards to deck:Name for deck:NetworkNew CardsNew cards onlyNew cards/dayNew deck name:New note type:No cards have been studied today.No empty cards.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.Notes added from file: %dNotes found in file: %dNotes tagged.NothingOpenOptionsPassword:Please run Tools>Empty CardsPlease select a deck.Please select cards from only one note type.Please visit AnkiWeb, upgrade your deck, then try again.PreferencesPreview Selected Card (%s)Preview new cardsProcessing...Recording...
Time: %0.1fRemove Card Type...Removing this card type would cause one or more notes to be deleted. Please create a new card type first.Rename Card Type...Rename DeckRepeat failed cards afterRescheduleReschedule cards based on my answers in this deckReverse text direction (RTL)Revert to backupReviewReview forgotten cardsReviewsRightSelect &AllSelect &NotesSet for all subdecksShow AnswerShow cards as white on black (night mode)Show learning cards with larger steps before reviewsShow new cards before reviewsShow new cards in order addedShow new cards in random orderSome settings will take effect after you restart Anki.Studied TodayStudy DeckStudy Deck...Styling (shared between cards)Supermemo XML export (*.xml)SuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedTagsThat deck already exists.The default deck can't be deleted.The division of cards in your deck(s).The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following conflicting add-ons were disabled:The front of this card is empty. Please run Tools>Empty Cards.The number of new cards you have added.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?This file exists. Are you sure you want to overwrite it?This will create %d card. Proceed?This will create %d cards. Proceed?To study outside of the normal schedule, click the Custom Study button below.TodayTotal TimeTotal cardsTotal notesTreat input as regular expressionUndo %sUsed on cards but missing from media folder:Version %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.Your collection is in an inconsistent state. Please run Tools>Check Database, then sync again.cardscards from the deckcards selected bydaysdeckdeck lifeless than 0.1 cards/minutemapped to %smapped to TagsminsProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-08-10 21:51+0000 Last-Translator: Eido Askayo 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: 2019-08-11 05:44+0000 X-Generator: Launchpad (build 19021) Language: he (1 מתוך %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 הערות עודכנו%(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 נבחרועותק של %s%s יום%s ימים%s שעה%s שעות%s דקה%s דקות%s דקה.%s דקות.%s חודש%s חודשים%s שניה%s שניות%s למחיקה:%s שנה%s שנים%sd%sh%sm%ss%sy&אודות...&עיין והתקן...&כרטיסיות&בדוק בסיס נתונים&חרוש...&ערוךיי&צא...&קובץ&מצא&עבור אל&מדריך&מדריך...ע&זרה&ייבא...&מידע...ה&פוך בחירהכרטיסייה ה&באהה&ערותפתח תיקיית &תוספים...ה&עדפות...כרטיסייה &קודמתקבע &מועד חדש...&תמוך ב-Anki...‏ה&חלף משתמש&כלים&בטל'%(row)s' ישנם %(num1)d שדות, מצופים %(num2)d(%s נכון)(הערה נמחקה)(סוף)(מסונן)(בלימוד)(חדש)(מגבלת על: %d)(אנא בחר 1 כרטיסייה)...קבצי .anki מגרסה מאוד ישנה של Anki. אתה יכול לייבא אותם עם Anki 2.0, אשר זמין באתר של Anki.לא ניתן לייבא ישירות קבצי .anki2 - במקום זאת, אנא ייבא את קובץ .apkg או .zip שקיבלת./0dחודש אחדשנה אחת10:0022:0003:0004:0016:00התקבלה שגיאת 504 gateway timeout error. אנא נסה לנטרל באופן זמני את האנטי-וירוס שלך.:%d כרטיסייה%d כרטיסיותפתח תקיית גיבויבקר באתר%(pct)d%% (%(x)s מתוך %(y)s)%Y-%m-%d @ %H:%Mגיבויים
Anki יגבה את האוסף שלך כל פעם שהוא נסגר או מסונכרן.‏תבנית ייצוא:מצא:גודל גופן:גופן:בתוך:גודל קו:החלף עם:סנכרוןסנכרון
לא מופעל כרגע; לחץ על כפתור "סנכרן" בחלון הראשי כדי להפעיל.‏

נדרש חשבון

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

Anki התעדכן

Anki %s שוחרר.

שגיאה

שגיאה התרחשה. אנא התחל את Anki בזמן שאתה לוחץ על כפתור "Shift", אשר ישבית זמנית את התוספים שהתקנת.

אם השגיאה מתרחשת רק כאשר התוספים מופעלים, אנא השתמש מתוך התפריט ב-כלים>תוספים כדי להשבית חלק מהתוספים והתחל את Anki מחדש, חזור על זאת עד אשר תגלה את התוסף שגורם לבעיה.

כאשר תגלה את התוסף שגורם לבעיה, אנא דווח על הבעיה ב-אזור התוספים של אתר התמיכה שלנו.

מידע debug:

שגיאה

שגיאה התרחשה. אנא השתמש ב- כלים > בדוק בסיס נתונים כדי לבדוק אם זה מתקן את הבעיה.

אם בעיות ממשיכות, אנא דווח על הבעיה ב-אתר התמיכה. אנא העתק והדבק את המידע למטה לתוך הדווח שלך.

<להתעלם>רשום כאן על מנת לחפש; לחץ "Enter" על מנת להציג חפיסה נוכחית>תודה גדולה לכל מי שסיפק הצעות, תיקוני באגים ותרומות.לחפיסה מסוננת לא יכולות להיות תת-חפיסות.שגיאה אירעה בזמן סינכרון מדיה. אנא השתמש ב- כלים>בדוק מדיה, ולאחר מכן סנכרן שוב כדי לתקן את השגיאה.בוטל: %sאודות Ankiהוסףהוסף (קיצור מקשים: ctrl+enter)הוסף סוג כרטיסייה...הוסף שדההוסף מדיההוסף חפיסה חדשה (Ctrl+N)הוסף סוג הערההוסף הערות...הוסף הופכיהוסף תגיותהוספת תגיות...הוסף ל:לתוסף אין הגדרות.תוסף לא הורד מ-AnkiWeb.תוספיםתוספים שייתכן ומעורבים: {} הוסף: %sנוספוהתווסף היוםשובשוב היוםכל הכרטיסיות המוטמנותכל סוגי הכרטיסיותכל החפיסותכל השדותכל הכרטיסיות בסדר אקראי (לא קובע מועד מחדש)כל הכרטיסיות, ההערות, והמדיה של פרופיל זה ימחקו. האם אתה בטוח?כל כרטיסיות הסקירה בסדר אקראיאפשר HTML בתוך שדותטעינת תוסף שהתקנת נכשלה. אם הבעיות ממשיכות, אנא פנה בתפריט ל-כלים>תוספים, והשבת או מחק את התוסף. כאשר ,%(name)s' נטען: %(traceback)s שגיאה התרחשה בזמן גישה לבסיס הנתונים. גורמים אפשריים: אנטי-וירוס, חומת-אש, גיבוי או תוכנת סנכרון מפריעים ל-Anki. נסה להשבית תוכנות אלה ולאחר מכן וודא אם הבעיה נעלמת. - הדיסק שלך עשוי להיות מלא. - תיקיית Documents/Anki עשויה להיות על כונן רשת. - קבצים בתוך תיקיית Documents/Anki עשויים להיות בלתי ניתנים לכתיבה. - לדיסק הקשיח שלך יש שגיאות. זה רעיון טוב להריץ כלים>בדוק בסיס נתונים, כדי להבטיח שהאוסף שלך אינו פגום. שגיאה התרחשה בזמן פתיחת %sAnkiחפיסת Anki 2.0חבילת מאגר Ankiחבילת חפיסת AnkiAnki לא הצליח לקרוא את נתוני הפרופיל שלך. ממדי החלון ופרטי התחברות הסנכרון שלך נשכחו.Anki לא הצליח לשנות את שם הפרופיל שלך בגלל שהוא לא הצליח לשנות את שם תיקיית הפרופיל על הדיסק. אנא וודא שיש לך הרשאת כתיבה ל-Documents/Anki ושום תוכנות אחרות לא ניגשות לתיקיות הפרופיל שלך, ולאחר מכן נסה שנית.Anki היא מערכת ידידותית ואינטליגנטית לשינון בסירוגין (spaced learning). היא חופשית ומבוססת על קוד פתוח.Anki מורשת תחת הרישיון AGPL3. למידע נוסף, אנא ראה את קובץ הרישיון בהפצת קוד המקור.Anki לא היה מסוגל לפתוח את קובץ המאגר שלך. אם בעיות ממשיכות לאחר התחלת המחשב שלך מחדש, אנא השתמש בכפתור "פתח גיבוי" במנהל הפרופיל. ID או סיסמה של AnkiWeb שגויים; אנא נסה/י שוב.AnkiWeb ID:AnkiWeb נתקל בשגיאה. אנא נסה שנית בעוד מספר דקות, אם הבעיה ממשיכה, אנא דווח על הבאג.AnkiWeb עסוק מידי ברגע זה. אנא נסה שנית בעוד מספר דקות.AnkiWeb נמצא תחת תחזוקה. אנא נסה שנית בעוד מספר דקות.תשובהכפתורי תשובהתשובותתוכנת אנטי-וירוס או חומת אש מונעות מ-Anki להתחבר לאינטרנט.כל כרטיסייה שממופת לכלום תמחק. אם להערה אין כרטיסיות נותרות, היא תושלך. האם אתה בטוח שאתה רוצה להמשיך?האם אתה בטוח שברצונך למחוק את %s?נדרש לפחות 1 סוג כרטיסייה.צרף תמונה\אודיו\ווידאו (F3)נגן אודיו אוטומטיתסנכרן אוטומטית בעת פתיחה\סגירה של פרופילממוצעזמן ממוצעזמן תשובה ממוצעקלות ממוצעתמרווח ממוצעמגבה...גיבוייםבסיסיתבסיסית (וכרטיסייה הופכית)בסיסית (כרטיסייה הופכית אופציונלית)בסיסית (הקלד את התשובה)עיוןעיון (%(cur)d כרטיסייה מוצגת; %(sel)s)עיון (%(cur)d כרטיסיות מוצגות; %(sel)s)עיון בתוספיםהטמןהטמן כרטיסייההטמן הערההטמן כרטיסיות סקירה קשורות עד היום למחרתכברירת מחדל, Anki יאבחן את התו שבין השדות, לדוגמא tab, פסיק, וכו'. באם התו אובחן לא נכון, ניתן להזין אותו כאן. הקלד \t כדי לייצג tab.ביטולכרטיסייהכרטיסייה %dכרטיסייה 1כרטיסייה 2ID כרטיסייהרשימת כרטיסיותמצב כרטיסייהסוג כרטיסייהסוג כרטיסייה:סוגי כרטיסיותסוגי כרטיסיות עבור %sכרטיסייה הוטמנה.כרטיסייה הושהתה.כרטיסיותלא ניתן להעביר ידנית כרטיסיות לתוך חפיסה מסוננת.כרטיסיות בטקסט פשוטכרטיסיות יוחזרו אוטומטית לחפיסות המקוריות שלהן לאחר שתסקר אותן.כרטיסיות...יישר למרכזשינוישנה %s ל:שנה חפיסהשנה חפיסה...שנה סוג הערהשנה סוג הערה (Ctrl+N)שנה סוג הערה...שנה צבע (F8)שנה חפיסה בהתאם לסוג הערההשינויים למטה ישפיעו על %(cnt)d הערה שמשתמשת בסוג כרטיסייה זה.השינויים למטה ישפיעו על %(cnt)d הערות שמשתמשות בסוג כרטיסייה זה.השינויים ייכנסו לתוקף כאשר Anki יותחל מחדש.השינויים ייכנסו לתוקף כשתתחיל את Anki מחדש.בדוק &מדיה...בדוק אחר עדכוניםבדוק את הקבצים בתיקיית המדיהבודק מדיה...בודק...בחרבחר חפיסהבחר סוג הערהבחר תגיותנקה לא בשימושנקה תגיות שאינן בשימושסגירהסגור תוך השלכת השינויים?סוגר...מאגר פגום. אנא ראה את המדריך.נקודותייםפסיקהגדרההגדר שפת ואפשרויות ממשקמזל טוב! סיימת את חפיסה זו בינתיים.מתחבר...תם זמנו של החיבור. או שחיבור האינטרנט שלך חווה בעיות, או שיש לך קובץ מאוד גדול בתיקיית המדיה שלך.המשךהעתקתשובות נכונות בכרטיסיות בוגרות: %(a)d/%(b)d (%(c).1f%%)נכון: %(pct)0.2f%%
(%(good)d of %(tot)d)קובץ תוסף פגום.חיבור ל-AnkiWeb נכשל. אנא בדוק את חיבור הרשת שלך ונסה שנית.הקלטת אודיו נכשלה. האם התקנת 'lame'?שמירת קובץ נכשלה: %sחרושצור חפיסהצור חפיסה מסוננת...צור תמונות ווקטוריות באמצעות dvisvgmתאריך יצירהCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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תשובות מצטברותכרטיסיות מצטברותחפיסה נוכחיתסוג הערה נוכחי:לימוד מותאם-אישיתהתאם-אישית תבניות של כרטיסיות (Ctrl+L)התאם-אישית שדותגזורבסיס הנתונים התייעל ונבנה מחדש.תאריךימים נלמדוהתנתקDebug Consoleחפיסהדריסת חפיסה...חפיסה תיובא כאשר פרופיל ייפתח.חפיסותברירת-מחדלעיקובים עד שסקירות מופיעות שנית.מחקמחק כרטיסיותמחק חפיסהמחק ריקיםמחק הערהמחק הערותמחק תגיותמחק קבצים שאינם בשימושמחק שדה מ-%s?מחק את %(num)d התוסף הנבחר?מחק את %(num)d התוספים הנבחרים?מחק את סוג כרטיסייה '%(a)s' ואת %(b)s שלה?מחק את סוג הערה זו ואת כל הכרטיסיות שלה?מחק סוג הערה זו שאינה בשימוש?מחק מדיה שאינם בשימוש?נמחקה %d כרטיסייה ללא הערה.נמחקו %d כרטיסיות ללא הערה.נמחקה %d כרטיסייה ללא תבנית.נמחקו %d כרטיסיות ללא תבנית.נמחקה %d הערה ללא סוג.נמחקו %d הערות ללא סוג.נמחקה %d הערה ללא כרטיסיות.נמחקו %d הערות ללא כרטיסיות.נמחקה.מחיקת חפיסה זו מרשימת החפיסות תחזיר את כל הכרטיסיות הנותרות לחפיסות המקוריות שלהן.תיאורתיאור לתצוגה על מסך הלמידה (חפיסה נוכחית בלבד):Dialogהורד מ-AnkiWeb%(fname)s הורדמוריד מ-AnkiWeb...י&ציאהקלותקלמרווח-זמן של קלעריכהערוך את "%s"ערוך נוכחיערוך HTMLנערךריקכרטיסיות ריקות...כרטיסיות ריקות נמצאו. אנא הרץ כלים>כרטיסיות ריקות.הכנס מיקום כרטיסייה חדשה (1...%s):הזן תגיות להוספה:הזן תגיות למחיקה:שגיאה בעת הורדת %(id)s: %(error)sשגיאה בעת הפעלה: %sייצואייצוא...‏F1שדה %d של הקובץ הינו:מיפוי שדותשדותחפיסה מסוננת %dמצא &כפילויות...מצא כפילויותחפש וה&חלף...חפש והחלףכרטיסייה ראשונהסקירה ראשונהתוקנה %d כרטיסייה עם מאפיינים שגויים.תוקנו %d כרטיסיות עם מאפיינים שגויים.תחתיתכלליטובעורך HTMLקשהכותרתעזרהאם תרמת ממאמציך ואינך ברשימה, אנא צור קשר.התעלם מעדכון זה.יבואיבוא נכשל. אפשרויות יבואבתיקיית המדיה, אך לא בשימוש על-־ידי אף כרטיסייה:כלול מידע על מועדים קבועים מראשכלול תגיותהגדל את מגבלת הכרטיסיות החדשות להיוםהגדל את מגבלת הכרטיסיות החדשות להיום ב-התקן תוסףביטוי רגולרי לא תקף.זה הושהה.השארLaTeXכרטיסייה אחרונהשמאלנהל סוגי הערותנהל סוגי הערות...מיפוי ל-%sמיפוי לתגיותסמן הערהעודהעבר כרטיסיותהעבר כרטיסיות לחפיסה:שם עבור חפיסה:רשתכרטיסיות חדשותרק כרטיסיות חדשותכרטיסיות חדשות\יוםשם חפיסה חדש:הוסף סוג הערה:לא נלמדו כרטיסיות היום.אין כרטיסיות ריקות.קבצים חסרים או שאינם בשימוש לא נמצאו.הערהID הערהסוג הערהסוגי הערותהערה ו-%d כרטיסייה שלה נמחקה.הערה ו-%d כרטיסיות שלה נמחקו.הערה הוטמנה.הערה הושהתה.הערות נוספו מקובץ: %dהערות נמצאו בקובץ: %dהערות תוייגו.כלוםפתיחהאפשרויותססמה:אנא הרץ כלים>כרטיסיות ריקותאנא בחר חפיסה.אנא בחר כרטיסיות מסוג הערה אחד בלבד.אנא פנה ל-AnkiWeb, עדכן את החפיסה שלך, ולאחר מכן נסה שנית.העדפותתצוגה מקדימה כרטיסייה נבחרת (%s)תצוגה מקדימה כרטיסיות חדשותמבצע...מקליט...
משך: %0.1fהסר סוג כרטיסייה...מחיקת סוג כרטיסייה זו יגרום למחיקת הערה אחת או יותר. אנא צור קודם כל סוג כרטיסייה חדשה.שינוי שם סוג כרטיסייה...שנה שם חפיסהחזור על הכרטיסיות שנכשלו לאחרקביעת מועד חדשקבע מועד חדש לכרטיסיות על בסיס התשובות שלי בחפיסה זו.הפוך כיוון טקסט (יישור מימין-לשמאל)חזור לגיבויסקירהסקור כרטיסיות שנשכחוסקירותימיןבחר &הכלבחר &הערותהחל עבור כל תתי-החפיסותהצג תשובההצג כרטיסיות בשחור-לבן (מצב לילה)הצג כרטיסיות נלמדותהצג קלפים חדשים לפני סקירות חוזרותהצג קלפים חדשים בסדר הוספתםהצג כרטיסיות חדשות בסדר אקראימספר הגדרות יחולו רק לאחר אתחול Anki.נלמדו היוםלמד חפיסהלמד חפיסה...סגנון (משותף בין כרטיסיות)יצוא Supermemo XML (*.xml)השהההשהה כרטיסייההשהה הערהמושהההושהתה+הוטמנהתגיותחפיסה זו כבר קיימת.חפיסת ברירת-המחדל אינה ניתנת למחיקה.חלוקת הכרטיסיות בחפיסה/ות שלך.,התוספים הבאים אינם תואמים עם %(name)s ולכן הושבתו: %(found)sהתוספים הסותרים הבאים הושבתו:חזית כרטיסייה זו ריקה. אנא הרץ כלים>כרטיסיות ריקות.מספר הכרטיסיות החדשות שאתה הוספת.השינוי המבוקש דורש העלאה מלאה של בסיס הנתונים בפעם הבאה שתסנכרן את המאגר שלך. אם יש לך סקירות או שינויים אחרים שממתינים על מכשיר אחר שעדיין לא סונכרן כאן, הם יושלכו. להמשיך?קובץ זה קיים האם ברצונך לשכתב אותו?זה ייצור %d כרטיסייה. המשך?זה ייצור %d כרטיסייה. המשך?על מנת ללמוד מחוץ ללוח-זמני הלימוד הרגיל, לחץ על כפתור "לימוד מותאם-אישית" למטה.היוםזמן כוללסך-הכל כרטיסיותסה"כ הערותהתייחס לערך המוזן כביטוי רגולריבטל %sבשימוש בכרטיסיות אך חסרות בתיקיית המדיה:גרסה %sהאם ברצונך להוריד עכשיו?השינויים שתבצע ישפיעו על מספר חפיסות. אם אתה מעוניין לשנות רק את החפיסה הנוכחית, אנא הוסף קבוצת אפשרויות חדשה קודם.האוסף שלך במצב לא עקבי. אנא הרץ כלים>בדוק בסיס נתונים, ולאחר מכן סנכרן שנית.כרטיסיותכרטיסיות מהחפיסהכרטיסיות נבחרות על-ידיימיםחפיסהמשך חיי חפיסהפחות מ-0.1 כרטיסיות\דקהממופה ל-%sממופה ל-תגיותדקותanki-2.1.15+dfsg/locale/hr/000077500000000000000000000000001353113723000153075ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/hr/LC_MESSAGES/000077500000000000000000000000001353113723000170745ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/hr/LC_MESSAGES/anki.mo000066400000000000000000000756651353113723000203760ustar00rootroot00000000000000Wx% y%%%"%% %8%%" &$-&$R&&w&"&&&&& ''2'I'\' q'' ''' ''''' '' '' '((+(:(I(Z(a( g( r(}(((((((((((f)u) )) ) )))))e*v*7 + X+5b+X+ ++, , %,/, E,S,\,d,l, r,~, , , ,K,,- -R-7- .w&.E.R.7/#///(0 ?0L0 Q0 ^0l0t0{000 00\1c1h1 p1 z11113111 1 2 2282"L2o2&w2 22 22 222233(3 73E3PJ33 333 333334 4 4 4 -4 :4 G4T4g4k4 p4 |44/4444 4 4 4 4 5 55(55^5|5 55555555 5 55 5 66 6'6-6<64@6!u66666 666 7 7#7*7 17?7 W7a7h7p7y77777 777788"8 (868E8 M8X8]8 q8}88888F88 949C9V9 ]91i99999*9 :': F:S:b:v:: :::::::: ; ;; ;); 2;=; D; N;Z;k;;;; ;; ;;;; ; ;; < <<&<><U<h<!x<< <<< <<]=ab=!==#=> >%>-><> K>V> \>f>l>>,>#>E>@?W?,m??-?+?8 @ F@ R@`@i@ z@@@@@@@@i@cA jA vAA AAA A1A AB!B(B0B 7B CB QB,[BB BB BBB*B'(C6PC C!C?CCC D D#D)DN8 O;YOJOO&O#"PFP]PtP PP PPQ"Q 1Q?Q FQ PQZQbQiQ qQ|QQ QQQ QQQQ R R R +R5R(hHhWhjh#zhhhhhhhi ii i#i8i Mi Yieiyiiii9i jj+jjjjfnk&kk3l7l>lNlWlfl vl lll(l l2l&mOCmmm1mm* n48nMmn n nn nnnooo/oCo&_opo opp+p HpRp ip vp<p pp p pq qq 3q1@qrq%q qqqq@r4BrBwrr'r=r1s8sKs \sgsnss ss s sss s stt .t);tet4tjt%u 7uCuJu `u%nuu]u.v'>vfvG|vFv w"wDxdxoy~yyyyy yy:yz0z5Fz |z zzzzz z{/{7{<{B{X{i{{{{ {{$Z >):xeW.\g3{(^2!p/+6H)3cE#* 5}-nxP<BI|UFaD1koG+%Gl&" ;{vMQWj M-K|nVY@V= CmSqr ~O%C`[&4DmKN<EA/!`98t\$J~=yq'#,XTjRhX f 81U:hafw_Y]?'RdLF(yOd7H w[l_6ibJ9,vcP7urgIuAzze. 0LN]> ZS @ktss4}QB;"02*o?pi5^Tb (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).../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 save file: %sCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCurrent DeckCurrent note type:CutDateDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDefaultDeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete 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 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...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...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 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: 2019-07-02 11:47+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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) 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).../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.Ova datoteka nije spremljena: %sStvori špilNapravi filtrirani špil...StvorenoCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PAktualni š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 oznakeObrisati 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 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...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...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, 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.15+dfsg/locale/hu/000077500000000000000000000000001353113723000153125ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/hu/LC_MESSAGES/000077500000000000000000000000001353113723000170775ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/hu/LC_MESSAGES/anki.mo000066400000000000000000002127001353113723000203600ustar00rootroot000000000000000`A aA lAxAA"A AA AAAA8BD cDDDDDDDDEE -E;ELEPETEXE]EaE eEoEEEEE EEEEE EE EEE FFF.F>FMF\FmF}FF0F FFF F FFF G#Gr'GjGHH HHHH#H(H,H0HT4HH,H(HH!I"If:II II I IIIJ%Je^O^i^}^"^^0^/^_,_&>_ e_q_ x__ _ _____-_ ``(`5>` t``aa8a5MaPaaa aab b'b.b5beP f[f]df f8fgg$g@gDg Sg`gfgkg pg {gg g gg ggg)g0g)h?h4Ch!xhhhhh^irii i.iiiii i ij j j j 8jBjIjQjZjkjjjjj j jjNj";k^krkwkkkkKlTlYlsl yllllll lll lmm m mm&m+m@D6 !DŽ?)/ ? MX^dw  ȅ օ"? G T ak| !d׆ <GKZch }( ӇX+h"&ވ0+)>UF'ۉ*(.1W,I'#e(8CN(r.3 FPu/|M !ʒ'7>CK`.gƓ,ޓ U<$"ȔS0?$p" {ʕ^F5ۖU :DLRf x ǚΚ #+3 9CEVX%+11 cnpy/MΝ-@+V//59RUh1++2/^//+6 V cq á ϡ ݡ   =H b o}  ¢ʢۢ *(Sev Ḍ /7 @K"Q"tP |#73ڦ%&4[v#4H \je"A4>Ӭ-JF\.j{ )ð )D^}12"01b r}/ IJ   -B:p}6+%fQ6+ HRp[Q6KPV: U'#μ(!=F[ ս:&8 @ LZq$˾ (@Z kx21׿    &4CSm( 8 R' z  $2.E tFI*.Bq  8*9>? ~70 @9o7  #*18? F S ` m z  ' =,Gt{ K$<+My?GU,0MMI[OC ^Kg   - 8E"Nq   -b@O2E]$r$m 5/ @KRYj   '8cV:  6CL  * 2 > LXo 0Y7W7 8 YPz I!MHo:09W(k2-7#-Ql M$  0> DR o{ P;D[y }   )#=ar')(;D]q w  ;$L:q2= 2@ Sakqu#1&XqwzU4 $ @a  1  #FA/uG.v(:!L\=8@2^EU - ; I&T{=5  "C L Z hr  1 ? ),V6n H !'< do(6!97 q~ ! q ~ ><!{e!5(R{&>=,.j$D:>HFH4Kjs ( ) 2@ R5\,)3B](n&<  92&M!t2,Q,~N)[:F- -+%Y1P21$6 8V$"  VcY      5 T &\ :       8" )[   F    ) hG <   ^ >|  $ Fd1!0OW n  !%Aglq u   8Qb$QOwptMWB3bA{V;%'R^d[t"YGjv*\ $lA&O1kn{7#9n<=q|mKdSX%EhOsvDA- Z  ;(c@F^iwI?S=Bf,\z+?.a r\ ]`D{F7e C5< TcNCdaUu NP41q)&2!Jwlo3!#J;kR ph !Z:P $E6HfER ruH[~](y>Wgy/T}Z50nseg"[6,Y^/J`L 6>x(MQCuGib 3cx*Mf?=%4-.~|+:7 hI)2UKGL8j]o@r__V}9iN&.I D 5)W*jH X"y8X V#~eF2Kzv_loB+xP,<-k /U0t|aq:@>S0Y14sgmm}''Tp z`9L  (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 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 TemplateBacking Up...BackupsBasicBasic (and reversed card)Basic (optional reversed card)Basic (type in the answer)Bold text (Ctrl+B)BrowseBrowse Add-onsBrowser 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 typeChangedChanges will take effect when Anki is restarted.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck 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 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+WCumulativeCumulative %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 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 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 Add-ons...Get 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 intervalLowest 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...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 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.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.Studied %(a)s %(b)s today.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 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 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 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.UnburyUndoUndo %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-03-10 16:36+0000 Last-Translator: Piktoll 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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) Language: hu (%d közül 1) (kikapcsolva) (ki) (be) %d kártyát tartalmaz. %d kártyát tartalmaz."Segoe UI"%% helyes%(a)0.1f %(b)s/nap%(a)0.1fkB feltöltése, %(b)0.1fkB letöltése%(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...&Böngészés és telepítés...&Kártyák&Adatbázis ellenőrzése&Magolás...Sz&erkesztés&Exportálás...&Fájl&Keresés&Ugrás&Útmutató&Útmutató...&Súgó&Importálás...&Információ...Kijelölés meg&fordításaK&övetkező kártya&JegyzetekBővítmények mappájának megnyitása...&Testreszabás...&Előző kártya&Átütemezés...Az &Anki támogatása...&Profil váltás&Eszközök&Visszavonás'%(row)s' mezőinek száma %(num1)d, ennyinek kéne lennie: %(num2)d(%s helyes)Jegyzet törölve(vége)(szűrt)(tanulás)(új)(szülőcsomag határértéke: %d)(kérlek, 1 kártyát válassz ki)...A .anki kiterjesztésű fájlok az Anki nagyon régi változatából származnak. Az Anki 2.0 használatával tudod importálni őket, amelyet az Anki weboldaláról tölthetsz le.Az .anki2 kiterjesztésű fájlok nem importálhatóak közvetlenül. Kérlek, importáld a .apkg vagy .zip kiterjesztésű fájlokat helyettük./0 n1 101 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.

Hiba

Egy hiba történt. Kérlek, indítsd el az Ankit a SHIFT lenyomva tartása közben, így letiltva a telepített bővítményeket.

Ha a hiba csak akkor bukkan fel, ha a bővítmények engedélyezve vannak, kérlek, az Eszközök>Bővítmények menüpont alatt tilts le néhány bővítményt, majd indítsd újra az Ankit. Ezt ismételve derítsd ki, melyik bővítmény okozhatja a hibát.

Ha sikerült beazonosítani, melyik bővítmény okozta a problémát, kérlek jelezd azt a bővítmények rovatban, a támogató oldalunkon.

Hibaelhárítási információ:

Hiba

Egy hiba történt. Kérlek, használd az Eszközök > Adatbázis ellenőrzése menüpontot a probléma megoldásához.

Ha a probléma fennáll, kérlek jelezd a támogató oldalunkon. Kérlek csatold az információkat is az üzenetedhez.

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)Kártyatípus hozzáadása...Mező hozzáadásaMédia hozzáadásaÚj csomag hozzáadása (Ctrl+N)Jegyzettípus hozzáadásaJegyzetek hozzáadása...Ellenkező irány hozzáadásaCímke hozzáadásaCímkék hozzáadása…Hozzáadás ehhez:A bővítmény nem rendelkezik konfigurációval.A bővítmény nem töltődött le az AnkiWebről.BővítményekLehetségesen közrejátszó bővítmények: {} 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: %sAz összes kártyatípusMinden csomagMinden mezőAz összes kártya véletlenszerű sorrendben (ne ütemezze újra)Az ehhez a profilhoz tartozó összes kártya, jegyzet és médiaállomány törlődni fog. Valóban ezt akarod?Az összes ismétlőkártya véletlenszerű sorrendbenHTML-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 csomagAnki gyűjtemény 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és...Biztonsági mentésekAlapAlap (mindkét irányban)Alap (egyik vagy mindkét irányban)Alap (írja be a választ)Félkövér szöveg (Ctrl+B)BöngészőBővítmények kereséseBö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ártyaállapotKártyatípusKártyatípus:Ká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ésPakliváltás...Jegyzettípus módosításaJegyzettípus módosítása (Ctrl+N)Jegyzet&típus módosítása...Színváltás (F8)Csomagváltás a jegyzettípus függvényébenMódosítvaA módosítások akkor lépnek érvénybe, amikor az Anki újraindult.A módosítások akkor lépnek érvénybe, amikor újraindítja az Ankit.&Média ellenőrzése...Frissítések kereséseA 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.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+WKumulatí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é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 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: %sBővítmények beszerzése...Megosztott 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özLegkevé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...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, 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.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ákStatisztikákLépés:Lépések (percben)A lépéseknek számoknak kell lenniük.Ma tanultak: %(a)s %(b)s.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élretettSzinkronizálásHang- é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ásaAz 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 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őBővítmények kereséséhez kattintson a lenti keresés gombra.

Ha megtalálta a kívánt bővítményt, kérjük, illessze be annak kódját alulra. Több kódot is beilleszthet, szóközökkel elválasztva.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 egyezikFrissíti a következő bővítményeket?Feltö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.15+dfsg/locale/hy/000077500000000000000000000000001353113723000153165ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/hy/LC_MESSAGES/000077500000000000000000000000001353113723000171035ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/hy/LC_MESSAGES/anki.mo000066400000000000000000003126631353113723000203750ustar00rootroot00000000000000:N N NNN"NN NNNO80OiOyOOO"O$O$O&P"BPeP4xP2PPP"Q$1Q$VQ${Q QQQQQRR+RBRUR jRxRRRRRRR RRRRRR RRRSS SS S&S/S ASLSSSkS{SSSSSS0S STT T %T0T6TIT`TrdTjTBUDUGULUTU[U`UeUiUmUTqUU,U(UV!=V_VfwVV VW W W+W;WMWbWeyWW7XHX) [ 4\>\5Q\X\Y\%:]k`] ] ]]]^ ^ ^'^ =^ K^ X^d^ m^y^^'^^^^ ^$^ _ __/_@_ O_ Y_,d_K_ __1`E``"bb b c$cd6cc}dIeRKevef7f fwgE{g@gh hhR hsh|hh#i#>ibi izij(6j_j gjtj jjjj j j jjjjk4k OkYklkJskkkkkl ll#l (l 2l)]yPyy]y Tz8`zzzzzzz z{ {{ { "{0{ 5{ ?{ L{V{ ]{j{p{){0{{{|4 |!>|`|s|#|||H}\}m}} }.}}}}} } }~~ ~$~ <~F~+N~z~~ ~~~~~~~~  N7" ̀ Ӏ  *5: N Ye j8x,ށ . JFT Ԃ 4"5 <1Hz*̓! ƅ ""5 XyĆ׆ ?) iw5$Ň)227=L\ c m{<   5"X iu|  Ê ͊ ي *>DU]w N #28@ D&Nu  njߌ !'+Iu#!ˍ < @M]]a7O!c8 =̏, 7?B,T#Ikmّޑ  # 2 =I O [e}5  ; FQ,p#&V8?Exޔ*0 Qn$,֕-+8I #̖0 !/?Hgp ˗ݗ#?cwi$+ ?K/e  ֙ " $1/a s~ ͚ Ԛ  )-@n(vʛ ћۛ   .VF ,:g|G ߝ"* MZ bn~)4ʞ:X*w'ʟҟ؟@6! X!c?MŠ ) 7BHNa x, ̡ڡ &EXu Ǣ ̢!d"  ȣ֣(ۣ ?XZ+"ߤ&z)0+>FZ'*ɦ(1,OI|Ƨ'ި#ʩ_eN8Ct(Fr(g %uۮ/QMϯկv  !ɰg'vL 4I.P,ϲ  *UI$"ZSr0ƴ$"? EbQ{0^L5U}@ Ȼлֻ    ',17K`wƼݼ).69AI OY[ln>N e p'} 6ѿ?Zj{ !!%$ JKX*' ')'Q y$   ,9I c" "1DV m w "( 5L4b&0DVV "  2Gae5 @',Tl,/\p"".6VIOTV.+Fb/,*)#2&V!}-:7%MFs!(0,JwjZ,f412*$C jZYO GTc)#"F]F8BM5NB'dj 4!-1O'#!$%:4KA: 2>=#|!8V!m'^er|  +9Qg}0" !& HdU3u "&/ )PzDU{f8DXE" '(Cl-8 A^s6-n ivJZOfI2^<0U7f.xUF2)?$dx        & 3 @ M Z g t +! *<%g<*C#9 ]?h0"/  ;)HUr3 L"  o z    !  20  c ? Z T It ? A A@ R ? Q  g u -J& )2\*m $+.?!Uw% Mx>'(tP@:3S"9"(%Na-w*, 5 @M6k ~; D O [ fq+'$ &5)K1uHG08ir 6&+IRn1 A%g{ /y2I|/ o %9W_v*h    )B!cl!)!(!h#""4J%'%L%!%]&pt&e&xK'+'#'+( @(a(}((+( (9)y?)) )n)L`*C**A+U;,,$,.,,--1-P-a-#w-4-#->-f3..A.(. /!/:/[Q/1/+/ 0) 0,J0w020030 1'1@1Y1v151M1 2/2J2FY2!2 232!39%3u_3313#4;4N4g4n4q4 4"5*85!c55"5C506876p6-646W6#;7A_7S7"78'898S81s8(8"889J:F:;;NS;;4&<[<< ==,=g=P&>Lw?? @@@!@@%A#5AYAqAAAA?A!B;6B1rBXBBCI!CkC CC@C`CCED9DD~PElE4G~G5GHGH94HenH\H1I":I]I/nI&ILI%J8J$JJoJ>JJJJJ5K=;KyKK,K"K9K1L/GL wLAL<L+M-CM&qM.MMN/N#N7NV$O4{O7OO3P.5PdPUPPPQ+QQ=Q'R>7RvR+R%RNR(.S?WS,SsS8TlUTT T'TTU%UEUTU4pU UU$U6U)V'VVVrWCPX+XXK_Y(Y3Y>ZGZYZ%oZ1Z/Z6Zf.[[R\Rn\S\Z]zp]L]8^I^R^h^u_!_@_x_g` `1`)(aRaqa aa/aaBb*Cbnbbb bbKb>cNQcc4ccdd!.dPd9idd^d0eCLee?f[f3_f!ff(ff gag@|gLgA hLhGhE%i=kii(jWjK,krxk~kJjlGl-lF+mLrmqme1n>oo<aqqjrEs~LttQuRv:avv0ww+w)x`:xyz { {X{}%}#A}e}#x}}#}m} J~6U~~OO52(h1%m+=ׁ$k*1(:QVPS!2ƄFp<I>'Mu%n];,(7@#Z~ ȓݓ &6HXr-"ǔ0$-6M^ }!X!2g">@5_;HFx0Wfo3^bC ]*\g+ ,"-vS/Tm6{0saa0 R&\]QE t.@`!5Byt*:=Y_kRS6# Br9n|?[KWfKB.e%V1xUGP!wj&.O/i(;<]J ^kLX NZslL)?1) %=96OQu/~+8E U'lKHuh$^|T|q4)p6-LDS~m>kn ""}~[ZSWuMIN[%-'?[jwG8m+}kF;qi_{j)(<8YrM` |> Y#\N*;$m zIy^<M~Vw=(IDV 3YpN. 8dg/027X79:uh9+r=>?J<KL!HP-`CF% ]s&3_pdfDbOX {,a O}4A@QABC:FGHIDE@'y&j7oi(qh7$2eAe3,*gllV'#czcnodPWRzJ:,TUJE G1ceso1x` y4v$Zvq}tvAn\{2Pa U5Zf Mz #Qx RTtcbh45idwCbrp (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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable 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?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-03-19 18:01+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: 2019-07-04 05:44+0000 X-Generator: Launchpad (build 19007) 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 քարտ)....anki նիշքերը Anki-ի շատ հին տարբերակից են: Դուք կարող եք ներմուծել նրանք Anki 2.0-ի միջոցով, որը հասանելի է Anki-ի կայքէջում:.anki2 նիշքերը անմիջապես ներմուծվող չեն: Փոխարենը ներմուծեք .apkg կամ .zip նիշքերը:/0 օր1 101 ամիս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-ն վերամեկնարկելիս:Փոփոխությունները կկատարվեն Anki-ն վերամեկնարկելուց հետո:Ստուգել &մեդիան...Ստուգել արդիացումների առկայությունըՍտուգել նիշքերը մեդիայի գրացուցակումՄեդիայի ստուգում...Ստուգում...ԸնտրելԸնտրել կապուկըԸնտրել գրառման տեսակըԸնտրել պիտակներըՄաքրել չօգտագործվածներըՄաքրել չօգտագործված պիտակներըԿրկնօրինակել՝ %sՓակելՓակել և կորցնե՞լ ընթացիկ ներածումը:Փակվում է...ԲացթողումներԲացթողումների ջնջում (Ctrl+Shift+C)Կոդ՝Հավաքածուն արտահանված է:Հավաքածուն վնասված է: Մանրամասների համար կարդացեք ձեռնարկը:ԵրկկետՍտորակետԿազմաձևելԿազմաձևԿազմաձևել միջերեսի լեզուն և ընտրանքներըԴուք այս պահի դրությամբ ավարտել եք սույն կապուկը:Միացվում է...Միացմանը սպասելու ժամանակը ավարտվեց: Դուք կամ Համացանցին միանալու հետ խնդիրներ ունեք, կամ մեդիայի պանակում շատ մեծ նիշք կա:ՇարունակելՊատճենվեց սեղմատախտակի մեջՊատճենելՊատճենել վրիպազերծման տվյալներըՊատճենել սեղմատախտակի մեջՀասուն քարտերի ճիշտ պատասխաններ՝ %(a)d/%(b)d (%(c).1f%%)Ճիշտ՝ %(pct)0.2f%%
(%(good)d of %(tot)d)Հավելման նիշքը վնասված է:Անհնար է միանալ AnkiWeb-ին: Ստուգեք Համացանցի հետ կապը և կրկին փորձեք:Չհաջողվեց գրել ձայնը: Դուք տեղադրե՞լ եք «lame»-ը:Չի հաջողվում պահել նիշքը՝ %sՍովորելՍտեղծել կապուկՍտեղծել զտված կապուկ...Ստեղծել սանդղելի պատկերներ dvisvgm-ովՍտեղծված էCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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Գումարային պատասխաններԳումարային քարտերԸնթացիկ կապուկԳրառման ընթացիկ տեսակ՝Լրացուցիչ ուսուցումՈւսուցման լրացուցիչ աշխատաշրջանԼրացուցիչ քայլեր (րոպե)Կարգավորել քարտերի կաղապարները (Ctrl+L)Կարգավորել դաշտերըԿտրելՇտեմարանը կառուցված և լավարկված է:ԱմսաթիվՍովորած օրերի մասնաբաժինըԱպանույնականացնելՎրիպազերծման կառավարակետԿապուկԿապուկը գերակայում է...Կապուկը ներմուծվելու է հատկագիրը բացելուն պեսԿապուկներՓոքրացող ժամանակամիջոցներիՍկզբնադիրՀետաձգումները հաջորդ կրկնությունից առաջ:ՋնջելՋնջել քարտերըՋնջել կապուկներըՋնջել դատարկներըՋնջել գրառումըՋնջել գրառումներըՋնջել պիտակներըՋնջել չօգտագործվող նիշքերըՋնջե՞լ դաշտը %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Անվտանգ կապակցումն հաստատելու սխալ: Սովորաբար պատճառը հակավիրուսային ծրագիրն է, հրապատն է, VPN ծրագիրն է, կամ Համացանցի ծառայությունները տրամադրող ձեր մատակարարի խնդիրն է:%s կատարման սխալ:%s գործարկելու սխալՓորձնական V2 հերթագրիչԱրտահանելԱրտահանել...Արտահանվեց %d մեդիա նիշքըԼրացուցիչFF1%d դաշտը այս նիշքից՝Դաշտերի քարտեզի կազմումԴաշտի անվանումը՝Դաշտ՝ԴաշտերԴաշտեր %s-ի համարԴաշտերը բաժանված են սրանով՝ %sԴաշտեր...Զտ&իչՆիշքի տարբերակը անհայտ է, միևնույն է ներմուծման փորձ է տեղի ունենում:ԶտիչԶտիչ 2Զտիչ...Զտիչ՝ԶտվածԶտված կապուկ %dԳտնել &կրկնօրինակները...Գտնել կրկնօրինակներըԳտնել և փո&խարինել...Գտնել և փոխարինելԱվարտելԱռաջին քարտԱռաջին ցուցադրությունԱռաջին դաշտի համընկնում՝ %sՍխալ հատկություններով %d քարտը շտկված է:AnkiDroid կապուկի վերագրման վրեպը շտկված է:Շտկված է գրառման տեսակը՝ %sԴրոշՔարտի դրոշըՇրջելՊիտակը արդեն գոյություն ունի:Տառատեսակ՝Ներքևի տողԱնվտանգության նկատառումներով '%s' չի կարելի օգտագործել քարտերի մեջ: Դուք կարող եք տեղադրել հրահանգը այլ պաթեթի մեջ, և ներմուծել այդ փաթեթը LaTeX-ի գլխագրի մեջ:ԿանխատեսումՁևԳտնվեց %(a)s %(b)sից:ՀարցՀարցի նախատեսքՀարցի կաղապարԸնդհանուրՍտեղծված նիշք՝ %sՍտեղծված է %s-ինՏեղադրել նոր հավելումներ...ՆերբեռնելԼավ էԺամանակամիջոցը բոլոր քայլերից հետոԿանաչ դրոշHTML խմբագրիչԴժվար էԴժվարների ժամանակամիջոցըՍարքային արագացում (ավելի արագ է, հնարավոր են ցուցադրման խնդիրներ)Տեղակայե՞լ եք latex և dvipng/dvisvgm:ԳլխագիրՕգնությունԱռավելագույն հեշտությունՊատմությունՏունԸստ օրվա ժամանակիԺամ30 կրկնություններից պակաս լինելիս, ժամացույցը չի ցուցադրվումՆույնԵթե ներդրում եք կատարել ծրագրի զարգացման մեջ և նշված չեք ցանկում, ապա կապ հաստատեք մեզ հետ:Եթե ամեն օր սովորեիքԱնտեսել այսքանից երկար տևող պատասխանի ժամանակըԱնտեսել տառաչափըԱնտեսել դաշտըԱնտեսել տողերը, որտեղ առաջին դաշտը համընկնում է առկա գրառման հետԱնտեսել այս արդիացումըՆերմուծելՆերմուծել նիշքՆերմուծել անգամ եթե առկա գրառումը պարունակում է միևնույն առաջին տողըՆերմուծումը ձախողվեց: Ներմուծումը ձախողվեց: Վրիպազերծման տեղեկություններ՝ Ներմուծման ընտրանքներՆերմուծումը ավարտվեց:Առկա է մեդիապանակում, բայց չի օգտագործվում որևէ քարտում՝Որպեսզի համոզվեք հավաքածուի ճիշտ աշխատանքի մեջ սարքերի միջև տեղափոխելիս, Anki-ին հարկավոր է, որ համակարգչի ներքին ժամացույցը ճիշտ լինի: Ներքին ժամացույցը կարող է սխալ լինել անգամ եթե համակարգը տեղական ժամը ճիշտ է ցույց տալիս: Բացեք Ձեր համակարգչի ժամի կարգավորումների պատուհանը և ստուգեք հետևյալը՝ - AM/PM - Ժամի հոսընթացը - Ժամային գոտին - ամառային ժամը Ժամը ճշտելու տարբերությունը՝ %s:Ներառել HTML և մեդիա հղումներըՆերառել մեդիանիշքերըՆերառել ժամանակացույցի տեղեկություններըՆերառել պիտակներըԲարձրացնել նոր քարտերի սահմանափակման այսօրվա շեմըԲարձրացնել նոր քարտերի սահմանափակման այսօրվա շեմը այսքանով՝Բարձրացնել կրկնվող քարտերի սահմանափակման այսօրվա շեմըԲարձրացնել կրկնվող քարտերի սահմանափակման այսօրվա շեմը այսքանով՝Աճող ժամանակամիջոցներիՀավելման տեղադրումՀավելումների տեղադրումՏեղադրել նիշքից...Տեղադրվեց %(name)sՄիջերեսի լեզուն՝ԺամանակամիջոցԺամանակամիջոցի փոփոխիչԺամանակամիջոցներՀավելման անվավեր հայտարարագիր:Կոդը անվավեր է, կամ հավելումը հասանելի չէ Anki-ի այս տարբերակի համար:Անվավեր կոդ:Անվավեր կազմաձև՝ Անվավեր կազմաձև՝ վերին մակարդակի առարկան պետք է քարտեզ լինիՆիշքի անվավեր անվանում: Վերանվանեք այն՝ %sԱնվավեր նիշք: Վերականգնեք պահուստից:Քարտի վրա անվավեր հատկություն է հայտնաբերվել: Օգտագործեք Գործիքներ>Ստուգել շտեմարանը, եթե խնդիրը կրկնվի, ապա հարց ուղղեք օժանդակման կայքէջում:Անվավեր կանոնավոր արտահայտություն:Անվավեր որոնում. ստուգեք մուտքագրման սխալներըԲացառված է:Շեղագիր գրվածք (Ctrl+I)Անցնել պիտակներին Ctrl+Shift+TՊահել մինչևLaTeXLaTeX հավասարումLaTeX մաթ. միջավայրՄոռացվածՎերջին քարտՎերջին կրկնությունՎերջին ավելացվածները սկզբիցՍովորելու ժամանակըԱրտահերթ սովորելու սահմանափակումՍովորվող՝ %(a)s, Կրկնվող՝ %(b)s, Վերասովորվող՝ %(c)s, Զտված՝ %(d)sՍովորվողԳործողություն «կպչուն» քարտերի հետ«Կպչուն» քարտերի շեմըՁախիցՍահմանափակելԲեռնվում է...Տեղային հավաքածուն քարտ չունի: Ներբեռնե՞լ AnkiWeb-ից:Ամենաերկար ժամանակամիջոցըՆվազագույն հեշտությունԿարգավորելԳրառումների տեսակներըԳրառումների տեսակները...Կարգավորել...Ձեռքով առանձնացված քարտերըՄիացնել %s-ինԳրառումների ցուցադրությունՆշել գրառումըMathJax բլոկայինMathJax քիմիականMathJax ներտողայինՀասուններըԱռավելագույն ժամանակամիջոցըԿրկնությունների առավելագույն քանակը (օրը)ՄեդիաՆվազագույն ժամանակամիջոցՐոպեներԽառնել նոր քարտերը ու կրկնություններըMnemosyne 2.0 կապուկ (*.db)ԱվելինԱռավելագույն բացթողումներիՏեղափոխել քարտերըՏեղափոխել քարտերը կապուկի մեջ՝Բազմանիշ բաժանիչները չեն օժանդակվում: Մուտքագրեք միայն մեկ նիշ:&ԳրառումԱնվանումը գոյություն ունի:Կապուկի անվանումը՝Անվանում՝ՀամաժամեցումՆորՆոր քարտերՍահմանափակման այսօրվա շեմը գերազանցող կապուկի նոր քարտերը՝ %sՄիայն նոր քարտերըՆոր քարտեր (օրական)Նոր կապուկի անվանումը՝Նոր ժամանակամիջոցՆոր անվանում՝Գրառման նոր տեսակ՝Կարգավորումների նոր խմբի անվանումը՝Նոր տեղավորությունը (1...%d)՝Հաջորդ օրը սկսում է կեսգիշերիցԴրոշ չկաԿրկնելիք քարտեր դեռ չկանԱյսօր ոչ մի քարտ չեք սովորել:Նշված չափանիշներին համապատասխանող քարտեր չկան:Դատարկ քարտեր չկան:Այսօր ոչ մի հասուն քարտ չեք սովորել:Չօգտագործվող կամ բացակայող քարտեր չգտնվեցին:Արդիացումներ չկան:ԳրառումԳրառման IDԳրառման տեսակԳրառման տեսակներԳրառումը և %d քարտ ջնջվեցին:Գրառումը առանձնացվեց:Գրառումը հեռացվեց:Նկատառում՝ Մեդիան պահուստավորված չէ: Ստեղծեք Anki-ի պանակի պարբերական պահուստավորումը ապահովության համար:Նկատառում՝ Պատմության որոշ մասը բացակայում է: Լրացուցիչ տեղեկությունների համար կարդացեք զննիչի թղթաբանությունը:Հետևյալ նիշքից ավելացված գրառումները՝ %dՀետևյալ նիշքում գտնված գրառումները՝ %dԳրառումները պարզ գրվածքի տեսքովԳրառումները պահանջում են առնվազն մեկ դաշտ:Հավաքածուի մեջ արդեն առկա և այդ պատճառով հիմա բաց թողնված գրառումներ՝ %dԳրառումները պիտակավորվեցին:Գրառումներ, որոնք չստացվեց ներմուծել, քանի որ գրառման տեսակը փոխվել է՝ %dԳրառումներ, որոնք թարմացվել են, քանի որ նիշքը ավելի նոր տարբերակներ էին պարունակում՝ %dՈչինչԼԱՎՀները սկզբում ցուցադրելՀաջորդ համաժամեցման ժամանակ վերագրել մեկ ուղղությունովՄեկ կամ մի քանի գրառում չներմուծվեցին, քանի որ նրանք որևէ քարտ չէին ստեղծել: Դա կարող է պատահել դատարկ դաշտերի կամ գրվածքային նիշքի ու դաշտերի սխալ համապատասխանեցումը նշելու պատճառով:Միայն նոր քարտերը կարող են վերատեղադրվել:Միաժամանակ միայն մեկ օգտատեր կարող է օգտվել AnkiWeb-ից: Եթե նախկին համաժամեցումը ձախողվեց, կրկին փորձեք մի քանի րոպեից:ԲացելԲացել պահուստը...Լավարկում...Ընտրանքային զտիչ՝ԸնտրանքներԸնտրանքներ %s-ի համարԸնտրանքների խումբ՝Ընտրանքներ...Նարնջագույն դրոշԿարգԱվելացման կարգիԿրկնելու կարգիԳերակայել հակառակ կողմի կաղապարը՝Փոխել տառատեսակը՝Գերակայել հարցի կողմի կաղապարը՝Anki-ի փաթեթավորված հավելում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 այսօր (%(secs).1fվ./քարտ)Այսօր սովորեցիք %(a)s %(b)s:Սովորեցիք այսօրՍովորելՍովորել կապուկըՍովորել կապուկը...Սովորել հիմաՍովորել ըստ քարտի կարգավիճակի կամ պիտակիՈճավորումՈճավորում (օգտագործվում է բոլոր քարտերում)Վարգիր (Ctrl+=)Արտահանում Supermemo XML-ի մեջ (*.xml)Վերգիր (Ctrl++)ՀեռացնելՀեռացնել քարտըՀեռացնել գրառումըՀեռացվածներըՀեռացվածները + ԱռանձնացվածներըՀամաժամեցումՁայնանյութերը ու պատկերները նույնպես համաժամեցնելՀամաժամեցումը ձախողվեց՝ %sՀամաժամեցումը ձախողվեց. միացում չկա:Համաժամեցման համար անհրաժեշտ է, որ համակարգչի ժամացույցը ճիշտ լինի: Ուղղեք ժամը և կրկին փորձեք:Համաժամեցում...TabՊիտակավորել կրկնօրինակներըՄիայն պիտակավորելՊիտակներԹիրախային կապուկ (Ctrl+D)Թիրախային դաշտ՝ԳրվածքՆերդիրներով կամ կետ-ստորակետներով բաժանված գրվածք (*)Այդ անվանումով կապուկ արդեն արկա է:Դաշտի այդ անվանումը արդեն օգտագործվում է:Այդ անվանումը արդեն օգտագործվում է:AnkiWeb-ին միանալու փորձի ժամանակը սպառվեց: Ստուգեք Համացանցի կապը և կրկին փորձեք:Սկզբնադիր կազմաձևը չի կարելի հեռացնել:Սկզբնադիր կապուկը չի կարելի հեռացնել:Քարտերի բաժանումը կապուկ(ներ)ում:Փորձնական հերթագրիչի կիրառումը կարող է սխալ հերթագրման պատճառ հանդիսանալ: Համոզվեք, որ ընթերցել եք նկարագրության փաստաթղթերը: Շարունակե՞լ:Առաջին դաշտը դատարկ է:Գրառման առաջին դաշտը պետք է արտապատկերված լինի:Հետևյալ գրանշանը չի կարող օգտագործվել՝ %sՔարտի հարցի կողմը դատարկ է: Մեկնարկեք Գործիքներ>Դատարկ քարտեր:Մուտքագրվածի հետևանքով կստեղծվեն դատարկ հարցեր բոլոր քարտերի համար:Ձեր կողմից ավելացված նոր քարտերի քանակը:Ձեր կողմից պատասխանված քարտերի քանակը:Կրկնելիք քարտերի քանակը:Յուրաքանչյուր կոճակը սեղմելու քանակը:Տրամադրվող նիշքը պետք է լինի .apkg ձևաչափով:Որոնման տվյալներով ոչ մի քարտ չգտնվեց: Ուզո՞ւմ եք փոխել նրանք:Հարցվող գործողությունը կպահանջի տվյալների շտեմարանի վերբեռնում հաջորդ համաժամեցման ժամանակ: Այլ սարքերում կատարված ու չհամաժամեցված փոփոխությունները (կրկնություններ ևն) կկորչեն: Շարունակե՞լ:Պատասխանների վրա ծախսված ժամանակ:Այլ նոր քարտեր կան, բայց հասել եք օրական սահմանափակման շեմին: Ընտրանքներում կարող եք բարձրացնել օրական սահմանափակման շեմը, բայց հաշվի առեք, որ ինչքան շատ քարտեր եք նայում, այդքան ավել պետք է կրկնեք մոտակա ժամանակում:Պետք է լինի առնվազն մեկ հատկագիր:Այս աղյուսակը չի կարելի դասակարգել, բայց կարող եք որոնում կատարել անհատական քարտերի տեսակների համար, օր.՝ 'card:1':Այս աղյուսակը չի կարելի դասակարգել, բայց կարող եք որոնում կատարել կոնկրետ կապուկների համար՝ ձախ կողմում վրան սեղմելով:Նիշքը պետք է .apkg ձևաչափով լինի: Եթե ներբեռնումը AnkiWeb-ից կատարվել, ապա հնարավոր է, որ այն ձախողվել է: Եթե սխալը կրկնվի, փորձեք այլ զննիչ օգտագործել:Այս նիշքը արդեն գոյություն ունի: Վստա՞հ եք, որ ուզում եք վերագրել այն:Այս պանակը պարունակում է Anki-ի բոլոր Ձեր տեղեկությունները, ավելի արագ պահուստավորելու համար: Այլ պանակ օգտագործելու համար նայեք՝ %s Սա արտահերթ սովորելու համար հատուկ կապուկ է:Սա {{c1::օրինակ}} բացթողումը լրացնելու օրինակ է:Սա կստեղծի %d քարտը: Շարունակե՞լ:Սա կջնջի առկա հավաքածուն և կփոխարինի այն ներմուծվող նիշքի տվյալներով: Վստա՞հ եք:Սա կվերակայի ուսուցանվող բոլոր քարտերը, կմաքրի զտված կապուկները և կփոխի հերթագրիչի տարբերակը: Շարունակե՞լ:ԺամԺամանակի սահմանափակումԿրկնելիքՀավելումները զննելու համար սեղմեք ներքևի համապատասխան կոճակը:

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

%(cont)sԳրառման տեսակը՝ բացթողումների լրացում է ընտրված , բայց Դուք ոչ մի բացթողում չեք լրացրել: Շարունակե՞լ:Դուք շատ կապուկներ ունեք: Նայեք %(a)s. %(b)sԴուք դեռ չեք ձայնագրել Ձեր ձայնը:Դուք պետք է առնվազն մեկ սյունակ ունենալ:ԹարմերըԹարմերը+ՍովորվողներըՁեր AnkiWeb հավաքածուն չի պարունակում որևէ քարտ: Կրկին համաժամեցրեք և փոխարենը սեղմեք «Վերբեռնել»:Փոփոխությունները կազդեն մի քանի կապուկների վրա: Եթե ուզում եք փոփոխել միայն ընթացիկ կապուկը, ապա նախ ընտրանքների նոր խումբ ստեղծեք:Ձեր հավաքածուի նիշքը վնասված է: Պատճառը կարող է լինել Anki-ն բաց լինելու ժամանակ նիշքի պատճենումը կամ տեղափոխումը, նաև հավաքածուի ցանցային կամ ամպային հիշասարքում պահվելը: Եթե համակարգիչը վերագործարկելուց հետո խնդիրները չեն անհետանում, ապա բացեք ինքնաշխատ պահուստը հատկագրի էկրանից:Ձեր հավաքածուն գտնվում է անհամատեղելի վիճակում: Մեկնարկեք Գործիքներ>Ստուգել շտեմարանը, հետո կրկին համաժամեցրեք:Ձեր հավաքածուն կամ մեդիա նիշքը շատ մեծ է համաժամեցման համար:Ձեր հավաքածուն հաջողությամբ վերբեռնվել է AnkiWeb: Եթե Դուք օգտվում եք ցանկացած այլ սարքերից, ապա նրանք հիմա համաժամեցրեք և ներբեռնեք այս համակարգչից հենց նոր վերբեռնված հավաքածուն: Դրանից հետո, ապագայում կրկնվող և նոր ավելացված քարտերը ինքնաշխատորեն կմիավորվեն:AnkiWeb-ում գտնվող Ձեր կապուկները տարբերվում են տեղային տարբերակից և չեն կարող ինքնաշխատորեն միացվել: Հարկավոր է մի կողմի կապուկները մյուսով վրագրել: Եթե ընտրեք ներբեռնումը, ապա Anki-ն AnkiWeb-ից կներբեռնի կապուկները և այս համակարգչում վերջին համաժամեցումից ի վեր կատարված փոփոխությունները կվերանան: Եթե ընտրեք վերբեռնումը, ապա Anki-ն կվերբեռնի կապուկները AnkiWeb և AnkiWeb-ում կամ այլ սարքերում վերջին համաժամեցումից ի վեր կատարված փոփոխությունները կվերանան: Բոլոր սարքերի համաժամեցումից հետո ապագայում կրկնվող և նոր ավելացված քարտերը ինքնաշխատորեն կմիավորվեն:Ձեր հրապատը կամ հակավիրուսային ծրագիրը չեն թողնում Anki-ին միացում հաստատել: Anki-ի համար բացառություն ավելացրեք այդ ծրագրերում:[կապուկ չկա]պահուստքարտքարտ կապուկիցքարտով: Ընտրել ըստ՝հավաքածուօրօրկապուկամբողջ ընթացքումկրկնօրինակօգնությունթաքցնելժամժամ հետո%s օրում%s ժամում%s րոպեում%s ամսում%s վայրկյանում%s տարումմոռացվածներպակաս քան 0.1 քարտ/րոպեումարտապատկերել %sարտապատկերել պիտակներրոպերոպեամիսկրկնությունվայրկյանվիճակագրությունայս էջըշ.ամբողջ հավաքածուն~anki-2.1.15+dfsg/locale/ia/000077500000000000000000000000001353113723000152675ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ia/LC_MESSAGES/000077500000000000000000000000001353113723000170545ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ia/LC_MESSAGES/anki.mo000066400000000000000000001741251353113723000203450ustar00rootroot00000000000000 l0@ @A A"A4A 6A@ASArA8AAAA"A$B$:B&_B"BB4B2B$C5C"RC$uC$C$C CDD2D:DIDZDoDDD DDDDDDDD DDDEE E!E'E-E1E 8EBE HESE\E nEyEEEEEEEEE0E %F2F 8F CFNFTFgF~FFFFFFFFFFFTFG,G(5G^G!}GGfGH 4HAH SH `HkH{HHHeHI7I J J5JXTJYJ%Kk-K K KKK K KK K L L L )L5L=LEL KL$WL|L LL L LKLLM"NO O.O@O"PRPvP7pQ QwQE,R@rRRRRRR$SS#S#S T)T(BTkT sTT TTTT T TTTTU2U9ULU\UbU gU qU){U'UUVVVVVV V V VV VVWW3WMWSaWWWW W WWWX"%XHXPX`X&rXX XX XX X XXXYY-!YOYUY[Y bY(pY5Y YYaZjZ8oZ5ZPZ/[F[ K[W[o[w[~[[[ [ [ [ [ [[[[[[[[[\ \ \ %\ 2\ ?\ L\ Y\ f\ s\ \\\ \ \\\ \\ \]]]>] C] P] \]j]/o]]]]%]] ] ] ^ ^ !^ .^:^,P^(}^^^F^N _Po_>_P_P`]Y` `8``aa5a9a HaUa[a`a ea pa~a a aa aaa)a0ab4b48b!mbbbbbScgcxc c.ccccc c ccd dd -d7d>dFdOd`dtdddd d ddNd"0eSegeleqeeeeEfNfSfmf sfffff fff ffff f ggg'g.-g \gFfggg g g4g4hGh Nh1Zhhhhh*h i jj jj"k"%k Hkik~kkkkk k k)klllllllmm m !m/mBmHm<Zmm mmmm mm mmm n n #n/n6nGn[nanrnznnn n nnn nnooo oo +o9o Ho Uo_onoooo+oo#p!&pHpMp Up _p<jp pp]pa"qq!q qqqq,qr#rkrjs os}sss ss s ssss ttt8t Ut `tkt,t#tVt82uEkuu*u0u$vAv,Wvv-v+v8v0w 9wEwMwhw#zw0w wwwxx x-x2x9xIxPxXxixxxxix,y 3y ?yLy ]yhy }y"yy y1y yy z`F'*(91b,I '##e38ɈCY(rƉ9> Qu[/ъMOU  !AF'd.,J Q\U{$э"S*0~$"Ԏ { ^5U# y “ēɓ Γ ؓ (<RW_bjr x Wb q"}  :.?S*f(($&/:DDĘ՘(&&D&k"̙ #:Mdsњښ    *7I`v#} ՛  3N] cn~ܘҜלܜdM0O:%!v!ߞ 3I`9 ϠڠE`4n,1 ͢ڢ!1Nds   'ģ #O2',ɦ #)aNK@ͪ  -J71! ֫' ?:` ˬܬ%6HN'h̭խݭ968o AKQZb jw ̯ݯ=@[U ð˰ ڰ,3`i-ȱ ߱ )4!<^d4l  0β77uH ȳBϳ6XIƴմ   " - 8 CNU^elsz õ е ݵ   *8M _l' 6 W^v. ÷׷"4/N-~&ӸNTB\Jd? d O p ӻ  . =#Hls2E@$*eĽ!ȾѾ<#%#(L\mt { ÿտ/ 5APZl01FU $*ELh{  )4/dEl-<"_x;-.5DzZ!j *111)[v  >8  #DMSbv ~ "H (2G] f p~ (/A%Io  !6F\ ly"89)M*w > s,r#'KZ`cEW*H  # 1 ? `! 3 $9D-~Z<ZD,@2([2u21:#^ gt$->2A)Jt} ! /';|c  -8Td : % 2:K^m!2  "=D Ucd~x4~s+Dp%,  $ (E(n5'J8@ y RJ8$I2n $3;L `'m '  ,(1Z1v|%8< N[`~BQ(,z&*2-EOsG& )2+\-.J 0.:i ^b1 B'k u}7%\]x ~ *)03; DP k9v 8 '2[Q(W /a#!~nJ"9\  ': MXZ_e t~  # .:<S0o.+s6@Vt?"NX&gQ k\])uDVvi|4   8$T Y\Z$d7+c06Km Im!|fQ5~1#l,Et(WPxn<rsF<--9= TTSLa3UZ}R!MM*y, C.37}F;k/sarGjZ:Ob= {y S8{Lw:riqN3`I /^RplO  MQ0*Dp@(Yq~zw_6`{hA}jA>u;~bhU # 7w'\+L&_UHxPd1l%9> GX|Ja^uxDyc<.cC1fvgnoWNvo9z[!G2HdbjOChe]e%EtF(gHkVznI:B$EB_5A&JR^q2S"K]@54YJB2`[i;f'pXKeW?,/4P"#= m[)8*) '% ?-> (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&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).../0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add 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 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 for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClone: %sCloseClose and lose current input?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 save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 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 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: %sFlagFlipFolder 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.IdenticalIf 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-onInstall Add-on(s)Interface 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 intervalLowest easeManageManage Note Types...Manage...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...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 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.ReviewsRightSaveScope: %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 reviewSidebarSize:SkippedSome related or buried cards were delayed until a later session.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 easeStatisticsStatsStep: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+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 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 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 matchesUpdatedUpload 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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-08-12 02:31+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: 2019-08-13 05:46+0000 X-Generator: Launchpad (build 19021) (1 de %d) (disactivate) (activate) Il ha %d carta. Il ha %d cartas.%% Correcte%(a)0.1f %(b)s/die%(a)0.1fkB super, %(b)0.1fkB sub%(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...&Cartas&Controlar base de datos&Cram...&Editar&Exportar...&FileTrovar (&Find)Ir (&Go)&Guida&Guida...(&H) Adjuta&Importar...&Informationes...&Inverter le selectionProxime (&Next) carta&Notas(&O) aperir le plica del Add-ons...&Preferentias...Carta &Previe&Re-programmation...&Supporto a Anki...&Commutar profiloIns&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).../0d1 101 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 notas...Adder le reversoAdder TagsAdder tags...Adder a:Adder: %sAdditeAddite hodieAddite duplicato con le prime campo: %sDe novoDe novo hodieAncora contar: %sTote le fascesTote le camposTote 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 acualisationesControlar le files in le directorio de mediosControlo del medios...Controlo...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 punctosVirgulaConfigurarConfigurationConfigurar 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.Impossibile salvar le file: %sCramCrear un fasceCreation del fasce filtrate...CreateCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 %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 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 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: %sMarcarFlipLe 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.IdenticSi 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-onInstall additivo(s)Lingua 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 longeFacilitate plus basseTractarGestion del typos de nota...Administrar...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...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 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.RevisionesDextraSalvarCampo: %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 revisionBarra lateralDimension:SaltateAlcun cartas pertinente o inhumate esseva retardate usque un plus recente session.Alcun configurationes prendera effecto post que tu habera reinitiate Anki.Campo del ordineOrdinar per ce campo in le navigatorLe arrangiamento sur ce columna non es supportate.SpatioPosition initial:Facilitate de comenciamentoStatisticaStatisticasGrado: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+InhumateSyncSynchronisar 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 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 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 concordaActualisateCargar 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.15+dfsg/locale/is/000077500000000000000000000000001353113723000153115ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/is/LC_MESSAGES/000077500000000000000000000000001353113723000170765ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/is/LC_MESSAGES/anki.mo000066400000000000000000000015021353113723000203530ustar00rootroot00000000000000\    !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: 2019-07-02 11:47+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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) (1 af %d) (af) (á)%% rétt%(a)0.1fkB upp, %(b)0.1fkB niður%(a)0.1fs (%(b)s)anki-2.1.15+dfsg/locale/it/000077500000000000000000000000001353113723000153125ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/it/LC_MESSAGES/000077500000000000000000000000001353113723000170775ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/it/LC_MESSAGES/anki.mo000066400000000000000000002431711353113723000203660ustar00rootroot00000000000000l;`O aO lOxOO"O OO OOOO8PTNT]TlT}TTT0T TTT T TU UU3Ur7UjUVVVV'V.V3V8VOzPzz]z F{8R{{{{{{{ {{{| | |"| '| 1| >|H| O|\|b|)q|0||||4|!0}R}e}#{}}}:~+N~z~~~ ~.~~~~~  &- 4B Zd+l   % 0=NU"ǀۀ  Á́с )9 HSX l w 8,ς "3.9 hFr҃ 4 @S Z1fȄׄ*! ֆ "0"S v͇  $.?G 5$)22҉1PU[jz <Ċ ', 55@v  ˋ !07H\bs{ ˌNߌ. 4APV^ b&l  ̍֍'/!E+g#!ǎ <! ^k]{aُ;Um!8 ܐ=,(U]`,r#gk *2A P [g m yÓ5ؓ < Y do,#&ߔV8]Eܕ*6>0uÖ$ٖ,+-D+r8ח #!0E vŘ ֘ 2NWlt#̙iy /  + @"Nq y1 țӛ " ) 6 BO_~-Ü(˜ &0 7Bb i uV  ,ўG 4Uf"  ßӟ)4Tq*̠''-@56v !?ڡMhn ~  ͢,٢ !/ 5 @ NXs{ʣߣ   !B!Udw ܤ +(0Y sX+"4&Wz~0VD+0ǧ>F7'~*(Ѩ1,,IY'#_˫e+8CQ(Frgx u/.M^S bn} !ȲͲg'SL{ȳ^e}.ô*,Bo v U$1V"gZS09$j" bķ{'^5TW]U}  ǾҾԾپ ޾ +B]vʿ޿  $&79  # ?J LW)m='-'U'}))^ @l!%%%+#Q%u ,<Rcsw{   " )5F\l!r D @N_ fq|f;[4/6-f#!i\ | BbI? /:DNp,w"  6GXk +(  &-T [hz 4e&`L73+HZ]HC_l>+ j|v?63jsMz! != +;Xio  "0S8  $<8<unv|  $AFGS % 5CZw*66+,Xw!  ! 6B"Vy/  +8Ve +.?6ngE$*j #   ' 2 =HOX_fmt{    $0BQ`w! +#<ARj{5 5+ 3ARiyI03E)y.KSYr=a lrw H?Sfz    ( 6 AOV+e2B39"m!.7 * 2== { ?OV _iqz Y"9|  +  !(9HQcr N&C jw} 1E O)n C  (<5r.?)'#%(7+`(+ -A Ze }HK%i' @Aa"" )6#Osz>F1x    ) ; J Z k r     '     $ 1 LI        1   2 H  Y e !y    % ) 15 g #| 9 !      =# a  r ~ l l#3U"Bx#D.12  )@GZm< '& N o {0:%(]B9N)D!U+w5% +0 \,}00   ! +L+b?%%:NS[ r~ 6(3\ux<E_q6 7(Fo ~A $*9 dp%-  ;1Gy   - !(\J=X_5 O &h ,     !!62!Ii!)!-!+ "'7"8_"@"" ""Q"<N##)#L#`$u$|$$ $ $$$$ $-%.% I%W%^%n% %(%%%%"%&&(&:&K&S& f&'r&&1&~&h' ''' ''''3'#(';(c(^(6(/)(G)p))-*W>*4*D*A+@R+'+*+.+.,$D,Qi,,,--.y/n/0(0u1R141I2n`22T3[3 x33W444k1555r6666 6 6 606'7(,7U717S08879F9`9 h9!t99 9899 :":"4::W:: :!: :":s:n;(;;;N;d,<'<&<<<=i==J >rT?R? @l&AADDDDDD DDDDE EEE(E,E@EZEnEEEEEEE!F'F+F2F 5FAF IF UFcFeFwF0)f2/3\/bdb(Hnj1N"9;XDil=cajp@+5  ,#yel1IH&[M]Tb_)PN Oz.+VlOr<Vb}P 8AXpK'z{`9ME/xLphK:!N2J g+6SA^wG@'$ZP*yS4-7C`d"aq7'3%cwd[\ `  T  s G9K7 w?$;=Ou:~R5E}@F(BCyJW>vlk~01?d&q <>F?ARLM|ZTvQB^${*tX 0c|#4DIm6a_R[|E5Z4z,meI\ x*gs3%hUwf ;t;v4`5nf^Mnv=#!orW_Wu=?"AGt&]>y)9<YD_JL*U%$u) sWBC}ENF8IKQapxrV:TQFi.RYg<.'|sokie Y6#>f8"678 @ (UkD~(-jm^mCJ~2B-3,xLqqHu\}oc{hjk [Z/ ]Ugzn,V-%.t 0:1SP+&e]{OXQoGHr !Y2!Shi (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-06-29 15:40+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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) Language: (1 su %d) (disabilitato) (disattivato) (attivato) Ha %d carta. Ha %d carte."Segoe UI"%% 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 .anki sono di una versione molto vecchia di Anki. Puoi importarli utilizzando Anki 2.0, disponibile sul sito di Anki.I file .anki2 non sono importabili direttamente - importa invece i file .apkg o .zip che hai ricevuto./0d1 101 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 note...Aggiungi inversaAggiungi etichetteAggiungi etichette...Aggiungi a:L'add-on non ha configurazioni.L'add-on non è stato scaricato da AnkiWeb.Add-onAdd-on che possono essere coinvolti: {} Aggiungi: %sAggiuntoAggiunte oggiAggiunto duplicato con primo campo: %sRipetiFallite oggiCarte fallite: %sTuttele carte seppelliteTutti i tipi di carteTutti i mazziTutti i campiTutte le carte in ordine casuale (non ripianificare)Tutte le carte, le note e gli elementi multimediali di questo profilo verranno eliminati. Sei sicuro?Tutte le ripetizioni in ordine casualeConsenti 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 leggere i dati del tuo profilo. Le impostazioni non sono state riprese.Anki 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)Sfoglia add-onAspetto del browserAspetto del browser...Opzioni del browserCreaSeppellitoCarte gemelle seppelliteSeppellisciSeppellisci 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.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 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.ContinuaCopiato negli appuntiCopiaCopia informazioni di debugCopia negli appuntiCarte mature corrette: %(a)d/%(b)d (%(c).1f%%)Corrette: %(pct)0.2f%%
(%(good)d di %(tot)d)File add-on difettoso.Non è stato possibile connettersi ad AnkiWeb. Controlla la tua connessione alla rete e prova di nuovo.La registrazione audio non è stata possibile. Hai installato 'lame'?Non è stato possibile salvare il file: %sStudio focalizzatoCrea mazzoCrea mazzo filtrato...Crea immagini scalabili con dvisvgmCreatoCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 personalizzatoPassi personalizzati (in minuti)Personalizza i modelli delle carte (Ctrl+L)Personalizza i campiTagliaDatabase 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: %sAbilita secondo filtroFineInserisci 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 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'installazione di %(base)s: %(error)sErrore nell'eseguire %sPianificatore V2 sperimentaleEsportaEsporta...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 2Filtro...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 HTMLDifficileIntervallo fissoAccelerazione hardware (più veloce, può causare problemi di visualizzazione)Hai installato latex e dvipng/dvisvgm?IntestazioneAiutoFacilità massimaCronologiaPagina inizialeSuddivisione per ora del giornoOreOre con meno di 30 ripetizioni non sono mostrate.IdenticoSe 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 HTML e riferimenti multimedialiIncludi 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-onInstalla Add-onInstalla da file...Installato %(name)sLingua dell'interfaccia:IntervalloModificatore intervalloIntervalliManifesto add-on non valido.Codice non valido, o add-on non disponibile per la tua versione di Anki.Codice non valido.Configurazione non valida: Configurazione non valida: l'oggetto al primo livello deve essere una mappaNome 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ù lungoFacilità minimaGestisciGestisci i tipi di noteGestisci i tipi di nota...Gestisci...Carte seppellite manualmenteMappa su %sMappa verso le etichetteContrassegna notaBlocco MathJaxMathJax chimicaMathJax 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.Oggi non è stata studiata nessuna carta.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 aggiunte dal file: %dNote trovate nel file: %dNote in testo sempliceLe note richiedono almeno un campo.Note saltate, poiché già nella tua collezione: %dNote etichettate.Note che non hanno potuto essere importate, in quanto è cambiato il tipo di nota: %dNote aggiornate, in quanto il file contiene una nuova versione: %dNienteOKPiù 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...Filtro opzionale:OpzioniOpzioni per %sGruppo di opzioni:Opzioni...Contrassegno arancioneOrdineOrdine di aggiuntaOrdine di scadenzaSovrascrivi modello retro:Sovrascrivi carattere:Sovrascrivi modello fronte:Add-on di Anki impachettatoMazzo/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.Verifica la tua connessione ad internet.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 PyAudioRimuovi la cartella %s e riprova.Segnalalo al rispettivo autore dell'add-on.Riavvia Anki per completare il cambiamento di lingua.Esegui Strumenti>Carte vuoteSeleziona un mazzo.Seleziona dapprima un singolo add-on.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...Profilo corrottoProfiliÈ necessaria l'autenticazione proxy.DomandaFondo 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 mazzoRipeti carte fallite dopoSostituire 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 mazzoRipristinato le impostazioniRiprendi 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 in:Cerca 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 in bianco su nero (modalità notturna)Mostra le carte in apprendimento con grandi passi prima delle ripetizioniMostra 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:SaltatoAlcune carte correlate o seppellite sono state rinviate ad una prossima sessione.Alcune opzioni avranno effetto solo dopo il riavvio di Anki.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...Studiato %(a)s %(b)s oggi (%(secs).1fs/carta)Studiato %(a)s %(b)s oggi.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 pianificatore sperimentale potrebbe causare una pianificazione errata. Assicurati di aver letto prima la documentazione. Procedere?Il primo campo è vuoto.Il primo campo della nota dev'essere mappato.Gli add-on seguenti sono incompatibili con %(name)s e sono stati disattivati: %(found)sIl seguente carattere non può essere utilizzato: %sGli add-on seguenti in conflitto tra di loro sono stati disattivati:Il 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.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?Questo azzererà tutte le carte in apprendimento, cancellerà i mazzi filtrati e cambierà la versione del pianificatore. Procedere?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 accedere alla cartella multimediale di Anki. I diritti di accesso alla cartella temporanea del tuo sistema potrebbero essere impostati in modo non corretto.Impossibile importare da un file di sola lettura.Impossibile spostare il file esistente nel cestino - prova a riavviare il computer.L'add-on non ha potuto essere aggiornato o eliminato. Avvia Anki tenendo premuto il tasto Maiusc per disattivare temporaneamente gli add-on, e riprova. Informazioni di debug: %sDisseppellisciSottolinea 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?AggiornatoCarica 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.Che cosa vuoi disseppellire?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+ImparaLa tua collezione su AnkiWeb non contiene nessuna carta. Sincronizza nuovamente e scegli invece "Carica".I 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.Lo spazio su disco del tuo computer potrebbe essere esaurito. Elimina qualche file non necessario e riprova.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 mezzanottein %s giornoin %s giorniin %s orain %s orein %s minutoin %s minutiin %s mesein %s mesiin %s secondoin %s secondiin %s annoin %s annierrorimeno di 0.1 carte/minutomappato su %smappato verso le etichetteminminutimeripetizionisecondistatistichequesta paginascollezione intera~anki-2.1.15+dfsg/locale/ja/000077500000000000000000000000001353113723000152705ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ja/LC_MESSAGES/000077500000000000000000000000001353113723000170555ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ja/LC_MESSAGES/anki.mo000066400000000000000000002461501353113723000203440ustar00rootroot00000000000000eDl6H H HHH"H HH HH I)I8;ItIII"I$I$I&J"=J`J4sJ2JJJ" K$,K$QK$vK KKKKKLL&L=LPL eLsLLLLLLL LLLLL LLLLL LL L MM %M0M7MOM_MnM}MMMM0M MM M MN NN5N9N;N>NFNMNRNWN[N_NTcNN,N(NO!/OQOfiOO OO P PP-P?PTPekPP7{QHQ)S &U0U5CUXyUYU%,VkRV V VVVV W WW /W =W JWVW _WkWsW'WWWW W$WW XX!X 0X :XKEXX1XXY"i[[ [[[[\I/]Ry]v]C^7^ %_w1_E_@_0`7`F`RN```-a#Ha#laa aa(ab b'b ;bHbabrb wb b bbbbbb c ccJ&cqccccccc c c)c' d1ddddeee e !e ,e 6e AeLe ^eke{ee3eeSe/f8f?f Ff Tf`foffff"fff0vggg&gg hh h!h 2h >hKh ]hghmhhhhh-hhhi i(i5Bi xii jj8j5QjPj1j k!k &k2kJkRkYk`kgk nk yk kkkkkkkkkk k k k k l l l +l 8l ElRl Yl dlrll ll lllllm m (m 4mBmGm/Xmmmm%mm m m m m n n#n7nHMn,n(nn oFoNfoPo>pPEpp]p p8 qBqIq_qtqqq qqqq q qq q q qq rrr)(r0Rrrr4r!rrs#sAsZssst ttttt 9t GtStZt atot ttt tttttttuu u (u5uNMu"uuu uuuuv vvvvv vvww!w1w @wKwPw dw ow{www wwwww.wFw3xLx lx xx4xxx x1xy"yByQy*eyy .{<{ [{h{"{"{ {{||%|:|M|a|j| ||?| ||$|)};}}2}~%~:~Y~^~d~s~~ ~ ~~~~<~   05 >5I       &7?Ys x  ŀˀӀ ׀  $3Kbu}!+#!7MR Z d<o ]ɂa'! ̓Ճ؃,#߄kot  …΅ ԅ  *4:X u ,#׆V8REч*03d,Ĉ-݈+ 87p y# މ .<AHX_gxĊ̊#$=Ligы؋ / (5 FQi ~" 1Œ  -N U b n{-" )3:Z a m{V ,ɏG ,M ^k s)ې4*S'~@6 ,!7?YM "5 L,X  ͓ד,I^ f s  !Ԕd [fjy (ؕ X.+"&֖0+H>tF'*"(M1v,I՘'7##_Ge 8=C͝(F:r u̟/BMrƠg v !ܡ'L't{. ,3` gr U$("9Z\S0 $<"a {^.5çŲ}" ̫ ޫ  -HcjǬϬ լ߬ ֮ -,E GT<g7),,V,*ΰB EL*)б--(0V*˲ ڲ  !+2IP Wa hry &̳   ,;JYk{ & ڴ")4^ml %.,Ly}^`=)! "¸ܸ"1I cqQǺ]w\"kaWH? -)Ha!w  6I< I 4Eat!B1;t\6 DI&\%qgJh Yeqh -u%3301b?~   9Un#)#  9$^3q6 )B<3   (;O2b! K*KNv &'BjH Cn'6--[n!u*''" 30= nx -Q  &079>cx  33 zA11 3$F ku|   ' 4 A N [ hu$|)'$+H!['} 9  &0EI   6-F0t=B]&HN;DXU=R1`FI Y.z2' ' 3=$D6i  V0|&+'/@WK0G0P 60AQ g0@Sfm1SI"`!*  1 <B[w~!$3 )6 H R _i:{!b-$N'E mzQ%8G$cm$$4Y-l*-*'4'\'*! FWvqE:1GMi a*Y-<  m   !:P_6u - #-F!Y{ 66$Lq({=H$ *0 `[ 6     50 !f !  }s * ? '\    <  9  '7Mi |  9"\'y !!<-L7/R:GR'H$FIknb$3'5 7D$W|     %'2Z'j/!$;'"8-#'Q*y2N [n6/ :)P$z    B' jw XeutQ' * &   !!-!!C!Te!6!6!*("3S"<"6"" #c#Dz##5#]$yl$ $ $?%A%H%O%W%9s%!%B%.&A&]&d&}& &3&&&&#'7'P'W'j'}' '''"'T'0( ((()1)8)T) k)Bx)*)9)- *N*7*:"+!]+*+Z+",|(,?,,-'#-K-Oj-~-59.'o//6001u+2E33Z41$5>V5556!<6^6[e67a99a:h:0;"N;&q;; ;;;$;</<9F<~<<= =,=!>=`=Tg=6==#>U5>>>!>>->?<??$@)@x@J1A|A*AA+AB7BErEf8FGGJJJK! K.KDKWK[K _K iKsK zKKKKKKKKK K L LLL.L2L9LILMLfLcq&>MV :e `Olw;ZuShU']m)1i6dgH.3~28V~ >SRzI\WE_4 q u<T)R9Tiz7QWOV,-.1/#023bY5JDYPt}GEc4]  F.$AC~= |"? N? CntR%;=- $ a{| FKeXVx1*l(IFN*5UX&LOD^phC;1"L?sI.yXP|MOZMU+7Me9y#\vBS@^[# 6mUPl3"'YC>P;x(BK[`}^\do7rs@pH8/  /wrK:k]64[_gA+*j9Q_!ub$}avn-@da aD?N%&'()*+dojGHb<LtmQo0T h!B)f8E_{g`zf{,=RGpjF<+(,W-s<"/,vT!03 LAw`:'y6S%QD8r! ]f7e>X#xEJ &ZBn$Wk=92I\ 0J545 Y^G:cKJcNHb% Z[iq2@kA (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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).../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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll 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)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)Browse Add-onsBrowser 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 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'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+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+WCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCustom steps (in minutes)CutDatabase 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 Unused FilesDelete 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 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface 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 intervalLowest 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 have been studied today.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...OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder 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 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.QuestionQueue 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 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.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 (%(secs).1fs/card)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 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 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?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 minutein %s minutesin %s secondin %s secondslapsesless 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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-07-21 14:59+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: 2019-07-22 05:40+0000 X-Generator: Launchpad (build 19010) Language: ja_JP (1 / %d) (無効) (無効) (有効) %d枚のカードが含まれています。"Segoe UI", "MS PGothic"%正解率(%)%(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)(カードを一枚選択してください).../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裏面のプレビュー裏面のテンプレートバックアップ中...バックアップ基本Basic (裏表反転カード付き)Basic (裏表反転カード追加可能)Basic (解答タイピング入力)青フラグ太字 (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をファイル %s を保存できませんでした詰め込み学習デッキを作成フィルターデッキを作成...作成日Ctrl+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+W累積枚数〔折れ線グラフ〕累積時間 (%s)〔折れ線グラフ〕累積回答数〔折れ線グラフ〕累積枚数〔折れ線グラフ〕現在のデッキ現在のノートタイプ:カスタム学習カスタム学習セッションカスタム学習ステップ(分)カットデータベースを再構築し最適化しました。日付学習日数認証解除デバッグコンソールデッキデッキを強制指定プロファイルを開いた時にデッキを読み込みます。デッキ間隔が大きい順Default次の復習予定日削除カードを削除するデッキを削除白紙のノートを削除ノートを削除するタグを削除使用されていないファイルを削除%s からフィールドを削除しますか。選択した%(num)d個のアドオンを削除しますか?カードタイプ '%(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安全な接続を確立する際にエラーが発生しました。通常このエラーは、アンチウイルスソフト、ファイアウォールソフト、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 秒メディアファイルを含めるスケジュール情報を含めるタグを含める今日の新規カードの上限を上げる今日の新規カードの上限に追加今日の復習カードの上限を上げる今日の復習カードの上限に追加間隔が小さい順アドオンをインストールするアドオンをインストールするファイルからインストール...%(name)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):日付更新時刻フラグなしこのデッキの今日の課題はまだ残っていますが、どれもまだ学習予定時刻に達していません今日はまだ1枚もカードを学習していません。指定した条件に一致するカードはありませんでした。白紙カードはありません。復習(熟知)の正解率: -- (未復習)使用されていないファイル、行方不明のファイルはありませんでした。利用可能なアップデートはありません。ノートノート 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がインストールされていないと再生できません。スペース開始位置:復習開始時の「易しさ」(復習間隔の伸び率)統計統計間隔:学習ステップ(分)学習ステップは数字で指定してください。同期を中止しています...今日は%(a)sを%(b)sで学習しています (%(secs).1f秒/枚)今日は%(a)sを%(b)sで学習しています今日学習したカード学習デッキを学習するデッキを選択...学習するカードの状態やタグを選んで学習する書式書式 (カード間で共有)下付き文字 (Ctrl+=)Supermemo 用の XML 形式 (*.xml)上付き文字 (Ctrl++)保留カードを保留ノートを保留保留保留+延期同期音声と画像も同期する同期できませんでした: %s同期できませんでした。インターネットに接続していません。同期するにはお使いのコンピュータの時計を正しく設定する必要があります。時計を正しく設定してから、もう一度実行してください。同期中...タブ重複にタグを付けるタグを付けるだけタグ対象デッキ(Crtl+D)対象フィールド:テキストテキスト(タブ区切りまたはセミコロン区切り) (*)そのデッキは既に存在します。そのフィールド名は既に使用しています。その名前は既に使用しています。AnkiWeb への接続がタイムアウトしました。お使いのネットワーク接続を確認してから、もう一度実行してください。既定の設定「Default」は削除できません。既定のデッキ「default」は削除できません。デッキ内のカードの内訳最初のフィールドが空欄です。ノートタイプの最初のフィールドは割り当てなくてはなりません。次の文字は使えません: %sこのカードは表側が白紙です。[ツール] から [白紙カードをチェック] を実行してください。追加するカードは表側が全て白紙になります。新規カードの追加枚数カードに回答した回数復習期日が来るカードの枚数各ボタンを押した回数指定したファイルは正当な .apkg ファイルではありません。指定した検索項目は、どのカードにも一致しませんでした。検索項目を変えてみてください。要求した変更を行うには、次回のコレクションの同期の際にデータベースの完全なアップロードが必要です。他の端末で復習やその他の変更を行ってまだ同期が済んでいない場合、これらの変更は失われます。処理を続けますか。カードの学習に費やした時間新規カードはまだ残っていますが、今日の最大出題数に達しました。 最大出題数を増やすこともできますが、さらにカードを追加すると それだけ短期的に復習の負荷が掛かることに注意してください。最低限一つのプロファイルが必要です。この列は並び替えできませんが、検索でカードタイプを絞り込むことができます。例)検索欄に「card:1」と入力して検索この列で並び替えることはできませんが、左側のパネルからデッキを一つ選択するとそのデッキで絞り込むことができます。このファイルは、正当な .apkg ファイルではないようです。このエラーが AnkiWeb からダウンロードしたファイルで発生した場合、ダウンロードが失敗した可能性があります。再度ダウンロードしても、この問題が続くようであれば、別のブラウザからもう一度実行してください。このファイルは既に存在します。上書きしますか。このフォルダーは、全ての Anki データを保存する唯一の場所です。これによってバックアップが簡単になります。別の場所を設定するには次の情報をご覧ください: %s これは標準のスケジュールから外れて学習する特別なデッキです。これは {{c1::sample}} 穴埋め問題です。%d枚のカードが作成されます。続行しますか?この処理は、既存のコレクションを削除し、今から読み込むファイルのデータに置き換えます。本当に実行しますか?時間タイムボックスの時間枠復習下の「アドオン一覧」ボタンをクリックすると、使用可能なアドオンの一覧が表示されます。

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

%(cont)s穴埋め問題のノートタイプがありますが、穴埋め問題を作っていません。続行しますか。デッキの数が多いようです。%(a)s をご覧ください。%(b)sまだ録音してません。最低でも一つの列は必要です。復習(未熟)復習(未熟)+基本学習+再基本学習この変更は複数のデッキに影響が及びます。現在のデッキのみに変更を加えたい時には、まず最初にオプショングループを新規追加してください。コレクションが破損しているおそれがあります。このような破損は、Ankiを使用中に中身のファイルの移動やコピーを行った場合や、コレクションをネットワークドライブやクラウドドライブに保管している場合に起きることがあります。コンピューターを再起動しても問題が続く場合は、メニューの[ファイル]>[プロファイル]でプロファイルウィンドウを開き、自動バックアップされたコレクションを使用してください。お使いになっているコレクションは一貫性が失われています。[ツール] から [データベースをチェック] を実行してから、再度同期してください。お使いになっているコレクションかメディアファイルが大きすぎて同期できません。コレクションを AnkiWeb にアップロードしました。 他のデバイスを使っている場合は、直ちにそのデバイスで同期して、このコンピュータからアップロードしたコレクションをダウンロードしてください。この処理の後は、復習やカードの追加は自動的に統合します。このデッキは AnkiWeb 上の単語帳との違いが大きくなり、統合できなくなりました。どちらか一方で残りを上書きする必要があります。 ダウンロードを選択すると、AnkiWeb からコレクションをダウンロードします。前回の同期以降にこのコンピュータ上で行った変更は失われます。 アップロードを選択すると、AnkiWeb にコレクションをアップロードします。前回の同期以降に AnkiWeb 上や他のデバイスで行った変更は失われます。 全てのデバイスで同期した後は、復習やカードの追加は自動的に統合します。ファイアウォールかウイルス対策ソフトがAnkiの接続処理を妨げています。Ankiを例外リストに追加してください。[デッキなし]バックアップ枚数選択中のデッキから取得枚。出題方法:コレクション日日デッキ全期間重複ヘルプ表示しない時間時%s分%s秒回カード 0.1 枚以下/分%s に割り当てるタグ に割り当てる分分か月枚の復習カード秒統計このページ週コレクション全体~anki-2.1.15+dfsg/locale/jbo/000077500000000000000000000000001353113723000154505ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/jbo/LC_MESSAGES/000077500000000000000000000000001353113723000172355ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/jbo/LC_MESSAGES/anki.mo000066400000000000000000001665711353113723000205340ustar00rootroot000000000000004L*x8 y8 888"8 88 888 989T9d9u99"9$9$9&:"-:P:4c:2:::":$;$A;$f; ;;;;;;<<-<@< U<c<t<x<|<<<< <<<<<< <<<<< <= === ,=7=>=V=f=u=====0= === > >>!>r8>j>??%?*?/?3?7?,;?(h??f?@ -@:@ L@ Y@d@t@@@e@A7AHA)CD mEwE5EXEYF%sFkF G GG G;G LG VG`G vG G GG GGG'GGH&H.H 4H$@HeH kHwHHH H H,HKH 5IVIkIJ"KL $L2LdDLLMINRYNvN#O7O PwPEP@PQQ&QR.QQQ#Q#Q QzRR(RR RR RSS+S 0S =SKSSSYS tS~SJSSSSTTT%T5T :T DT)NT'xTTTTTTT T T T T TT UU.U@U3FUSzUUUU U UUVV9VMV"`VVV0W/FWvWW&WW WW WW X XX ,X6X]P]E^]N^ ^8^^^_#_?_C_ R___e_j_o_ t_ ~_ __ ___0__``4`!S`u``#```]a+qaaa a.aa bbb $b2b JbTb+\bbb bbbbbbbb cN c"Zc}cc cccccc cccd dd d *d6d,;dhdod tdd dFddd d1e8eHehewe*e!e ee ff"2f"Uf xffffff?f 6gDg$\g)gg2gghh&h 6h @hNh<Thh h hhh hh h h i iiii $i/iCi IiVieikisi wiii iiiii!ij# j!Djfj|j j j<j jj]jNkhk!k k,kk#kl ll l/l >l IlUl[l5pl lll l l&lVmEhmmm*m6n0Gnxnn$n,nn-o+Do8poo oooo#o0p HpVpfpopxp pppppppppq qq#2qVqjqqiqqr r/#r Sr`r qr|rr r"r r1r s"s 3sTs [shsssssss ss ss s ssVt etotGt ttt*u@+u luMwuu,uu v!v 'v 2v @vJv Rv _v lvvvvv vvv vvVw>[wFw'w* x(4x1]x,xIx'y.y#z>z85{n{({F'|rn|g|I} N}X}/~M>~~~3 BN] c n z',+X_ p{Zʀ% +{75ς  '27<Qh ΃؃ υ݅G1y)%†#:Rj .!܇ *Ge Ȉ׈   ( 7 C O [ g s ډ  ' -7#=a w% ʊ!܊$#)P2  ŋӋ#ً 1 =IX g s5$ۍ ڎ }+Eft! ''2ZAs)D#Ŗ֖ߖ "+4`~̗&՗- *48mH"%H^u5c3"/V/ ##=FŞw sG@ġMzU[>DX\a!,B -P.~sQ-G^d.֧93Li!ۨ? @` Ω  0 < H*T%٪3ߪ` t""ʫ& (2[@uI44;p#= .La!GŮ %!DG ;$& ;F fZq.̰]@Y$α!  .O^ mLxŲ ˲ ײ : ?2Lųݳ$G,NtSôPSh;((!4J(K k ($Mm#1ָܸ %,RXk#qu6 B^dS+:+fC'ֻ1Jϼ1 L V `$(ʽ5)2B8{ !ž*.PY5  )2;A]"w ". X x Y( 6@0V61D.s?IL?V *GDZ+L2.a?y  1Z: 3E]clrx)  "8%K'q!!0D2w .'!l5DG</"lD:  7(Bk }$; 0 HRmXl"Q&tC/HKX+@-3<apK  ( 3$=b6   28>V\o5-B1t t!#3$WB|('+9e){5 "5> Xy  '4w\`dvTMFt_B!)Kaj /KdjUlQ3) B4AwAI EfIfG{#m= :z<z29 '>[5a )/IFi  $5R ak ~ )>S\*NHvG (0&-WyE?5 )+!MXR"j pkI6R33B;NC\p H.1V,fIZ ^sO_|\PUB3~Tk]O`SOtk*x;^,hXx=vCn(LTi`9( GHMn5%2 5 _YS{?yU\XIzu@  [L:D.C48-~>]zi '~ P$G"var^o!l%$# Q+nu>>N *WcK$+bl:7wFEd}pLwU[?< ad,%0-./0&{1mAcfe|/&Z;o QV|J66@A8ZYQ8:g"edA7=hrD!lr#c iWSTfJuK<eaM4tJ@2hzVjF}B)9{tqb` RY1KqP#/y<q=)]7g[gsF}_wxbm92o'j4Es'mD (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)(please select 1 card).anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead.1 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: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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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 FlagAppeared twice in file: %sAre you sure you wish to delete %s?At least one card type 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 PreviewBacking Up...BackupsBasicBasic (type in the answer)Blue FlagBrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browse Add-onsBrowser AppearanceBrowser Appearance...Browser OptionsBuildBuriedBuried SiblingsBuryBury CardBury NoteBury related new cards until the next dayBury related reviews until the next dayCancelCardCard %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 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear UnusedClear Unused TagsClone: %sCloseClose and lose current input?Closing...Code:Collection exported.Collection is corrupt. Please see the manual.ColonCommaConfigConfigurationConfigure interface language and optionsCongratulations! You have finished this deck for now.Connecting...Copied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...CreatedCurrent DeckCurrent note type:Custom StudyCustom Study SessionCutDatabase rebuilt and optimized.DateDays studiedDeauthorizeDebug ConsoleDeckDeck will be imported when a profile is opened.DecksDelays until reviews are shown again.DeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete Unused FilesDelete 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&xitEaseEasyEditEdit "%s"Edit CurrentEdit HTMLEditedEditing FontEmptyEmpty Cards...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 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 installing %(base)s: %(error)sError running %sExportExport...Exported %d media fileExported %d media filesField %d of file is:Field 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 ReplaceFinishFirst CardFixed %d card with invalid properties.Fixed %d cards with invalid properties.Fixed AnkiDroid deck override bug.Fixed note type: %sFlagFlag CardFolder already exists.Font:FooterForecastFrontFront PreviewFront TemplateGenerated on %sGet Add-ons...Get SharedGoodGreen FlagHTML EditorHardHave you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryIdenticalIf you have contributed and are not on this list, please get in touch.If you studied every dayImportImport 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:Invalid 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 regular expression.Invalid search - please check for typing mistakes.It has been suspended.LaTeXLaTeX equationLaTeX math env.Last CardLatest ReviewLearnLearn: %(a)s, Review: %(b)s, Relearn: %(c)s, Filtered: %(d)sLearningLoading...Lowest easeManageManage Note TypesManage...Manually Buried CardsMap to %sMap to TagsMark NoteMatureMediaMinutesMoreMove CardsMove cards to deck:N&oteName exists.Name for deck:Name:NetworkNewNew CardsNew cards onlyNew deck name:New name:New note type:New options group name:No FlagNo cards are due yet.No cards have been studied today.No empty cards.No mature cards were studied today.No unused or missing files found.No updates available.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.Notes added from file: %dNotes found in file: %dNotes require at least one field.Notes tagged.Notes updated, as file had newer version: %dOKOnly new cards can be repositioned.OpenOpen Backup...OptionsOptions for %sOptions group:Options...Orange FlagOrderPackaged Anki Add-onPackaged Anki Deck/Collection (*.apkg *.colpkg *.zip)Password:PastePaste clipboard images as PNGPercentagePeriod: %sPlease check your internet connection.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 give your filter a name:Please install PyAudioPlease remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesQuestionQueue bottom: %dQueue top: %dQuitRandomRandomize 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...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:RescheduleReschedule cards based on my answers in this deckResume NowRevert to backupReverted to state prior to '%s'.ReviewReview CountReview forgotten cardsReviewsRightSaveSave Current Filter...Save PDFSaved.Scope: %sSearchSearch in:SelectSelect &AllSelect &NotesSelect tags to exclude:Selected file was not in UTF-8 format. Please see the importing section of the manual.SemicolonSet foreground colour (F7)Shift key was held down. Skipping automatic syncing and add-on loading.Show AnswerShow DuplicatesShow answer timerShow next review time above answer buttonsSome related or buried cards were delayed until a later session.Sort FieldSound and video on cards will not function until mpv or mplayer is installed.StatsStudied %(a)s %(b)s today (%(secs).1fs/card)Studied %(a)s %(b)s today.Studied TodayStudyStudy DeckStudy Deck...Study NowSuspendSuspend CardSuspend NoteSuspendedSuspended+BuriedSyncSyncing failed: %sSyncing...TagsThat deck already exists.That field name is already used.The first field is empty.The following add-ons are incompatible with %(name)s and have been disabled: %(found)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 provided file is not a valid .apkg file.The provided search did not match any cards. Would you like to revise it?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 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 {{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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?TimeTo 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 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 notesTypeUnable to import from a read-only file.UnburyUndoUndo %sUnknown file format.UnseenUpdate the following add-ons?Upload to AnkiWebUploading to AnkiWeb...Used on cards but missing from media folder:User 1View Add-on PageView FilesWaiting for editing to finish.What would you like to unbury?Whole CollectionWritten by Damien Elmes, with patches, translation, testing and design from:

%(cont)sYoungYoung+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 or a media file is too large to sync.backupscardscards from the deckcollectiondaysdeckin %s dayin %s daysin %s hourin %s hoursin %s minutein %s minutesin %s monthin %s monthsin %s secondin %s secondsin %s yearin %s yearsthis pagewhole collectionProject-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-07-01 18:00+0000 Last-Translator: Ian Townsend Language-Team: Lojban <> 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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) to pa moi lo se %d mei toi to ganda toi to ganda toi to katci toi .i %d mei fi lo kardaSegoe UIce'ise cenlai lo'i drani%(a)0.1f %(b)s fe'i djedi.i kibdu'a %(a)0.1f ki'orbivysamsle .i kibycpa %(b)0.1f ki'orbivysamslesnidu li %(a)0.1f to %(b)s toi.i mo'u ningau %(a)d lo %(b)d karda datni%(n)d moi me'e zoi zoi. %(name)s .zoi%(tot)s mei fi lo %(unit)s%.01f karda fe'i mentu%d karda.i mo'u vimcu %d karda.i mo'u barbei %d karda.i mo'u nerbei %d karda.i mo'u tadni %d karda ca.i mo'u ningau %d karda selcmi%d selcmi.i ba kibdu'a lo datni be %d nu basti lo ganvi.i mo'u kibycpa %d ganvi datnyvei%d karda datni.i mo'u jmina %d karda datni.i mo'u vimcu %d karda datni.i mo'u barbei %d karda datni.i mo'u nerbei %d karda datni.i %d karda datni cu stodi.i mo'u ningau %d karda datni%d nu morji.i cuxna %d da%s fukpidjedi li %scacra li %smentu li %smentu li %smasti li %ssnidu li %s.i ba vimcu %snanca li %sdjedi li %scacra li %smentu li %smasti li %ssnidu li %snanca li %sdatni la .ankis.nu purci catlu je cu ci'erse'akardanu cipcta lo datni vasrunu sutra tadninu bixygaunu barbeidatnyveinu siskunu klamadjunoidjunoisidjunu nerbeidatninu lo se cuxna cu se basti lo fatnebavla'i fi lo'i kardakarda datninu catlu lo se samtcise'a datnyveimeite tcimi'eprula'i fi lo'i kardanu basti lo tcikanu rupsra lo favgau be la .ankis.nu samymo'i lo pilno datni poi dratatutcinu xruti.i la'o zoi. %(row)s .zoi se srana %(num1)d datnyvau .i nitcu lo se %(num2)d meito %s pi'i ro co'e cu drani toimo'u se vimcufanmona'i se julneca'o te cilrecnino.i ko cuxna pa je nai za'u pa karda.i lo datnyvei pe zoi zoi. .anki .zoi se krasi la .ankis. poi mutce tolci'o .i do ka'e pilno la .ankis. xi re lo nu nerbei dy. .i do ka'e cpacu .abu lo me la .ankis. ku kibystu.i ka'e nai nerbei lo datnyvei pe zoi zoi. .anki2 .zoi .i ko basti nerbei lo datnyvei pe zoi zoi. .apkg .zoi ja zoi zoi. .zip .zoimasti li pananca li pali pa no tcikali re re tcikali ci tcikali vo tcikali pa xa tcika%d kardanu catlu lo nurfu'i datnyveimeinu vitke lo kibystunurfu'i
.i la .ankis. cu cupra lo nurfu'i be lo do karda selcmi selcmi co'a ro nu to'e samymo'i ri kei je ro nu ri co'a datni sarxese barbei datnyvei klesise siskunilbra lo ci'artadjici'artadjidatnyvause barbeibastinu co'a datni sarxenu co'a datni sarxe
.i ca ganda .i lo nu da te cabra fi lo nu co'a datni sarxe kei batkyuidje cu rinka lo nu katci

.i .ei da jaspu do

.i nitcu lo ka ce'u ponse pa jaspu noi nonseldi'a vau lo nu co'a datni sarxe .i ko co'a se jaspu je cu samci'a lo plicme je lo japyvla lo cnita

.i la .ankis. cu cnino

.i la .ankis. xi %s co'a gubni

nabmi

ni'o da goi ny. pu nabmi .i do bilga lo ka ce'u terca'a la .ankis. ca'o lo nu la'o zoi. Shift .zoi katci vau vau noi rinka lo nu lo se samtcise'a cu zasni ganda

ni'o ga na ja ga jo ny. nabmi gi lo se samtcise'a cu katci gi ko terca'a fi lo se samtcise'a batkyuidje pe la tutci je cu gandygau su'o se samtcise'a je cu jai gau rapli pu'o lo nu do facki lo du'u ma kau poi se samtcise'a cu gasnu ny.

ni'o ba lo nu facki kei ko te notci ny. lo zvati be lo se samtcise'a te fendi be lo sidju kibystu

.i di'e samcfisisku datni

nabmi

.i da nabmi .i ko terca'a la'au nu cipcta lo datni vasru li'u pe la tutci

.i ga na ja lo nabmi cu renvi gi ko te notci ny. lo zvati be lo sidju kibystu je cu fukpu'i lo datni poi cnita ku zy.

se tolju'isei sa'a na'e me la .iunikod. ku lerpoi.i zukte lo ka ce'u samci'a fi ti vau lo ka ce'u sisku .i lo nu katcygau la'o zoi. Enter .zoi rinka lo nu catlu lo karda selcmi poi se cuxna.i ki'e sai ro da poi stidi ja cu te notci lo samcfi ja cu rupsra.i ro da poi karda zo'u lo za'u moi temci be lo nu do morji spuda fi zo fu'i mapti fi lo ni tu'a da za'e frili ca'e.i .e'a nai lo'e se julne karda selcmi cu se pagbu su'o karda selcmi.i da nabmi fi lo nu lo ganvi co'a datni sarxe .i do bilga lo ka ce'u te cabra fi la'au nu cipcta lo ganvi li'u pe la tutci je cu za'u re'u gasnu lo nu co'a datni sarxe noi rinka lo nu ckire.i sisti ki'u la'e zoi zoi. %s .zoidatni la .ankis.nu jminanu jmina (Ctrl+Enter)nu jmina pa karda klesinu jmina pa datnyvaunu jmina lo ganvinu jmina pa karda selcmi poi cnino (Ctrl+N)nu jmina pa karda datni klesinu jmina lo karda datninu jmina lo fatnenu jmina lo tcitanu jmina lo tcitate jmina.i zi'o tcimi'e lo se samtcise'a no da.i kibycpa lo se samtcise'a na'e la .ankiueb.se samtcise'a.i la'e di'e se samtcise'a je cu srana la'a cu'i {} nu jmina la'o zoi. %s .zoise jminase jmina ca lo cabdei.i mo'u jmina pa fukpi poi se srana zoi zoi. %s .zoi poi pa moi datnyvaufu'i naito'e frili ca lo cabdei%s da nu to'e friliselcmi ro karda poi zasni se mipriselcmi ro karda klesiselcmi ro karda selcmiselcmi ro datnyvauporsi lo cunso lu'i ro karda to na basti lo tcika toi.i xu do birti lo du'u do djica lo nu vimcu ro karda je ro karda datni je ro ganvi vu'o pe lo pilnoporsi lo cunso lo selcmi be ro karda poi na'e cninonu curmi lo nu la .xetmel. cu bangu lo datnyvau.i pa da poi se samtcise'a zo'u de nabmi fi lo nu samymo'i da goi sy. .i ga na ja lo nabmi cu renvi gi ko terca'a fi la se samtcise'a pe la tutci je cu gandygau sy. ja bo cu vimcu sy. .i di'e samcfisisku datni lo nu samymo'i la'o zoi. %(name)s .zoi po'u sy. %(traceback)s .i da goi ny. nabmi fi lo nu jonse lo datni vasru .i di'e liste lo'i cumki rinka be ny. tu'e .i lo nu pa malsamtci bandu samtci ja pa benji julne samtci ja pa datni sarxe samtci cu co'e cu zunti tu'a la .ankis. .i ko troci lo ka ce'u gandygau lo samtci .i lo do skami ve vreji cu culno .i la'o zoi. Documents/Anki .zoi poi datnyveimei cu te vreji fo lo srana be lo tcana .i lo do skami ve vreji cu srera tu'u .i .e'u sai do terca'a fi la'au nu cipcta lo datni vasru li'u pe la tutci ku'o noi cipcta lo karda selcmi selcmi lo ka ce'u spofu .i da nabmi fi lo nu samymo'i la'o zoi. %s .zoime la .ankis.karda selcmi co me la .ankis. xi rekarda selcmi bakfu co me la .ankis..i la .ankis. na kakne lo ka ce'u samymo'i lo pilno datni .i na morji fi lo ni lo cankyuidje cu barda je lo do datni sarxe cmisau datni.i la .ankis. na kakne lo ka ce'u basygau fo lo ka ce'u cmene lo do pilno datni kei ki'u lo nu .a bu na kakne lo ka ce'u basygau fo lo ka ce'u cmene lo pilno datni datnyveimei .i ko birti lo du'u ga je curmi lo nu do bixygau la'o zoi. Documents/Anki .zoi gi no samtci poi drata ca'o jonse py dy dy. kei ce'o cu za'u re'u troci.i la .ankis. na kakne lo ka ce'u ganse lo te sepli be lo preti bei lo danfu .i gau ko macnu simbasti lo preti lo danfu.i la .ankis. ka'e nai samymo'i lo datnyvei poi se datnyveimei lo se datnyveimei be la'o zoi. collection.media .zoi.i la .ankis. cu frili je certu ke sepli cilre samtci .i .a bu fingubni.i la'o zoi. AGPL3 .zoi javni lo nu dunda la .ankis. .i lo'e djica be lo ka ce'u facki lo zmadu cu tcidu lo datnyvei be fi lo javni.i la .ankis. na kakne lo ka ce'u samymo'i lo karda selcmi selcmi datnyvei .i ga na ja lo nabmi cu renvi lo nu do krefu katcygau lo skami gi ko terca'a fi la'au nu samymo'i lo nurfu'i li'u noi batkyuidje .i di'e samcfisisku datni .i lo plicme be fi la .ankiueb. ja lo japyvla cu toldra .i ko za'u re'u trociplicme fi la .ankiueb..i da goi ny. nabmi la .ankiueb. .i ko za'u re'u troci ba lo mentu be li so'o .i ga na ja ny. renvi gi samcfi notci ny. ko.i lo ni la .ankiueb. ca zuktce cu dukse .i ko za'u re'u troci ba lo mentu be li so'o.i la .ankiueb. ca'o ganda te zu'e lo nu gunka .i ko za'u re'u troci ba lo mentu be li so'odanfute spuda batkyuidjenu spuda.i lo malsamtci bandu samtci ja lo benji julne samtci cu fanta lo nu la .ankis. cu samjongaucmima lo selcmi be ro lanci tcita.i lo datnyvei cu vasru re la'o zoi. %s .zoi.i xu do birti lo du'u do djica lo ka ce'u vimcu la'o zoi. %s .zoi.i nitcu lo ka su'o karda klesi cu srana ce'unu jmina lo pixra ja lo snavi ja lo vidvi (F3).i ca'o lo nu cikre cu ganda lo ka ce'u datni sarxe zmiku ja cu zmiku cupra lo nurfu'i .i lo nu za'u re'u katci cu se rinka lo nu to'e samymo'i lo pilno datni ja lo nu za'u re'u katcygau la .ankis.nu zmiku lo ka ce'u te snavinu zmiku lo nu datni sarxe kei lo nu samymo'i jo nai to'e samymo'i pa pilno datnicnanocnano fi lo'i temcicnano fi lo'i spuda temcicnano fi lo'i ni frilicnano fi lo'i tadni djedicnano lo ka ce'u temcitrixejvinu co purzga be lo trixe.i ca'o cupra lo nurfu'inurfu'isampusampu je cu nitcu lo nu do samci'a lo te spudablanu lanci tcitaliste lo'i kardaliste lo'i karda to %(cur)d karda cu visycu'i %(sel)s toiliste lo'i se samtcise'ajvinu lo liste be lo'i kardajvinu lo liste be lo'i kardate tcimi'e lo liste be lo'i kardanu cuprazasni se miprizasni se mipri je cu ckininu zasni miprinu zasni mipri lo kardanu zasni mipri lo karda datninu zasni mipri pu'o lo bavlamdei lo karda poi ckini je cu cninonu zasni mipri pu'o lo bavlamdei ro morji jai se bilga poi ckininu sistikarda klesi%d moi lo'i karda klesipa moi lo'i karda klesire moi lo'i karda klesijudri lo kardaliste lo'i kardase ckaji lo kardakarda klesikarda klesikarda klesiselcmi ro karda klesi pe la'o zoi. %s .zoi.i co'a zasni mipri pa karda.i co'a mipri pa karda.i pa karda cu mutce lo ka ce'u nandukarda.i .e'a nai macnu muvgau lo'e se julne karda selcmi.i ro karda goi ky. cu zilxru lo ka lo krasi cu karda selcmi ce'u vau mo'u lo nu do morji fi ky.karda klesimidjunu bastibasti la'o zoi. %s .zoinu muvdu lo karda selcmi poi dratanu muvdu lo karda selcmi poi dratanu basti lo karda datni klesinu basti lo karda datni klesi (Ctrl+N)nu basti fi lo ka ce'u karda datni klesinu basti lo se skari (F8)nu muvdu lo karda selcmi poi drata vau ji'u lo karda datni klesibinxo.i %(cnt)d karda datni pe lo karda datni klesi ba binxo xoi se skicu di'e.i binxo mo'u lo nu do za'u re'u katcygau la .ankis..i binxo mo'u lo nu do za'u re'u katcygau lo .ankis.nu cipcta lo ganvinu cipcta fi lo ka ka'e ningau ce'unu cipcta lo datnyvei poi se datnyveimei lo srana be lo ganvi.i ca'o cipcta lo ganvi.i ca'o cipctanu cuxnanu cuxna pa karda selcminu cuxna pa karda datni klesinu cuxna lo se tcitanu vimcu ro se pilno be no danu vimcu ro tcita poi no da pilnove fukpi la'o zoi. %s .zoinu mipri.i xu do djica lo nu mipri je lo nu ju'i do cirko lo ka ce'u te samci'a.i ca'o miprijudri.i mo'u barbei lo karda selcmi selcmi.i lo datni be lo karda selcmi selcmi cu spofu .i ko tcidu lo djunoi.kolon.slaka bute tcimi'ete tcimi'enu tcimi'e fi tu'a lo sazycimde je lo bangu be lo sazycimde.i do ba'o .ui tadni pa karda selcmi.i ca'o samjongau.i mo'u co'a fukra'enu fukra'enu fukra'e lo samcfisisku datninu fukra'e.i %(pct)0.2f ce'i pi'i ro co'e cu drani
to %(good)d lo %(tot)d co'e cu go'i toi.i da datnyvei fi pa se samtcise'a je cu spofu.i ka'e nai samjo'e lo skami pe la .ankiueb. .i ko cipcta lo te samjo'e je cu za'u re'u troci.i ka'e nai rejgau lo snavei .i ko ci'erse'a la'o zoi. lame .zoi.i ka'e nai rejgau la'o zoi. %s .zoinu sutra tadninu cupra pa karda selcminu cupra pa se julne karda selcmise fintikarda selcmi je cu se cuxnakarda datni klesi je cu se cuxnanu macnu tadninu macnu tadninu vicra'e.i mo'u za'u re'u zbasu lo datni vasru je mo'u gasnu lo nu tu'a dy vy. sutradetritadni djedinu co'u curmisamcfisisku tutcikarda selcmi.i nerbei pa karda selcmi ba lo nu samymo'i lo pilno datnikarda selcmi.i temci fi lo nu za'u re'u bilga lo ka ce'u morjinu vimcunu vimcu lo kardanu vimcu pa karda selcminu vimcu lo kuntinu vimcu lo karda datninu vimcu lo karda datninu vimcu lo tcitanu vimcu lo datnyvei poi na se pilno.i pa da poi datnyvau zo'u xu do djica lo nu vimcu da la'o zoi. %s .zoi.i %(num)d da poi se samtcise'a je cu se cuxna zo'u xu do djica lo nu vimcu da.i xu do djica lo ka ce'u vimcu la'o zoi. %(a)s .zoi poi karda klesi je %(b)s pe ri.i pa da poi karda datni klesi zo'u xu do djica lo nu vimcu da je ro karda pe da.i pa da poi karda datni klesi je cu se pilno no da zo'u xu do djica lo nu vimcu da.i xu do djica lo ka ce'u vimcu ro ganvi poi se pilno no da.i mo'u vimcu %d karda pe no karda datni.i mo'u vimcu %d karda pe no karda klesi.i mo'u vimcu %d karda datni pe no karda datni klesi.i mo'u vimcu %d karda datni pe no karda.i mo'u vimcu %d karda datni pe pa datnyvau selcmi poi kanca ke'a lo toldra.i mo'u vimcu.i ju'i do lo nu vimcu lo karda selcmi lo se liste cu rinka lo nu ro karda pe ky sy. zilxru lo ka da karda selcmi ce'u poi krasive skicuve skicu je cu visycu'i fi lo nu catlu lo nu tadni kei papri to pe lo karda selcmi poi ca se cuxna po'o toipreti cankyuidjenu kibycpa fi la .ankiueb..i mo'u kibycpa la'o zoi. %(fname)s .zoi.i ca'o kibycpa fi la .ankiueb.morji jai se bilgakarda je cu morji jai se bilga po'ojai se bilga fai lo ka ce'u morji ca lo bavlamdeifanmoni frilifu'i sainu bixygaunu la'o zoi. %s .zoi binxonu lo se cuxna cu binxonu basti lo lerpoi be bau la .xetmel.binxobixygau ci'artadjikuntinu cipcta lo karda lo ka ce'u kunti.i mo'u facki lo du'u su'o karda cu kunti .i ko terca'a fi la'au nu cipcta lo karda lo ka ce'u kunti li'u pe la tutci.i lo pa moi be lo'i la'e di'e datnyvau cu kunti .i %snu katcygau lo re moi julnefanmo.i ko samci'a no da jo nai pa cmene be pa karda selcmi poi ro karda poi cnino pe la'o zoi. %s .zoi ba binxo lo ka ce'u cmima ke'a.i ko samci'a lo ba se pormoi be lo karda to py. mulnonmau je cu na zmadu li %s toi.i ko samci'a lo tcita poi .ai dai se jmina.i ko samci'a lo tcita poi .ai dai se vimcu.i la'e di'e nabmi lo nu kibycpa lo se judri be li %(id)s %(error)s.i la'e di'e nabmi fi lo nu katcygau %s.i da nabmi fi lo nu samjongau fi lo snura .i so'e roi rinka fa lo nabmi pe lo malsamtci bandu samtci ja lo seltcana kevlu'a samtci ja lo samtcana selfu be do.i da nabmi fi lo nu terca'a fi la'o zoi. %s .zoi.i la'e di'e nabmi fi lo nu setca la'o zoi. %(base)s .zoi %(error)s.i da nabmi fi lo nu terca'a fi la'o zoi. %s .zoinu barbeinu barbei.i mo'u barbei %d ganvi datnyvei.i lo %d moi datnyvau pe lo datnyveicmene lo datnyvaudatnyvaudatnyvaucmima lo'i datnyvau pe la'o zoi. %s .zoi.i lo datnyvau cu sepli lo datnyvau la'o zoi. %s .zoidatnyvaujulne.i lo datnyvei klesi cu cnino .i ku'i ca'o troci lo ka ce'u nerbeijulnere moi julnejulnejulnese julne%d moi lo'i se julne karda selcminu sisku lo ka ce'u fukpi danu sisku lo ka ce'u fukpi danu sisku je cu gafygaufanmopa moi lo'i karda.i mo'u cikre %d karda poi ckaji lo toldra.i mo'u cikre fi tu'a lo me la .ankidroid. ku ke karda selcmi jdice minde samcfi.i mo'u cikre la'o zoi. %s .zoi poi karda datni klesilanci tcitalanci tcita lo karda.i lo datnyveimei xa'o zastici'artadjilo fanmose kanpecranejvinu co purzga be lo cranena'e mulno tarmi lo crane.i se cupra de'i la'o zoi. %s .zoinu samtcise'anu cpacu lo karda selcmi poi gubnifu'icrino lanci tcitatutci lo nu basti lo lerpoi be bau la .xetmel.fu'i nai ru'e.i xu do ba'o ci'erse'a la .latex. je la'o zoi. dvipng .zoi ja bo la'o zoi. dvisvgm .zoigalraipausidjutraji fo lo'i ni friliba'o se jminamintu.i ga na ja do pu gunka dunda je nai cmima lo se liste be di'u gi .e'u do tavla lo favgause vanbi lo nu do tadni ca ro djedi da'inu nerbeinu nerbei pa datnyveinu nerbei ju cu xa'o mintu da lo pa moi datnyvau.i da nabmi fi lo nu nerbei .i da nabmi fi lo nu nerbei .i di'e samcfisisku datni nerbei te tcimi'e.i mo'u nerbeiganvi se datnyveimei je cu ku'i se pilno no kardanu vasru lo lerpoi pe la .xetmel. ku'o je lo te jorne be lo te ganvinu vasru lo te ganvinu vasru lo tcikygau datninu vasru lo tcitastika lo cabdei jimte be lo se zilkancu be lo'i karda poi cnino.i stika lo cabdei jimte be lo se zilkancu be lo'i karda poi cnino vau listika lo cabdei jimte be lo se zilkancu be lo'i karda poi morji jai se bilga.i stika lo cabdei jimte be lo se zilkancu be lo'i karda poi morji jai se bilga vau linu samtcise'anu samtcise'anu samtcise'a pa te datnyvei.i mo'u samtcise'a la'o zoi. %(name)s .zoibangu lo sazycimde.i ri toldra ja cu judri pa se samtcise'a poi na mapti la do .ankis..i lo judri cu toldra.i lo te tcimi'e cu toldra fo la'e di'e .i .i pa cmene be pa datnyvei cu toldra .i ko cmene basygau fi zoi zoi. %s .zoi.i lo datnyvei cu toldra .i ko xruti fi pa nurfu'i.i lo jvame'o cu toldra.i lo se sisku cu toldra .i ko cipcta lo se samci'a lo se srera.i mo'u co'a miprime la .latex.me la .latex. ku meskome la .latex. ku sepli meskoro moi lo'i kardaprula'i nu morjite cilre.i %(a)s da te cilre .i %(b)s da te morji .i %(c)s da za'u re'u te cilre .i %(d)s se julneca'o te cilre.i ca'o samymo'ito'e traji fo lo'i ni frilinu jitronu jitro lo karda datni klesinu jitromacnu ke zasni se miprinu mapti la'o zoi. %s .zoinu mapti lo tcitanu tcita lo karda datnimakcute ganvimentuvricinu muvgau lo karda.i lo karda cu muvdu lo di'e karda selcmikarda datni.i lo cmene xa'o zasticmene lo karda selcmicmenese tcanacninocnino kardacnino.i di'e co'a cmene lo karda selcmi.i di'e co'a cmenebasti fi lo ka ce'u karda datni klesi.i di'e co'a cmene lo te tcimi'e selcmina lanci tcita.i no karda ca morji jai se bilga.i do tadni no karda ca lo cabdei.i no karda cu kunti.i do tadni no karda poi makcu ku'o ca lo cabdei.i facki fi no datynvei poi se pilno no da ja cu ka'e nai se zvafa'i.i no cnino cu gubnikarda datnikarda datni klesikarda datni klesi.i mo'u vimcu pa karda datni je %d karda pe ri.i mo'u co'a zasni mipri pa karda datni.i mo'u co'a mipri pa karda datni.i ju'i do no da zmiku nurfu'i lo te ganvi .i ko di'i macnu cupra lo nurfu'i be lo datnyveimei pe la .ankis..i pa da poi datnyvei zo'u mo'u jmina %d karda datni poi se krasi da.i pa da poi datnyvei zo'u mo'u facki fi %d karda datni poi se krasi da.i lo karda datni cu nitcu lo ka su'o datnyvau cu srana ce'u.i mo'u tcitygau fi lo karda datni.i ningau %d karda datni se ki'u lo nu da datnyvei fi lo cnino zmadu.i'e.i ka'e basygau fi lo se pormoi be lo karda poi cnino po'onu samymo'inu samymo'i pa nurfu'ite tcimi'ete tcimi'e je cu srana la'o zoi. %s .zoite tcimi'e selcmite tcimi'enarju lanci tcitase porsime la .ankis. ku se samtcise'a bakfume la .ankis. ku karda selcmi bakfu (*.apkg *.colpkg *.zip)japyvlanu fukpu'inu ro se fukpu'i poi pixra cu me la me py ny gy.se cenlai.i la'o zoi. %s .zoi temci.i ko cipcta lo do te samjo'e.i ko jongau pa snaveitci goi sy. .i ko birti lo du'u no samtci poi drata ca'o pilno sy..i ko birti lo du'u ga je mo'u samymo'i pa pilno datni gi la .ankis. na'e zuktce kei ce'o cu za'u re'u troci.i ko samci'a pa cmene be lo julne.i ko ci'erse'a la'o zoi. PyAudio .zoi.i ko vimcu la'o zoi. %s .zoi poi datnyveimei je cu za'u re'u troci.i da notci fi ko lo favgau be lo se samtcise'a.i ko za'u re'u katcygau la .ankis. no'au rinka lo nu mo'u bangu basygau.i ko terca'a fi la'au nu cipcta lo karda lo ka ce'u kunti li'u pe la tutci.i ko cuxna pa karda selcmi.i ko cuxna pa je nai za'u pa se samtcise'a.i ko cuxna fi lo'i karda pe pa je nai za'u pa karda datni klesi.i ko cuxna da.i ko basygau la .ankis. poi traji lo ka ce'u cnino.i do bilga lo ka ce'u terca'a la nu nerbei pe la datnyvau vau noi rinka lo nu nerbei lo datnyvau.i ko vitke la .ankiueb. je cu ningau lo karda selcmi je cu za'u re'u trocise pormoite tcimi'enu purzganu purzga lo karda poi se cuxna (%s)nu purzga ro karda poi cninonu purzga lo karda poi cnino poi se jmina ca lo ro moi.i mo'u nerbei %d te ganvi.i ca'o gunka.i lo pilno datni cu spofupilno datnipreti.i li %d cu ro moi.i li %d cu pa moifanmocunsonu lo se porsi cu cunsovamjinu za'u re'u zbasunu rejgau pa sevzi voksa snaveinu rejgau pa snavei (F5).i ca'o rejgau pa snavei
ze'a lo snidu be li %0.1fxunre lanci tcitaza'u re'u te cilrenu ralte lo prula'i se samci'a ca lo nu jmina.i xu do djica lo ka ce'u vimcu zoi zoi. %s .zoi lo do sisku vrejinu vimcu lo karda klesinu co'u julnenu vimcu lo tcita.i lo nu da'i vimcu lo karda klesi cu rinka lo nu vimcu su'o karda datni .i ko mo'u cupra su'o karda klesi poi cninonu basti lo cmenenu basti lo cmene be la karda klesinu basti lo cmene be la karda selcmi.i xu do djica lo nu pa nurfu'i cu basti lo ca karda selcmi selcminu za'u re'u snavinu za'u re'u snavi lo sevzi voksa snaveinu basti lo se pormoinu basti lo se pormoi be lo karda klesinu basti lo se pormoi be lo karda poi cninonu basti lo se pormoinu nitcu lo ka su'o da pe di'e tcita ce'unu basti lo tcikanu lo ckini be lo ba te spuda be mi cu basti lo tcikanu mo'u denpanu xruti fi pa nurfu'i.i mo'u xruti fo la'o zoi. %s .zoite morjise zilkancu lo'i nu morjinu tadni lo karda poi te tolmo'inu morjipritunu rejgaunu rejgau lo ca julnenu rejgau pa me la me py dy fy..i mo'u rejgau.i kuspe la'o zoi. %s .zoinu siskute siskunu cuxnanu cuxna ro danu cuxna lo karda datninu nitcu lo ka no da pe di'e tcita ce'u.i pa datnyvei poi se cuxna cu datni tarmi na'e la'o zoi. UTF-8 .zoi .i ko tcidu lo nu nerbei kei te fendi be lo djunoi.semikolon. bunu basti lo crane se skari (F7).i la'o zoi. Shift .zoi katci .i ca'o na zmiku lo nu datni sarxe ja cu samymo'i lo se samtcise'anu catlu lo danfuliste lo fukpinu lo spuda temci cu visycu'inu lo bavla'i ke te morji temci cu visycu'i fi lo nu ri gapru lo te spuda batkyuidje.i su'o karda poi ckini ja cu zasni se mipri pu zi binxo lo ka ce'u jai balvilo datnyvau poi ve ganzu.i spofu lo nu snavi je lo nu vidvi vu'o pe lo karda pu'o lo nu ci'erse'a la'o gy. mpv .gy. ja la'o gy. mplayer .gy.datni lo nu pilno.i tadni %(a)s %(b)s ca lo cabdei to karda snidu li %(secs).1f toi.i tadni %(a)s %(b)s ca lo cabdeise tadni ca lo cabdeinu tadninu tadni lo karda selcminu tadni lo karda selcminu co'a tadnimiprinu mipri lo kardanu mipri lo karda datnilo ka se miprise mipri je cu zasni se miprinu co'a datni sarxe.i la'e di'e nabmi fi lo nu co'a datni sarxe %s.i ca'o co'a datni sarxetcita.i lo karda selcmi xa'o zasti.i xa'o cmene pa datnyvau.i lo pa moi datnyvau cu kunti.i lo di'e se samtcise'a cu tolmapti la'o zoi. %(name)s .zoi je co'a ganda %(found)s.i lo crane be lo karda cu kunti .i ko terca'a fi la'au nu cipcta lo karda lo ka ce'u kunti li'u pe la tutci.i ju'i do'u tu'a da'i lo se samci'a be do cu rinka lo nu ro karda cu preti kunti.i se zilkancu lo'i karda poi cnino poi do pu jmina.i se zilkancu lo'i preti poi do pu spuda.i se zilkancu lo'i karda poi jai se bilga fai lo ka ce'u ba morji.i ro da poi batkyuidje zo'u se zilkancu lo'i nu do terca'a fi da.i da na'e drani lo ka ce'u srana be zoi zoi. .apkg .zoi datnyvei.i lo se sisku cu ckaji no karda .i xu do djica lo ka ce'u basygau fi sy..i temci fi lo nu spuda lo preti.i su'o karda cu za'o cnino .i ku'i ca'o rinju lo djedi jimte .i do ka'e tikygau dy jy. .i ku'i ko pensi lo du'u lo nu lo se zilkancu be lo'i karda poi cnino cu zenba cu rinka lo nu lo ni gunka poi ze'a ba se bilga do cu zmadu.i su'o pa lo pilno cu sarcu.i da goi dy. simlu lo ka ce'u na'e drani lo ka ce'u srana be zoi zoi. .apkg .zoi datnyvei .i ga na ja dy. se kibycpa fi la .ankiueb. gi la'a sai da pu nabmi fi lo nu kibycpa dy. .i na ja stidi lo nu do za'u re'u troci je cu pilno pa drata kibyca'o ja nai bo cu renvi se nabmi.i pa datnyvei cu mintu .i xu do birti lo du'u do djica lo nu basti dy..i ti datnyveimei ro datni pe la .ankis. te zu'e lo nu frili fa lo nu zbasu lo nurfu'i .i lo'e djica be lo nu la .ankis. cu pilno lo drata datnyveimei cu vitke lo se veirjudri be la'o zoi. %s .zoi ti {{c1::mupli}} ke mipri cipra.i ba cupra %d karda .i xu do djica.i ju'i do lo ca karda selcmi selcmi ba se vimcu je ba se basti lo se datnyvei be lo se nerbei .i xu do birti.i ju'i do rinka lo nu ro karda poi ca'o te cilre cu zilxru je lo nu ro se julne karda selcmi co'a kunti je lo nu lo namcu be lo tcika ciste cu binxo .i xu do djicaspuda temcimorji jai se bilga.i lo nu do catlu lo liste be lo se samtcise'a cu se rinka lo nu do terca'a fi lo nu catlu vau batkyuidje poi cnita

.i ga na ja da zo'u do djica lo ka ce'u samtcise'a da gi ko fukpu'i lo namcu judri lo cnita .i do zifre lo ka ce'u fukpu'i lo selcmi be za'u pa namcu judri be'o poi sepli be fi canlu bu simxu.i ga na ja do djica lo ka ce'u ba'e ca viska lo karda gi ko terca'a fi la nu to'e ke zasni mipri noi batkyuidje noi cnita.i ga na ja do djica lo ka ce'u tadni na'e ca'o lo fadni tcika gi ko terca'a fi la nu macnu tadni noi batkyuidje noi cnitacabdei.i ca'o rinju lo djedi ke morji jimte goi jy. .i ku'i su'o karda za'o bilga te morji .i .e'u do zukte lo ka ce'u zengau jy. kei lo nu do ba ca'o xamgu morjinu katci binxonu se tcita binxonu se mipri binxomulno se zilkancumulno temcise zilkancu lo'i kardase zilkancu lo'i karda datniklesi.i ka'e nai nerbei lo datnyvei poi ka'e se tcidu po'onu to'e ke zasni miprinu xrutinu xruti fo la'o zoi. %s .zoi.i na djuno fi lo datnyvei klesina pu se viska.i xu do djica lo nu ningau lo di'e jminakibydu'a fi la .anki,ueb..i ca kibydu'a fi la .anki,ueb.se pilno su'o karda je nai ku'i cu se datnyveimei lo ganvi datnyveimeipa moi pilnonu catlu lo se samtcise'a papricatlu lo datnyvei.i ca'o denpa lo nu mo'u basygau.i .au dai do to'e ke zasni mipri mamulno ke karda selcmi selcmi.i la'o zoi. Damien Elmes .zoi finti .a bu .i ro la'e di'e favgau sidju fi tu'a .a bu ja cu cipra fi .a bu ja cu platu fi tu'a .a bu

%(cont)sna'e makcuna'e makcu je cu te cilre.i za'u pa karda selcmi pu'o binxo .i pa da poi karda selcmi je cu se cuxna zo'u ga na ja do djica lo ka ce'u bixygau da po'o gi ko cupra pa te tcimi'e selcmi poi cnino.i lo do karda selcmi selcmi datnyvei cu simlu lo ka ce'u spofu .i ky sy sy dy. kakne ri lo ka ca lo nu la .ankis. cu katci kei ce'u se fukpu'i ja cu se muvgau ja lo ka vreji ce'u fo pa samseltcana co'e ja pa kibro co'e .i ga na ja lo nabmi cu renvi lo nu do krefu katci lo do skami gi do bilga lo ka gau ce'u samymo'i pa zmiku nurfu'i pe lo pilno datni.i lo do karda selcmi selcmi ja pa ganvi datnyvei cu dukse lo ka ce'u barda kei lo ka ce'u co'a datni sarxelo nurfu'ilo kardakarda pe lo karda selcmikarda selcmi selcmilo djedikarda selcmica lo djedi be li %sca lo cacra be li %sca lo mentu be li %sca lo masti be li %sca lo snidu be li %sca lo nanca be li %slo paprimulno ke karda selcmi selcmianki-2.1.15+dfsg/locale/kab/000077500000000000000000000000001353113723000154335ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/kab/LC_MESSAGES/000077500000000000000000000000001353113723000172205ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/kab/LC_MESSAGES/anki.mo000066400000000000000000000725671353113723000205200ustar00rootroot00000000000000' ' '''"'( ($(7(V(8h((((("($ )$.)&S)"z))4)2)*)*"F*$i*$*$* **+&+.+=+N+c+z++ ++++++++ +++,,, !,,,2,8,<, C,M, S,^,g, y,,,,,,,,,,0, 0-=-L- R- ]-h-n---r-j.z.|.........T..,/(-/V/!u//f/0 ,090 K0 X0c0s000e0171H1)B4 l5v555X5 6 $6/636N6 _6 i6s6 6 6 66 666'677"7 (7$47Y7 _7k7{77 7 7779 999d9K:-; ;;;;;;#;#< +<8<L<Q<Y< _<i<|<J<<<< < <<===== &= 0= ;= E= P=[= m=z====== = ====>#>6>>> P>\>c> i>t>z>> > >>>> >>>>>? ? ? ? &? 1? BDBIBNB SB ]BjBqBwB{B BBBBB BBB B BBBB BCCC)C0C5C:CQCWC^CcCiCqC vC CCCCCCC C CCCCCD D!D5D >D HDVDnDDDDD DD DDDDDDD DDD EEE!E$E)E 1EH CHNHRHWH\HwH |HHH HHHHHH H HbH 8IBIJIPIdI vIIII I IIIIIIIIJ,JCJ^JrJJJJJJJ JJJJJ LLLL2LM MM#!MEMKWMMMMM6M64N3kN8N0N O=O?[OO*O.O1 P/>P-nP/PPP Q QQ.QDQ\QpQQQQQQQQQQQ QQR R )R5R=RCRHR ORYRbR kR wRR RRRRRRSSS7&S ^SkSSSS SS!SScS^JTTTTT TTTTTTwTTU8VU*U#U!UVfVV VVV V VVV Wg WW1CXcuXQZ +\7\ZQ\T\ ] ]]]5]L] U]`]|]]] ]] ]]*]^&^ .^8^-H^v^{^^ ^^^ ^^" _.a 3aAaYanka ab {ccc cc#c#c c dd+d 1d;d BdOdgddndddddd e e e +e 7e CeQege{eeeeeee)f*f &8=o .im9b|nK${zfw)~j4KLy;qXDd2{G]l\=JhT*5(D(eM .hgNH1_*lE@CUBfR VP<d TiabC}4QAX#2y_<!'Mp]&8 3jI^R?/x6gU@ +k,--/O07`' r :vmJ#7HsQZtEP "`zu9>$Z6F!pAkvuO (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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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.Aborted: %sAbout AnkiAddAdd (shortcut: ctrl+enter)Add Card Type...Add FieldAdd MediaAdd New Deck (Ctrl+N)Add Note TypeAdd Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAllow 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. AnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki could not read your profile data. Window sizes and your sync login details have been forgotten.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.Anki couldn't find the line between the question and answer. Please adjust the template manually to switch the question and answer.AnkiWeb ID:AnswerAnswer ButtonsAnswersAny FlagAppeared twice in file: %sAre you sure you wish to delete %s?AverageAverage TimeAverage answer timeBackBackupsBasicBlue FlagBold text (Ctrl+B)BrowseBrowse (%(cur)d card shown; %(sel)s)Browse (%(cur)d cards shown; %(sel)s)Browse Add-onsBuildBuryBury CardBury NoteCancelCardCard %dCard 1Card 2Card IDCard ListCard StateCard TypeCard Type:Card TypesCard Types for %sCard buried.Card suspended.CardsCards in Plain TextCards...CenterChangeChange %s to:Change DeckChange Deck...Change Note TypeChange Note Type (Ctrl+N)Change Note Type...Change colour (F8)ChangedCheck for UpdatesChecking...ChooseCloseClosing...Code:CommaConfigConfigurationConnecting...ContinueCopyCouldn't save file: %sCreate DeckCreate Filtered Deck...CreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDateDays studiedDeauthorizeDebug ConsoleDeckDecksDefaultDeleteDelete NoteDelete NotesDelete TagsDelete Unused FilesDelete 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?Deleted.DescriptionDialogDownload from AnkiWebDownloaded %(fname)sDueE&xitEaseEasyEditEdit "%s"Edit CurrentEditedEmptyEndExportExport...ExtraFF1Field %d of file is:Field name:Field:FieldsFields for %sFields...Fil&terFilterFilter 2Filter...Filter:FilteredFind and ReplaceFinishFlagFlipFolder already exists.Font:FooterFormFrontGeneralGoodGreen FlagHTML EditorHardHeaderHelpHistoryHomeHoursIdenticalIgnore caseIgnore this updateImportImport failed. Import optionsImporting complete.Include tagsInterface language:IntervalIntervalsInvalid code.Invalid configuration: Invalid regular expression.KeepLearnLeftLimit toLoading...ManageManage...MediaMinutesMoreName:NetworkNewNew name:No FlagNo updates available.NoteNote IDNothingOKOpenOptionsOptions...OrderPassword:PastePauker 1.8 Lesson (*.pau.gz)PercentagePeriod: %sPlace at end of new card queuePlease give your filter a name:Please install PyAudioPlease remove the folder %s and try again.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.Please select something.PositionPreferencesPreviewProcessing...QuestionQuitRandomRatingRemove Tags...RenameReviewRightSaveSave Current Filter...Saved.SearchSearch in:SelectSelect &AllSidebarSize:SkippedSort FieldSpaceStart position:StatisticsStatsStep:Steps (in minutes)Steps must be numbers.Stopping...Studied %(a)s %(b)s today (%(secs).1fs/card)Studied %(a)s %(b)s today.Studied TodayStudyStudy DeckStudy Deck...Study NowSuspendSuspendedSyncSyncing...TabTagsTextThat name is already used.TimeTo ReviewTodayTotalTotal TimeTypeUndoUndo %sUpdatedUser 1Version %sYoung+LearnYour AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.[no deck]backupscardscards from the deckcards selected bycollectionddaysdeckdeck lifeduplicatehelphidehoursin %s dayin %s daysin %s hourin %s hoursin %s minutein %s minutesin %s monthin %s monthsin %s secondin %s secondsin %s yearin %s yearsless than 0.1 cards/minutemapped to %smapped to Tagsminsminutesmoreviewssecondsstatsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-03-05 03:30+0000 Last-Translator: Belkacem Mohammed Language-Team: Kabyle 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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) Language: kab (1 seg %d) (insa) (insa) (irmed) Ɛur-s %d can tkarḍa. Ɣur-s %d n tkarḍiwin.%% Ameɣtu%(a)0.1f %(b)s/ass%(a)0.1fkB yulin, %(b)0.1fkB yudren%(a)0.1fs (%(b)s)%(a)d seg %(b)d n tezmilt tettwalqem%(a)d seg %(b)d n tezmilin ttwaleqment%(n)d: %(name)s%(tot)s %(unit)s%.01f tikarḍiwin/tesdat%d n tkarḍa%d n tkarḍiwin%d n tkarḍa tettwakkes.%d n tkarḍiwin ttwakksent.%d tkarḍa tettusifeḍ.%d tkarḍiwin ttusifeḍen.%d tkarḍa tettwakter.%d tkarḍiwin ttwaketrent.%d tkarḍa tettwaɣra deg%d tkarḍiwin ttwaɣrant deg%d ukemmus yettwalqem.%d ikemmusen ttwaleqmen.%d ugraw%d igrawen%d ubeddil n umidya ara yalin%d ibeddilen n umidya ara yalin%d ufaylu n umidya ara d-yadren%d ifuyla n umidya ara d-yadren%d tezmilt%d tizmilin%d tezmilt tettwarna%d tizmilin ttwarnant%d tezmilt tettwakkes.%d tezmilin ttwakksent.%d tezmilt tettusifeḍ.%d tizmilinttusifḍent.%d tezmilt tettwakter.%d tezmilint ttwaktrent.%d tezmilt ur nbeddel%d tezmillin ur nbeddel%d n tezmilt tettwalqem%d tezmilin ttwaleqment%d aceggir%d iceggiren%d yettwafren%d ttwafernen%s unɣel%s ass%s ussan%s asrag%s isragen%s tasdat%s tisdatin%s tasdat.%s tisdatin.%s aggur%s agguren%s tasint%s tasinin%s ad tettwakkes:%s aseggas%s iseggasen%sd%sh%sm%smo%ss%sy&Ɣef...&Snirem diɣ Sebded...Ti&karḍiwinSe&nqed taffa n yisefkaƔer &aṭas...&Taẓrigt&Sifeḍ...A&faylu&Nadi&BduA&mnirA&mnir...&Tallelt&Kter...Ta&lɣut...&Tti tafrant&Takarḍa i d-iteddunTi&zmilin&Ldi akaram n yizegrar...&Ismenyifen…Takarḍa &yezrinAles aɣa&was...&Mudd afis i Anki...&Beddel Amaɣnu&Ifecka&Sefsex'%(row)s' ɣur-s %(num1)d n wurtan, yetturaǧu %(num2)d(%s ameɣtu)(Tazmilt tettwakkes)(tagara)(yettwasizdeg)(almad)(amaynut)(talast tamarawt: %d)(fren ma ulac aɣilif 1 tkarḍa)...ifuyla .anki d lqem aqbur n Anki. Tzemreḍ ad ten-tketreḍ s Anki 2.0, yellan deg usmel Web Anki.ifuyla .anki2 ttwaktaren srid - neɣ kter ma ulac aɣilif afaylu .apkg neɣ .zip i d-remseḍ./0d1 101 waggur1 useggas10AM10PM3AM4AM4PMTuccḍa 504 n tenzagt yezrin gateway tettwarmes. Ma ulac aɣilif ɛreḍ asensi n useɣzan-ik amgalavirus kra n wakud.:%d n tkarḍa%d n tkarḍiwinLdi akaram n uḥrazRzu ɣer usmel Web%(pct)d%% (%(x)s of %(y)s)%Y-%m-%d @ %H:%MAḥraz
Anki ad yernu aḥraz n tigrumminwin-ik yal tikkelt ad tmedleḍ neɣ ad temtawiḍ.Amasal n usifeḍ:Nadi:Teɣzi n tsefsit:Tasefsit:Deg:Seddu:Teɣzin udur:Semselsi s:AmtawiAmtawi
Ur yermid ara akka tura; sit ɣef tqeffalt mtawi deg usfaylu agejdan akken ad yermed.

Ilaq umiḍan

Amiḍan n baṭel ilaq akken ad teǧǧeḍ tagrumma-ik temtawi. Ma ulac aɣilf, jerred akken ad tawiḍ amiḍan, sakin sekcem talqayt-ik ddaw-a.

Anki Yetwalqem

Anki %s yeffeɣ-d.

Tuccḍa

Teḍra-d tuccḍa. Ma ulac aɣilif, senker Anki ticki teǧǧiḍ afus-ik ɣef tqeffalt shift, ayen ara yessensen s wudem askudan izegrar i tesbeddeḍ.

Ma yeḍerru-d kan wugur ticki izegrar remden, seqdec aferdis n wumuɣ Ifecka>Izegrar akken ad tsenseḍ kra n yizegrar saki ales tanekra n Anki, ales aya arama tufiḍ-d anwa azegrir i d-ixeddmen ugur-a.

Ticki tufiḍ-d azegrir i d-ixeddmen ugur-a, azen-d ma ukac aɣilif ugur-a deg tigezmi n yizegrar n usmel-nneɣ tallelt.

Talɣut n temseɣtayt:

Error

Teḍra-d tuccḍa. Seqdex ma ulax aɣilif Ifecka > Senqed taffa n yisefka akken ad twaliḍ ma yella aya ad yefru ugur.

Ma yezga wugur, mmel-d ma ulac aɣilif ugur deg usmle-nneɣ n tallelt. Ma ulac aɣilif nɣel sakin senteḍ talɣut ddaw-a ɣer uneqqis.

Tanemmirt tameqqrant i yimdanen i d-imudden isumar, tummliwin n yibugen akken tewsa.Yefsex: %sƔef ankiRnuArbu (anegzum: ctrl+enter)Rnu anaw n tkarḍa...Rnu UrtiRnu amidyaRnu akemmus amaynut(Ctrl+N)Rnu anaw n tezmiltRnu tizmilin...Rnu idis n deffirRnu ticraḍRnu ticraḍ...Rnu ɣer:Azegrir ulac ɣur-s tawilaAzeigrir ur d-yettwasider ara seg AnkiWeb.IzegrarRnu: %syettwarnaYettwarna ass-aAferdis uslig yettwarna am wurti amezwaru: %sAlesTikkelt-nniḍen ass-aSiḍen tikkelt-nniḍen: %sMeṛṛa tikarḍiwin yemmedlenRnu anawen n tkarḍa(akk)Akk urtanSireg HTML deg urtanTeḍra-d tuccḍa deg unekcum ɣer taffa n yisefka. Ahat ɣef sebba n: - Aseɣzan amgalavirus, aɣrab n tmes, aḥraz, neɣ amtawi yezmer iger-d iman-is akked Anki. Ɛreḍ asensi n yiseɣẓanen-a sakin wali ma yefra wugur. - Aḍebsi-ik ahat yeččuṛ. - Akaram n warraten/Anki ahat yers deg imeɣri/amḍiq deg uẓeṭṭa. - Ifuyla deg ukaram Arraten/Anki folder yezmer ur yeldi ara i tira. - Adebṣi-ik aqquṛan ahat deg-s tuccḍiwin. Yelha uselkem n tladna Ifecka>Senqed taffa n yisefka akken ad temneḍ tagrumma ur nersiṛ ara. AnkiAnki 2.0 DeckAnki Collection PackageAnki Deck PackageAnki ur yezmir aea ad d-iɣer isefka n umaɣnu-ik. Teɣzi n usfaylu akked talqayt n inekcam n umtawi ttwattun.Anki ur yezmir ara ad ibeddel isem n umaɣnu-ik acku ur yezmir ara ad ibeddel isem n ukaram n umaɣnu ɣer uḍebsi. Wali ma tesɛiḍ ayen ilaqen deg tisirag akken ad taruɣ ɣer Warraten/Anki daɣen ulac ahilen i yekeččmen akka tura ikaramen n umaɣnu, sakin ales.Anki ur yezmir ara ad d-yaf adur gar usteqsi akked tririt. Ma ulac aɣlif seggem taneɣruft s ufus akken ad tuɣaleḍ ɣer useteqsi akked tiririt.AnkiWeb ID:TiriritTiqeffalin n triritTiririyinYal anayIban-d snat n tikkal deg ufaylu: %sS tidet tebɣiḍ ad tekkseḍ %s ?TalemmastAkud alemmasAkud n tririt alemmasUɣalIḥrazenAzadurAnay amidadiAḍris azuran (Ctrl+B)SniremSnirem (%(cur)d takarḍa yettwaseknen; %(sel)s)Snirem (%(cur)d tikarḍiwin yettwaseknen; %(sel)s)Snirem izegrarBnuNṭelNṭel takarḍaNṭel tazmiltSefsexTakarḍaTakarḍa %dTakarḍa 1Takarḍa 2ID n tkarḍaTabdart n tkarḍiwinAddad n tkarḍiwinAnaw n tkarḍaAnaw n tkarḍa:Anawen n tkarḍaAnawen n tkarḍa i %sTakarḍa tettwanṭel.Takarḍa tewḥel.TikaṛḍiwinTikarḍiwin yellan deg uḍris aččuranTikaṛḍiwin...TalemmastBeddelBeddel %s ɣer:Beddel tagrummaBeddel tagrumma...Beddel anaw n tezmiltBeddel anaw n tezmilt (Ctrl+N)Beddel anaw n tezmilt...Beddel ini (F8)IbeddelWali ileqmanAsenqed...FrenMdelAmdal...Tangalt:TiccertAswelTawilaTuqqna...KemmelNɣelUr izmir ara ad isekles afayly %s.Rnu akemmusRnu akemmus yettwafernen...Yettwarna.Ctrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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+ZAsemnennayAsemnennay %sTiririyin tisemnennayinTikarḍiwin tisemnennayinTagrumma tamirantAnaw n tezmilt tamirant:Tazrawt tudmawantTiɣimit n tɣuri tudmawantImecwaṛen udmawanen (s tisdatin)Rnu tineɣrufin n tkarḍiwin tudmawanin (Ctrl+L)Rnu urtan udamawanenGzemAzemzUssan n tɣuriKkes tisiragTadiwent n temseɣtaytAkemmusIkemmusenAmezwerKkesKkes tazmiltKkes tizmilinKkes ticraḍKkes ifuyla ur nettwaseqdac araKkes urti seg %s?Kkes %(num)d n uzegrir yettwafernen?Kkes %(num)d n yizegrar yettwafernen?Kkes anaw n tkarḍa '%(a)s', d %(b)s yines?Yettwakkes.AseglemTanaka n udiwenniSider seg AnkiWebAsider n %(fname)sTagara&FfeɣKkesFessusẒregẒref "%s"Ẓreg amiranIttwaẓregIlemTagaraSifeḍSifeḍ...Ayen-nniḍenFF1Urti %d n ufaylu d:Isem n wurti:Urti:UrtanUrtan i %sUrtan...Si&zdegSizdegImsizdeg 2Sizdeg...Sizdeg:YettwasizdegNadi & semselsiFakAnayTuttyaAkaram n yella yakan.Tasefsit:AḍarSegSdatAmatuIgerrezAnay azegzawAmaẓrag HTMLAẓayanAqeṛṛuTalleltAmazrayAgejdanIsragenMyegdanUr ttaqaṛ ara taruẓi n usekkilZgel lqem-agiKterAkter ur yeddi ara. Iɣewwaṛen n ukterAkter yemmed.Seddu ticraḍTutlayt n ugrudem:AzilalIzilalenYir tangalt.Yir iɣewwaṛen Yir tanfalit talugantEǧǧIssinAẓelmaḍTalast ɣerAsali…SefrekSefrek...AmidyaTisdatinUgarName:AẓeṭṭaRnuIsem amaynut:Ulac anayUlac ileqman.TazmiltID n tezmiltUlacIHLdiIɣewwaṛenIγewwaren...AmizzwerAwal uffir:SenṭeḍPauker 1.8 Tamsirt (*.pau.gz)AfmiḍiTawala: %sSsers ɣer taggar n udras n tkarḍa tamaynutMa ulac aɣilif, sekcem isem n yimsizdeg-ik:Ma ulac aɣilif sbedd PyAudioMa ulac aɣilif, kkes akaram %s sakin ɛreḍ tikkelt-nniḍen.Ma ulac aɣilif, selkem Ifecka>Tikarḍiwin TilmawinMa ulac aɣilif fren akemmus.Ma ulac aγilif, fren di tazwara azegrir.Ma ulac aγilif, fren kra.AdigIsmenyifenTaskantAsesfer n %sAsteqsiFfeɣAgacuranTazmiltKkes ticraḍ...Beddel isemCeggerAyeffusSeklesSekles imsizdeg amiran...Yekles.NadiNadi deg :FrenFren ak&kAgalis n yidisTeɣzi:YettawazgelUrti n usmizzwerTalluntAdig n tazwara.TiddadaninTiddadaninAmecwaṛ:Imecwaṛen (s tesdatin)Yesssefk imecwaṛen ad ilin d imḍanen.Aseḥbes...Yeɣra %(a)s %(b)s ass-a (%(secs).1fs/takarḍa)Studied %(a)s %(b)s today.Yeɣra ass-aƔerƔer akemmusƔer akemmus...Ɣer turaḤbes di leεḍilYeḥbesMtawiAmtawiIccerTicraḍAḍrisIsem-agi yettwaseqdec yakan.AkudAd ittuceggerAss-aAmatuAkud asemdayTawsitErr-dUɣal %sYettwalqemAseqdac 1Lqem %sIlemẓi+AlmadTagrumma-ik AnkiWeb ur tegbir ara tikarḍiwin. Ma ulac aɣilif, mtawi tikkelt-nniḍen sakin fren 'Sali' deg umḍiq-is.[ulac akemmus]iḥrazentikaṛḍiwintikarḍiwin seg ukemmustikarḍiwin i yefrentagrummadussanakemmustudert n ukemmususligTalleltfferisragendeg %s n wassdeg %s n wussande %s usragde %s isragendeg %s tesdatdeg %s tisdatindeg %s waggurdeg %s waggurendeg %s tasintdeg %s tasinindeg %s useggasdeg %s yeaiseggasenrsddaw n 0.1 tkarḍiwin/tasdaticudd ɣer %sicudde ɣer Ticraḍtisdtintisdatinmaṭiceggirentasinintiddadaninasebter-awmeṛṛa tagrumma~anki-2.1.15+dfsg/locale/km/000077500000000000000000000000001353113723000153055ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/km/LC_MESSAGES/000077500000000000000000000000001353113723000170725ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/km/LC_MESSAGES/anki.mo000066400000000000000000000007561353113723000203610ustar00rootroot00000000000000$,89Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2019-07-02 11:47+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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) anki-2.1.15+dfsg/locale/ko/000077500000000000000000000000001353113723000153075ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ko/LC_MESSAGES/000077500000000000000000000000001353113723000170745ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ko/LC_MESSAGES/anki.mo000066400000000000000000002474411353113723000203670ustar00rootroot00000000000000,; O !O ,O8O?O"EOhO jOtOOO8OOPP%P"6P$YP$~P&P"PP4Q25QhQyQ"Q$Q$Q$R (RIR^RvR~RRRRRR RSSSSS"S&S *S4SKSRSbSkS qS|SSSS SS SSS SSSSTT!T2TBTIT0OT TTT T TTTTTrTj_UUUUUUUUUUUTUNV,PV(}VV!VVfVfW |WW W WWWWWeXgX7YHIY)[ \\5\X]Yh]%]k] T^ `^k^o^^ ^ ^^ ^ ^ ^^ ^_ _'&_N_V_u_}_ _$__ ____ _ `, `K8` ``1``a"}cc cccdcBd$eIeRevEff7fg gwgE"h@hhhhhRhi#ii#i#i j (jzIjj(jk kk /kzPCzz]z z8{@{G{]{r{{{ {{{{ { {{ { { {{ |||)&|0P||||4|!|}}#0}T}m}}~~.~ 5~.?~n~t~v~y~ ~ ~~~ ~~ ~~+~!( 1;CL]q  N"-Pd isxLUZt z с܁  8,X .‚ FB[ { 4Ƀ܃ 1!1Q`*t =K jw"" ݆"4I\py ? 5$J)o29l‰щ <+h q~ 5݊  (2 H R ^ hvËɋڋ  '2NF Ō Ɍ&ӌ  & 3=Ld{!+΍# !.Pfk s }< ŎҎ]a@ԏ!8 C=Q,Đǐ,ِ#Αk^c r ’Β Ԓ 5* `jp ,# &1VX8E.N*e60Ǖ$+,P}-+Ė8) 2>Fa#s0 ȗ֗ (6;BRYarƘ# 7Fia˙ҙ / <I Ze} "Ú ˚1֚ %B St { Л-(FLQhq x  ǜ՜VD T^,#G> "ў  %5)G4qß*'Iqy@6Ƞ ! ?,Ml С ޡ ,+X s Ţ͢1 9 F S]n s!dɣ .9=LUZ o}( ŤX+Z"&zХK0eV+0>JF'Ч*(#1L,~I' #_e}8ڬC(FrWgʮ27 JTu /M ϱ ձ !g='LͲϳԳܳ.Dbj|, ȴӴ Ud$"ZܵS70$" b{y^5pWU}] ۽ $&+ 0 :DINTh}Ⱦ0FKSV^f lvx=E X b!l$9 0AR[{%) 2S\|$-%5 > KU[djqz     - 8 C N\ m{  $ 4G \gKy    *KOi9;@EMRW\`d\h*+ 6Uqm$3BQdwJ5 r)Lt=^ > LX_~  '96Ip8   ,*W ^#l !m+f23|_" MLP3M g M[(&5E8{%/  ,AH \ jw~ ## -Hfz  47 A=D KU^ g q    )J0${I  "6 No([@+<l. #1 8F [$i' 5  /7BV/] CQ ,3I4}4iCQ( C>ENU^ g r }    - : G Taho v   1<>{ 6 (0/` g u 1#<HRG953S3K4A<~w ? Q_z'  '.@ Uah o y(J1[5.$$B Ml*G,d -  %2 GQ:X   % , :H>a( $ 0 8B)07 KY`u#  !T'1|  D?dF4 B\ t;'#G87H ]%k:(6!,Ni' :lCHE'9m${ A   ' 7 H N ] m t     ?   $ 5 F  M  [ ji       . 8  P ] n          " 6  R \  w  k  4C K X c3n  32 f!t(225Aw   > s>l%%E$k?P!H=J(DU/e07H _m t 6 R `Am  +R /`.t34h%6)O`G$88<q2MPJ  #D&@ gu $  0>Wv !6$BSd  1, D^      !.!H!Y!Jj!#! !! ""&"I" P" ^"l"("C" "##5#5<# r# |#$# # # ###'#$!$3$E$j^$$ $$F%!%&{'&& &&+& ' &' 0' ;'I'a'*v'6'2'/ ((;(%d(-(/((( )P )>\) )1)X)e4********5* 1++?+#k+ ++++ +.+ ,",3,J,`,t, {, , ,#, , ,,3-~9------- ..8#.%\.,.%.x.,N/,{/%//$r0?0f0/>1;n1X1R2V2!n222'2_2R3+h44>55V66278h80:9?k990:: : ::<W<w=x==,>@> O>\> c> q> >>>$>>3Y?l?? @@ @ A%A;AYA?nAAAABB@4B uB BB B.BcB$@C0eCC&ClCg;DMD'D8E RE`E~EF^FGJ{H HrIZJ|0MMMMMM MMMN NN N'N.N 5N @NMN ]N jN uN NNNNNNNNNNNN OOO-(e1+2[,aa^'Dji.M{!8:WAfk<b]go?}*2)xdi-EE%ZLYSa^(LJNv-'ShKo;U_zM}4>ToH$wz_8ID.wKmdJ9 K.Gf*5O@ZvF=&#YO)xP0)4@\`^p3#2"_vcWX _  S r C5G6 t; 79Nt9zQ4A|<C$? BvIV:rkg{/0>c"p ;=E>@QKL{VPuPA[#z&sW,`{ 1@Hj2` [NZyB1W3y+ldFY pw'f r/!e~Tsc:s8s3]4ke]Jmu<" kqS\Tt~:< !=D|q#\;u%69XC^FI)R$~!q&VAByDME7HJM`ltnR7QNBh*OUd8+&xoljhaV3"= b5~567?%TjC}',il]i ?I}1>*0(uHmnGr [|nbwgfhXY.| \Qcy m+U,$-p /60RO(%bZxLUP nFGq X/Rge (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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-07-08 20:09+0000 Last-Translator: Oto Braz 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: 2019-07-09 05:44+0000 X-Generator: Launchpad (build 19007) Language: (1/%d) (비활성화됨) (꺼짐) (켜짐) %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)DB검사(&C)벼락치기(&C)...편집(&E)내보내기(&E)...파일(&F)찾기(&F)이동(&G)안내서(&G)안내서(&G)...도움말(&H)가져오기(&I)...정보(&I)선택 항목 반전(&I)다음 카드(&N)노트(&N)확장 프로그램 폴더 열기...환경 설정(&P)...이전 카드(&P)일정 재조정(&R)...Anki 후원(&S)...프로필 전환(&S)도구(&T)실행 취소(&U)'%(row)s'째 줄의 필드는 %(num1)d개. 예상한 필드는 %(num2)d개.(%s 정답)(노트 삭제됨)(종료)(여과됨)(익히는 중)(새 카드)(부모 제한: %d)(카드 1개 선택해주세요)....anki 파일은 이전 버전의 앙키에서 만든 것입니다. Anki 2.0으로 해당 파일을 불러올 수 있습니다..anki2 파일은 직접 불러올수 없습니다. .apkg 또는 .zip 파일로 불러오기 바랍니다./0일1 101개월1년10AM10PM3AM4AM4PM504 gateway timeout 오류가 발생했습니다. 안티바이러스를 잠시 꺼보세요.:%d 카드백업 폴더 열기공식 웹사이트 방문%(pct)d%% (%(x)s/%(y)s)%Y-%m-%d @ %H:%M백업
Anki는 사용자의 모음집을 종료하거나 동기화할 때마다 백업을 만듭니다.내보내기 형식:찾을 말:글꼴 크기:글꼴:대상:포함:줄 간격:바꿀 말:동기화동기화
현재 사용하지 않고 있습니다. 프로그램 기본 창에서 동기화 버튼을 눌러서 활성화하세요.

계정이 필요합니다

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

Anki 업데이트

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

오류

오류가 발생했습니다. Shift 키를 누른 상태로 Anki를 재실행하십시오, 그러면 설치한 확장 프로그램을 임시로 비활성화 합니다.

만약 이 문제가 확장 프로그램이 활성화 했을때만 발생한다면, 도구>추가기능 메뉴를 사용해 일부 확장 프로그램을 비활성하고 Anki를 재실행하면 어떤 확장 프로그램이 문제를 발생하는지 찾을 수 있습니다.

어떤 확장 프로그램이 문제를 발생하는지 확인하셨다면, 해당 문제를 저희 지원사이트의 확장 기능에 보고해주십시오.

디버그 정보:

오류

오류가 발생했습니다. 도구 > DB점검을 사용해 문제가 해결되는지 확인해주십시오.

문제가 지속되면 지원 사이트에 보고해주십시오. 보고할 때, 아래 정보를 복사해 함께 보내주십시오.

여기에는 줄바꿈표시가 있습니다. 각각의 표시는 줄의 끝을 의미합니다. 각각의 표시에서 줄바꿈을 해서 적절히 변환해주십시오.<무시><비 유니코드 텍스트><찾을 내용을 이 곳에 입력하세요. 이대로 엔터 키를 누르면 현재 뭉치를 표시합니다.>제안, 버그 신고, 기부를 해주신 모든 분께 감사드립니다.카드의 수월함은 "알맞음" 답 버튼에 지정된 다음 복습 간격의 크기로 나타납니다.여과된 뭉치는 하위 뭉치를 가질 수 없습니다.미디어를 동기화하는 도중 문제가 발생했습니다. 도구>미디어 검사를 실행한 뒤, 다시 동기화하여 이 문제를 해결하세요.중단됨: %sAnki 소개추가추가 (단축키: ctrl+enter)카드 형 추가...필드 추가미디어 넣기새 뭉치 추가 (Ctrl+N)노트 유형 추가노트 추가...반대 방향 추가태그 추가태그 추가...삽입 위치:이 확장 프로그램은 설정 기능이 없습니다.확장 프로그램이 AnkiWeb에서 다운로드 되지 않았습니다.확장 프로그램관여된 것으로 추정되는 확장 프로그램:{} 추가: %s추가됨오늘 추가정렬 필드와 중복된 노트 추가: %s다시오늘 다시'다시'버튼을 누른 횟수: %s모든 덮은 카드모든 카드 유형모든 뭉치모든 필드무작위 순서의 모든 카드현재 프로필의 모든 카드, 노트, 미디어 파일이 삭제됩니다. 계속 진행하겠습니까?모든 복습 카드를 무작위 순서로필드 안에 HTML 허용오디오 재생시 질문 부분을 항상 포함설치한 확장 프로그램이 동작하지 않습니다. 문제가 계속되면 도구>확장 프로그램 메뉴를 사용해 확장 프로그램을 비활성화 하거나 삭제하십시오. '%(name)s' 로딩 중 : %(traceback)s 데이터베이스에 접근 도중 오류가 발생했습니다. 가능한 유발 원인: - 바이러스 백신 프로그램, 방화벽, 백업, 또는 동기화 소프트웨어가 앙키를 방해할 수도 있습니다. 그러한 소프트웨어를 꺼보시고, 해당 문제가 사라지는지 확인하세요. - 하드디스크가 꽉 찼을 수도 있습니다. - 내 문서/Anki 폴더가 네트워크 폴더에 존재할 수 도 있습니다. - 내 문서/Anki 폴더가 쓰기 불가 상태일 수도 있습니다. - 하드디스크에 오류가 있을 수도 있습니다. "도구>데이터베이스 검사"를 실행해서 모음집이 깨진 것은 아닌지 확인하는 것도 좋은 방법입니다. %s를 여는동안 에러가 발생하였습니다.AnkiAnki 2.0 뭉치Anki 컬랙션 패키지Anki 뭉치 꾸러미프로필 자료를 읽을 수 없었슨니다. 윈도우 크기와 싱크를 위한 로그인 정보가 사라졌습니다.Anki가 하드디스크에 있는 프로필 폴더의 이름을 바꿀 수 없습니다. 내 문서/Anki 폴더에 쓰기 권한을 가지고 있는지 확인하고, 다른 프로그램이 프로필 폴더를 접근 중은 아닌지 확인한 후 다시 시도하세요.질문과 답을 구분하는 선을 찾을 수 없습니다. 서식을 수동으로 수정해서 질문과 답을 바꾸세요.Anki가 지원하지 않는 파일이 collection.media 폴더의 하위 폴더에 있습니다.Anki는 사용하기 편하고, 영리한 분산 학습 시스템입니다. 무료로 제공하는 오픈 소스 프로그램입니다.Anki는 AGPL3 라이센스를 따릅니다. 더 자세한 정보는 소스 배포판의 라이센스 파일을 참고하세요.컬랙션 파일을 열 수 없습니다. 컴퓨터를 재시작 한 후에도 문제가 지속되면, 프로필 관리에서 백업 열기 버튼을 사용해주십시오. 디버그 정보: AnkiWeb 아이디나 비밀번호가 틀렸습니다. 다시 시도하세요.AnkiWeb 아이디: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를 다시 실행하면 반영됩니다.변경 사항은 앙키를 재시작한 뒤 적용됩니다.미디어 검사(&M)...업데이트 확인미디어 디렉토리에 있는 파일 점검미디어 파일 확인 중...검사 중...선택뭉치 선택노트 유형 선택태그 선택사용되지 않은 것을 지우기사용되지 않은 태그들 지우기복제: %s닫기입력한 내용을 포기하고 창을 닫을까요?종료 중...Cloze빈칸 뚫기 (Ctrl+Shift+C)코드:모음집 내보내기 완료.모음집이 깨졌습니다. 사용 설명서를 참고하세요.쌍점쉼표설정설정인터페이스 언어 및 기타 옵션 설정축하합니다! 현재까지 이 뭉치에서 만기된 모든 카드를 공부했습니다.연결 중...연결 시간이 초과되었습니다. 인터넷 연결에 문제가 있거나 미디어 폴더에 크기가 큰 파일이 있을 수 있습니다.계속클립보드에 복사됨복사하기디버그 정보 복사클립보드에 복사하기성숙한 카드 정답률: %(a)d/%(b)d (%(c).1f%%)정답률: %(pct)0.2f%%
(%(good)d/%(tot)d)확장 프로그램 파일이 손상되었습니다.AnkiWeb에 연결할 수 없습니다. 네트워크 연결 상태를 확인하고 다시 시도하세요.오디오를 녹음할 수 없음. 'lame'을 설치하겠습니까?파일을 저장할 수 없습니다: %s몰아보기뭉치 만들기여과된 뭉치 만들기...dvisvgm으로 크기를 조절할 수 있는 이미지를 만들기생성Ctrl + 1Ctrl+2Ctrl + 3Ctrl + 4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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개를 삭제합니까?'%(a)s'카드 유형과 함께, %(b)s카드를 삭제하시겠습니까?이 노트 유형과 여기에 속한 모든 카드를 작제할까요?사용하지 않는 이 노트 유형을 삭제할까요?사용되지 않는 미디어 파일을 지울까요?노트가 사라진 %d카드를 삭제했습니다.서식이 사라진 %d카드를 삭제했습니다.사라진 노트 형식으로 작성된 노트 %d개를 삭제했습니다.카드가 없는 노트 %d개를 삭제했습니다.잘못된 필드를 포함한 %d개 노트를 삭제했습니다.삭제했습니다.뭉치 목록에서 이 뭉치를 지우면, 남아 있는 모든 카드는 각자의 원래 뭉치로 돌아갑니다.설명공부 화면에 표시할 설명 (현재 뭉치에만 해당):대화 상자AnkiWeb에서 다운로드%(fname)s 다운로드됨AnkiWeb에서 다운로드하는 중...만기만기인 카드만내일 만기종료(&X)수월함쉬움쉬움 버튼 보너스쉬움 간격편집"%s" 수정하기현재 카드 편집HTML 편집편집글꼴비우기빈 카드...빈 카드 번호: %(c)s 필드: %(f)s 빈 카드가 발견되었습니다. 도구>빈 카드를 실행하세요.비어 있는 첫 필드: %s두 번째 필터 허용End%s의 새로운 카드를 넣을 뭉치를 입력하거나, 빈 칸으로 남겨 두세요:새 카드 위치를 입력하세요 (1...%s):추가할 태그를 입력하세요:삭제할 태그를 입력하세요:%(id)s: %(error)s. 다운로드 중에 문제가 생겼습니다.프로그램 시작 오류: %s보안 연결에 실패했습니다. 이 오류는 주로 바이러스 백신, 방화벽 또는 VPN으로 인하여 나타나거나, 인터넷 제공자의 문제 때문에 나타납니다.%s 실행 중 오류 발생.%s 실행 중 오류 발생.실험적인 V2 반복학습 일정조절기내보내기내보내기...%d개 미디어 파일을 내보냈습니다.기타FF1필드 %d 데이터베이스 검사를 실행해 보시고, 이후에도 문제가 지속될 경우 고객지원 웹사이트에 문의해 주세요.잘못된 정규 표현식입니다.지원하지 않는 검색 - 철자 오류를 확인해주세요.보류되었습니다.기울임꼴 (Ctrl+I)Ctrl+Shift+T를 눌러 태그로 이동보관할 백업LaTeXLaTeX equationLaTeX math env.실패마지막 카드최근 복습나중에 추가한 것부터익힘앞당겨 공부하기 제한익힘: %(a)s, 복습: %(b)s, 재익힘: %(c)s, 여과됨:%(d)s익힘 카드거머리 처리거머리 기준왼쪽개수 제한여는 중...지금 저장된 컬렉션에는 카드가 존재하지 않습니다. Ankiweb에서 다운로드할까요?최대 복습 간격최저 수월함관리노트 타입 관리노트 유형 관리...관리...임의로 묻은 카드%s로 배정태그로 배정노트에 표시하기MathJax 공간MathJax 화학MathJax 인라인성숙한 카드최대 복습 간격최대 복습량/일미디어최소 복습 간격분새 카드와 복습 카드 섞기Mnemosyne 2.0 뭉치 (*.db)그밖에많이 틀린 순서대로카드 이동카드를 뭉치로 이동:여러 글자의 분리 기호를 지원하지 않습니다. 하나의 분리 기호만 사용해주세요.노트(&O)이미 존재하는 이름.뭉치 이름:이름:네트워크새 카드새 카드오늘의 제한량을 초과하는 새 카드 : %s새 카드만새 카드/일새 뭉치 이름:새 복습 간격새 이름:새 노트 유형:새 옵션 그룹 이름:새 위치 (1...%d):하루가 시작하는 시각은 자정으로부터표시 없음만기된 카드가 없습니다.오늘 학습한 카드가 없습니다.제시한 기준에 맞는 카드가 없습니다.빈 카드가 없습니다.오늘 학습한 성숙한 카드가 없습니다.사용하지 않거나 빠진 파일이 없습니다.새로운 업데이트 없음.노트노트 ID노트 유형노트 유형노트와 그에 속한 카드 %d개가 삭제되었습니다.노트를 덮었습니다.노트가 보류되었습니다.주의: 미디어는 백업되지 않습니다. 만약을 대비해 주기적으로 Anki 폴더를 백업하세요.알림: 내력의 일부가 빠졌습니다. 더 자세한 정보는 탐색기 문서에서 확인하세요.파일에서 노트를 추가함 : %d파일에서 노트를 발견함 : %d텍스트 파일로 정리한 노트노트는 적어도 하나 이상의 필드가 필요합니다.이미 컬렉션에 있기 때문에 노트를 추가하지 않았습니다 : %d노트에 태그 설정됨.노트 타입이 바뀌었기 때문에 불러올 수 없는 노트 : %d파일이 최신 버전을 가졌기 때문에 업데이트된 노트 : %d배정 안 함확인처음 공부한 지 오래된 것부터다음 동기화 때, 한 방향으로만 변경 사항 적용하기어떤 카드로 만들어 내지 않는 노트가 하나 이상 있어서 해당 노트를 가져오지 못했습니다. 이 문제는 빈 필드가 있거나, 텍스트 파일의 내용을 올바른 필드에 배정되지 않았기 때문에 발생할 수 있습니다.위치 수정은 새 카드만 가능합니다.오직 한 클라이언트만이 AnkiWeb에 접근할 수 있습니다. 만약 이전 동기화가 실패했다면, 몇 분 뒤에 다시 시도하세요.열기백업 열기...최적화하는 중...필터 선택옵션%s의 옵션옵션 그룹:옵션...오렌지색 깃발순서추가한 순서대로만기 순서대로뒷면 서식 교체:글꼴 교체:앞면 서식 교체:압축된 앙키 덱/컬렉션 (*.apkg *.colpkg *.zip)비밀번호:붙여넣기클립보드에 있는 이미지를 PNG 형식으로 붙여넣기Pauker 1.8 Lesson (*.pau.gz)백분율기간: %s새 카드 대기열의 끝으로 보내기다음 범위 안의 복습 간격을 유지한 채로 복습 대기열에 넣기:먼저 다른 노트 유형을 추가하세요.인터넷 연결 상태를 확인하십시오.마이크를 연결하고, 다른 프로그램이 오디오 장치를 사용하고 있지 않은지 확인하세요.노트를 편집해서 빈칸을 뚫으세요. (%s)프로필이 열려 있는 상태이고, Anki가 다른 작업을 진행 중은 아닌지 확인하고, 다시 시도하세요.이 필터에 이름을 지으세요:PyAudio를 설치하세요%s 폴더를 삭제한 후 다시 시도해 주세요.이 문제를 해당 확장 프로그램의 개발자에게 전달하십시오.바뀐 언어 설정을 적용하려면 Anki를 재시작해 주세요.도구>빈 카드를 실행하세요뭉치를 선택하세요.한개의 확장 프로그램을 선택해 주십시오.하나의 노트 유형에 속한 카드만 선택하세요.무언가 선택하세요.최신 버전의 Anki로 업그레이드하세요.이 파일을 가져오려면, 파일>가져오기 메뉴를 사용하세요.AnkiWeb을 방문해서 뭉치를 업그레이드한 뒤 다시 시도하세요.위치환경 설정미리 보기선택된 카드 미리 보기 (%s)새 카드 미리 보기이 기간 전부터 현재까지 추가한 새 카드 미리보기:%d개의 미디어 파일을 처리함처리 중...오류 있는 프로파일프로필프록시 인증이 필요합니다.질문대기열의 끝: %d대기열의 시작: %d닫기무작위로무작위 순서평점다시 모으기음성 녹음소리 녹음하기 (F5)녹음 중...
시간: %0.1f빨간색 표시늦은 정도의 상대값재익힘이전에 입력한 내용 유지저장된 검색에서 %s를 제거하시겠습니까?카드 유형 삭제...현재 사용하는 필터 지우기태그 지우기포맷 지우기이 카드 유형을 제거하면 하나 이상의 노트가 삭제될 수 있습니다. 먼저 새로운 카드 유형을 만드세요.이름 변경카드 유형 이름 변경뭉치 이름 변경학습 실패한 카드를 다음에 반복하기당신의 컬렉션을 백업된 것으로 교체하시겠습니까?오디오 재생음성 재생위치 변경카드 유형 위치 변경...새 카드 위치 변경위치 변경...이 태그들 중 하나 이상 있어야 함:일정 재조정일정 재조정이 뭉치에서 선택한 답 버튼에 기반하여 카드 일정 조정설정이 초기화되었습니다.다시 진행글씨 좌우 뒤집기 (RTL)백업한 것으로 돌아가기'%s' 이전 상태도 되돌리기복습복습 횟수복습 시간앞당겨 복습하기이 기간만큼 앞당겨 복습하기:이 기간 전부터 현재까지 잊어버린 카드 복습하기:잊어버린 카드 복습하기하루 중 시간대 별 정답률.복습오늘의 제한량을 초과하는 복습 카드: %s오른쪽저장하기지금 사용한 필터를 저장...PDF로 저장저장됨.범위: %s찾기찾을 범위:꾸밈 정보 안까지 찾기 (느림)이 뭉치에서전체 선택(&A)노트 선택(&N)제외할 태그 선택:선택한 파일이 UTF-8 형식이 아닙니다. 매뉴얼의 가져오기 부분을 참고해 주세요.선택적 공부쌍반점서버를 찾을 수 없습니다. 인터넷 연결이 끊어졌거나, 바이러스 백신 또는 방화벽 소프트웨어가 Anki가 인터넷에 접속할 수 없도록 막고 있습니다.%s의 모든 하위 뭉치에도 이 옵션 그룹을 지정할까요?모든 하위 뭉치에도 적용외향 색 설명하기Shift 키가 눌러진 채로 실행되었습니다. 자동 동기화와 확장 프로그램 실시를 하지 않습니다.기존 카드의 위치 이동단축키: %s단축키: 왼쪽 화살표단축키: 오른쪽 화살표 또는 Enter단축키: %s%s 보기답 보기양면 보기중복된 항목 보기답변 시간 표시흑백으로 카드 보기 (야간 모드)복습하지 않은 긴 간격의 배운 카드 보기새 카드는 복습 카드보다 나중에 등장새 카드는 복습 카드보다 먼저 등장추가한 순서대로 새 카드 공부무작위 순서로 새 카드 공부답 버튼 위에 다음 복습 시점 표시남은 카드 개수를 복습 화면에 표시가장자리 창크기:건너뜀관련된 카드 또는 덮어진 카드는 다음 세션까지 연기됩니다.일부 사항은 Anki를 다시 시작한 뒤 적용됩니다.정렬 필드탐색기에서 이 필드를 기준으로 정렬이 세로열을 기준으로 정렬할 수 없습니다. 다른 열을 선택하세요.mpv 또는 mplayer가 설치되기 전에는 카드의 음성과 영상이 나타나지 않습니다.스페이스 바시작 위치:초기 수월함통계통계단계:익힘 단계(분 단위)익힘 단계는 반드시 숫자로 지정하세요.중지 중...학습 %(a)s %(b)s 오늘(%(secs).1fs/card)오늘은 %(a)s를 %(b)s 공부함.오늘 공부공부공부할 뭉치공부할 뭉치...공부 시작카드 상태 또는 태그별로 공부하기스타일스타일 (카드끼리 공유됨)아래 첨자 (Ctrl+=)Supermemo XML (*.xml)위 첨자 (Ctrl++)보류카드 보류노트 보류보류됨보류된 카드 + 덮어진 카드동기화오디오와 이미지 동기화동기화 실패: %s동기화 실패: 인터넷이 연결되지 않음.동기화를 하려면 사용자 컴퓨터의 시각이 정확해야합니다. 시계를 수정한 뒤 다시 시도하세요.동기화 중...탭중복된 태그태그만 달기태그목표 뭉치 (Ctrl+D)목표 필드:내용탭이나 쌍반점으로 구분한 텍스트 파일 (*)그 뭉치는 이미 존재합니다.이미 사용 중인 필드 이름입니다.이미 사용 중인 이름입니다.AnkiWeb과의 연결 시간이 초과되었습니다. 네트워크 연결 상태를 점검하고 다시 시도하세요.기본 설정은 삭제할 수 없습니다.기본 뭉치는 삭제할 수 없습니다.뭉치에 들어있는 카드 분류.실험적인 학습일정 조절기는 부정확한 학습 일정을 만들 수 있습니다. 먼저 설명서를 읽으셨는지 확인하세요. 진행할까요?첫째 필드가 비어있습니다.노트 유형의 첫 필드는 반드시 배정되야합니다.해당 확장 프로그램은 %(name)s 와 호환되지 않아 비활성화 되었습니다: %(found)s다음 문자는 사용할 수 없습니다: %s다음 확장 프로그램이 비활성화 되었습니다.이 카드의 앞면이 비어 있습니다. 도구 > 빈 카드를 실행해 주세요.입력한 내용대로라면 모든 카드에서 빈 질문이 만들어집니다.추가한 카드의 수그동안 답변한 질문 개수앞으로 공부할 복습량각 버튼을 누른 횟수유효한 .apkg 파일이 아닙니다.제시한 검색어에 해당하는 카드가 없습니다. 검색어를 수정하겠습니까?이 변경 사항을 적용할 경우, 다음 동기화 때 데이터베이스 전체를 업로드해야합니다. 다른 기기에서 했던 복습 등의 변경 사항이 아직 이 곳에 동기화된 상태가 아니라면, 그대로 잃게됩니다. 계속하겠습니까?질문에 답을 하기까지 걸린 시간공부할 수 있는 새 카드가 더 있지만, 일일 제한량에 도달했습니다. 옵션에서 제한량을 높일 수 있지만, 새 카드를 더 많이 시작할수록 그에 따라 단기 복습량도 늘어난다는 것을 주의하세요.적어도 하나의 프로필은 반드시 있어야합니다.이 열기준으로 정렬할 수 없습니다. 그대신 "카드:1"과 같이 각각의 카드 유형을 검색할 수 있습니다.이 세로열을 기준으로 정렬할 수 없습니다. 그러나 왼편의 항목을 클릭해서 특정 뭉치를 검색할 수 있습니다.유효한 .apkg 파일이 아닙니다. AnkiWeb에서 다운로드한 파일이라면 다운로드에 실패했을 가능성이 있습니다. 다시 시도해 보시고, 문제가 계속되면 다른 브라우저로 다시 시도해 주세요.파일이 이미 존재합니다. 덮어쓸까요?이 폴더는 백업 생성을 쉽게 하기 위해서, 사용자의 모든 Anki 관련 데이터를 한 곳에 저장합니다. 다른 위치를 지정하려면 다음을 참고하세요: %s 이것은 정상 복습 일정에서 벗어난 공부를 할 때 사용하는 특별한 뭉치입니다.이것은 빈칸 뚫기 {{c1::예시}}입니다.이는 %d개의 카드를 만들 것입니다. 진행할까요?기존의 모음집을 삭제하고 가져오려는 파일에 들어있는 자료로 대체할 것입니다. 계속 진행할까요?이는 학습 중인 모든 카드를 초기화하고, 필터링한 덱을 지우고, 일정조절기의 버전을 바꿉니다. 진행할까요?시간시간 제한복습 카드확장 프로그램을 찾으려면, 아래 버튼을 클릭하십시오.

적당한 확장 프로그램을 찾으면, 밑에 있는 코드를 복사해 아래에 넣어주십시오. 2개 이상의 코드를 입력하려면 코드 사이에 스페이스로 구분해주십시오.이미 존재하는 노트에 빈칸 뚫기를 만들려면, 편집>노트 유형 바꾸기를 통해서 빈칸(cloze) 유형으로 먼저 바꾸어야 합니다.이 카드들을 지금 보려면 아래의 '덮기 해제' 버튼을 눌러 주세요.정상 복습 일정을 벗어나 공부를 하고 싶다면, 아래에 있는 맞춤 공부 버튼을 클릭하세요.오늘복습을 기다리는 카드가 더 있지만, 일일 제한량에 도달했습니다. 최적의 암기 효과를 위해, 옵션에서 제한량을 높이길 권합니다.허용 설정하기Mark(*) 하기보류하기전체전체 시간전체 카드전체 노트정규식으로 취급유형답 입력: 알 수 없는 필드 %sAnki 미디어 폴더에 접근하지 못했습니다. 시스템 임시 폴더에 대한 허가가 정확하지 않을 수 있습니다.읽기 전용 파일은 가져올 수 없습니다.존재하는 파일을 휴지통으로 옮길 수 없습니다. - 컴퓨터 재부팅을 시도해주세요.확장 프로그램 업데이트 또는 삭제에 실패하였습니다. Anki를 shift키를 누르면서 시작하여 모든 확장 프로그램을 임시로 비활성화 시킨 후 다시 시도하세요. 디버그 정보: %s덮기 해제밑줄 (Ctrl+U)실행 취소%s 취소예상하지 못한 응답 코드: %s알 수 없는 파일 형식.보지 않은 카드첫 필드가 일치할 경우 기존의 노트를 업데이트다음 확장 프로그램들을 업데이트 하시겠습니까?업데이트됨AnkiWeb으로 업로드AnkiWeb에 업로드 중...카드에 사용되었지만, 미디어 폴더에 없는 파일:사용자 1버전 %s웹사이트 보기파일 보기편집이 끝나길 기다리고 있습니다.빈칸 뚫기는 화면 위쪽에서 유형을 빈칸(Cloze)으로 선택해야만 동작합니다.어떤 것을 파내시겠습니까?카드를 추가할 때, 현재 뭉치에 넣음모음집 전체지금 다운로드하시겠습니까?

%(cont)s에서 Damien Elmes에 의해 작성되고 패치되고 변역되고 테스트되고 디자인됨빈칸 유형의 노트를 지정했지만 빈칸이 뚫리지 않았습니다. 계속 진행할까요?보유한 뭉치가 많습니다. 다음을 참조해 주세요. %(a)s. %(b)s음성을 녹음하지 않았습니다.적어도 세로열 하나는 반드시 필요합니다.어린 카드어린 카드 + 익힘 카드당신의 AnkiWeb 컬렉션은 어떤 카드도 포함하지 않습니다. 다시 동기화해서 업로드를 선택해주세요.이 변경은 모든 뭉치에 영향을 미칩니다. 만약 현재 뭉치만 바꾸시려면, 먼저 새로운 옵션 그룹을 생성하세요.당신의 컬렉션이 망가졌다고 나타납니다. 이것은 Anki가 실행 중일 때 파일이 복사되거나 옮겨졌기 때문이거나 컬렉션이 네트워크나 cloud 드라이브에 저장되었기 때문입니다. 만약 컴퓨터 재부팅 후에 문제가 지속되면 프로필 전환 창에서 (자동) 백업을 열어주세요.콜렉션이 일치하지 않는 상태입니다. 도구 > 데이터베이스 검사 를 실행하신후 다시 동기화 하십시요.동기화 하기엔 콜렉션 또는 미디어 파일이 너무 큽니다.성공적으로 모음집을 AnkiWeb에 업로드했습니다. 만약 다른 기기를 사용하고 있다면, 이 컴퓨터에서 업로드한 모읍집을 다운로드할 수 있도록 동기화하세요. 그 뒤에 이루어진 복습과 카드 추가는 자동으로 병합됩니다.컴퓨터의 저장 용량이 부족합니다. 필요 없는 파일들을 삭제한 다음 다시 시도하세요.이 기기에 저장된 내용과 AnkiWeb에 저장된 내용이 차이가 나기 때문에, 한쪽의 내용을 다른 쪽으로 덮어써야만 합니다. AnkiWeb의 내용을 이 컴퓨터에 덮어쓰려면 'AnkiWeb에서 다운로드'를 선택해 주세요. (주의: 마지막 동기화 이후 이 컴퓨터에서 이루어진 변경 사항은 소실됩니다) 이 컴퓨터의 내용을 AnkiWeb에 덮어쓰려면 'AnkiWeb으로 업로드'를 선택해 주세요. (주의: 마지막 동기화 이후 AnkiWeb이나 다른 기기에서 이루어진 변경 사항은 소실됩니다.) 모든 기기들이 동기화되고 나면, 이후의 복습 내용과 추가된 카드는 자동적으로 처리될 수 있습니다.Anki가 연결을 하는 것을 방화벽이나 백신이 막고 있습니다. Anki를 예외 항목에 추가해주세요.[뭉치 없음]개카드뭉치의 카드카드, 선택 기준모음집일일뭉치뭉치 일생복제도움말숨김시간시간 뒤%s일 동안%s시간 동안%s분 동안%s 달 내%s 초 내%s년 내실패분당 0.1카드 미만%s에 배정됨태그로 배정됨분분달복습초통계현재 페이지주모음집 전체~anki-2.1.15+dfsg/locale/ku/000077500000000000000000000000001353113723000153155ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ku/LC_MESSAGES/000077500000000000000000000000001353113723000171025ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ku/LC_MESSAGES/anki.mo000066400000000000000000000010171353113723000203600ustar00rootroot00000000000000,<PQS %Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2019-07-02 11:47+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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) %anki-2.1.15+dfsg/locale/la/000077500000000000000000000000001353113723000152725ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/la/LC_MESSAGES/000077500000000000000000000000001353113723000170575ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/la/LC_MESSAGES/anki.mo000066400000000000000000000165371353113723000203520ustar00rootroot00000000000000   "   $ 7 V 8h     " $ $. &S "z  4 2  ) "F $i $ $  &.=Ncz   #)/3 :D JU^ p{  #*/48<@,B!o    Xx         &1 6DKQejou}  L W d q)|$51ARo#+)1LIc,! '-'U#} &"(Ir  -5>CH P Z hv     9=?BGPX]bfjn.p"! &1B[ qf} # 4 ?L [e n{    $28H Q]T-zvi)/_L6!> 2=k(^7 @}cu`3O"j]P;YXGB*oJV 9$gxaIqr &N%HEM#\Ses8:t1UZ{RdbfF5l|ChWmA y['?np~.KQD0w4+<, (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&Edit&Export...&File&Find&Go&Guide&Guide...&Help&Import...&Info...&Invert Selection&Next Card&Notes&Preferences...&Previous Card&Reschedule...&Support Anki...&Tools&Undo(%s correct)(Note deleted)(end)(new)(please select 1 card).../0d1 101 month1 year10AM10PM3AM4AM4PM:%d card%d cards%(pct)d%% (%(x)s of %(y)s)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 Card Type...Add MediaAdd New Deck (Ctrl+N)Add Note TypeAdd Notes...Add TagsAdd Tags...Add to:Add: %sAddedAdded TodayAgainAgain TodayAll Card TypesAll DecksAll FieldsAnkiAnki 2.0 DeckAnswercardscards from the deckdaysdeckhoursminutessecondsthis page~Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-03-01 22:11+0000 Last-Translator: Damien APPEL Language-Team: Latin 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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) (1 ex %d) (inactivum) (inactivum) (activum) Id %d cartam habet. Id %d cartas habet.%% recti%(a)0.1f %(b)s/dies%(a)0.1fkB missi, %(b)0.1fkB accepti%(a)0.1fs (%(b)s)%(a)d ex %(b)d nota missa%(a)d ex %(b)d notae missae%(n)d: %(name)s%(tot)s %(unit)s%.01f carta/temporis punctum%d carta%d cartae%d carta deleta.%d cartae deletae.%d carta exportatur.%d cartae exportantur.%d carta importatur%d cartae importantur%d carta visa%d cartae visae%d cartarum pila missa.%d cartarum pilae missae.%d circulus%d circuli%d mutatio documentis missurum esse%d mutationes documentis missura esse%d documentum accipit%d documenta accipiunt%d nota%d notae%d nota addita%d notae additae%d nota deleta.%d notae deletae.%d nota exportata.%d notae exportatae.%d nota importata.%d notae importatae.%d nota immutata%d notae immutatae%d nota mutata%d notae mutatae%d recognitio%d recognitiones%d electum%d electa%s exemplum%s dies%s dies%s hora%s horae%s temporis punctum%s temporis puncta%s temporis punctum.%s temporis puncta.%s mensis%s menses%s seconda%s secondae%s deleturum esse :%s annus%s anni%sd%sh%sm%sme%ss%sy&De...&Percurre et instrue...&Cartae&Proba biblioteca&Corrigere&Exportare...&Tabula&Reperio&Ite&Dux&Dux...&Auxilium&Importare...&Indagatio...&Inverte electio&Carta sequens&Notae&Configuratio...&praecedens Carta&Repraevide&Auxilium Anki...&Instrumenta&Abroga(%s recti)(Nota deteta)(finis)(novum)(Quaeso, electa unam cartam).../0d1 101 mensis1 annus10AM10PM3AM4AM4PM:%d carta%d cartae%(pct)d%% (%(x)s sur %(y)s)Forma Exportationis:Reperi:Magnitudo formae litterae:Forma litterae:In:Inclusum:Longitudo lineae:Substitue ab :Gratias valde omnibus hominibus quae aut propositiones aut defectionium monitiones aut dona misserunt.Adde genus cartae...Adde documentumAdde novam pilam cartarumAdde genus notaeAdde notasAdde indiciaAdd indicia...Adde in :Adde: %sAdditum esseHodie additum esseRursusHodie rursusOmnes generes cartaeOmnes pilae cartarumOmnes tabulaeAnkiAnki 2.0 pila cartarumResponsumcartaecartae ab pila cartarumdiespila cartarumhoraePuncta temporissecundaehaec pagina~anki-2.1.15+dfsg/locale/lt/000077500000000000000000000000001353113723000153155ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/lt/LC_MESSAGES/000077500000000000000000000000001353113723000171025ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/lt/LC_MESSAGES/anki.mo000066400000000000000000000107601353113723000203650ustar00rootroot00000000000000=S8 9DK MWj8|"$$!&F"m$$ <Qiq   $/ A0L}   % B M N Z a c o  I  % G Df A A J/ z & B BHGH+*0?"\##' '/? GQW`o7   ( 3*>*i+ </$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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-03-05 03:30+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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) 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ėnesiai%s mė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.15+dfsg/locale/lv/000077500000000000000000000000001353113723000153175ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/lv/LC_MESSAGES/000077500000000000000000000000001353113723000171045ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/lv/LC_MESSAGES/anki.mo000066400000000000000000000033571353113723000203730ustar00rootroot00000000000000%`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: 2019-07-02 11:47+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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) 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.15+dfsg/locale/mn/000077500000000000000000000000001353113723000153105ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/mn/LC_MESSAGES/000077500000000000000000000000001353113723000170755ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/mn/LC_MESSAGES/anki.mo000066400000000000000000000233241353113723000203600ustar00rootroot00000000000000d        & 7 ; ? C G K U ^ d j p t ~      0 ( & < I [ h s  X  # )4R9 ` gqx &( %, 3@ GSZ`ejo    !&F+r   !&.6 ; E Q_ {  6Eb jt8y ! " 4JO:Q a m w     ".4P'`  0<##`!9 9xC   09  $8/hy-?=$lb   $/ I Vbz--%#@dw"   +  # ) !:5!!p!4!!!!!"."@" R"_"v""" "2""#*# ?#L#g#H#@#J$rZ$)$$ %%g.%%V%%&0$& U& `&%m&/&&!LR Q-a);&BC$qYVK6h[W|\Sly?HP(,8"3oimFGj54:ze'r%@DO^1]A2<nu+XMTNs *k>9`7 pUx _~0 d c{b/gIEvf=#}Z.twJ%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+FDeleteDelete 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: 2019-07-02 11:47+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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) 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+FУстгаШошгыг устгахДиалог&ГарахАмрын түвшинАмарханЗасварлаНэмэхийн шошгыг оруулах:Устгахын шошгыг оруулах:ЭкспортЭкспорт...F1Файлын талбар %d :Талбарын тааруулахТалбаруудХайж &орлуулах...Хайж орлуулахЭхлэхийн давталтСайнHTML хэлний редакторХэцүүТусламжТа Анкит өргөсөн харин нэрээ дэмжигчийн жагсаалтад байхгүй надад мэдэгдэнэ уу.Энэ шинэчлэлийг үл тоохИмпорт хийИмпорт дампуурсан. Импортын тохиргоонуудТөлөвлөлтийн мэдээллийг хамрахШошгуудыг оруулахХүчингүй байнгын илэрхийлэлХадгалахЦаг алдалтЗүүн%s-тай тааруулахШошготой холбоХуучин ньЦааш үзэхСүлжээЮу ч байхгүйНээхНууц үг:ТохируулалтуудГүйцэтгэж байна...Дуу хурааж байна...
Цаг: %0.1fДахин төлөвлөхДавталтДавталтуудБаруун&Бүгдийг сонгоХариулт үзүүлэхШинэ картыг бүх хуучин картын өмнө үзэхШинэ картыг нэмсэн дарааллаар үзэхШинэ картыг санамсаргүй дарааллаар үзэхЗарим тохируулгууд Анкиг дахин асаахийн дараа үр дүн нь гарна.Supermemo XML-руу экпорт (*.xml)ТүдгэлзэхТүдгэлзсэнШошгуудЭнэ файл аль хэзээний байна. Та үүнийг дарж бичих мөн уу?Нийт цагБичсэн хэрэг байнгын илэрхийлэлтээр хэрэглэнэ%s-г тайлах%s хувилбарТа одоо татах гэсийн юм уу?Залууөдрүүд%s-тай тааруулсанШошгууд-той тааруулахминутуудanki-2.1.15+dfsg/locale/mr/000077500000000000000000000000001353113723000153145ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/mr/LC_MESSAGES/000077500000000000000000000000001353113723000171015ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/mr/LC_MESSAGES/anki.mo000066400000000000000000000510571353113723000203700ustar00rootroot00000000000000K " "!$D$i&.CTX\`d hr{   0 N[ag~,(  #0 B OZj|7 X ?JNirz  K") .<RN7 wE]##$C(\     -LSY^ !+2 9G&O v(    &37<B I Uahnsx~     " * > N c t           F !(! /!;!K!*Z!! !!!!!! ! !!" " "!"="E"J" R" \"g" p" |""" """" " ""#6#6U#####8## #!$'$/$,6$ c$"n$$$$$$$$$$$$ $%% %& &&@&7'9'%H'gn'm'[D((l)+))))%)%%*%K*q******'***#+4+F+ X+d+ s+.+$+:+)#,!M,:o,,$,o,T- f-r-5--- ----A-E..9t.0..$./1/*@/'k/4//'R0:z00y1 1H112$252E2\2o22WQ3>33!3)4D435&5A6P78*8D8?W8`8]8GV9,9x9D:W:2t:%:J:.;G;1W;;; ;);>;)<F< V<-c<>+>>>'>?N/?~???G?! @!+@zM@&@@%@%A,A3A:A AA NA [AhA.{AA&AAAB )B6BVBiBO|B_B/,C/\CC"C CC>C"DADQDaD0rD(D7D/E.4EcEsE!EE+E EE FF *F 4F>FBF G,7G1dG)GGWeH,HEH 0I=IMI `ImIII IIIIJ JJ#JK+K;K/KK{KOK5K5LSL iL!vLLTLa MHoMMOUNN NNzN ZOgOW~OOOPPjP &Q 3Q =Q JQ4TQ#Q)QQQ Q RR+R-R |bWXwmVr]y9;Y2!jk  4)afPdne@ tclMOh6ov[Gq"FI(B8<Z5QxLDKJ3.-{i%>$ CNs:_T~7#^pR* ,?HU+=&\gA`}Su1'/z0E (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+LCutDateDecksDeleteDelete 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: 2019-07-02 11:47+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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) 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+Lकापादिनांकपत्त्यांचे गठ्ठेकाढून टाकाटॅग काढून टाकावर्णनसंवादनिर्गमन (&x)सोपेसंपादित करारिकामेसमाप्तजोडण्यासाठी टॅग प्रविष्ट करा:काढून टाकण्यासाठी टॅग प्रविष्ट करा:%s चालवताना त्रुटी.%s चालू करण्यात दोषनिर्यात करानिर्यात करा...अगाऊF1फाइल मधील %d रकाना आहे:रकाना मांडणेरकानेगाळणीचाळणी:प्रतिलिपि शोधा (&D)...प्रतिलिपि शोधाशोधून अदलाबदल करा (&p)...शोधून अदलाबदल करापहिले पुनरावलोकनतळटीपहवामानसर्वसामान्यचांगलेएचटीएमएल संपादककठीणशिर्षटीपमदतइतिहासगृहतासजर तुम्ही योगदान केल्याशिवाय या यादीत नसाल, तर आम्हाला कळवा.हा अद्ययावत दुर्लक्ष कराआयात कराफाइल प्राप्त कराआयात अपयशी राहिले. पर्याय आयात कराहे कोणत्याही पत्त्याने न वापरल्याशीवाय मिडीया संचयीकेत आहेत:अनुसूचानाची माहिती समाविष्ट कराटॅग समाविष्ट कराअवैध रेग्यूलर एक्सप्रेशन.ठेवालॅटेकशिक्षणडावी%s ला मांडाटॅगना मांडामिनिटेअधिकनेटवर्कनवीन पत्तेकोणत्याही विनावापरलेल्या किंव्हा गायब असलेल्या फाइल सापडल्या नाही.काही नाहीउघडापर्यायपरवलीचा शब्द:टक्केवारीस्थानपसंतीविश्लेषण करत आहे...यादृच्छिकध्वनिमुद्रित करत आहे...
वेळ: %0.1fपुन्हा अनुसूचित कराविपरीत पाठ्य दिशा (RTL)समीक्षाउजवीसर्व निवडा (&A)उत्तर दाखवानवीन पत्ते पुनरावलोकनाधी दाखवानवीन पत्ते जोडण्याच्या क्रमात दाखवानवीन पत्ते विनाक्रमी दाखवाकाही संयोजना फक्त आन्की पुन्हा सुरु केल्यानंतर लागू होतील.सुपरमेमो एक्सएमएल निर्यात (*.xml)निलंबित कराटॅगपाठ्यही फाइल अस्तित्वात आहे. खोडून पुन्हलेखन करावे?एकूणअकूण वेळआदानला रेग्यूलर एक्सप्रेशन माना%s मागे घ्यान पाहिलेलेपत्त्यांवर वापरलेले पण मिडीया संचयीकेतून गायब असलेले:%s आवृत्तीतुम्हाला हे अत्ता डाउनलोड करायचे आहे का?दिवसमदतलपवातासमध्यरात्रीनंतर तास%s ला मांडलेटॅगना मांडलेमिनिटंमिनिटेमकाओसेंकदहे पानw~anki-2.1.15+dfsg/locale/ms/000077500000000000000000000000001353113723000153155ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ms/LC_MESSAGES/000077500000000000000000000000001353113723000171025ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ms/LC_MESSAGES/anki.mo000066400000000000000000000134561353113723000203720ustar00rootroot00000000000000X " 8>Q"b$$&" 4, 2a   " $ $ $/ T u          ' 0 6 A G M Q W i t               % * . 2 6 ,8 (e  f  * 7 I V a q   X  ,@E%EGOcAu #!/;)kI5-!=!_%#+*"8 N Ygy   *8H Z er{  ++ Knl   ,=Rjc~ ( ,:W6XIT4H+ P?.'&R!;5<*%" EGJ@D0U /1C$>29#ON-S7 MA3Q=(FV8)KLB (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).../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: 2019-07-02 11:47+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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) 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).../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.15+dfsg/locale/nb/000077500000000000000000000000001353113723000152755ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/nb/LC_MESSAGES/000077500000000000000000000000001353113723000170625ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/nb/LC_MESSAGES/anki.mo000066400000000000000000000625271353113723000203550ustar00rootroot00000000000000 ! !!!"!! !!! "8"U"f"y"""$"$"&""#A#2T###"#$#$#$"$ G$h$}$$$$$$$$ %%0%4%8%<%A%E% I%S%\% b%m%s%y%}% %% %% %%%%%&&&0 & Q&^& d& o&z&&&&&&&&&&&&&T&-',/'(\''!''f'E( [(h( z( (((((e(F)7) (*2*5E*X{*Y*k.+ + +++ + ++ + ,,,%,-, 3,?, E,Q, a, k,Kv,,",, , --R-v-7m. .w.E)/@o////R/!00#0#01&1(?1h1 p1}1 11 1 111111 1 1)1&2222223 3 3 3+3 =3J3Z33`33S334 4 4 !4-4>4X4"l444&4 44 44 4 55585>5-D5r5x5(~5 555555 6646 <6G6N6U6\6c6j6 q6 ~6 6 66 66 666 6 66777%7 ,7 97 E7 R7 ^7 k7w7,7(778F8N]8P8>8P<99]9 9:::9:?:D:I: N: [:e: l:y::::::: ::::: ; ;&;-; 4;B; Z;d;k;s;|;;;;;; ; ;N;E<Y<_<f< k<w<|<F<<<<<= =-=I=N=U= Z= d=p=w=|==== = = === = ==>>>> "> .>:>X>v>6> >> >>> ? ?? #?.?2?7?8QAQ1Q%R *R6RT;RR S%?SeSSS+SSSST.T6T KTVT gT uTTT TT%TTUUUUUU UU UU U VV6VOVM`VVVV VVVV W$WCWJW%ZW WWWWW WW(WWW.X1X7X*=X hXvXX5XXXX Y YYY$Y+Y2Y9Y @Y MY ZY gYtY{YY YYY YY Y YYZZ Z)Z9Z ?Z KZYZkZ'Z)ZZZI[EQ[U[9[L'\t\]}\ \\\]]$]4]9]A] S]^]e]v] z]](],]] ] ^^^^^ 8^ D^N^T^ Y^g^ ^^^^^^^^^^ __U%_{__ ___ __J_` 2`<`W`h`````` `````` a"a(a 1a ?aLa daoa aa aaaa aaa/a$#bFHb bb bb"b b bbbc ccEc[c_cec lc%vccccccc cc7 dEdId[dldqdddd ddddddd"dee e$e -e 8eDeFeUe['lnqA N[bk^|E#B:FnjvHQYK(|b)IN*S6,- trh!$ R?=j@zQFx#PJCU& us")AM@{d4XXw`1_s20YGde3W~Ly aZB:v7,O$+<Pq&>/? 'T>gh%43~}V67c;%LorI1zfy!Wm ]=ZDR.lu*V29a^`To"(GpO{_/S<MUJ5 ;K5x0 wD]8eii9 \}.C\pg-fE tk+8 cHm (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).../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 save file: %sCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCurrent DeckCurrent note type:Custom StudyCutDateDays studiedDebug ConsoleDeckDecksDecreasing intervalsDefaultDeleteDelete CardsDelete DeckDelete EmptyDelete NoteDelete NotesDelete TagsDelete 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 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: 2019-07-02 11:47+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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) 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).../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 lagre fil: %sOpprett kortstokkLag Filtrert Kortstokk...OpprettetCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Skift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WNåværende kortstokkNåverende notattype:Egen Studie:Klipp upDatoDager studertFeilmeldingskonsollKortstokkKortstokkerSynkende intervallerStandardSlettSlett KortSlett kortstokkSlettSlett NotatSlett NotaterTa bort etiketterSlette 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 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.15+dfsg/locale/nl/000077500000000000000000000000001353113723000153075ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/nl/LC_MESSAGES/000077500000000000000000000000001353113723000170745ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/nl/LC_MESSAGES/anki.mo000066400000000000000000002454051353113723000203650ustar00rootroot00000000000000l;`O aO lOxOO"O OO OOOO8PTNT]TlT}TTT0T TTT T TU UU3Ur7UjUVVVV'V.V3V8VOzPzz]z F{8R{{{{{{{ {{{| | |"| '| 1| >|H| O|\|b|)q|0||||4|!0}R}e}#{}}}:~+N~z~~~ ~.~~~~~  &- 4B Zd+l   % 0=NU"ǀۀ  Á́с )9 HSX l w 8,ς "3.9 hFr҃ 4 @S Z1fȄׄ*! ֆ "0"S v͇  $.?G 5$)22҉1PU[jz <Ċ ', 55@v  ˋ !07H\bs{ ˌNߌ. 4APV^ b&l  ̍֍'/!E+g#!ǎ <! ^k]{aُ;Um!8 ܐ=,(U]`,r#gk *2A P [g m yÓ5ؓ < Y do,#&ߔV8]Eܕ*6>0uÖ$ٖ,+-D+r8ח #!0E vŘ ֘ 2NWlt#̙iy /  + @"Nq y1 țӛ " ) 6 BO_~-Ü(˜ &0 7Bb i uV  ,ўG 4Uf"  ßӟ)4Tq*̠''-@56v !?ڡMhn ~  ͢,٢ !/ 5 @ NXs{ʣߣ   !B!Udw ܤ +(0Y sX+"4&Wz~0VD+0ǧ>F7'~*(Ѩ1,,IY'#_˫e+8CQ(Frgx u/.M^S bn} !ȲͲg'SL{ȳ^e}.ô*,Bo v U$1V"gZS09$j" bķ{'^5TW]U}  ǾҾԾپ ޾ +B]vʿ޿  $&79  + ?JLT$gO$+81d1)&A-7o57=5=s75; [h x "@I ^ jt  -CT iw9   $6EIWY\aipuz~u/-.\%|:P_z qX3#W; ;GA\Zs-m2 A K!Uw%7!F.h %)?U j t8a,H7`f4 ]ULuzc: NoI !b, "A&d$#!5 ,$Q do" +H]Q$ -;;P4 pz 'G/wT  *<$X}, F@ Nc%z ' ?M$U z>   !+./Zq 5?XAt7n5u , %07>E L W b m x    , 9FM T_n #! /@%Hn t = 4 Uau!Z9wE4,cK[w Sm EqQ E%<#Rv    & 7EMch#x@ Tg)7 ' 2?@!  5DK T^ fp  _'/    /AJar @.9hq v 6G5 Qr V R&y&+#0,?0l,0%:Wp BA*#l2Y1x!      5  B P h   E     .  8 E EX        ! 1 C  X d  s       "    & : jX        : K ` s    !    $%A6g/3 /;J[im}h+%$>4c@^CL C5   !-6N"g 6 *$O i t4C7!1{S<T $a4A>(["92FOT  ( #5@Y5 $< R ^&j # *'0R x 2&:"Sv# 8  * I !b      1 !2*! ]!Ci!!!!! ! !! "" ,"8"J"d"s~"" ##0###a$(c$ $$$ $$$$ %%D/%>t%#%'%.%-.&A\&-&&& &N&O9' '-'?'c(g( n(|( ( ( ((/( (.)5)R)b)k)) )())))*,* B*M*^* u***+**)*j+++ + +++ ++-+ ,%,D,]_,4,+,&-E--=-X!.2z.8.@.5'/1]/(/'/?/7 0DX00,11'2n23&3>45J5 6O+6{6|7}77 77t898V.999\:u::: :::):;;u7;-;p;L<<=!=0=B=_=x=A== ==!>4"> W> c>m>>.>]>%?2@?s??Y?W?<S@#@#@@ @c@LAZACCBCLDjSEEH I+I4Ivlk~01?d&q <>F?ARLM|ZTvQB^${*tX 0c|#4DIm6a_R[|E5Z4z,meI\ x*gs3%hUwf ;t;v4`5nf^Mnv=#!orW_Wu=?"AGt&]>y)9<YD_JL*U%$u) sWBC}ENF8IKQapxrV:TQFi.RYg<.'|sokie Y6#>f8"678 @ (UkD~(-jm^mCJ~2B-3,xLqqHu\}oc{hjk [Z/ ]Ugzn,V-%.t 0:1SP+&e]{OXQoGHr !Y2!Shi (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-05-15 13:34+0000 Last-Translator: Michel Smits 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: 2019-07-04 05:45+0000 X-Generator: Launchpad (build 19007) Language: nl (1 van %d) (uitgeschakeld) (uit) (aan) Het bevat %d kaart. Het bevat %d kaarten."Segoe UI"%% Juist%(a)0.1f %(b)s/dag%(a)0.1fkB omhoog, %(b)0.1fkB omlaag%(a)0.1fs (%(b)s)%(a)d van %(b)d aantekening bijgewerkt%(a)d van %(b)d aantekeningen bijgewerkt%(n)d: %(name)s%(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...&Doorzoeken en installeren...&Kaarten&Controleer database&Blokken...B&ewerken&Exporteren...&Bestand&Zoeken&Gaan&Gids&Gids...&Help&Importeren&Info...&Selectie omkeren&Volgende kaart&AantekeningenMap met add-ons &openen...&Voorkeuren...&Vorige kaart&Planning wijzigen...Anki &steunen...Profiel om&schakelenH&ulpmiddelen&Ongedaan maken%(row)s' bevatten %(num1)d velden, verwachtte er %(num2)d(%s juist)(Aantekening verwijderd)(einde)(gefilterd)(aan het leren)(nieuw)(limiet van bovenliggend niveau: %d)(kies 1 kaart)....anki-bestanden komen van een zeer oude versie van Anki. U kunt ze importeren met Anki 2.0 die beschikbaar is op Anki's website..anki2-bestanden kunnen niet rechtstreeks geïmporteerd worden. Importeer het .apkg- of .zip-bestand dat u in plaats daarvan hebt ontvangen./0d1 101 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.

Fout

Er is een fout opgetreden. Gelieve Anki te starten terwijl u de toets Shift vasthoudt. Hierdoor zullen de door u geïnstalleerde add-ons tijdelijk uitgeschakeld worden.

Als het probleem alleen optreedt als de add-ons ingeschakeld zijn, gebruik het menu-onderdeel Tools>Add-ons om sommige add-ons uit te schakelen. Start Anki opnieuw en herhaal dit tot u ontdekt welke add-on het probleem veroorzaakt.

Nadat u de add-on hebt ontdekt die het probleem veroorzaakt, gelieve dit te rapporteren op de sectie add-ons (add-ons section) van onze ondersteuningssite.

Debuginformatie:

Fout

Er is een fout opgetreden. Gebruik Extra > Check Database om te zien of dat het probleem oplost.

Als het probleem aanhoudt, gelieve dat op onze ondersteuningssite te rapporteren. Kopieer en plak de onderstaande informatie in uw verslag.

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)Kaarttype toevoegen...Veld toevoegenMedia toevoegenNieuwe set toevoegen (Ctrl+N)Aantekeningstype toevoegenAantekeningen toevoegen...Omgekeerde toevoegenTags toevoegenTags toevoegen...Toevoegen aan:Geen configuratie voor de add-on.De add-on werd niet gedownload vanuit AnkiWeb.Add-onsMogelijk betrokken add-ons: {} Toevoegen: %sToegevoegdVandaag toegevoegdDubbel toegevoegd met eerste veld: %sOpnieuwVandaag opnieuwAantal te herdoen: %sAlle begraven kaartenAlle soorten kaartenAlle setsAlle veldenAlle kaarten in willekeurige volgorde (niet herschikken)Alle kaarten, aantekeningen en media voor dit profiel zullen worden verwijderd. Weet u het zeker?Alle herhaalkaarten in willekeurige volgordeHTML in velden toestaanNeem altijd de vraagzijde op bij het afspelen van audioEen add-on die u hebt geïnstalleerd, kon niet worden geladen. Als het probleem aanhoudt, ga naar de Extra>Add-ons menu en schakel de add-on uit of verwijder deze. Bij het laden '%(name)s': %(traceback)s Er 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 setAnki verzamelingspakketIngepakte Anki-setAnki kon uw profielgegevens niet lezen. De venstergrootten en uw sync-logingegevens vergeten.Anki 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 ondersteunt niet de bestanden in submappen van de map collection.media.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.Anki kon uw verzamelingsbestand niet openen. Als het probleem aanhoudt nadat u uw computer opnieuw hebt opgestart, gebruik de knop Open Backup in de profielbeheerder. Debuginformatie: 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.Elke vlagKaarten 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.Foto's/audio/video toevoegen (F3)Automatische synchronisatie en back-ups zijn uitgeschakeld tijdens het herstellen. Om ze weer in te schakelen, sluit het profiel of start Anki opnieuw.Geluid automatisch afspelenProfiel automatisch synchroniseren bij openen/sluitenGemiddeldeGemiddelde duurGemiddelde antwoordtijdGemiddelde gemakGemiddelde voor dagen waarop je geleerd hebtGemiddeld intervalAchterkantVoorvertoning achterkantSjabloon achterkantAanmaak van back-up...Back-upsBasisBasis (en omgekeerde kaart)Basis (omgekeerde kaart optioneel)Basisch (typ het antwoord in)Blauwe vlagVetgedrukte tekst (Ctrl + B)Bladeren(%(cur)d getoonde kaarten; %(sel)s) doorzoeken(%(cur)d getoonde kaarten; %(sel)s) doorzoekenAdd-on verkennenBrowseruitzichtBrowseruiterlijk...BrowserinstellingenBouwBegravenBegraven gerelateerde kaartenBegravenBegraaf kaartAantekening begravenBegraaf 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-IDKaartenlijstKaartstaatKaarttypeKaarttype:KaarttypesKaarttypes 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 veranderenSet veranderen...Aantekeningstype veranderenAantekeningstype veranderen (Ctrl+N)Aantekeningstype veranderen...Van kleur veranderen (F8)Set veranderen op basis van aantekeningstypeGewijzigdDe onderstaande wijzigingen zullen een effect hebben op de %(cnt)d aantekening die dit kaarttype gebruikt.De onderstaande wijzigingen zullen een effect hebben op de %(cnt)d aantekeningen die dit kaarttype gebruiken.De wijzigingen treden in werking wanneer Anki opnieuw wordt opgestart.De wijzigingen treden in werking wanneer u Anki opnieuw opstart.Controleer &media...Controleren op UpdatesBestanden in de media-map controlerenMedia wordt gecontroleerd...Bezig met controleren...KiezenSet selecterenAantekeningstype selecterenTags kiezenOngebruikte wissenOngebruikte tags wissenDupliceer: %sSluitenSluiten en huidige invoer verwerpen?Sluitend...ClozeCloze (Ctrl+Shift+C)Code:Verzameling geëxporteerd.Collectie is beschadigd. Gelieve de handleiding te raadplegen.Dubbele puntKommaConfiguratieConfiguratieInterfacetaal 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.DoorgaanGekopieerd naar klembordKopiërenKopieer debug-informatieKopiëren naar het klembordJuiste antwoorden voor volwassen kaarten: %(a)d/%(b)d (%(c).1f%%)Juist: %(pct)0.2f%%
(%(good)d van de %(tot)d)Corrupt add-on-bestand.Kon geen verbinding maken met AnkiWeb. Gelieve uw netwerkverbinding te controleren en dan opnieuw te proberen.Kon audio niet opnemen. Hebt u 'lame' geïnstalleerd?Kon bestand niet opslaan: %sBlokkenSet aanmakenGefilterde set aanmaken...Schaalbare afbeeldingen met dvisvgm aanmakenAangemaaktCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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+ZCumulatiefCumulatieve %sCumulatieve antwoordenCumulatieve kaartenHuidige setHuidige aantekeningstype:Aangepaste studieAangepaste studiesessieAangepaste leerstappen (in minuten)Kaartsjablonen aanpassen (Ctrl+L)Velden aanpassenKnippenDatabase herbouwd en geoptimaliseerd.DatumDagen geleerdMachtiging intrekkenDebug consoleSetSet overschijven...Set zal geïmporteerd worden zodra een profiel wordt geopend.SetsAfnemende intervallenStandaardVertragingen totdat herhalingen weer getoond worden.VerwijderenKaarten verwijderenSet verwijderenLege kaarten verwijderenAantekening verwijderenAantekeningen verwijderenTags verwijderenOngebruikte bestanden verwijderenVeld uit %s verwijderen?De %(num)d geselecteerde add-on verwijderen?De %(num)d geselecteerde add-ons 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 AnkiWebGedownloade %(fname)sBezig met downloaden van AnkiWeb...VerwachtEnkel verwachte kaartenMorgen verwacht&AfsluitenGemakkelijkheidsgraadMakkelijkBonus voor makkelijke kaartenInterval voor makkelijke kaartenBewerkenBewerk "%s"Huidige bewerkenHTML bewerkenBewerktLettertype invoerveldLeegLege kaarten...Lege kaarten: %(c)s Velden: %(f)s Lege kaarten gevonden. Gelieve Extra>Lege kaarten uit te voeren.Leeg eerste veld: %sTweede filter inschakelenEindeGeef 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 bij downloaden van %(id)s: %(error)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 het installeren van %(base)s: %(error)sFout bij uitvoeren van %sExperimentele V2-plannerExporterenExporteren...Geëxporteerde %d mediabestandGeëxporteerde %d mediabestandenExtraFF1Veld %d van bestand wordt:VeldkoppelingVeldnaam:Veld:VeldenVelden voor %sVelden gescheiden door: %sVelden...Fil&terBestandsversie onbekend, toch proberen te importeren.FilterFilter 2Filter...Filter: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: %sVlagKaart markerenOmdraaienMap 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 %sAdd-ons downloaden...Gedeelde set downloadenGoedInterval na lerenGroene vlagHTML-editorMoeilijkInterval voor moeilijke kaartenHardwareversnelling (sneller, kan weergaveproblemen veroorzaken)Hebt u latex en dvipng/dvisvgm geïnstalleerd?KoptekstHelpHoogste gemakGeschiedenisStartVerdeling per uuruurUren met minder dan 30 herhalingen worden niet getoondIdentiekGelieve 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.HTML en media referenties bijvoegenMedia 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 intervallenAdd-on installerenInstalleer add-on(s)Installeer vanuit bestand...Geïnstalleerde %(name)sInterfacetaal:IntervalIntervalsfactorIntervallenOngeldig add-on manifest.Ongeldige code of add-on niet beschikbaar voor uw versie van Anki.Ongeldige code.Ongeldige configuratie: Ongeldige configuratie: het object op topniveau moet een map zijnOngeldige bestandsnaam, hernoem: %sOngeldig 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.Ongeldige zoekopdracht - controleer op typfouten.Daarom werd hij opgeschort.Cursieve tekst (Ctrl + I)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…Lokale verzameling heeft geen kaarten. Wilt u van AnkiWeb downloaden?Langste intervalLaagste gemakBeherenAantekeningstype beherenAantekeningstypes beheren...Beheren...Handmatig begraven kaartenKoppelen aan %sKoppelen aan tagsAantekening markerenMathJaxblokMathJax chemieMathJaxinlineVolwassenMaximumintervalMaximum herhalingen/dagMediaMinimumintervalMinutenMeng nieuwe kaarten en herhalingenMnemosyne 2.0 set (*.db)MeerMeeste vergissingenKaarten verplaatsenKaarten verplaatsen naar set:Scheidingstekens bestaande uit meerdere karakters worden niet ondersteund. Voer slechts één karakter in.&AantekeningNaam bestaat.Naam voor set:Naam:NetwerkNieuwNieuwe kaartenNieuwe kaarten in de set voorbij de limiet van vandaag: %sEnkel nieuwe kaartenNieuwe kaarten/dagNieuwe setnaam:Interval nieuwe kaartenNieuwe naam:Nieuw aantekeningstype:Nieuwe naam voor deze optiegroep:Nieuwe positie (1...%d):Volgende dag begint omGeen vlagEr worden nog geen kaarten verwacht.Er zijn vandaag geen kaarten geleerd.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.Geen updates beschikbaar.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 toegevoegd vanuit bestand: %dAantekeningen gevonden in bestand: %dAantekeningen in tekst zonder opmaakAantekeningen moeten ten minste één veld bevatten.Aantekeningen overgeslagen, omdat ze al in je collectie zijn: %dAantekening getagd.Aantekeningen die niet konden worden geïmporteerd omdat het type aantekening gewijzigd is: %dAantekeningen bijgewerkt, omdat bestand een nieuwere versie had: %dNietsOkOudste 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.OpenenOpen back-up...Bezig met optimaliseren...Optionele filter:InstellingenInstellingen voor %sOptiegroep:Instellingen…Oranje vlagVolgordeVolgorde van toevoegingVolgorde van verwachtingAchterkant sjabloon overschrijven:Lettertype overschrijven:Voorkant sjabloon overschrijven:Verpakt Anki Add-onIngepakte Anki-set/verzameling (*.apkg *.colpkg *.zip)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.Controleer uw internetverbinding.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 uw filter een naam te geven:Gelieve PyAudio te installerenProbeer de map %s te verwijderen en probeer opnieuw.Gelieve dit te melden aan de respectieve auteur(s) van de add-on.Gelieve Anki te herstarten om de taalverandering te voltooien.Gelieve Extra>Lege kaarten uit te voerenGelieve een set te selecteren.Selecteer eerst een enkele add-on.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 laatsteVerwerkte %d mediabestandVerwerkte %d mediabestandenBezig met verwerken...Profiel corruptProfielenProxy vereist authenticatie.VraagAchterkant wachtrij: %dVoorkant wachtrij: %dBeëindigenWillekeurigVolgorde willekeurig door elkaar halenBeoordelingOpnieuw opbouwenEigen stem opnemenAudio opnamen (F5)Bezig met opnemen...
Tijd: %0.1fRode vlagRelatieve achterstalligheidHerlerenLaatste invoer tijdens toevoegen onthouden%s uit uw opgeslagen zoekopdrachten verwijderen?Kaarttype verwijderen ...Huidige filter verwijderen...Tags verwijderen...Opmaak verwijderen (Ctrl+R)Door dit aantekeningstype te verwijderen zullen één of meerdere kaarten ook verwijderd worden. Definieer eerst een nieuw aantekeningstype.HernoemenKaarttype hernoemen...Set hernoemenMislukte kaarten herhalen naUw verzameling door een eerdere back-up vervangen?Geluid opnieuw afspelen...Eigen stem afspelenVolgorde veranderenKaarttype herplaatsen...Volgorde nieuwe kaarten veranderenVolgorde veranderen...Vereis één of meer van deze tags:HerplanHerplannenHerplan kaarten op basis van mijn antwoorden in deze setGerestaureerde standaardwaardenNu hervattenOmgekeerde tekstrichting (RNL)Naar back-up terugzettenHerzet 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.HerhalingenDe verwachte herhalingen voor de set over de limiet van vandaag: %sRechtsOpslaanHuidige filter opslaan...Opslaan als PDFOpgeslagen.Bereik: %sZoekenZoeken in:Binnen 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 toepassenVoorgrondkleur instellen (F7)De shift-toets was ingedrukt. Automatisch synchroniseren en laden van add-ons wordt overgeslagen.Positie van bestaande kaarten opschuivenSneltoets: %sSneltoets: LinkerpijlSneltoets: Rechterpijl of EnterSneltoets: %s%s tonenAntwoord tonenBeide zijden weergevenDubbels tonenAntwoordtimer tonenKaarten met witte tekst op zwarte achtergrond weergeven (nachtmodus)Leerkaarten met grotere leerstappen voor herhalingen weergevenNieuwe 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 tonenZijbalkGrootte:OvergeslagenEnkele gerelateerde of begraven kaarten zijn uitgesteld tot een latere sessie.Sommige instellingen worden pas toegepast nadat u Anki opnieuw opgestart heeft.SorteerveldGebruik dit veld in de browser om te sorterenSorteren op deze kolom is niet mogelijk. Kies een andere kolom.De geluids- en videobestanden op kaarten zullen pas werken indien mpv of mplayer is geïnstalleerd.SpatieStartpositie:Beginwaarde gemakStatistiekenStatistiekenLeerstap:Leerstappen (in minuten)Leerstappen moeten in minuten worden ingevoerd.Stoppen…%(a)s %(b)s vandaag geleerd (%(secs).1fs/card)%(a)s %(b)s vandaag geleerd.Vandaag geleerdStuderenKaarten in set studerenKaarten in set studeren...Nu studerenLeren aan de hand van kaartstatus of tagStijlStijl (gedeeld tussen kaarten)Onderschrift (Ctrl+=)Supermemo XML uitvoer (*.xml)Bovenschrift (Ctrl++)OpschortenKaart opschortenAantekening opschortenOpgeschortOpgeschort+BegravenSynchroniserenGeluiden 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).De experimentele planner kan een incorrecte planning veroorzaken. Zorg ervoor dat u eerst de documentatie heeft gelezen. Verdergaan?Het eerste veld is leeg.Het eerste veld van dit aantekeningstype moet gekoppeld zijn.De volgende add-ons zijn niet compatibel met %(name)s en werden uitgeschakeld: %(found)sHet volgende karakter mag niet gebruikt worden: %sDe volgende conflicterende add-ons werden uitgeschakeld:De 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.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 kaartsoorten, zoals 'kaar:1'.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 %d kaart aanmaken. Verdergaan?Dit zal %d kaarten aanmaken. Verdergaan?Dit zal uw bestaande collectie verwijderen en vervangen door de data in het bestand dat u aan het importeren bent. Weet u het zeker?Hiermee worden alle leerkaarten opnieuw ingesteld, gefilterde kaartspellen gewist en de plannerversie gewijzigd. Verdergaan?TijdMaximale studeertijdTe herhalenOm de add-ons te verkennen, klik op de onderstaande Browse-knop.

Als u een add-on heeft gevonden die u bevalt, plak de onderstaande code. U kunt meerdere codes plakken, door ze met spaties te scheiden.Om 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.Inschakelen/UitschakelenSelecteren/DeselecterenOnderbreken/HervattenTotaalTotale tijdTotaal aantal kaartenTotaal aantal aantekeningenInvoer behandelen als reguliere expressieTypeType antwoord: onbekend veld %sGeen toegang tot de mediamap van Anki. De toegangsrechten tot de tijdelijke map van uw systeem zijn mogelijk onjuist.Kan een alleen-lezen bestand niet importeren.Het bestaande bestand kon niet naar de prullenbak verplaatst worden - probeer uw computer opnieuw op te starten.Kan add-on niet bijwerken of verwijderen. Start Anki terwijl u de shift-toets ingedrukt houdt om add-ons tijdelijk uit te schakelen en probeer het dan opnieuw. Debug info: %sGraaf opTekst onderstrepen (Ctrl+U)Ongedaan maken%s ongedaan makenOnverwachte reactie code: %sOnbekend bestandsformaatOngezienBestaande aantekeningen aanpassen als het eerste veld overeenkomtDe volgende add-ons updaten?BijgewerktOpladen naar AnkiWebBezig met opladen naar AnkiWeb...Gebruikt in kaarten maar niet gevonden in media-map:Gebruiker 1Versie %sAdd-onpagina weergevenBestanden weergevenAan het wachten tot u klaar bent met bewerken.Waarschuwing, clozes zullen niet werken zolang u het type bovenaan niet verandert naar Cloze.Wat zou u willen opgraven?Gebruik standaard de huidige set bij het toevoegenVolledige collectieWilt u het nu downloaden?Geschreven door Damien Elmes, met patches, vertalingen, testen en ontwerp van:

%(cont)sU 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 AnkiWeb-collectie bevat geen kaarten. Synchroniseer opnieuw en kies in plaats daarvan 'Opladen'.Uw 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 verzamelingsbestand lijkt beschadigd te zijn. Dit kan gebeuren wanneer het bestand gekopieerd of verplaatst wordt terwijl Anki open is, of wanneer de verzameling opgeslagen is op een netwerk- of cloudstation. Als het probleem zich blijft voordoen nadat u uw computer opnieuw hebt opgestart, open een automatische back-up via het profielscherm.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.De opslagruimte van uw computer is mogelijk vol. Verwijder enkele overbodige bestanden en probeer opnieuw.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.Uw firewall of antivirusprogramma verhindert dat Anki verbinding maakt met zichzelf. Gelieve een uitzondering te maken voor Anki.[geen set]back-upskaartenkaarten van de setkaarten geselecteerd doorcollectieddagensetlevensduur setdubbelhelpverbergenuuruur na middernachtin %s dagin %s dagenin %s uurin %s urenin %s minuutin %s minutenin %s maandin %s maandenin %s secondein %s secondenin %s jaarin %s jarenvergissingenMinder dan 0.1 kaarten/minuutgekoppeld aan %sgekoppeld aan Tagsminutenminutenmaherhalingensecondenstatistiekendeze paginawvolledige collectie~anki-2.1.15+dfsg/locale/no/000077500000000000000000000000001353113723000153125ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/no/LC_MESSAGES/000077500000000000000000000000001353113723000170775ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/no/LC_MESSAGES/anki.mo000066400000000000000000000012621353113723000203570ustar00rootroot00000000000000$,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.15+dfsg/locale/oc/000077500000000000000000000000001353113723000152775ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/oc/LC_MESSAGES/000077500000000000000000000000001353113723000170645ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/oc/LC_MESSAGES/anki.mo000066400000000000000000000513571353113723000203560ustar00rootroot00000000000000B, <  " @K MWj8"$<$a"42$5"R$u$$ 2:IZo  ' -8>DH OY _js  0 < I X ^ i t z   r j!!!!!!!!!!!T! ", "(9"b"!""f""# 8#E# W# d#o####e##$7$H%)N' x((5(X(Y$)%~)k) * *'*+* F* P*Z* p* ~***** *$** ** * +K+]+"r++ ++ +++++#+##,G,f,(,, ,, ,,, , ----7-V-]-p--- ------- - - -----. . .'.8.R.f.n. ~.. . ...... ... .. ./////#/ */ 7/ D/ Q/ ^/ k/x/ / / / /// / / ////0 0 0 0 *0 60B0I0M0S0X0]0d0j0y0}00 00000 0000000 1111#1,1 11<1 A1M1R1W1]1 d1p1111111 1!111 1 1 1 222 !2 -272,=2j2 222222 2 22233 3333#3)34 4 44$5 ,575 95F5(^55G55566))6)S6)}6.66<6;%7a7t7)7'7+7) 8+78c8 |8 88888899 09=9A9E9I9N9R9 V9d999 99 9 9 9999: :: :7:G:!O:q::: ::::E:";2;D; J;U; e;o;;;;}$<<<<<<<<<<<e<:=2<=8o=)="==q > >>>>>>??5?K??D@@adC DDbDVHEE.AFpF G!G4G MEMVMeMlM~M MMM MMMM MMMMMMN N N N +N 6N ANLN SN ]N jNxNNN NNNNNN NOOO1O COOO bOmOuO{O OOOOOO O OOOOOP PPP0PFPMP`P hP sP P PPP PPPPPP!PQ QQ!Q%Q)Q0Q"@QcQkQ rQ |QQ Q QQQ QQ,QR +R9R"BR!eR R R R RRRRRRRRR RB7 Xd`9I8- Z rWEQ3bTfV'*Gi ![JN1~;.$qFy#+A5Kw03]n9&"5l*'= @<26kp&%ht: +z,{$H-ms/?0PL,>R?S7(YOC=@U1" %>4.g))<4a_x#\D/}vA2BcM (  ;j:!^oe u8|6 (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 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 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...ContinueCopyCreate DeckCreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+WCumulativeCumulative %sCurrent DeckCustom StudyCutDateDays studiedDeauthorizeDebug ConsoleDeckDecksDecreasing intervalsDefaultDeleteDelete CardsDelete DeckDelete NoteDescriptionDialogDueE&xitEasyEditEditedEmptyEmpty Cards...EndError executing %s.ExportExport...ExtraF1Field:FieldsFields...FilterFilter:FilteredFiltered Deck %dFind and ReplaceFinishFirst ReviewFlipFont:FooterForecastFormGet SharedGoodHTML EditorHardHelpHoursImportImport FileInvalid regular expression.KeepLeftMinutesMoreNetworkNewNew CardsNo cards have been studied today.NothingOpenPassword:PreferencesProcessing...ReviewReviewsRightSelect &AllSemicolonSpaceStudied %(a)s %(b)s today (%(secs).1fs/card)Studied %(a)s %(b)s today.Studied TodayStudyStyling (shared between cards)Supermemo XML export (*.xml)SuspendTagsTotal TimeVersion %scardsddayshelphoursminutesmosecondsstatsProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-04-30 13:03+0000 Last-Translator: Loís 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: 2019-07-04 05:46+0000 X-Generator: Launchpad (build 19007) Language: 1 de %d (desactivat) (inactiu) (actiu) Conten %d carta. Conten %d cartas."Segoe UI"%% corrèctas%(a)0.1f %(b)s per jorn%(a)0.1fkB escalant, %(b)0.1fkB davalant%(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.%(n)d: %(name)s%(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 paquet mes a jorn.%d paquets meses a jorn.%d grop%d gropes%d càmbi de mèdias a mandar%d càmbis de mèdias a mandar%d fichièr mèdia descargat%d fichièrs mèdia descargats%d nòta%d nòtas%d nòta mai%d nòtas mai%d nòta suprimida.%d nòtas suprimidas.%d nòta exportada.%d nòta exportada.%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...&Percórrer e Installar...&Cartas&Verificar la basa de donadas&Bachotar…&Editar&Exportar...&Fichièr&Recercar&Anar&Ajuda&Manual en linha (en anglés)A&juda&Importar…&Info&Inversar la seleccionCarta &seguenta&NòtasDobrir lo dorsièr dels empeutons&Preferéncias...Carta &precedentaTo&rnar planificar…&Far un don&Cambiar de perfil&Aisinas&Anullar« %(row)s » aviá %(num1)d camps al luòc dels %(num2)d previstes(%s corrèctes)(Nòta suprimida)(fin)(filtrada)(aprendissatge)(inedita)(limit parent : %d)(seleccionatz 1 carta)...Los fichièrs .anki venon d'una version plan anciana d'Anki. Los podètz importar amb Anki 2.0 qu'es disponible sul siti web d'Anki.Los fichièrs .anki2 son pas importables directament. Mercé d'importar lo fichièr .apkg o .zip qu'avètz recebut en plaça./0d1 101 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.

Error

Un error a subrevengut. Mercé de lançar Anki en mantenent la clau Majuscula enfonsada, çò que desactivarà temporàriament los empeutons qu'avètz installats.

Se l'error subreven solament quand los empeutons son activats, utilizatz lo menú Aisinas&Empeutons per desactivar d'unes empeutons e tornatz lançar Anki. Tornatz far aquò duscas que descobriscatz quin eupeuton causa lo problèma.

Quand avètz descobèrt l'empeuton responsable, mercé d'o senhalar sus la seccion empeutons del nòstre siti d'ajuda.

Informacions de debug

Error

Un error es subrevengut. Mercé d'utilizar Aisinas > Verificar la basa de donadas per veire se règla lo problèma.

Se lo problèma persistís, mercé d'o senhalar sul nòstre siti d'ajuda. Volgatz plan copiar e pegar las informacions seguentas dins lo vòstre senhalament.

< 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 campsL’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...ContunharCopiarCrear un paquetCreatCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Maj+FCtrl+Maj+LCtrl+Maj+MCtrl+Maj+NCtrl+Maj+PCtrl+Maj+SCtrl+WCumulatiu%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 paginaPrevisionsFormulariPaquets partejatsPlanEditor HTMLDurAjudaOrasImportarImportar un fichièrExpression racionala pas valabla.GardarEsquèrraMinutasMaiRetNovèlCartas novèlasCap carta es estada estudiada uèiPas resDobrirSenhal :PreferénciasTractament en cors...ContrarotlarRevisionsDreitaSeleccionar &totPunt-virgulaEspaciEstudiat %(a)s %(b)s uèi (%(secs).1fs/card)Estudiat %(a)s %(b)s uèi.Estudiat uèiEstudiarEstil (compartit entre las cartas)Supermemo exportat en XML (*.xml)SuspendreEtiquetasDurada totalaVersion %scartasjjornsajudaorasminutasmesegondasestatisticasanki-2.1.15+dfsg/locale/pl/000077500000000000000000000000001353113723000153115ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/pl/LC_MESSAGES/000077500000000000000000000000001353113723000170765ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/pl/LC_MESSAGES/anki.mo000066400000000000000000002444731353113723000203730ustar00rootroot00000000000000l;`O aO lOxOO"O OO OOOO8PTNT]TlT}TTT0T TTT T TU UU3Ur7UjUVVVV'V.V3V8VOzPzz]z F{8R{{{{{{{ {{{| | |"| '| 1| >|H| O|\|b|)q|0||||4|!0}R}e}#{}}}:~+N~z~~~ ~.~~~~~  &- 4B Zd+l   % 0=NU"ǀۀ  Á́с )9 HSX l w 8,ς "3.9 hFr҃ 4 @S Z1fȄׄ*! ֆ "0"S v͇  $.?G 5$)22҉1PU[jz <Ċ ', 55@v  ˋ !07H\bs{ ˌNߌ. 4APV^ b&l  ̍֍'/!E+g#!ǎ <! ^k]{aُ;Um!8 ܐ=,(U]`,r#gk *2A P [g m yÓ5ؓ < Y do,#&ߔV8]Eܕ*6>0uÖ$ٖ,+-D+r8ח #!0E vŘ ֘ 2NWlt#̙iy /  + @"Nq y1 țӛ " ) 6 BO_~-Ü(˜ &0 7Bb i uV  ,ўG 4Uf"  ßӟ)4Tq*̠''-@56v !?ڡMhn ~  ͢,٢ !/ 5 @ NXs{ʣߣ   !B!Udw ܤ +(0Y sX+"4&Wz~0VD+0ǧ>F7'~*(Ѩ1,,IY'#_˫e+8CQ(Frgx u/.M^S bn} !ȲͲg'SL{ȳ^e}.ô*,Bo v U$1V"gZS09$j" bķ{'^5TW]U}  ǾҾԾپ ޾ +B]vʿ޿  $&79 7APX)_  -nhx;JG=AKa-E 6B-QpNJN\&"6S%s #* AM Uciq w  !1C Vb/j m! &17=CIObU6! .Osg -7G]swG1=J Irbi*   !.= OY$u %$:Sgw=U%@;Y(b$nD$ni^H&o}KLS  V "0"++/&[""A<d ! *8U do+"   "/1.aOV\emu ~ >[Ot #?U'g 9p:!0GV^m $  "'B? '+  "A5H~XE3QYh+  &-4;BI P ] j w   *@Uq + "34hn   i.'0%_3] _=BQcu   $ 5 AO_e(t6D (Nw(1! / 9HF   5MS [fm|/. %;D Zdk! *!4V]m|   C %d F +H6+ J9S \Ej!9 9?y%'M!\~,'2-FWj LUiL-A D ! 2 < Q #e           P)  z      ;    6 A [  u           $ A G Y  _      E '0 @MTZ _5j 6 O#Z'~016Sg o z h+~<Wv01>2O>,   *CYk5"  (&22Y))U46rk$96Ap#3 *A1l-S  ,7@]%rB (;QY`r x .%6\o{ 1?[*o8&B%U { /!  "-  P [ l {  "  6  '!81! j!t!{! ! ! !! !!!!! "e0""""=>#|##Z#"$2$!H$,j$ $ $$$$$3$B0% s%#%'%'%;&3D& x&& &U&H&8'(H'Lq'^'(%(>( U( `(k(q(((1(()) )&)5)*D)o)#t))))))) ****)9*%c*B*p*=+ O+Y+k+z++++/++!+,w7,5,,,'-:--0-V ."`.+.;.Q.=/.Z///'/-/_0o011(2_2k331i44725'j55h6s}66677n7./8Z^888t999999909:"#:uF:2:L:<;<<%< ,<!6<X< o<C{<!<<<=6= S= a=k= =#=Z=>%$>J>"Y>|>H>(G?&p?)???_?s;@B@vAWiB-B^CuNDbF 'G4GEG JGXGgGpGrGvG|GGGGGGG&G#H+(H&TH{HHHHHHHH I I I I(I*I9I0)f2/3\/bdb(Hnj1N"9;XDil=cajp@+5  ,#yel1IH&[M]Tb_)PN Oz.+VlOr<Vb}P 8AXpK'z{`9ME/xLphK:!N2J g+6SA^wG@'$ZP*yS4-7C`d"aq7'3%cwd[\ `  T  s G9K7 w?$;=Ou:~R5E}@F(BCyJW>vlk~01?d&q <>F?ARLM|ZTvQB^${*tX 0c|#4DIm6a_R[|E5Z4z,meI\ x*gs3%hUwf ;t;v4`5nf^Mnv=#!orW_Wu=?"AGt&]>y)9<YD_JL*U%$u) sWBC}ENF8IKQapxrV:TQFi.RYg<.'|sokie Y6#>f8"678 @ (UkD~(-jm^mCJ~2B-3,xLqqHu\}oc{hjk [Z/ ]Ugzn,V-%.t 0:1SP+&e]{OXQoGHr !Y2!Shi (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-05-08 05:49+0000 Last-Translator: Piotr Kubowicz 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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) Language: pl (1 z %d) (wyłączony) (wył) (wł) Ma %d kartę. Ma %d karty. Ma %d kart."Segoe UI"%% 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%.01f 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 .anki pochodzą z bardzo starej wersji Anki. Możesz zaimportować je używając Anki w wersji 2.0, dostępnej do ściągnięcia ze strony Anki.Plików .anki2 nie da się bezpośrednio importować - zaimportuj zamiast tego otrzymany plik .apkg lub .zip./0d1 101 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 notatki...Dodaj rewersDodaj etykietyDodaj etykiety...Dodaj do:Dodatek nie ma konfiguracjiDodatku nie ściągnięto z AnkiWeb.DodatkiMożliwy udział dodatków: {} Dodaj: %sDodanoDodane dzisiajDodano duplikat z pierwszym polem: %sZnowuDzisiejsze odp. ZnowuLiczba odp. Znowu: %sWszystkie schowane kartyWszystkie typy kartWszystkie talieWszystkie polaWszystkie karty w losowej kolejności (bez zmiany planowania)Wszystkie karty, notatki i media tego profilu zostaną usunięte. Czy jesteś pewien?Wszystkie karty w losowej kolejnościZezwó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 odczytać twoich danych profilowych. Rozmiar okna i dane logowania do synchronizacji zostały zapomniane.Anki 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)Przeglądaj dodatkiWygląd w przeglądarceWygląd przeglądarki...Opcje przeglądarkiBudujZakopaneZakop podobneZakopZakop 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 AnkiZmiany będą miały skutek po ponownym uruchomieniu Anki.Sprawdź &pliki...Sprawdź aktualizacjeSprawdź pliki w katalogu mediówSprawdzanie plików...Sprawdzanie...WybierzWybierz talięWybierz typ notatkiWybierz etykietyWyczyść 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.KontynuujSkopiowano do schowkaKopiujSkopiuj informację diagnostycznąSkopiuj do schowkaPoprawne odpowiedzi dla dojrzałych kart: %(a)d/%(b)d (%(c).1f%%)Poprawne: %(pct)0.2f%%
(%(good)d z %(tot)d)Zepsuty plik dodatku.Nieudane połączenie z AnkiWeb. Sprawdź połączenie twojej sieci i spróbuj ponownie.Nie można nagrać dźwięku. Czy masz zainstalowany program "lame"?Nie można zapisać pliku: %sZakuwajStwórz talięStwórz filtrowaną talię...Twórz skalowalne obrazy za pomocą dvisvgmUtworzonaCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 niestandardowejWłasne kroki (w minutach)Dostosuj szablony kart (Ctrl+L)Dostosuj polaWytnijBaza 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żywane plikiUsunąć 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: %sWłącz drugi filtrZakoń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 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 przy instalacji %(base)s: %(error)sBłąd uruchamiania %sEksperymentalny planista wersja 2EksportujEksportuj...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.FiltrFiltr 2Filtruj…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 HTMLTrudnaSztywna przerwaPrzyspieszanie sprzętowe (szybsze, możliwe błędy wyświetlania)Czy posiadasz latex i dvipng/dvisvgm?NagłówekPomocNajmniejsza trudnośćHistoriaEkran głównyPodział godzinowygodzinPominięto godziny, w których przeprowadzono mniej niż 30 powtórek.IdentyczneJeś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 HTML i odnośniki do plikówDołą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 dodatekZainstaluj dodatek (-tki)Zainstaluj z pliku...Zainstalowano %(name)sJęzyk interfejsu:PrzerwaModyfikator przerwPrzerwyNieprawidłowy manifest dodatku.Kod jest nieprawidłowy lub dodatek nie jest dostępny na tę wersję Anki.Nieprawidłowy kod.Nieprawidłowa konfiguracja: Nieprawidłowa konfiguracja: obiekt na najwyższym poziomie musi być mapą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 przerwaNajwiększa trudnośćZarządzajZarządzaj typami notatekZarządzaj typami notatekZarządzaj...Ręcznie schowane kartyOdwzorowanie na %sOdwzorowanie na etykietyWyróżnij notatkęBlok MathJaxChemia 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.Nie przeglądnięto dziś żadnych kartŻ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: dźwięki i obrazy 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 dodane z pliku: %dNotatki znalezione w pliku: %dNotatki jako zwykły tekstW notatce wymagane jest przynajmniej jedno pole.Notatki pominięte, gdyż już są w kolekcji: %dNotatki oznaczone etykietąNotatki nie zaimportowane, gdyż zmienił się typ notatki: %dNotatki zaktualizowane nowszą wersją z pliku: %dNicOKNajstarsze 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 filtr:OpcjeOpcje dla %sGrupa opcji:Opcje...Pomarańczowa flagaKolejnośćW kolejności dodaniaW kolejności przyjściaZmień szablon tyłu:Zmień czcionkę:Zmień szablon przodu:Spakowany dodatek AnkiSpakowana 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.Proszę sprawdzić połączenie sieciowe.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ć PyAudioUsuń folder %s i spróbuj ponownie.Proszę zgłosić problem autorom odpowiednich dodatków.Prosimy ponownie uruchomić Anki, aby ukończyć zmienę języka.Uruchom Narzędzia>Puste kartyProszę wybrać talię.Najpierw wybierz pojedynczy dodatekProszę 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...Zepsuty profilProfileWymagana autentykacja proxy.PytanieKoniec 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ę taliiPowtórz karty z błędną odpowiedzią poZastą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 taliiPrzywrócono ustawienia domyślneWznó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 w:Szukaj 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ż karty do nauczenia z dużym krokiem przed kartami powtórekPokaż 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:PominięteZostały jeszcze powiązane lub zakopane karty - czekają na następną sesję nauki.Niektóre ustawienia zadziałają dopiero po ponownym uruchomieniu Anki.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 (%(secs).1fs/kartę)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).Eksperymentalny planista może źle planować powtórki. Przeczytaj uważnie dokumentację przed wybraniem tej opcji. Kontynuować?Pierwsze pole jest puste.Pierwsze pole typu notatki musi być przypisane.Następujące dodatki są niekompatybilne z %(name)s i zostały wyłączone: %(found)sTen znak nie może być użyty: %sNastępujące dodatki zostały wyłączone:Przó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.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ć?Zostaną usunięte karty w nauce, filtrowane talie będą wyczyszczone, a wersja planisty zmieniona. 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 %sOdmowa dostępu do folderu plików Anki. Być może uprawnienia do systemowego katalogu tymczasowego są niepoprawne.Nie można zaimportować z pliku tylko do odczytu.Nie udało się przenieść pliku do kosza - spróbuj zrestartować komputerNie udało się zaktualizować lub usunąć dodatku. Zrestartuj Anki trzymając wciśnięty klawisz shift, by tymczasowo wyłączyć dodatki, a następnie spróbuj ponownie. Informacja diagnostyczna: %sOdkopPodkreślenie (Ctrl+U)CofnijCofnij %sNiespodziewany kod odpowiedzi: %sNieznany format pliku.NiewidzianeAktualizuj istniejące notatki jeżeli zgadzają się pierwsze polaZaktualizować poniższe dodatki?ZaktualizowaneWyś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.Co chcesz odkopać?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+NienauczoneNie masz żadnych kart w kolekcji AnkiWeb. Ponownie uruchom synchronizację i wybierz 'Wyślij'Twoje 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 wysł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.Prawdopodobnie zabrakło miejsca na twoim dysku. Usuń niepotrzebne pliki i spróbuj ponownie.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.15+dfsg/locale/pt/000077500000000000000000000000001353113723000153215ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/pt/LC_MESSAGES/000077500000000000000000000000001353113723000171065ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/pt/LC_MESSAGES/anki.mo000066400000000000000000002074051353113723000203750ustar00rootroot00000000000000V|5xG yG GGG"GG GGGG8HIHYHjH}H"H$H$H&H""IEI4XI2III"I$J$6J$[J JJJJJJJ K"K5K JKXKiKmKqKuKzK~K KKKKKK KKKKK KK KLL !L,L3LKL[LjLyLLLL0L LLL L MMM)M@MDMFMIMQMXM]MbMfMjMTnMM,M(MN!:N\NftNN NN O O(O8OJO_OevOO7P PP5PXQYjQ%QkQ VR bRmRqRR R RR R R RR RS S'(SPSXS`S fS$rSS SSS S SKS)T>T""VEV JVXVpVVdWRWv;X7X XwXEnY@YYY ZRZfZoZZ# [#1[U[ t[[([[ [[ \ \&\7\ <\ I\ W\e\m\s\\\ \\\J\6]I]_]o]u]|] ] ])]']]^^^^^^ ^ ^ ^ ^ ^_ _!_1_C_3I_}_S____ _ ``%`6`P`d`"w``0```&` a(a /a;a La Xaea waaa aaaaa-ab#b)b 0b(>b5gb bb/c8c8=c5vcPccd d%d#=dadidpdwd~d d d dddddddddd d d e e e (e 5e Be Oe \eie pe {eee ee eeeef f %f 1f?fDf/Uffff%ff f f f f g g g,6g(cgggFgNhPUh>hPh6i]?i i8iiiij0j4j CjPjVj[j `j kjyj ~j j jj jjj)j0j#k9k4=k!rkkk#kkk|lll l.lllll m m"m)m 0m>m Vm`mhmom xmmmmmmmmm m n nN%n"tnnn nnnnnnoooo ooooo p p#p(p LVqyȋ݋   @!Sdu ڌ )(.W qX+"2&U|0+ǎ>F2'y*(̏1,'IT'#eƒ,8#\C(0FYr +u5/Mۖ)/З ߗ !#EJ'h٘.$BT,l  ǙU$<a"rZS0D$u" Û{ϛ^K5U ?IQWk } ̠,G^e¡ʡ Сڡܡ & G IU"h?ݤ)%)O)y+.ϥXGj'æ''';'c'̧ *ARi{ Ψ֨   #'-6 =JSgw~ Ωߩ 4 <GX ^ iu|êɪϪԪ٪kߪK.M+|!ǫxz ̬׬v-5T FZjL/ w հ)<Pd {$*ر - 7 =JgR@ Min\JH3|XKg йFڹ!1#Ժ'! !Bd> ǻԻ+1DTt"Ѽ Sm ƽ Խ02E " *6F VdsӿKڿ&S>  (0Y;b&!7J\ y "7 BN W d)q4 `i>p3_(C l v% &-4;B I V c p }   3Hh)q <5 >_g ,23*fQUeY=` ^[i E)@[w  -31DHvE*" Mn%"r A1@GN] v )2ASiq*!(:@T[c ""EL`qw    ,7?W5]S!% GFU;5$Zs8$+.(F+o  "?=}0Na"| I2 | > %39Rjs  4QV mz  +6Ii .) ?3%s V/H`Wm&$:_ot#w>1HN lz 5<1Bt &0,`0omo/A,)5H~7@D W ao,9CK Zg 4C U`$x   %)5 _ j=t #$-BT"i/.  8 D NY!b "{Qar?"6&YV'%-9 g r})(6+(b@7 QJm2DBJ] s   (A Hi%| %(+Eqq * @L/R$Y16*h22+OCE"&*#)N7x@+&z3~?N0Dlq w7[FPh~ $'7 T_x "! <7M3h  (Y)b#Wy8"%0K; ! b   0 7 I  b l n s {         7L^y   6w$`z2YX4- ~o(E UT=_@:aW IwBf!"m#$%J`0V*Qn$VFSu{%Mg!l1hI6QU~F3l?.@EjXCfB|Z "e?)Si.;bZ&76e!5z[ KYq3;\-Or_E ^CL 5VaAQ;[Dv*Z4PFuPxgLQmzAR#n,8?1uktL 3Ms"o2D7MN0MF|rg, JW!2vP6+h}HW]5hsC5Tp&'(*+,:\ibYxG;cC1$ Rp q ^HcdB%=yOIN4p9%#1D ^SK)O)so- AE/mJ?y/H>t9@8_w~8LD'K9"kHi{]3>T&)V|v xk9}l  `4< *8G<U< cbIn\dt.XROqP((RN.d} a:< A7J2:'>y0=jG7T+f +[,S-e/0{=/@K #]r&> j'UGNB (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).../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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll 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 typeChangedChanges will take effect when Anki is restarted.Check &Media...Check for UpdatesCheck the files in the media directoryChecking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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 save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+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+WCumulativeCumulative %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 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 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 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.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...Local collection has no cards. Download from AnkiWeb?Longest intervalLowest 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...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 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.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.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 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 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?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 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: 2019-07-02 11:47+1000 PO-Revision-Date: 2018-03-23 01:32+0000 Last-Translator: Nuno Messeder Ferreira 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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) 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).../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 Notas...Adicionar invertidoAdicionar etiquetasAdicionar etiquetas...Adicionar a:Complemento não tem configuração.O add-on não foi descarregado do AnkiWeb.Add-onsAdicionar: %sAdicionadoAdicionado hojeDuplicata adicionada com o primeiro campo: %sErreiRepetir HojeContagem de repetições: %sTodos os tipos de fichaTodos os BaralhosTodos os CamposTodas 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 notaAlteradoAs alterações terão efeito quando o Anki for reiniciado.Verificação e Mídia...Verificar atualizaçõesVerificar ficheiros na pasta de mídiaVerificando...EscolherEscolher BaralhoEscolher Tipo de NotaEscolha etiquetas.Limpar 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 salvar o ficheiro: %sFiltradosCriar BaralhoCriar Baralho Filtrado...Criar imagens escaláveis com dvisvgmCriadoCtrl+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+WAcumuladoAcumulado %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 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 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&trarFiltroFiltro 2Filtrar...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.Configuração inválida: 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 intervaloMais 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...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, 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.PerguntaÚ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 AnkiClassificar 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).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.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?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-noiteem %s diaem %s diasem %s horaem %s horasem %s minutoem %s minutosem %s mêsem %s mesesem %s segundoem %s segundosem %s anoem %s anosrespostas erradasmenos de 0,1 fichas/minutomapeado para %smapeado para Etiquetasminsminutosmêsrevisõessegundosestatísticasesta páginawcoleção completa~anki-2.1.15+dfsg/locale/pt_BR/000077500000000000000000000000001353113723000157045ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/pt_BR/LC_MESSAGES/000077500000000000000000000000001353113723000174715ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/pt_BR/LC_MESSAGES/anki.mo000066400000000000000000002450221353113723000207550ustar00rootroot00000000000000l;`O aO lOxOO"O OO OOOO8PTNT]TlT}TTT0T TTT T TU UU3Ur7UjUVVVV'V.V3V8VOzPzz]z F{8R{{{{{{{ {{{| | |"| '| 1| >|H| O|\|b|)q|0||||4|!0}R}e}#{}}}:~+N~z~~~ ~.~~~~~  &- 4B Zd+l   % 0=NU"ǀۀ  Á́с )9 HSX l w 8,ς "3.9 hFr҃ 4 @S Z1fȄׄ*! ֆ "0"S v͇  $.?G 5$)22҉1PU[jz <Ċ ', 55@v  ˋ !07H\bs{ ˌNߌ. 4APV^ b&l  ̍֍'/!E+g#!ǎ <! ^k]{aُ;Um!8 ܐ=,(U]`,r#gk *2A P [g m yÓ5ؓ < Y do,#&ߔV8]Eܕ*6>0uÖ$ٖ,+-D+r8ח #!0E vŘ ֘ 2NWlt#̙iy /  + @"Nq y1 țӛ " ) 6 BO_~-Ü(˜ &0 7Bb i uV  ,ўG 4Uf"  ßӟ)4Tq*̠''-@56v !?ڡMhn ~  ͢,٢ !/ 5 @ NXs{ʣߣ   !B!Udw ܤ +(0Y sX+"4&Wz~0VD+0ǧ>F7'~*(Ѩ1,,IY'#_˫e+8CQ(Frgx u/.M^S bn} !ȲͲg'SL{ȳ^e}.ô*,Bo v U$1V"gZS09$j" bķ{'^5TW]U}  ǾҾԾپ ޾ +B]vʿ޿  $&79 # . < I)S } &? 0AW-n--/.(WWjC3#/W3393)]v #2;? HVZ ^h     ( :Gew  4 * 0 ;GN c|z:2<:o!x| n42K~C ZeFZp'2 [ h u(<P g&t* ( -%S Yf6` /mA&-~AJs\HgXBK FUf(*@!k!@>]   0CYa$ SCWl  12 S   & 0 :HZjzMJUd  2H(W@$Ce% .7H^q  "73 kw )4 &#%=3F z_s'o %   ( 3 >IPY`gnu|    $1F Zh|"*)EJ Yf}<  08IY h uV. 3O)PWetK\& \ B:L^t     ,4FX3kO"G&,n  "* ' 0A<~  G[b kv~"q@(+2: "&-ARX kx T&B it z 6 SLk!F';8t56'%'$6[,m.,/ &G\u  !MQdD3>7< @ S "n           J&  q ~     8      & ?  [ h     =    . E L ^ #f      X J P a r x }  /     0Pi ~ *+>: y  U'^6m  $E$Y5~PDZ_#b@3C&I p~ *=Z8w1  )&0P,+bo=i%=/X=@2:=Y84> D_  ,-CE  $4<Pc  $'<yZ# 0._n )  =Y q"% " +C o .  6  ! ! $!/! 6!A! J!!W! y!!!"!z!E"U"f"?""'#"J#Vm#)###$+&$ R$ ]$h$y$$$4$Z$+S%*%8%*%@&9O& &&&V&J'K'0]'D'W'+(3(F( \( j(x((((,(())).) A),O)|)%))%)))**!*** :*%F*l*+*q*'+8+<+R+ d+n+ ++/++$+,Y ,1z,*,4, --2-W-+L.@x.S.K /0Y/&/*/)/50A<0~0+r11"2m2z33244?Y505D5l6|6 7 &7 37=7878[8/94999 :(: .:::L:$[::':r:6 ;dW;; <<< <"< < =<=$V= {===2= = => >()>YR>$>&>># ?W.?s?5? 0@#Q@u@ {@x@@=ABHKC$CsDn-EyG H$H:HCHTH nHxHzHHH HHHHHHHHI%IBIWIiIIIIII II I IIIJ0)f2/3\/bdb(Hnj1N"9;XDil=cajp@+5  ,#yel1IH&[M]Tb_)PN Oz.+VlOr<Vb}P 8AXpK'z{`9ME/xLphK:!N2J g+6SA^wG@'$ZP*yS4-7C`d"aq7'3%cwd[\ `  T  s G9K7 w?$;=Ou:~R5E}@F(BCyJW>vlk~01?d&q <>F?ARLM|ZTvQB^${*tX 0c|#4DIm6a_R[|E5Z4z,meI\ x*gs3%hUwf ;t;v4`5nf^Mnv=#!orW_Wu=?"AGt&]>y)9<YD_JL*U%$u) sWBC}ENF8IKQapxrV:TQFi.RYg<.'|sokie Y6#>f8"678 @ (UkD~(-jm^mCJ~2B-3,xLqqHu\}oc{hjk [Z/ ]Ugzn,V-%.t 0:1SP+&e]{OXQoGHr !Y2!Shi (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-07-10 19:47+0000 Last-Translator: Oto Braz 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: 2019-07-11 05:46+0000 X-Generator: Launchpad (build 19007) X-Poedit-Country: BRAZIL Language: X-Poedit-Language: Português (1 de %d) (desativado) (desligado) (ligado) Existe %d cartão. Existem %d cartões."Segoe UI"%% Correto%(a)0.1f %(b)s/dia%(a)0.1fkB envio, %(b)0.1fkB recebendo%(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 ser enviada%d alterações de mídia para serem enviadas%d arquivo de mídia transferido%d arquivos de mídia transferidos%d anotação%d anotações%d anotação adicionada%d anotações adicionadas%d anotação apagada.%d anotações apagadas.%d anotação exportada.%d anotações exportadas.%d anotação importada.%d anotações importadas.%d anotação não alterada%d anotações não alteradas%d anotação atualizada%d anotações 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 apagar:%s ano%s anos%sdia(s)%sh%smin(s)%smês(meses)%ss%syS&obre...&Pesquisar e Instalar...&CartõesVerifi&car Banco de Dados&Intensivo...&Editar&Exportar...&Arquivo&Localizar&Ir&Guia&Guia...A&juda&Importar...I&nformação...In&verter Seleção&Próximo CartãoA¬ações&Abrir Pasta de Extensões...&Preferências...Cartão &anterior&Reagendar...&Contribua com o Anki...&Mudar Perfil&Ferramentas&Desfazer'%(row)s' tem %(num1)d campos, de %(num2)d esperados(%s certo)(Anotação apagada)(fim)(filtrado)(estudando)(novo)limite principal: %d(Por favor, selecione 1 cartão)...arquivos .anki são de uma versão muito antiga do Anki. Você pode importá-los com o Anki 2.0, disponível no site do Ankiarquivos .anki2 não são diretamente importáveis - por favor, ao invés disso, importe o arquivo .apkg ou .zip que você recebeu/0 dias1 101 mês1 ano10:0022:003:004:0016:00erro nº 504. Tempo limite de acesso ao gateway ultrapassado. Por favor, tente desabilitar temporariamente seu antivírus.:%d cartão%d cartõesAbrir pasta de cópias de segurançaVisite 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 de exportação:Localizar:Tamanho da FonteFonteEm:Incluir:Tamanho da LinhaSubstituir Por:SincronizaçãoSincronização
desativada; 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 insira detalhes abaixo.

Anki atualizado

para a versão %s.

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), para 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 > Verificar Banco de Dados para ver se isso corrige o problema.

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 mostra o tamanho do próximo intervalo quando você responder "bom" na revisão.Um baralho filtrado não pode possuir 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 Anotações...Adicionar InvertidoAdicionar etiquetasAdicionar Etiquetas...Adicionar a:O complemento não tem configuração.O complemento não foi baixado de AnkiWeb.ComplementosExtensões possivelmente envolvidas: {} Adicionar: %sAdicionadoAdicionado hojeDuplicata adicionada com o primeiro campo: %sErreiRepetir HojeContagem de repetições: %sTodos cartões ocultosTodos os Tipos de CartasTodos os BaralhosTodos os CamposTodos os cartões em ordem aleatória (não reagendar)Todos os cartões, notas e mídia para este usuário serão excluídos. Você está certo disso?Todos os cartões estudados em ordem aleatóriaPermitir 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 BaralhoAnki não pôde ler seus dados de perfil. Os tamanhos das janelas e seus detalhes de login de sincronização foram esquecidosO 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)Explorar ExtensõesAparência do PainelAparência do Navegador...Opções do Painel de CartõesCriarEnterradoIrmãos EnterradosOcultarOcultar 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.As alterações serão aplicadas depois que você reiniciar o Anki.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 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çarCopiado para a área de transferênciaCopiarCopiar informações de depuraçãoCopiar para a área de transferênciaResposta correta em cartões antigos: %(a)d/%(b)d (%(c).1f%%)Certo: %(pct)0.2f%%
(%(good)d de %(tot)d)Arquivo de extensão corrompido.AnkiWeb não pôde ser conectado. Por favor, verifique sua conexão à rede e tente outra vez.Não foi possível efetuar a gravação de áudio. Você já tentou instalar o pacote "lame" da sua distribuição?Não foi possível salvar o arquivo: %sFiltradosCriar BaralhoCriar Baralho Filtrado...Criar imagens escaláveis com dvisvgmCriadoCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 PersonalizadoEtapas personalizadas (em minutos)Personalizar modelos de cartão (Ctrl + L)Personalize CamposRecortarBanco 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 EtiquetasApagar Arquivos Não UtilizadosExcluir campo de %s?Apagar o complemento %(num)d selecionado?Apagar os complementos %(num)d selecionados?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: %sHabilite o segundo filtroFimAbra 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 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 instalando %(base)s: %(error)sErro ao executar %sAgendador Experimental Versão 2ExportarExportar...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...FiltrarVersão do arquivo desconhecida, tentando importar de qualquer maneira.FiltroFiltro 2Filtrar...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ícilIntervalo árduoAceleração por Hardware (mais rápido, porém pode causar problemas de exibição)Você instalou latex e dvipng/dvisvgm?CabeçalhoAjudaMais fácilHistóricoInícioDistribuição por horaHorasHoras com menos que 30 revisões não foram mostradas.IdênticoSe 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 HTML e referências de mídiaIncluir 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 ComplementoInstalar extensão(ões)Instalar de um arquivo...Instalou %(name)sIdioma da Interface:IntervaloModificar o intervaloIntervalosManifesto de extensão inválido.Código inválido, ou complemento não disponível para esta versão do Anki.Código inválido.Configuração inválida: Configuração Inválida: objeto de nível superior deve ser um mapaNome 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 intervaloMais difícilGerenciarGerenciar Tipos de NotasGerenciar Tipos de Notas...Gerenciar...Ocultar cartões manualmenteMapear para %sMapear para EtiquetasNota de Marcabloco MathJaxUtilizar formato de entrada MathJax para equações químicasMathJax 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 foi estudado hojeNenhum 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 adicionadas do arquivo: %dNotas encontradas no arquivo: %dNotas em Texto PuroAs notas requerem ao menos um campo.Notas ignoradas, pois já estão em sua coleção: %dNotas marcadas.Notas que não pudiam ser importadas conforme o tipo de nota foram alteradas: %dNotas atualizadas, pois o arquivo tinha uma versão mais recente: %dNadaOKMais 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...Flitro OpcionalOpçõesOpções para %sGrupo de opções:Opções...Marcador LaranjaOrdemCriados há mais tempoRevisões mais próximasSubstituir modelo do verso:Substituir frente:Substituir modelo da frente:Extensão do Anki empacotadaPacote 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, verifique sua conexão internet.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. remova a pasta %s e tente novamente.Por favor relate isso aos respectivos autor(es) da extensão.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, primeiro selecione um único complemento (add-on).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...Perfil CorrompidoUsuáriosRequer autenticação proxy.PerguntaÚ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 BaralhoRepita os cartões com falha depoisSubstituir 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 baralhoRestaurados os padrõesRetomar 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 em:Procurar 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 cartões como branco em preto (modo noturno)Exibir os cartões de aprendizagem com intervalos maiores antes de efetuar novas revisõesMostrar 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:IgnoradoAlguns 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 AnkiClassificar 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...Estudado %(a)s %(b)s hoje (%(secs).1fs/card)Estudado %(a)s %(b)s hoje.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 agendador experimental pode ocasionar agendamentos incorretos. Certifique-se de ter lido previamente a documentação. Deseja continuar mesmo assim?O primeiro campo está vazio.O primeiro campo do tipo de nota deve ser mapeado.As seguintes extensões são incompatíveis com %(name)s e foram desativadas: %(found)sO seguinte caracter não pode ser usado: %sAs seguintes extensões são incompatíveis e foram desativadas:A 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.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?Esta ação irá apagar todos os cartões de aprendizado dos baralhos selecionados e consequentemente alterar a versão do agendador. Deseja continuar mesmo assim?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 acessar a pasta Anki. As permissões na pasta temporária do seu sistema podem estar incorretas.Não é possível importar de arquivo somente leitura.Não foi possível mover o arquivo existente à lixeira - por favor, tente reiniciar seu computador.Não foi possível atualizar ou excluir a extensão. Por favor, inicie Anki enquanto pressiona a tecla shift para desabilitar as extensões temporariamente e tente novamente. Informações para depuração: %sDesocultarTexto 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?AtualizadoEnviar 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 ClozeO que você gostaria de desenterrar?Ao 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+NovoSua coleção AnkiWeb não contém nenhum cartão. Por favor, sincronize novamente e, ao invés disso, escolha 'Upload'.Suas 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.O armazenamente do seu computador parece estar cheio. Por favor, exclua arquivos desnecessários e tente novamente.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-noiteem %s diaem %s diasem %s horaem %s horasem %s minutoem %s minutosem %s mêsem %s mesesem %s segundoem %s segundosem %s anoem %s anosrespostas erradasmenos que 0,1 cartões/minutomapeado para %sEtiquetas mapeadasminutosminutosmêsrevisõessegundosestatísticasesta páginawcoleção completa~anki-2.1.15+dfsg/locale/ro/000077500000000000000000000000001353113723000153165ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ro/LC_MESSAGES/000077500000000000000000000000001353113723000171035ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ro/LC_MESSAGES/anki.mo000066400000000000000000001312311353113723000203630ustar00rootroot000000000000004YL(5 5 555"55 5668)6b6s6"6$6$6&6"7;7N7_7$|7$7 77788+8<8Q8h8{8 88888888 88888 89 999 9$9 *959>9 P9[9b9z99999909 9: : : :&:9:P:T:V:Y:^:f:m:r:w:{::T::,:(;0;!O;q;f;; << %< 2<=<M<_<t<e<<7= ==5=X&>Y>k> E? Q?\?`? {? ?? ? ? ?? ???? ?$@(@ .@:@J@ Y@ c@Kn@@"@@ @AARAvA7eB BwBE!C@gCCCCRCD"DD#D#DE'E(@EiE qE~E EEEE E E EEEFF>F YFcFjF}FFF F F)F'FFGGGGGG G G GH H"H2HDH3JH~HSHHHH H II(IBI"VIyII&I II II I IIJ "J-J3J9J-NJ|JJ(J5J JJyKK8K5KPKGL^L cLoLLLLLL L L LLLLLLLLLM M M 'M 4M AM NM [M hM uM MM M MMM MM MNN/N3NSN XN eN qNN/NNNN%NN O O O *O 6O COOOcO,yO(OOOFPNIPPP>PP(QyQ]Q Q8Q%R,RBR^RbR qR~RRR R RR R R RR RRR)R0 SQSgS|S4S!SSS#T$T=TQTbT iTsTyT{T~T T TTT TT TTTU UUU%U6UJUZUoUU U UUNU"V)V=VBVGV^VdVkVW$W)WCW IWWWfWnWWW WWW W WW,W XX X&X.X3XDX.JXFyXXX X Y4YGYZY aY1mYYYYY*YZ [[ [["\"8\ [\|\\\\\ \ \)\]]]]]]]^^ ^ "^0^C^I^<[^^ ^^^^ ^^ ^^^ _ _ $_0_7_H_\_b_s_{___ _ ___ __``` `` ,`:` I` V```o`````!`+`a#-a!Qasaaa a aaaa#aa aabb%b 4b?b Eb Qb [beb kb vbbb bbbb#b ccc;cDcIcPc`c|cc c cc cc cc c dddd"d)d0dPd Wdcd sdddddd6d 4e?e EeSeYele e e e eee e e e ef!1f Sf^fcf"hf&f*f(f1g'8g`g8Lh hMhhhi i i i!iiii,i jj",j$Oj"tjj j jjjjj jjjj jk kkk,kEk`kwkkkkkkk kkkkk m mm m/n0n 2n&o>eoCoEo.p!Lp7np:pCp;%q)aq'q qqqqr0r$Lr qrrrrrrrr rrr r r rrssss$s ,s9sIs`sss!|sssssss8s )t 6t Bt Mt[tatztttttttttttt^t(uG*u9ru'u"uu|vvvv v vvv w#w7ww6qx xxPxXyooyyz zz"z zz{{2{ E{S{d{ w{ { {{${{{{||,|b=||$|||| }q}} ~H~ ~~ZxR&/ CSO s)$N&i#>ˁ 5G^ms ς؂$: JTf v 0;ۃƄ΄ӄۄ  4AQk:sXŅ ) 1;L]r-ֆ߆+. 4AS dr#{Ňʇ6 $1-4_q "D*5oc *3C^fmt{ Ȋϊ֊݊  % 2 ? L Yfm v͋!#,+X ]k{4Ќ،808H Ygw6Ӎ3 %>$d{yFkN Ođ3 P[u   ĒΒ  !-2F`ݓL*3 ^(*ǔ  )5;=&@g } ŕѕٕ .@Z s }3Bv ŗ Ϙޘ %7< S `l(tÙ˙ ҙ7@]&}GȚ-6<G+֛@'  5(F-o,,ʞ  3< Q [FhYv! ˠ  )%5J[ ̡ 8GYi|¢Ȣע5ޢ09 Q_y ң ""E^ y% <Τ ,.I!x ӥ٥)ܥ"4=P bnu Ϧ !58P  ħ ϧܧ$  '4FWv Ǩ٨    6BSc%s-,ǩ)A'iyʪ۪" 2<K [0f6%5-+c,(>$G" j[vҮڮ ¯ͯ 9 AN"b$%аװ) >HJOVeltx'0",LSZ ]hpmSu;2%1LIxA=-zoXG@j?/VNI]ZS@paeO=K_^QTc&3i^Kbo.$U ~/U>}y uafg15B!'gDv-Wr `rND FK!cw cOtGi#fn6YJYh$?x%{&wh(?k) 5,D#s]m^IGZ!y#*j~10>d"lqW' qHmL d;Q<ewM6e4`H)R&}x'nR|*N:+ 78;v_\26/s9.pRXjJ0k"3CM :}t4v||=QlOCPL3HEFdJ7E.z,+u]syl <{4M*PZ>$g7EnA5pa9fFB  _   2TUoPS(Tr [h+Y-(:[tX{b8,z"`kB@VW[\ib\9CA0<% V8~)q (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%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...&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...&Tools&Undo'%(row)s' had %(num1)d fields, expected %(num2)d(%s correct)(end)(filtered)(learning)(new)(parent limit: %d)(please select 1 card).../0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll 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 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.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 FlagBrowseBrowser 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?Closing...ClozeCode:Collection exported.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 save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+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+WCumulativeCumulative %sCumulative AnswersCumulative CardsCurrent DeckCurrent note type:Custom StudyCustom Study SessionCustom steps (in minutes)CutDatabase 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 Unused FilesDelete 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: %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 during startup: %sError executing %s.Error running %sExportExport...ExtraFF1Field %d of file is:Field mappingField name:Field:FieldsFields for %sFields separated by: %sFields...Fil&terFilterFilter 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: %sFlagFlipFolder 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.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 intervalLowest easeManageManage Note Types...Manage...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 FlagNo cards are due yet.No cards have been studied today.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 suspended.NothingOKOnly new cards can be repositioned.OpenOptimizing...Optional filter:OptionsOptions for %sOptions group:Options...OrderOrder addedOrder duePassword:PastePercentagePeriod: %sPlease select a deck.PositionPreferencesPreviewPreview Selected Card (%s)Preview new cardsPreview new cards added in the lastProcessing...ProfilesProxy authentication required.QuestionQuitRandomRandomize orderRecording...
Time: %0.1fRed FlagRenameRename DeckRepositionReposition New CardsReposition...ReschedRescheduleReverse text direction (RTL)Review CountReview TimeReviewsRightSaveSaved.SearchSearch within formatting (slow)SelectSelect &AllSelective StudyShow 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 midnightin %s monthin %s monthsin %s secondin %s secondsin %s yearin %s yearsmapped to %smapped to Tagsminsminutesmoreviewssecondsthis pagewwhole collection~Project-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-03-05 03:31+0000 Last-Translator: Damien Elmes 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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) Language: ro (1 din %d) (dezactivat) (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ă nemodificată%d note nemodificate%d de note nemodificate%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...&CarduriVerifi&că baza de dateTo&ceală&Editează&Exportă...&Fișier&Caută&Mergi&Ghid&Ghid…A&jutor&Importă...&Informații...&Inversează selecțiaCartea ur&mătoare&NotițeDeschide 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)…/0d1 101 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ă notițe...Adaugă versoAdaugă eticheteAdaugă marcaje...Adaugă în:Adaugă: %sAdăugat(e)Adăugate astăziAdaugă duplicat cu primul câmp: %sDin nouRepetate astăziNumărate din nou: %sToate tipurile de carduriToate pacheteleToate câmpurileToate 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 fanionOrice 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 versoSe creează copia de rezervă...Salvări de siguranțăDe bazăDe bază (și cu card întors)De bază (opțional cu card întors)De bază(tastați răspunsul)Fanion albastruRă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?Se închide...Test cu cuvinte lipsăCod:Colecție exportată.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 salva fişierul: %sTocealăCreează pachetCreează pachet filtrat…CreatăCtrl+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+WCumulateCumulate %sRăspunsuri cumulateCarduri cumulatePachetul curentTipul notei curente:Studiu personalizatSesiunea de studiu personalizatPași personalizați (în minute)Tă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 fișierele neutilizateȘ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ă „%s”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: %sActivează al doilea filtruTermină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ărcarea %(id)s: %(error)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...Fil&truFiltruFiltru 2Filtrare...Filtru: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: %sFanionInversează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 suplimente...Obține partajateBineIntervalul de divizareFanion verdeEditor HTMLDificilAți instalat latex și dvipng/dvisvgm?AntetAjutorCea 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ă câmpulIgnoră 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 LaTeXMediu matematic 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 intervalCea mai mică ușurințăAdministreazăTipuri de note…Administrare...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 laFără fanionNiciun card nu este programat încă.Nu s-au studiat carduri astăzi.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ă.Nu sunt actualizări disponibile.NotăID notăTip notăTipuri notăNotă suspendată.NimicOKDoar cardurile noi pot fi repoziționate.DeschideSe optimizează...Filtru opțional:OpțiuniOpțiuni pentru %sGrup de opțiuni:Opțiuni…OrdineOrdine carburi adăugateOrdine dată scadentăParolă:LipeșteProcentajPerioadă: %sTe 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.1fFanion roșuRedenumeșteRedenumire pachetRepoziționeazăRepoziționează cardurile noiRepoziționează…ReprogrameazăRe-planificăDirecție inversată a textuluiNumăr repetițiiTimpul repetărilorRepetițiiDreaptaSalveazăSalvat.CautăCaută în formatări (lent)SelecteazăSelecte&ază totStudiu selectivArată 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țiiîn %s lunăîn %s luniîn %s de luniîn %s secundăîn %s secundeîn %s de secundeîn %s anîn %s aniîn %s de anitransformat în %stransformat în eticheteminuteminutemorepetițiisecundeaceastă paginăwîntreaga colecție~anki-2.1.15+dfsg/locale/ru/000077500000000000000000000000001353113723000153245ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ru/LC_MESSAGES/000077500000000000000000000000001353113723000171115ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ru/LC_MESSAGES/anki.mo000066400000000000000000003230171353113723000203760ustar00rootroot00000000000000l;`O aO lOxOO"O OO OOOO8PTNT]TlT}TTT0T TTT T TU UU3Ur7UjUVVVV'V.V3V8VOzPzz]z F{8R{{{{{{{ {{{| | |"| '| 1| >|H| O|\|b|)q|0||||4|!0}R}e}#{}}}:~+N~z~~~ ~.~~~~~  &- 4B Zd+l   % 0=NU"ǀۀ  Á́с )9 HSX l w 8,ς "3.9 hFr҃ 4 @S Z1fȄׄ*! ֆ "0"S v͇  $.?G 5$)22҉1PU[jz <Ċ ', 55@v  ˋ !07H\bs{ ˌNߌ. 4APV^ b&l  ̍֍'/!E+g#!ǎ <! ^k]{aُ;Um!8 ܐ=,(U]`,r#gk *2A P [g m yÓ5ؓ < Y do,#&ߔV8]Eܕ*6>0uÖ$ٖ,+-D+r8ח #!0E vŘ ֘ 2NWlt#̙iy /  + @"Nq y1 țӛ " ) 6 BO_~-Ü(˜ &0 7Bb i uV  ,ўG 4Uf"  ßӟ)4Tq*̠''-@56v !?ڡMhn ~  ͢,٢ !/ 5 @ NXs{ʣߣ   !B!Udw ܤ +(0Y sX+"4&Wz~0VD+0ǧ>F7'~*(Ѩ1,,IY'#_˫e+8CQ(Frgx u/.M^S bn} !ȲͲg'SL{ȳ^e}.ô*,Bo v U$1V"gZS09$j" bķ{'^5TW]U}  ǾҾԾپ ޾ +B]vʿ޿  $&79 +8 L Ytd B[o);Hkwi-&~1ja$sj Gw5 !#%-I0w/3 $DM T _jpw1) " C MYi .$ ,2:m&" "E4z  *%!GK hejM*$In%,R!e!!1J= #7xUpm 3+#1;$m !0%AV3% @/ p!{, f&S%iSSv78"%@[`x@CRv?  q {5;;qE4H(qBzJ\&v(:&.a,95&/\) ) 8(a!rfpg(;Nb##"$61[ox-$0+U'R,QQ+j';.)CR"n'2!;0l&50_ |    - # " >  1 = >R / ] B 1b  [@ 3   9 \5       '. 5 B O \ i v    !#4#Pt#9M!ox' ^ ]<jF5Qm6 ?NI-AwQAQf R_}$3 % 6(A&j  )CJ&2@sqwC6-2d/&% A #9!?]!!!!w""""%"" ""## 3# ?#ZM# ### ##* $4$R$"l$$$$%$.%4%HK&*&&&&'& #' /'<'=( L(&W(~(6(*( ( )#)*8)c) )())) )()T*2n***%**** +P+g+|+7,<G,',!,|,4K---z-0..[_.!..O.L/Bh2$2&22/3-F3;t3=303)4)I4's4444)45?(5hh5 535&6H6_6 \7Ag8K88 9-9M9\9b9w99#9'989$:7:~W::/:(;@;Q;f;ez;*;% <1<.D<1s<<#<<#<=;=Y=s==)=1=>'> =>=H>!>>%>'>8>6? ?#?@@0@ 3@>@GZ@(@'@@A/ABA0bA#A(AA,AOBBoB%BVBZ/CC CCCCCD DDaE8F2TFFFF]FGGtfG3G HH4!HrVHJHKJ`JK/+K[K&{KKKKKLL&+L.RLBLL>L0"MSSM MMFM N,N;NKLNdNAN@?OO'P}P%.QTQ@qQAQRQ[GRR>RES%GS:mSESrSaTpTTAT4TdUxUU!V?V@NV VVV V$V$ W /WFs7s7ssRtQ uD^uu!vRvdw@fwGwwxOyQ`yTyBzJJz~z.{4C|x|D ~R~x,"pOB҃ Z0eq\.+P:'ʊ /[I?uՌK *# N[.q/Џm9Z ǐeNl:|!1ّ ,^L5fuX<C) mzA_+veܚh5"Ǣ '2DU d q&|02ԣ<>D<.2#5+Y ӥ 0)f2/3\/bdb(Hnj1N"9;XDil=cajp@+5  ,#yel1IH&[M]Tb_)PN Oz.+VlOr<Vb}P 8AXpK'z{`9ME/xLphK:!N2J g+6SA^wG@'$ZP*yS4-7C`d"aq7'3%cwd[\ `  T  s G9K7 w?$;=Ou:~R5E}@F(BCyJW>vlk~01?d&q <>F?ARLM|ZTvQB^${*tX 0c|#4DIm6a_R[|E5Z4z,meI\ x*gs3%hUwf ;t;v4`5nf^Mnv=#!orW_Wu=?"AGt&]>y)9<YD_JL*U%$u) sWBC}ENF8IKQapxrV:TQFi.RYg<.'|sokie Y6#>f8"678 @ (UkD~(-jm^mCJ~2B-3,xLqqHu\}oc{hjk [Z/ ]Ugzn,V-%.t 0:1SP+&e]{OXQoGHr !Y2!Shi (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-08-10 15:15+0000 Last-Translator: Yuliya Volkova 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: 2019-08-11 05:44+0000 X-Generator: Launchpad (build 19021) Language: ru (1 из %d) (отключён) (выкл.) (вкл.) Содержит %d карточку. Содержит %d карточки. Содержит %d карточек."Segoe UI"%% правильных%(a)0.1f %(b)s в день%(a)0.1f кБ выгружено, %(b)0.1f кБ загружено%(a)0.1f с (%(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 группБудyет выгружен %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 карточку)...Эти файлы .anki для старой версии Anki. Их можно импортировать через Anki 2.0, доступной на сайте.Эти файлы .anki2 нельзя импортировать напрямую. Импортируйте .apkg или .zip, которые вы получили./0 дн.1 101 месяц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. Повторяйте эти действия, пока не найдёте проблемное дополнение.

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

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

Ошибка

Произошла ошибка. Выберите в меню «Инструменты»—«Проверить базу данных», чтобы посмотреть, исправит ли это проблему.

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

<проигнорировано><текст не в Юникоде><введите здесь поисковый запрос; нажмите Ввод, чтобы показать текущую колоду>Большое спасибо всем людям, помогавшим проекту идеями, сообщениями об ошибках и пожертвованиями.Лёгкость карточки — длина следующего интервала при ответе «Хорошо» при повторении.В фильтрованной колоде не может быть подколод.Возникла проблема при синхронизации медиафайлов. Выберите в меню «Инструменты»—«Проверить медиафайлы», затем повторите синхронизацию.Прервано: %sОб AnkiДобавитьДобавить (комбинация: Ctrl+Enter)Добавить тип карточек...Добавить полеДобавить медиафайлДобавить новую колоду (Ctrl+N)Добавить тип записиДобавить записи...Добавить обратнуюДобавить меткиДобавить метки...Добавить в:У дополнения нет настроек.Дополнение не было загружено с AnkiWeb.ДополненияПричиной могли послужить: {} Добавить: %sДобавленоДобавленные сегодняДобавлен дубликат с первым полем: %sСноваВозвратов сегодняВозвратов: %sВсе отложенные карточкиВсе типы карточекВсе колодыВсе поляВсе карточки в случайном порядке (без перепланирования)Все карточки, записи и медиафайлы этого профиля будут удалены. Вы уверены?Все повторяемые карточки в случайном порядкеРазрешить HTML в поляхВсегда повторять вопрос при повторении аудиоУстановленное дополнение не было загружено. Если проблема сохраняется, выберите в меню «Инструменты»—«Дополнения» и отключите или удалите это дополнение. При загрузке '%(name)s': %(traceback)s Произошла ошибка при обращении к базе данных. Возможные причины: - Антивирус, брандмауэр, резервное копирование или программы для синхронизации могут мешать Anki. Попробуйте отключить их. - Диск может быть переполнен. - Папка «Документы» или папка Anki может быть на сетевом диске. - Файлы в «Документах» папке Анки могут быть не доступными для записи. - Жёсткий диск может иметь ошибки. Выберите в меню «Инструменты»—«Проверить базу данных», чтобы убедиться, что коллекция не повреждена. При открытии %s возникла ошибкаAnkiКолода Anki 2.0Пакет коллекции AnkiПакет колод AnkiAnki не смогла прочесть ваш профиль. Размеры окон и учётная запись сброшены.Anki не смогла переименовать ваш профиль, потому что не смогла переименовать папку на диске. Проверьте, что у вас права записи в «Документы» и папку Anki и что другие программы не используют эти папку. Потом попробуйте снова.Anki не нашла строку между вопросом и ответом. Отредактируйте шаблон вручную, чтобы поменять их местами.Anki не поддерживает файлы в подпапках папки collection.media.Anki — это дружелюбная, умная обучающая система, основанная на методе интервальных повторений. Полностью бесплатная и с открытым исходным кодом.Anki распространяется под лицензией AGPL3. Смотрите файл лицензии в дистрибутиве для более точной информации.Anki не смогла открыть файл коллекции. Если проблема сохраняется после перезапуска компьютера, выберите «Открыть резервную копию» в менеджере профиле. Отладочная информация: Имя и пароль AnkiWeb неверны. Попробуйте ещё раз.Имя AnkiWeb: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.Изменения вступят в силу при перезапуске Anki.Проверить &медиафайлы...Проверить обновленияПроверить файлы в медиакаталогеМедиафайлы проверяются…Проверяется...ВыбратьВыбрать колодуВыбрать тим записиВыбрать меткиСнять неиспользуемыеСнять неиспользуемые меткиКлонировать: %sЗакрытьЗакрыть и потерять текущий ввод?Закрывается...Задание с пропускамиЗадание с пропусками (Ctrl+Shift+C)Код:Коллекция экспортирована.Коллекция повреждена. См. руководство пользователя.ДвоеточиеЗапятаяКонфигурацияКонфигурацияВыбрать язык и настройкиУра! На сегодня всё.Подключается...Время ожидания истекло. У вас или проблемы с подключением к интернету, или очень большие медиафайлы.ПродолжитьСкопировано в буфер обменаКопироватьКопировать отладочную информациюКопировать в буфер обменаПравильных ответов на развитые карты: %(a)d/%(b)d (%(c).1f%%)Правильно: %(pct)0.2f%%
(%(good)d из %(tot)d)Файл дополнения поврежден.Невозможно подключиться к AnkiWeb. Пожалуйста, проверьте подключение к сети и повторите попытку.Не получается записать звук. У вас установлен "lame"?Не удалось сохранить файл: %sЗубритьСоздать колодуСоздать фильтрованную колоду…Создать масштабируемые изображения с помощью dvisvgmСозданаCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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Совокупно ответовСовокупно карточекТекущая колодаТекущий тип записи:Учить ещёУчить ещёЗаданные шаги (мин.)Изменить шаблоны карточек (Ctrl+L)Изменить поляВырезатьБаза данных перестроена и оптимизирована.ДатаДней учёбыОтменить авторизациюКонсоль отладкиКолодаПодмена колоды...Колода будет импортирована после открытия профиля.КолодыОт большего интервала к меньшемуПо умолчаниюЗадержки перед следующим повторением.УдалитьУдалить карточкиУдалить колодуУдалить пустыеУдалить записьУдалить записиУдалить меткиУдалить неиспользуемые файлыУдалить поле из %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Ошибка создания защищённого соединения. Обычно она вызвана антивирусом, брандмауэром, VPN или проблемами вашего провайдера.Ошибка выполнения %s.Ошибка при установке %(base)s: %(error)sОшибка при работе %sЭкспериментальный планировщик — 2ЭкспортироватьЭкспортировать...Экспортирован %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 повторениями.ОдинаковыеЕсли вы внесли свой вклад, но вас нет в этом списке, пожалуйста, свяжитесь с нами.Если бы вы учились каждый деньНе учитывать время ответа большеИгнорировать регистрИгнорировать полеИгнорировать строки, если существует запись с таким же первым полемИгнорировать это обновлениеИмпортироватьИмпорт файлаИмпортировать, даже если существует запись с таким же первым полемНе удалось импортировать. Не удалось импортировать. Отладочная информация: Настройки импортаИмпорт завершён.Медиафайлы, не прикреплённые к карточкам: %dЧтобы избежать проблем при переносе коллекций между устройствами, Anki требует, чтобы встроенные часы компьютера были установлены правильно. Даже если система показывает точное местное время, настройки встроенных часов могут быть неверны. Перейдите к настройкам времени компьютера и проверьте: — AM/PM, — отставание и убегание вперёд, — число, месяц и год, — часовой пояс, — настройки летнего времени. Разница с правильным временем: %s.Вместе с HTML и ссылками на медиафайлыВместе с медиафайлыВместе с расписаниемВместе с меткамиДобавить новых на сегодняУвеличить лимит новых наДобавить повторяемых на сегодняУвеличить лимит повторениемых наПо возрастанию интерваловУстановить дополнениеУстановить дополненияУстановить из файла...Установлено %(name)sЯзык интерфейса:ИнтервалМодификатор интервалаИнтервалыНеправильный манифест дополнения.Недопустимый код, либо дополнение не для вашей версии Anki.Недопустимый код.Недопустимая конфигурация: Недопустимая конфигурация: объект верхнего уровня должен быть отображениемНедопустимое имя файла. Переименуйте: %sНедопустимый файл. Восстановите из резервной копии.Недопустимое свойство карточки. Выберите в меню «Инструменты»—«Проверить базу данных». Если проблема повторилась, перейдите на сайт поддержки.Недопустимое регулярное выражение.Недопустимый запрос. Проверьте опечатки.Исключена.Курсив (Ctrl+I)Перейти к меткам (Ctrl+Shift+T)ХранитьLaTeXФормула LaTeXОкружение LaTeXЗабытыеПоследняя карточкаПоследнее повторениеСначала последняя добавленнаяИзучаемыеЛимит опереженияИзучаемых: %(a)s, повторяемых: %(b)s, переучиваемых: %(c)s, фильтрованных: %(d)sОбучениеЧто делать с приставучимиПород для приставучихОсталосьКоличествоГрузится...В локальной коллекции нет карточек. Загрузить их с AnkiWeb?Самый длинный интервалНаименьшая лёгкостьУправлятьУправлять типами записейУправлять типами записей…Управлять...Отложенные вручнуюСопоставить %sСопоставить меткамОтметить записьMathJax с выключкойMathJax для химииMathJax в строкеЗакреплённыеМаксимальный интервалМаксимум повторений в деньМедиафайлыМинимальный интервалМинутПеремешивать новые и повторяемыеКолода Mnemosyne 2.0 (*.db)ЕщёНаиболее забываемыеПереместить карточкиПереместить карточки в колоду:Разделители из нескольких символов не поддерживаются. Введите только один символ.&ЗаписьИмя уже существует.Название колоды:Имя поля:СНовыеНовые карточкиНовые карточки в колоде сверх лимита: %sТолько новые карточкиНовых карточек в деньИмя новой колоды:Новый интервалНовое имя:Новый тип записи:Имя новой группы настроек:Новая позиция (1…%d):Начало следующего дняБез флагаНет карточек на сегодня.Ни одна карточка не была повторена сегодня.Нет карточек, подходящих под запрос.Нет пустых карточек.Ни одна закреплённая не была повторена сегодняНеиспользуемые и отсутствующие файлы не найдены.Нет обновлений.ЗаписьID записиТип записиТипы записейЗапись и %d карточка удалены.Запись и %d карточки удалены.Запись и %d карточек удалены.Запись отложена.Запись исключена.Примечание: медиафайлы не резервируются. Делайте резервные копии своей папки Anki.Примечание: часть истории отсутствует. Для получения справки смотрите документацию списка карточек.Записи, добавленные из файла: %dЗаписи, найденные в файле: %dЗаписи в текстВ записи должно быть хотя бы одно поле.Пропущенные записи, которые уже есть в коллекции: %dМетки добавлены.Записи, которые не импортированы, потому что изменился их тип: %dЗаписи, которые обновлены: %dНичегоОКСначала просмотренные давноПри следующей синхронизации перезаписать в одном направленииНекоторые записи не импортированы, так как они не создали ни одной карточки. Это могло произойти из-за пустых полей или из-за неправильного сопоставления содержимого файла и полей.Можно переместить только новые карточки.Только один клиент за раз может быть подключён к AnkiWeb. Если синхронизация не удалась, попробуйте позже.ОткрытьОткрыть резервную копию...Оптимизируется...Опциональный фильтр:НастройкиКонфигурация %sКонфигурацияНастройки...Оранжевая флагПорядокВ порядке добавленияПо расписанию повторенияПодменить шаблон оборотной стороны:Подменить шрифт:Подменить шаблон лицевой стороны:Упакованное дополнение AnkiУпакованная колода/коллекция Anki (*.apkg *.colpkg *.zip)Пароль:ВставитьВставлять изображения из буфера как PNGУрок Pauker 1.8 (*.pau.gz)ПроцентПериод: %sПоместить в конец очереди новых карточекПоместить в очередь на повторение с интервалами между:Сначала добавьте другой тип записи.Проверьте соединение с интернетом.Подсоедините микрофон и убедитесь, что другие программы не используют это аудиоустройтво.Отредактируйте эту запись, добавив несколько пропусков для заполнения. (%s)Убедитесь, что профиль открыт и Anki не занята, затем попробуйте снова.Задайте имя фильтра:Установите PyAudioУдалите папку %s и попробуйте снова.Сообщите об этом автору дополнения.Перезагрузите Anki для завершения смены языка.Выберите в меню «Инструменты»—«Пустые карточки»Выберите колоду.Сначала выберите одно дополнение.Выберите карточки только одного типа.Выберите что-нибудь.Установите последнюю версию Anki.Используйте «Файл»—«Импортировать».Посетите AnkiWeb, обновите вашу колоду, затем попытайтесь ещё раз.ПозицияНастройкиПредпросмотрПредпросмотр выбранной карточки (%s)Предпросмотр новых карточекПредпросмотр новых карточек, добавленных за последниеОбработан %d медиафайлОбработано %d медиафайлаОбработаны %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 (%(secs).1fs/карточка)Просмотрено сегодня %(a)s %(b)sПросмотрено сегодняУчитьУчить колодуУчить колоду...УчитьУчить по состоянию карточки или по меткеТаблица стилейСтиль (используется во всех карточках в записи)Нижний индекс (Ctrl+=)Экспорт в Supermemo XML (*.xml)Верхний индекс (Ctrl++)ИсключитьИсключить карточкуИсключить записьИсключённыеИсключённые и отложенныеСинхронизацияСинхронизировать звуки и изображенияСинхронизация не удалась: %sСинхронизация не удалась; нет подключения к Интернету.Для синхронизации на вашем компьютере должно быть точное время. Настройте часы и попробуйте снова.Выполняется синхронизация…Символы табуляцииОтметить дупликатытолько пометитьМеткиЦелевая колода (Ctrl+D)Целевое поле:ТекстТекст, разделённый символами табуляции или точками с запятой (*)Колода с таким названием уже есть.Заданное имя уже используетсяЗаданное имя уже используетсяОшибка времени ожидания при подключении к AnkiWeb. Пожалуйста, проверьте ваше соединение и повторите попытку.Стандартные настройки не могут быть удалены.Стандартные настройки не могут быть удаленыРаспределение карточек в колоде (-ах).Экспериментальный планировщик может создать неправильное расписание. Пожалуйста, сначала прочтите документацию. Продолжить?Первое поле пусто.Первое поле записи должно быть прикрепленно.Дополнения, несовместимые с %(name)s, были отключены: %(found)sСимвол %s не может быть использован.Отключённые конфликтующие дополнения:Лицевая сторона этой карточки пуста. Выберите в меню «Инструменты»—«Пустые карточки».Пустой вопрос будет сгенерирован для всех карт для того, что вы ввели.Количество новых карт, которые вы добавили.Количество вопросов, на которые вы ответили.Число повторений, запланированных на будущее.Сколько раз Вы нажали каждую кнопку.Указанный файл должен быть в формате .apkg.Нет карточек, удовлетворяющих условиям поиска. Желаете задать новые?Последние изменения требуют полную выгрузку базы данных при следующей синхронизации. Если на другом вашем устройстве есть изменения, они будут утеряны. Продолжить?Время, затраченное на ответыЕсть ещё новые карточки, но дневной лимит исчерпан. Вы можете увеличить лимит в настройках, но, пожалуйста, имейте в виду, что чем больше новых карточек вы просмотрите, тем больше вам надо будет повторять в ближайшее время.Должен остаться хотя бы один профиль.Нельзя сортировать по этому столбцу, но вы можете искать конкретный тип карточек, например, 'card:1'.Нельзя сортировать по этому столбцу, но вы можете найти конкретную колоду, щёлкнув по ней слева.Это негодный файл .apkg. Если вы скачали файл с AnkiWeb, может быть, загрузка произошла с ошибкой. Попробуйте скачать файл в другом браузере.Этот файл уже существует. Вы уверены, что хотите перезаписать его?Эта папка содержит всю вашу информацию используемую в Anki, чтобы создавать резервные копии быстрее. Если вы хотите использовать другую папку, прочтите следующее: %s Это специальная колода для обучения вне обычного расписания.Вот {{c1::пример}} заполнения пропуска.Будет создана %d карточка. Продолжить?Будут созданы %d карточки. Продолжить?Будет создано %d карточек. Продолжить?Это действие удалит существующую коллекцию, заменив её данными из импортируемого файла. Вы уверены?Будут сброшены все изучаемые карточки, очищены фильтрованные колоды и изменена версия планировщика. Продолжить?ВремяЛимит ограничения времениПроверитьДля просмотра дополнений, кликните по кнопке Обзор ниже.

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

%(cont)sТип записи - заполнение, но вы не заполнили пропуски. Продолжить?У вас много колод. Пожалуйста, посмотрите %(a)s. %(b)sВы ещё не записали своего голоса.Вы должны иметь хотя бы один столбец.СвежиеСвежие+ИзучаемыеВ вашей коллекции AnkiWeb нет карточек. Запустите синхронизацию снова или нажмине "Выгрузить".Изменения затронут несколько колод. Если вы хотите поменять только текущую колоду, пожалуйста, добавьте новую группу настроек.Представляется, что файл вашей коллекции разрушен. Это могло произойти, когда файл скопировали или переместили при работающей Anki, либо когда коллекция хранилась на сетевом или облачном диске. Если проблема сохраняется и после перезапуска вашего компьютера, пожалуйста, откройте автоматическую резервную копию из экрана профилей.Ваша коллекция в несогласованном состоянии. Нажимите "Иструменты - Проверить базу данных..." и повторите синхронизацию.Ваша коллекция или медиафайлы слишком велики для синхронизации.Ваша коллекция успешно выгружена на AnkiWeb. Если вы используете другие устройства, при синхронизации загрузите на них коллекцию, которую вы только что выгрузили. После этого информация о просмотрах и новые карточки будут обновляться автоматически.Возможно, на компьютере закончилось место. Освободите место и попробуйте снова.Ваши колоды на 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.15+dfsg/locale/sco/000077500000000000000000000000001353113723000154625ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/sco/LC_MESSAGES/000077500000000000000000000000001353113723000172475ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/sco/LC_MESSAGES/anki.mo000066400000000000000000000036341353113723000205340ustar00rootroot00000000000000l " (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: 2019-07-02 11:47+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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) 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.15+dfsg/locale/sk/000077500000000000000000000000001353113723000153135ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/sk/LC_MESSAGES/000077500000000000000000000000001353113723000171005ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/sk/LC_MESSAGES/anki.mo000066400000000000000000001646271353113723000203770ustar00rootroot00000000000000|,; ;< <"<4< 6<@<S<8e<<<"<$<$=&-="T=w===$= ==>+>3>B>S>h>>> >>>>>>>> >>> >? ??? ?$? *?5? G?R?j?z?????0? ?? ? @@@)@@@D@F@I@Q@X@]@b@f@j@Tn@@,@(@A!:A\AftAA AA B B(B8BJB_BevBB7C CC5CXDYjDkD 0E UPUV]$V V8VVVVWW W W&W+W 0W ;WIW NW [WeW lWyWW)W0WWW4X!8XZXmXXXXX XXXXX X YYY !Y/Y GYQYXY`YiYzYYYYY Y YYNYJZ^ZcZzZZZ7[@[E[_[ e[s[[[[ [[[ [[[[ [[\\\.\FN\\\ \4\]"] )]15]g]w]]]*]] __ __"_"` #`D`Y`h`|`` ` `)``]ayaaaaaaa a aa bb<#b`b ibvbbb bb bbb b bbbcc c1c9cScmc rc ~ccc ccccc cc cc d dd-dEd\dod+dd#d!de e e e<)e fese]eaeCf!Wf yffff,ff#gkg)h .h%wFdw*w(w1w,1xI^xx'yy#zez6{8-|f|C|(:}rc}}} }u}/n~M~~~   !')05=R.Y,߀ U$f"S0$D"i {^5yU  &: LWY^ c mw|̇чه܇  07 9DXvj>GMG;݋Y s&CRVR)%Ӎ 8"X { Ύ  #-=E N Zf u(  )4?E  Ԑ$c*E6֑. <]duڒ *4F_q @ cw} ;H Xy Ǘӗ ܗ& "@ RU`#Θ @K aZ gpJٜ#{,$̝<,iq͞ "*.M | ğΟޟ32&Y  ( 1 ? IUhzAXnwޢ'(*=hw ȣ2ң 9 S](e7Ƥդ Z gAs5fR pz" ǦΦզܦ % ,9I_r ŧ3ҧ "7 J2T  8  4J`u+5, <Ҫhs ({6I' >Ldy î̮ ߮ /!DQM&*,=j ưȰ˰  !=FM Ub{ α ر  Dz ʳٳ /BW] nz  ִ6ݴ>S&mDB/r&:ж #'1)Y,.߹ & =G-W(E)W  ûӻH cn~ μ 6=!Qs{#ڽ߽ "-BT\b ht Ͼ ,70d+Bٿ  & 3AwPxJs'$';F'Px *5G [iq # &9 V `(l3/[FU_,G5b,=Pl u1 +3C V`i { , 1# U c=q )  2D*X.  # 1DSX u?B"c% / G S`s'&4)'=Q; F7 U*cI 0N bm,. -8I^!o7{au{ 4 #+OTj.*4N0f&TOc +1CE;Y%0V<%A'nE Fr[ &$2= pz  ?9V fpZ= )7fR7 "5<QoXa`t{   2OSZ ^iqv >9]d :p0TPbKE7O`9^%%E|C y#vRi@tw4 +TaMm-I.pQh;:_rQ^z"KeF7 ! uXCa\uU#|zL;,I8>h<eqtwu'i[-6 skT)VHS!.`x\Rg ?3x*@SbkF(:-l(diEjJYWGw(m*}? 6B{ +gy%Ndy"okX]2>fMfn h,& RBlaZv9QH AelJ X&2Z)3~o\'[WN/8c;P[KJ/GYSvqO$).~5P8{gmf+DYN x < n521j`Gopc=,?"@#srZ$W&L/'|H7tO~3z}4U=s$D{V4_=<VFCnqUB00!L]M6b_I1* rjc^15A}D A (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).../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, 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 save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCtrl+WCumulativeCumulative %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 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 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 intervalLowest 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...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 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.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 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 matchesUpload 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: 2019-07-02 11:47+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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) (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).../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, 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 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+WKumulatí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ť 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 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ší intervalNajnižš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...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 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.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.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é.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.15+dfsg/locale/sl/000077500000000000000000000000001353113723000153145ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/sl/LC_MESSAGES/000077500000000000000000000000001353113723000171015ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/sl/LC_MESSAGES/anki.mo000066400000000000000000001262401353113723000203650ustar00rootroot00000000000000V|%1 112" 2,2 .2828K22"2$2$2&3")3L3_3$|3 3333344,4C4V4 k4y4444444 444 44444 44 44 55.5>5M5\5m5t50z5 5 5 555555555566(616!P6r6f66 77 &7 37>7N7`7u7e7778 858X9Ym9 999 9 9: : ):5:>:F: N:Z: `:l: |: :K::: :;;R;7; &<w2<E<<<R=Z==#=>;>(T>}> >> >>> > >>??9?@?P?V? [?e?!@(@-@5@<@ C@ M@ W@b@t@3@S@AAA %A 3A?APAjA"~AA&A AA AA B BB.B4B-:BhBnB(tB5B BB5BPCmCC CCC CCCCCCC C C D D D )D7DJD [DhD {DDDDD D D D/DE#E%8E^E eE rE ~E E E EE(EEN FP\F>FF]F SG_GfG|G GGG G GG G GG GGG)H8HNH4RH!HHHHHHI I!I'I)I,I HI VIbIiI pI~I IIIIIIIIJ J J+J0JGJMJTJK KK ,K:KIKQKdK tKKK KKKK KKKKK.KFL\LuL L4LLL L1L.M>M^MmM*M MM MM"N")N LNmNNNN N NNNOO OO ,O 6ODOWO<iOOOO OO OO O O PP!P5P;PLPTPnPP P PPP PPPP P PP Q QQ*QBQYQ+lQQ!QQ Q Q<Q !R.R]>RaRR!S4Sٍ'3[)k,.Ž1#:JZ p{ Əԏ "I;   א 4Pd!kő֑   '8 I V`qG4H P \j.=tOlĔ1!Jlq'Bjp  Ė іߖ$ '(6PQ *D*T-B (CR3Z ™͙ޙ% nF Ϛ *) Ta8v ٛ  $@%[  ̜)ܜ 3"V$v͝ # 7//g70Ϟ E Pb:ğן . =GXl |%ʠҠ 31keѡ  #0,] sf,'Ck-CΣ*1=o@Τ)ǥBA{ɧEJ \EgZ a m{$<թ  + D5O; , M\ { ͫޫ  &2Gbhor{ W; /s4b I@W(< 3@+lTUG#a^V AL8?E4- nO+ Hc;Tz\V7[: *%r_e&,/T)_]N>1XDK;fENR Rl2U[`A>A'Od/ju i!=#$:qDh>S 3=X515FS\"~uQ-@)M.|3tQy*JKZJ~4LOUKI=wJ"H<n!Ri, B0  mz,7xgB$'}pFa0)MBFv?v979o"  rZbqS.dV^L#5?f8h:+1jD6Y{oG|w]P- Gg&QP}{xm$%pk'IyN H(.6C*tCE0c M&C2s(<69eYk`%28!P (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).../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 save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+PCumulativeCumulative %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 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 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 intervalLowest 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...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 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: 2019-07-02 11:47+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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) 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).../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.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+PSkupajSkupaj %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š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 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 intervalNajniž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...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.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.15+dfsg/locale/sr/000077500000000000000000000000001353113723000153225ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/sr/LC_MESSAGES/000077500000000000000000000000001353113723000171075ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/sr/LC_MESSAGES/anki.mo000066400000000000000000002276721353113723000204060ustar00rootroot00000000000000-0= 1=<=C="I=l= n=x==8====" >$.>$S>&x>">>4>2 ?=?N?"k?$?$?$? ?@3@K@S@b@s@@@@ @@@@@@@@ @ AA A#A)A/A3A :ADA JAUA gArAAAAAAA0A BB B %B0B6BIB`BdBfBiBqBxB}BBBBTBB,B(C;C!ZC|CfCC DD 0D =DHDXDjDDeDD7E EE5EX1FYF%Fk G vG GGG G GG G GGGH H H$H@H FHRH bH lHKwHHH"JJ JJKKRjLvL74M lMwxMEM@6NwN~NNRNNkO#O#OOO(P/P 7PDP XPeP~PP P PPPPPPPQ Q&Q +Q 5Q)?Q'iQQMRTRYRaRhRoR wR R RR RRRR3RSS%SySSS S SSSS"S TT&$T KTWT ^TjT {T TTTTT-TTT(T5$U ZUhUUU8U53VPiVVV VVV W WWW"W)W0W 7W DW QW ^W kWxW W WWW WW WWWX"X 'X 4X @XNX/SXXXX%XX X X X X Y YY,4Y(aYYYFYNZPSZ>ZPZ4[]=[ [8[[[[\\ ,\9\?\D\ I\ T\b\ g\ t\~\ \\\)\0\]]4]!Q]s]]]]7^K^\^ c^m^s^u^x^ ^ ^^^ ^^ ^^^^__)_9_N___ f_ q_~_N_"_``!`8`>`E```aa #a1a@aHa[a kava{a aaaa aaaaa.aF bSblb b b4bbb b1c2cBcbcqc*cc Ne\e {ee"e"e ef$f3fGfPf bf lf)zff(gDg[gzggggg g gggg<g+h 4hAhQhVh _hjh {hhh h hhhhhhhii8i =i IiTihi ni{iiii ii ii i iiij'j:j+Pj|j#j!jjj j j<j 1k>k]Nkakl!"l DlRlZl]l,oll#dmkmm mnnn -n8n >n JnTnln{n nnnn n nn,o#AoVeo8oEo;p*Rp}pp,pp-p+$q8Pqq qqqq#q qrr-r6r GrUrZrarqrxrrrrrrirTs [s gsts ss s"ss s1s t&t Ctdt kt xt tttt-tu u uu$uDu Ku WueuV}uu uu,qvvGv vw -w:w BwNw^wpwwww*w'x;x@Ax6x x!x?x&y,y ,}Fk}'}*}(~1.~,`~I~~'#ۀee8\C%(ir u'/M̈́!… ȅ Ӆ ߅! '0X_dl.Ɇ,  U?$"ˇS0B$s" {͈^I5މU =GOUi { ʍэ#&.6 <FHY[ b ozFʐ̐ې ‘-ݑa am[ϒy+e) 55^Еy/ump9;˜!!0-R0-5ߙ/-]d k v Ě՚  )8U7pܛ  G&n  (!  -4;AGNU\H&#̞!ǟ#%8V%k#ϠI "9N֤%;N V'a(%Ʀ  )AP _l: "̧%+D6ƨ'ŬʬܬJa uޱ`TIJz7J?A´:!?eaǵص,!7?!wƶ-1=o$)ѷ  N%Mt.¸  $ 1?Ym!!!˺. _'#~ *8 HUk$-'ռCARDqŽԽ$-B*Q|P ILLS8 E2 /4d w  4L#b( N#)%=3cO%%A@ 79XZLR:wAEYk u$ +"Dg'zCvS"x=ob*,#0 ?M\^)a( '  ! .<#Qu(+TPM&' +<Khq )  .9 JUfw R*>, :T* W&~> ,2G$;?`D>C$!h')a63.!'6^q "q i*t"(79q*%- #+ O<\"!(*!:\ s #11Q#!;^%dJS)8J`x% -FtR'E#%i mM5R   ,EU!f' @#$d9V;<x.HB7S4?SThy/&SHX<g   *F c(*.$+ PPZrU7k' 4EU8V+ >I Z?e3U+ 69 %8J!h.<@`7GqYR{v:Ez  "9 T t {   8  0 ) I Z !x  ) < 6 `O  j #       # n. , @ 2 >VJ-9x$PG(xpx?b@IH-/vq4k:PKwcMI ''2Zr^v V0a >. ?5 mu   !/!E!cV!!"!t!l""9""W_##8# $G$3$7% V%a%w%B&{'}'\V)-- --..1.3. <.G.Y. j.u.z.$..).!.+/3/;/C/K/^/m/////Fi[*lS_I) JFEG_K8+ZhJU3mT>.DEH#A?e<c-m)$ f;^:Pd]bO+N> Wa9MBv ~w7#h'grbbl7Z<2 4Ro$ =/; 6T:5OfhnM!:YH0L .K{iwB^$,z|?Q 3^pPE%= A{QUm|I/? kxeV'1SIZ5 xLYQ 0~4scN}`FVoR`gDc\!xj@KrX%9DuTn+@iwy }pul a.v/a(d)q*\t,48-sPg&-[Y&Xz]MB(pkN"RoqOG=G> k|yvV2s5Ut%(1nS~2Jr*z@X"C3&07LCC1!'{[}]#e6,;WAHW`jfy9<"\djqu_6 t8  (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).../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, 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 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+WCumulativeCumulative %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 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 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 intervalLowest 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...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 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.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 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 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 matchesUpload 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: 2019-07-02 11:47+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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) (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 карту).../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. Проверите свој мрежни прикључак и покушајте поново.Неуспело чување датотеке: %sБубањеНаправи шпилНаправи филтрирани шпил...НаправљенCtrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+WУкупан бројСвега %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Грешка у прављењу заштићене конекције. То је, обично, изазвано антивирусом, фајерволом, 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Предња страна ових карата је празна. Идите на Алатке>Празне карте.Ваша улазна информација би генерисала празно поље у свим картама.Број нових карата, које сте додали.Број питања на која сте одговорили.Број понављања планираних у будућности.Колико пута сте притиснули свако дугме.Датотека .apkg није валидна.Нема картица које задовољавају упит. Желите ли да задате нове?Измена, коју сте затражили, захтеваће учитавање целе базе података приликом следеће синхронизације ваше колекције. Ако на другом уређају имате измене које још нису синхронизоване, изгубићете их. Да ли желите да наставите?Време потрошено на одговоре.Доступне су нове карте, али је већ достигнут дневни лимит. Можете да увећате лимит у опцијама, али имајте у виду, да што више нових карата наведете, то ћете имати веће оптерећење у каткорочном приказу.Мора да остане бар један профил.Ова колона не може бити сортирана, али можете тражити специфичан шпил, кликнувши на један са леве стране.Ова датотека не изгледа као исправна .apkg датотека. Ако добијате ову грешку из датотеке, преузете с AnkiWeb, велике су шансе да преузимање није успело. Покушајте поново, а ако се проблем настави, покушајте поново помоћу другог прегледача.Ова датотека већ постоји. Да ли сте сигурни да желите да је презапишете?У овој фасцикли се на једном месту чувају сви ваши подаци за Anki како би се олакшало резервно копирање. Ако желите да Anki користи другу локацију, погледајте:: %s Ово је специјални шпил за учење ван обичног распореда.Ево га {{c1::пример}} попуњавања пропуштеног.Ово ће обрисати вашу постојећу колекцију и заменити је подацима из датотеке, коју увозите. Да ли сте сигурни да то желите?времеВременско ограничењеЗа понављањеДа бисте додали попуњавање пропуста у постојећој белешци, потребно је да јој прво измените тип у "пропуст" (cloze), преко Уреди>Измени тип белешкеДа бисте их видели, кликните испод на дугме Прикажи.За учење ван обичног распореда, кликните на дугме Додатно учење испод.ДанасДанашњи лимит за преглед је достигнут, али још увек постоје картице које чекају да буду прегледане. За оптимизацију меморије, размислите о повећању лимита у опцијама.укупноУкупно времеУкупно каратаУкупно бележакаТретирај унос као регуларан изразТипНапишите одговор: непознато поље %sНије успео увоз из датотеке која је доступна само за читање.ОдвезаноОпозовиОпозови %sНепознат формат датотеке.НевиђеноАжурирај постојеће белешке када се прво поље подудараУчитај на 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.15+dfsg/locale/sv/000077500000000000000000000000001353113723000153265ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/sv/LC_MESSAGES/000077500000000000000000000000001353113723000171135ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/sv/LC_MESSAGES/anki.mo000066400000000000000000002053201353113723000203740ustar00rootroot00000000000000@U4pE qE |EEE"EE EEEE8FAFQFbFuF"F$F$F&F"G=G4PG2GGG"G$ H$.H$SH xHHHHHHHII-I BIPIaIeIiImIrIvI zIIIII IIIII II III JJJ3JCJRJaJrJyJ0J JJJ J JJJK K KKKK"K'K+K/K3K,5K(bKK!KKfKKL aLnL L LLLLLeLLM7M .N8N5KNXNYN%4OkZO O OOOO P P!P 7P EPQP ZPfP'nPPPP P$PP PPP Q QK#QoQQ"1RTR YRgRyR[SRSv2TT7SU UwUEV@UVVVVRVWWW#W#WW Xz6XX(XX XY Y)YBYSY XY eY sYYYYYY YYZJZRZbZhZoZ tZ ~Z)Z'ZZ[[[[[[ [ [ [ [ [[ \\$\6\3<\p\S\\\\ \ \ ]])]C]W]"j]]]0^P^`^&r^ ^^ ^^ ^ ^^ ^^_ "_-_3_Q_-W___(_5_ __``8`5`P`Paga laxa#aaaaaa a a aab bbbb%b,b3b :b Gb Tb ab nb {b b b b bb b bbb c c c-cBcFcfc kc xc ccc/cccc%c!d (d 5d Ad Nd Zd gdsd,d(dddFeNYePe>eP8ff]f f8f5gv Bv&Lvsv vv v vvvvvw+w;w#Kw!owwww w w<w xx]#xaxx!x y'y/y2y,Dyqy#9zk]zzz zzz{ {{ "{ .{8{P{_{ x{{{{ { {{,{#%|VI|8|E|}?}*V}0}}},}~-+~+Y~8~~ ~~~~#0, ]kt#7[oi# 7/C s  " 1 '2O ` ݂-"*05L U_f V &0,GXi"  ƅօ#A*`'@6 9!D?f ʇՇۇ % + 6 DNiqՈ ݈  8!Kdm ҉݉ (@ Z{X+"&>e0+>܋F'b*(1ތ,I='w#_eu8lC5(yFr\a t~u4/Mڔ(.ϕ ޕ !"DI'gLܖ.$Sq,ȗ ϗڗ U$k"ZĘS0s$"ə {z^5+U4}  4 FQSX ] gqv{ˠ $& "-<B#Im oz> /"?(b(*0ߤ?$-d "å(&*6&aЦ #9 IW^fmry Χէ ܧ    +8?]p=   $16GKMPY_fmsy+9 ! +C˪  !3H\fr٫8| FլUfr0٭  Ԯ! .@Sh +Я ٯ' 0? NPY"~ Ա{޲~ZyٳSI SdM>:y ~P!)˷1O- .9Kb!yع 7RhwM ),AnBINV]d l v м9,aD νڽ ".QZ::L&e ʿڿ , 2>G_+d 26  53Un !  '07>ELSZ a n {   5EUg{& 3 5?U)^  ,-*$X}7GM7d_ Y aCm -AJZ `l|   &6 D[?`"#+(<S & 01=ouwz    2CSevW/GY _jp N V`w   ,#PY`qz~1D6Vj@y ?0.Fu 8%%)1 5R R 20?p1" & 6 BOb y!I!1: IDS  .NTe m! L6;Sgmvz(   6I*Y ,%  A)k }bt 4#  <[q  %6"T^w*^`y#7!$&K8h3D# 2@`-z/   '6 <G_r)-pJ4!5Sbz'6  6%W}&9 LY`f  ! RO ak<";^Zy # * 2<K [ |)$.. JTE]E> R]l   *?D]!p  "3,]`   -5Lle0$7C{1,B<;x3*/<E;,"`wtFJ1 U;r %2;|Y&-<N-a-R 0<V ]gy<+  9 FQ h*sV;1@V[e2&Kr+.aZ;|               ! * D !_           nc8[UYad7$,@3t2L6R'yu:8x/b"k|V NWY<&O _A([4)52 llOcss5T> 26'j-iY*1k4k:&PD)9;i `4!8\N^WI= &mi<[ 7\SA0ggM>~mWE+p,- /!#e$0%aom8wQ}#JC=;?SE_ &f9cQ_G"+3{"@qFzywT~nlP |@!3)Vgr'HZH1T<}0V61 ? FJw>>=\^b?:-u?Cz{hL h<A;Np  %nI*!e@]p q:(1$ BftCLurK# 2eX|# vRs+O 'E./odH {q3MG]XSX*.rKU]7d%K)=%;.~MFRj"55} fbBB.+,Py9ao`(0* G7Zt4I`z x(j^-JQvh,DZ9Uv/$6xD (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).../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: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll 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 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 save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+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+WCumulativeCumulative %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 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 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 intervalLowest 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 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.QuestionQuitRandomRandomize 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.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 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 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?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: 2019-07-02 11:47+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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) 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).../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: %sTillagdaTillagt idagLade till dublett med första fält: %sIgenIgen idagFelaktiga svar: %sAlla korttyperAlla kortlekarAlla fältAlla 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 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 spara fil: %sRåpluggaSkapa kortlekSkapa en filtrerad kortlekSkapa skalbara bilder med dvisvgmSkapadCtrl+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+WSammanlagtSammanlagt 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 etiketterRadera 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 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 intervallLä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 PyAudioRadera 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.Frå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.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.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.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?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.15+dfsg/locale/szl/000077500000000000000000000000001353113723000155065ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/szl/LC_MESSAGES/000077500000000000000000000000001353113723000172735ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/szl/LC_MESSAGES/anki.mo000066400000000000000000000010241353113723000205470ustar00rootroot00000000000000$,89Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2019-07-02 11:47+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: 2019-07-04 05:48+0000 X-Generator: Launchpad (build 19007) anki-2.1.15+dfsg/locale/th/000077500000000000000000000000001353113723000153115ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/th/LC_MESSAGES/000077500000000000000000000000001353113723000170765ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/th/LC_MESSAGES/anki.mo000066400000000000000000000177401353113723000203660ustar00rootroot00000000000000,<    8- f y " $ $ & " A R "o $ $ $  " 7 O W f w          1<Tds    '-3 9GL T_fmt{         0 7AGJQYirx~     &` %(((.84g"":)<d%1( "/HXh{  %BFZ"L++!Wy- ;3T$!$( ;Ha0w' - :M lw~    $ $5E!Uw!  N [n3 ,9O!h    !8Ndz  d6aYcPLg";V ( G~{ *Hz]:?>7y_S|\9n50 l,2rMhp%ZuO#m@^Fb`3=E1.RixJTWAQ $&ksqv/!C-j}wfoXUB)t8+[D4NI<e'K (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+PCumulativeCutDateDeauthorizeDecksDeleteDelete NoteDescriptionDialogE&xitEasyEditEmptyEndError executing %s.ExportExport...ExtraF1FieldsFilter:Find DuplicatesForecastFrontHoursIntervalLearningLeftMinutesPercentagePositionRandomReviewReviewsRightSuspendedTextTotalTotal TimeUnseenddayshoursminuteswProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-03-05 03:31+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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) 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+Pการเพิ่มสะสมตัดวันที่ยกเลิกอนุญาตสำรับลบออกลบบันทึกย่อคำอธิบายกล่องโต้ตอบ&ออกง่ายแก้ไขว่างเปล่าสิ้นสุดเกิดข้อผิดพลาดขณะเรียกใช้ %sส่งออกหมดอายุ...เพิ่มเติมF1ช่องข้อมูลตัวกรอง:ค้นหาภาพที่ซ้ำกันประมาณการหน้าชั่วโมงช่วงเวลาการเรียนรู้ซ้ายนาทีร้อยละตำแหน่งสุ่มบทวิจารณ์ตรวจทานขวาถูกแขวนแล้วข้อความทั้งหมดเวลารวมยังไม่อ่านงวันชั่วโมงนาทีสัปดาห์anki-2.1.15+dfsg/locale/tlh/000077500000000000000000000000001353113723000154655ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/tlh/LC_MESSAGES/000077500000000000000000000000001353113723000172525ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/tlh/LC_MESSAGES/anki.mo000066400000000000000000000013521353113723000205320ustar00rootroot00000000000000 l    %%sd%sh%sm%smo%ss%syBackCancelProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2019-07-02 11:47+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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) Language: %%sd%sh%sm%smo%ss%syDoHmevanki-2.1.15+dfsg/locale/tr/000077500000000000000000000000001353113723000153235ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/tr/LC_MESSAGES/000077500000000000000000000000001353113723000171105ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/tr/LC_MESSAGES/anki.mo000066400000000000000000001531131353113723000203730ustar00rootroot00000000000000+: :::":: :::8:&;7;J;"[;$~;$;&;";<4%<2Z<<<"<$<$=$(= M=n========> >%>6>:>>>B>G>K> O>Y>p>y> >>>>> >> >> >>>???0?7?0=? n?{?? ? ?????????????@T@Y@,[@(@@!@@f AqA AA A AAAAAe BrB7C TC^C5qCXCYD%ZDkD D DEE "E ,E6E LE ZEfEoEwEE E$EE EE E EKE9FNF"2HUH ZHhHzH\IRIv3J7J JwJEfK@KKKLR L^LL#L# MDMcM(|MM MM MMMN N N%N-N3NMNlNsNNNN N N)N'NOOOOOOO O O P P P+P;PMP3SPPSPPPP Q Q Q1QKQ"_QQQ&Q QQ QQ Q QR R+R1R-7ReRkR(qR5R RRbSkS8pS5SPS0TGT LTXTpT xTTTTTTT T T T T T TT U UU.U ?ULU _UlUUUU U U UU/UV V!V%)VOV VV cV oV |V V VV,V(V W+WF@WNWPW>'XPfXX]X Y8*YcYjYYYY YYYY Y YY Y Y Z Z ZZ%Z)4Z0^ZZZ4Z!Z[[#)[M[f[[[ \ \.\M\S\U\X\ t\ \\\ \\ \\\\\\ ]].]?] F] Q]^]Nv]]]]]]^^^^^ ^^^__ (_3_8_ L_X_]_d_ i_v_~___._F_`)` I` U`4b``` `1```a.a*Ba ma{a aa"a"a b.bCbRbfbob b b)bbGc2ccccccccc c dd(d.d<@d}d dddd d5dd eee +e 5eAeHeYemeseeeee e eeNe?f EfRfafgfof sf}f ff f fffffg+'gSg#cg!ggg g g<g hh]%hahh!h i)i1i4i,Fisi#;jk_jj jjjj kk k !k+kCkRk kkuk{kk k kk,k#lVoGofooo ooooooooooipxp p pp pp p"p p1q 7qBq _qq q q qqq-qrrr$r -r7r>r^r er qrrVrr rssGs s tt"3t Vtct ktwtttttt*u'~×ӗWܗg4#1.:Hř %:UYq  .3ӛڛߛ !7F]x<TԜ )4 ;FUh|#˝ڝ). 3@Pbk2q-ݞ,/(XpB 4NXܠ 0 =HOV]dk r  ǡ Ρء &?2Cv|8 3!U Ygw/ƣ3**$U9zFRDNKߥe NRYȦ  " 1=F]t -çG9 R=]%ި+%>$ީ/KD ƪѪתߪ  '5L_n Wԫ,EL gsz!&CG Vbh~ ƭ̭խݭ 3QD!(8@ We=~=ٯ2BM &̰&66Q Ա ݱ,;̲*DIO`u~ Xγ '1DV Zd9s Ѵش "AJ\2c̵ݵSK Q \hlp u ĶͶܶ ++Lx'+  ? IXmn[ܸ8Lk ~=*غlp  Ȼһ %> F#Rv (1μ/`0=XϽ(0BAs-1..GFvM  'D"[9~ **09JYj Qc }/G/w #*!J5l  # ]8 RRs$" 8 ERbx33)'#BK4C#CC)!/K${ # 6*za  +;1m"n*.Yv.*&(,0#]3M*A[;Wk? W  ."Q Yd ~ ! ,JFP !09I%A?FJ>\YZ&^&n+'SMZTHx W8Jwx95XFBg4IO8{DQ9"S]}c+xFsGaeZK lp(&bq)[*~$,A--2g*I.tYe| KEPfoB!R#L@M `kPdtv#a;hod;.Iz,u}^EdzHh(`iTfLLb~g-1=63|!"DCvW4/yVQXC2w hGB p  }U['jUN_)s0:z Hp cy!]%~mE@]0Aa{ U=/O8q12iD)1@fG'#Jq355<+mV^< \rnXjRPY`/76C [7? $wiOyeT6n<s,7m>|:k*4r?%NcjuSR Q"W=bv9\;NK3( 0t>_ :M_or{$Vu l.lk (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).../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, 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 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+WCumulativeCumulative %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 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 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 intervalLowest 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...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 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.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 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 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: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-03-05 03:31+0000 Last-Translator: Damien Elmes 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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) 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).../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 AlanlarBu 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.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+WToplamToplam %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 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)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üreEn 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...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 %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.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.İ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ı.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.15+dfsg/locale/uk/000077500000000000000000000000001353113723000153155ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/uk/LC_MESSAGES/000077500000000000000000000000001353113723000171025ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/uk/LC_MESSAGES/anki.mo000066400000000000000000002530201353113723000203630ustar00rootroot00000000000000L |0@ @ @@@"@@ @@A&A88AqAAA"A$A$A&B":B]B4pB2BBB"C$)C$NC$sC CCCCCCD#D:DMD bDpDDDDDDD DDDDDD DDDDD E E EE'E 9EDEKEcEsEEEEEE0E EE F F F(F.FAFXF\F^FaFiFpFuFzF~FFTFF,F( G3G!RGtGfGG HH (H 5H@HPHbHwHeHH7IHI L)L5QaQ fQtQQhRRRv?S7S SwSErT@TTUURUjUU#V#,VPV oVV(VV VV VW!W2W 7W DWRWZW`WzWWWWWW W W)W' X4XXXXY YY Y $Y /Y 9Y DYOY aYnY~YY3YYSY2Z;ZBZ IZ WZcZrZZZZ"ZZZ&Z &[2[ 9[E[ V[b[ t[~[[ [[[[-[[\\ \(\5F\ |\\]]8]5U]P]]] ]^^$^+^2^9^ @^ K^ V^a^h^q^x^^^^^^ ^ ^ ^ ^ ^ ^ ^ ^ _ _$_ +_ 6_D_W_ h_u_ _____ _ _ __/_/`5`J`%R`x` ` ` ` ` ` ``,`( a6aTaFiaNaPa>PbPbb]b Gc8Scccccc cccc c dd d d*d 1d>dDd)Sd0}ddd4d!de2eHeaeeef f.fHfNfPfSf of }fff ff ffffffgg)g:g Ag LgYgNqg"gggghh hhhhh h ii#i6i FiQiVi jivi{ii iiiii.iFi.jGj gj sj4jjj j1j kk=kLk*`kk )m7m Vmcm"m"m mmmn"n+n =n Gn)Unnoo6oUoZo`oooo o oooo<op pp,p1p :pEp Vpbpip ~p pppppppppq q $q/qCq IqVqeqkqsq wqq qq q qqqqrr++rWr#gr!rrr r r<r ss])sass!s t-t5t8t,Jtwt#?ukcuu uuuu vv v %v/vGvVv ovyvvv v vv,v#wV@w8wEwx*-x0Xxxx,xx-y+0y8\yy yyyy#y0z 4zBzKzjzsz zzzzzzzzzz{i'{{ { {{ {{ {"{| |1&| X|c| || | | ||||-}B}J} P}Z}a}} } }}V}~ !~+~,~~G~ 8Yj"  $B*a'@6 2!=?_ Á΁ԁ    +5PXw  т!d'  ̓ۃ( #DX_+"&.0H+y>F'+*S(~1,نIP'@h#Texމ8ՊC(r ~ u/MF; A L X!d'ю؎ݎ.0B,Z U$3"DSg0$"4 :{F^‘5!WU` ȕΕ  $)/CJey ҖԖ Әޘ bq sBۙt!/eך}=`ia% 5Xk9})eh Cv5 !- 3N413#9]aeipt x4 )ȣ < FTdv "Ť0H _إGL!d Ǧ9Ѧ! -136ENTZ`flnM:ۨ!8P&F![} Ԫ!Qӭ #ޱiT^K ͵<ڵ -+N"z,ʶ O7 #H0@+θ|2 ҽw;WP+; 3=C8U<4kl{*P!/ Q=\( 7T$y4-3YSjWp 1Gg"+ p;R" 2=Ld$-'R9.](>M$i4 =7"Sv*~m* 3AOZk0_/81d=") 0 ; FQXahov} *(<"e'#2#J4+) ] f#sz!2Pn >[FKB1n}w !'$L(a!  !#)Mg.C)& ~=b^V/V7% 6<O!%B Waj } ,#3$S x(  j. !Vh w E,4%Ek:) # DUu# c('G,b,/ \i f*! Q&&;K:P\K4%9):MQhJ06/L|-! 0, ]Chp3.5b #!3+_(~ )X5'KsB # 40eu  !1So!6!=4=Vr'WVI $ = H !+  M Z 4] | { P   ""9\x$&F B; ~Z%E6_|J'i2UQPWPLl!Ps,)8"QBtAez_=DSo !=* 1K'}D' :A'|?*AQov6$5[%!&A/,q_    3 C>    > !#!!!d"5X##C$$4$C,%p%%)%#%0%^#&J&T&S"'pv's' [(i(s(e)C)|) D*"Q*#t** * *.*!+ )+4+L+g+=}+ +1+0+),<,!\,~,%,=,2,c*--.... ./. / 9/]D/(/</80A0Z0N>1:1#1^1RK22jP3;3E3V=4P4H4.55Nm77<99:ox<'<t>=>>r?.y??.?l@UAA! B .C9C0SC2CJCDZ DpdDDDD+E?EaYE!E%EcFgF~F:FFOhGG6GH[H2"IGUIIIIJjK>-L8lNSS SST#T4T9T BT,OT|TTT T*TT*T)U1GUyUUUUUUUUUV -}O{#~{5;Io3^AT*+,."t/Lazy4Y$B lC w<V}N=CEj6ilV$J;ws2NS7?Qw^n} x68\_3S! &o @Zk3n VFy(9b[#tT,/bp0Gd9ZY!  I?c+q1bef@WtUdvW~W:'pm`lRf|"Zr8gi> % Y\H pLer8&k;>aT/#B9krJ(H~_u!X(dGsvNgq'Py4OXL+=zs< BM_D|^SKQ&`u"oM1h- [m0Cx{7mJ)aIDPRh'UFgn cM]RP $c2,jqU<i%)HDu?j.xf*:|KO16 E\).0z@v>75K%X5]AQh2`=G [E-:eAF4]* (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).../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: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Card TypesAll DecksAll FieldsAll 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 save file: %sCramCreate DeckCreate Filtered Deck...CreatedCtrl+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+WCumulativeCumulative %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 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 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 intervalLowest 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...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 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.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 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 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 matchesUpload 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: 2019-07-02 11:47+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: 2019-07-04 05:47+0000 X-Generator: Launchpad (build 19007) 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 картку).../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. Перевірте підключення до інтернету та повторіть спробу.Не вдалося зберегти файл: %sЗубрінняСтворити колодуСтворити відфільтровану колоду...СтвореноCtrl+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+WСукупноСумарно %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Помилка при вставновленні надійного зв'язку. Вона, як правило, викликана антивірусними програмами, файєрволом, програмами 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Лицьова сторона цієї картки порожня. Виконайте, будь ласка, команду "Інструменти>Порожні картки".Вказана вами інформація очистить питання на всіх картках.Число доданих вами нових карток.Кількість питань, на які ви відповіли.Кількість повторень, очікуваних у майбутньому.Кількість разів, що ви натисли кожну кнопку.Вибраний файл не є справжнім файлом .apkg.По вказаним критеріям пошуку не знайшлося карток. Ви хочете ії змінити?Бажані зміни вимагатимуть повної відправки бази даних під час наступної синхронізації вашої колекції. Якщо у Вас була статистика повторених карток або інші зміни на інших приладах, які ще не було синхронізовано, їх буде втрачено. Продовжити?Час, витрачений, щоб відповісти на питання.У колоді ще є нові картки, але денний ліміт вже вичерпано. Ви можете збільиши ліміт у налаштуваннях, але, будь ласка, не забувайте: чим більше нових карток ви запровадите у навчальний цикл, тим більше карток вам доведеться повторювати за короткий період.Має бути як мінімум один профіль.По цій колонці не можна проводити сортування, але ви можете обирати окремі колоди, клацаючи на їхні назви на панелі зліва.Файл, здається, не є справжнім файлом .apkg. Якщо ви отримуєте помилку з файлу, завантаженого з AnkiWeb, існує вірогідність, що скачування файлу не пройшло успішно. Будь ласка, повторіть спробу, і якщо проблема не зникне, спробуйте скачати файл в іншому браузері.Цей файл вже існує. Ви впевнені що бажаєте перезаписати його?У цій теці в одному місці зберігаються усі ваші дані для роботи з Anki, щоб полегшити створення ререзвних копій. Щоб вказати інше місце зберігання, ознайомтеся: %s Це - спеціальна колода для навчання поза встановленим графіком.Це - {{c1::зразок}} тесту з пробілами.Це видалить вашу існуючу колекцію колод та замінить дані у файлі, що ви імпортуєте. Ви впевнені?ЧасВстановити ліміт таймераПовторитДля створення картки з тестом з пробілами по існуючій нотатці, спочатку потрібно змінити її тип на тип тесту з пробілами командою "Редагування>Змінити тип нотатки..."Щоб побачити їх зараз, клацніть внизу на кнопку "Розкопати".Для навчання за межами звичайного графіка, натисніть на кнопку "Додаткове навчання" внизу.СьогодніЛіміт повторень на сьогодні вичерпано, але ще є картки, які можна повторити. Для оптимального запам'ятовування можна збільшити денний ліміт у налаштуваннях.РазомЗагальний часЗагальна кількість картокЗагальна кількість нотатокРозглядати введення як регулярний виразТипВведення відповіді з клавіатури: невідоме поле %sНеможливо імпортувати файл, призначений лише для зчитування.РозкопатиСкасуватиВідмінити - %sНевідомий формат файлу.Не проглянутіОновити існуючі нотатки, коли співпадають перше полеВідправити на AnkiWebВідправляю на AnkiWeb...Використовується в картках, але відсутнє в медіа теці:Користувач 1Версія %sЧекаю на звершення редагування.Увага! Тести з пробілами не спрацюють, поки ви не зміните тип вгорі на Тест з пробілами.Додавати у поточну колоду за замовчуваннямВся колеціяВи бажаєте завантажити зараз?У вас тип нотатки з тестом з пробілами, але ви не створили жодних тестових карток з пробілами. Продовжити?У вас багато колод. Прогляньте, будь ласка, %(a)s. %(b)sВи ще не записали ваш голос.Треба, щоб була принаймні одна колонка.НезріліНезрілі+ВчитиВаші зміни вплинуть на кілька колод. Якщо ви хочете змінити лише поточну колоду, спочатку треба додати нову групу налаштувань.Ваша колекція перебуває у невпорядкованому стані. Будь ласка, виконайте команду "Інструменти>Перевірити базу даних", а потім повторіть синхронізацію.Ваша колекція або медіа-файли завеликі для синхронізації.Ваша колода була успішно відправлена на сервер AnkiWeb. Якщо ви користуєтеся програмою на інших пристроях, синхронізуйте їх зараз і завантажте із сервера колоду, яку ви щойно відправили з цього комп'ютера. Після цього, статистика перглянутих карток та додані картки в усіх копіях колоди будуть об'єднані автоматично.Ваші колоди тут та на сервері AnkiWeb відрізняются настільки, що не можуть бути об'єднані автоматично, тому необхідно замінити копію колоди на даному пристрою тією, що на сервері, або навпаки. Якщо ви оберете варіант завантаження із сервера, Anki завнтажить колекцію колод із сервера AnkiWeb, при цьому будь-які зміни, зроблені в колодах на цьому пристрої після останньої синхронізації, буде втрачено. Якщо ви оберете відправку на сервер, Anki відправить вашу колекцію колод на сервер AnkiWeb, при цьому будь-які зміни, зроблені в колодах на сервері AnkiWeb або інших пристроях після останньої синхронізації, буде втрачено. Після синхронізації усіх пристроїв, статистика наступних переглядів карток та додані картки будуть об'єднані автоматично.[нема колоди]резервні копіїкарткикартки з колодикартки, обрані заколекціяднднівколодатривалість життя колодидублікатдопомогасховатигодингодин(и) після опівночіневдачіменше 0.1 карток/хвилинувідображувати на %sспівставлено з міткамихвилин(а)хвилин(и)місповтореннясекунд(и)статистикацю сторінкутвся колекція~anki-2.1.15+dfsg/locale/ur/000077500000000000000000000000001353113723000153245ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ur/LC_MESSAGES/000077500000000000000000000000001353113723000171115ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/ur/LC_MESSAGES/anki.mo000066400000000000000000000007761353113723000204020ustar00rootroot00000000000000$,89Project-Id-Version: anki Report-Msgid-Bugs-To: FULL NAME POT-Creation-Date: 2019-07-02 11:47+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: 2019-07-04 05:48+0000 X-Generator: Launchpad (build 19007) anki-2.1.15+dfsg/locale/vi/000077500000000000000000000000001353113723000153145ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/vi/LC_MESSAGES/000077500000000000000000000000001353113723000171015ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/vi/LC_MESSAGES/anki.mo000066400000000000000000001762531353113723000203760ustar00rootroot00000000000000-0= 1=<=C="I=l= n=x==8====" >$.>$S>&x>">>4>2 ?=?N?"k?$?$?$? ?@3@K@S@b@s@@@@ @@@@@@@@ @ AA A#A)A/A3A :ADA JAUA gArAAAAAAA0A BB B %B0B6BIB`BdBfBiBqBxB}BBBBTBB,B(C;C!ZC|CfCC DD 0D =DHDXDjDDeDD7E EE5EX1FYF%Fk G vG GGG G GG G GGGH H H$H@H FHRH bH lHKwHHH"JJ JJKKRjLvL74M lMwxMEM@6NwN~NNRNNkO#O#OOO(P/P 7PDP XPeP~PP P PPPPPPPQ Q&Q +Q 5Q)?Q'iQQMRTRYRaRhRoR wR R RR RRRR3RSS%SySSS S SSSS"S TT&$T KTWT ^TjT {T TTTTT-TTT(T5$U ZUhUUU8U53VPiVVV VVV W WWW"W)W0W 7W DW QW ^W kWxW W WWW WW WWWX"X 'X 4X @XNX/SXXXX%XX X X X X Y YY,4Y(aYYYFYNZPSZ>ZPZ4[]=[ [8[[[[\\ ,\9\?\D\ I\ T\b\ g\ t\~\ \\\)\0\]]4]!Q]s]]]]7^K^\^ c^m^s^u^x^ ^ ^^^ ^^ ^^^^__)_9_N___ f_ q_~_N_"_``!`8`>`E```aa #a1a@aHa[a kava{a aaaa aaaaa.aF bSblb b b4bbb b1c2cBcbcqc*cc Ne\e {ee"e"e ef$f3fGfPf bf lf)zff(gDg[gzggggg g gggg<g+h 4hAhQhVh _hjh {hhh h hhhhhhhii8i =i IiTihi ni{iiii ii ii i iiij'j:j+Pj|j#j!jjj j j<j 1k>k]Nkakl!"l DlRlZl]l,oll#dmkmm mnnn -n8n >n JnTnln{n nnnn n nn,o#AoVeo8oEo;p*Rp}pp,pp-p+$q8Pqq qqqq#q qrr-r6r GrUrZrarqrxrrrrrrirTs [s gsts ss s"ss s1s t&t Ctdt kt xt tttt-tu u uu$uDu Ku WueuV}uu uu,qvvGv vw -w:w BwNw^wpwwww*w'x;x@Ax6x x!x?x&y,y ,}Fk}'}*}(~1.~,`~I~~'#ۀee8\C%(ir u'/M̈́!… ȅ Ӆ ߅! '0X_dl.Ɇ,  U?$"ˇS0B$s" {͈^I5މU =GOUi { ʍэ#&.6 <FHY[ !*9 ;I^+pʐސ $E/N/~ ϑ5Re x ̒Ԓْݒ " -8>EU h u & “Г 9#]nw "Ӕהٔݔ.%ؕ$#u; Җߖ ''Oc{|J֘ !,[Hs9ٚțΛ!$DY n z 8$v8"#ҝ.$Ch-Nh ãJTE  ]l)6'`+Ԧ2 $0#Lp! ħΧ  &0W_{ EΨI^BHNW_ gr Ū تA,SI ˫ݫ*+ Vb:Ь׬  3#WmRrŭ ֭3E]r"G(<ph# :FW q | ˰ ذ  ):Ro9ڱ 7) al Eܲ    )4;S< ̳/$(B,k'* riYr ̵ڵ# &7N Vaf ƶѶ +G:& J&'A-Z,Ke l v(ȹ ܹ &$DU[ bm ɺ κۺ!8/M} λڻ ռ )G_z ͽٽ Vt4#FjU} ӿQ ^,tN>%V!|+1/ 5<rL Y+ 5&Mtz !: Xd !"5K\o, %"7 Zdz  8#Rv965MUfu+y#-,Z x Q/   &<"Tw' + %+5?a4IV]!- +N&z;)>AFL '!-:hz$    $ /";%^ 1 FRi- T///  + 8E_8o  "  5D$c1l +'.A2p5D1PLVJ4Q9  '8L(],, +,X7vAW [hz E,Lpk3+!<#^J'O_E"!4<=wz&#0=%n65PlZy<  EiYbSZm@29H Y d-r O^, Jw68( [nT/GPVl   9V\beu { Fi[*lS_I) JFEG_K8+ZhJU3mT>.DEH#A?e<c-m)$ f;^:Pd]bO+N> Wa9MBv ~w7#h'grbbl7Z<2 4Ro$ =/; 6T:5OfhnM!:YH0L .K{iwB^$,z|?Q 3^pPE%= A{QUm|I/? kxeV'1SIZ5 xLYQ 0~4scN}`FVoR`gDc\!xj@KrX%9DuTn+@iwy }pul a.v/a(d)q*\t,48-sPg&-[Y&Xz]MB(pkN"RoqOG=G> k|yvV2s5Ut%(1nS~2Jr*z@X"C3&07LCC1!'{[}]#e6,;WAHW`jfy9<"\djqu_6 t8  (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).../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, 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 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+WCumulativeCumulative %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 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 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 intervalLowest 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...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 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.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 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 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 matchesUpload 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: 2019-07-02 11:47+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: 2019-07-04 05:48+0000 X-Generator: Launchpad (build 19007) 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ẻ).../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 tinMọ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 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+WTí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 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:Có 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ấtĐộ 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...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 PyAudioVui 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.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ộ.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.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ênTả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.15+dfsg/locale/wo/000077500000000000000000000000001353113723000153235ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/wo/LC_MESSAGES/000077500000000000000000000000001353113723000171105ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/wo/LC_MESSAGES/anki.mo000066400000000000000000000051661353113723000203770ustar00rootroot000000000000001C,8"9\ ^h{"' -8G ^k    #05FKPU ]insy>^`g{     $ 4 A T Z x           # ( 6 ; @ E L X ` f l s 0,% !1"$* /& )' + #-. ( 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: %sCardCard %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: 2019-07-02 11:47+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: 2019-07-04 05:48+0000 X-Generator: Launchpad (build 19007) 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 : %sKartKart %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.15+dfsg/locale/zh_CN/000077500000000000000000000000001353113723000156775ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/zh_CN/LC_MESSAGES/000077500000000000000000000000001353113723000174645ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/zh_CN/LC_MESSAGES/anki.mo000066400000000000000000002253001353113723000207450ustar00rootroot00000000000000\;PO QO \OhOoO"uO OO OOOO8O,PR cRRRRRRRRSS -S;SLSPSTSXS]SaS eSoSSSSS SSSSS SS SSS TTT.T>TMT\TmT}TT0T TTT T TTT U#Ur'UjUVV VVVV#V(V,V0VT4VV,V(VV!W"Wf:WW WW W WWWX%Xen Fn Pn [n en pn{n nnnn3nnS o^ogono uo oooooo"opp0p/pqq&(qOq aqmq tqq q qq qqq qqqrr-4rbrhrnr ur(r5r rrts}ssss8s5s'tP/zPnzz]z &{82{k{r{{{{{ {{{{ { {| | | |(| /|<|B|)Q|0{||||4|!}2}E}#[}}}~+.~Z~k~~ ~.~~~~~ ~ ~  " :D+Lx   N5" ʀπˁ с߁  (38 L Wc h8v,܂ . HFR ҃ ރ4 3 :1Fx*˄! Ć ""3 Vw‡Շ ?' gu5$È)205;JZ a ky<  5 V gsz  ˋ ׋ (<BS[u N !06> B&Ls  ōݍ!%+Gs#!Ɏߎ < >K][a5M!a8 =ʐ,5=@,R#Gkkגܒ  ! 0 ;G M Yc{5  9 DO,n#&V8=Evܕ*60U$,ޖ -$+R8~ ̗ԗ#0% Vdt} ĘɘИ.7LT#třԙiY` t/ ʚך  ".Q Y1d Л   "/?^-u(Ԝڜߜ  "B I UcV{ҝ ,oG̞ 5F"_  ß)՟44Qo*'נ @6V !?MHN ^ lw} ,   .8S[z ǣ ԣ  "!5dW Ǥˤڤ  (9 StX+"&7z^٦0V$+{0>اF'^*(1ڨ, I9's#_e q8hC1(uFrgXů دu/M>3 BN] c n z!g˲'3L[>E]bj.Ҵ ,"O Va r}U$6"GZjSŶ0$J"o b{^54W=U} is{  ȾҾ׾ܾ "=VqԿٿ   $C%X~  1$=b    !+2; DNW^msy      $/@ T _ mx ( 34>s| lQZ MLP+h%QB Vdy H$2B,)2;EN[',fT " 4GZ j w     4BUf| 0];T$q8F"X6R>eXWU' ;jE41 +:2 moz ?^9~!  ! (5 < I Vcj!q! - $1ATd jt     +>Ng'n?  0C^t 8"* >$Kp  $ 4 AKgo'3]&549RR4 $' LY`gn u    ! . ; H U bov} !5E$Lq x 9  !6 =J Z g t %3("?'b##&#) GZR; "8? O \ g t   ,1Nc|7 4H( 0 7A \fhk    '  # . 8 CM\ mz  $ 3:MQ eov$+2P W dqx 6 -Bpw ~2 ]Nd} ' 3. KX0hX  8E!d!$  .5EL5h*#$z3! &- 3@ R_rC " / 9CBS    -< KY `m  9 F Q_px ,  (< LVm%!'  $ . ;$HmTM 3Tr57,,Y]d0z%fd ( / 9 D N[ b o|- - J T_"{"!K=/[m"0$Jo( .!1P  2F M Xcj q~  !('Pfl 5H-h +  : G 9Z           $ 4 P !f  5          ) H  O Z k M   | 6f   ;   & 4 $M  r      - 9 /Kj--   E"+h $*OAH Xels{1 , <$In!u   *;KW    +2$InHc'(W0w/6!.Po+B (|NG<#{*6.1 `>c  #-3B      [,6 u       ' ! !"!3!-M!{! !! !!!A"$`" ""G"g"3[#####O#k1$$[%-%&T&A'`)e)t){)))))))))))) )) ) ***'* 0*=*X*k********* **/(e1.2\.aca'Gmj0N~"8:XChl<c`io?*4 +"yek0HG&ZM\Sb_)OM Oy-*U~kNq<Va|O7@WpJ&y{_9LE/xLogK: M1I f+6RA]wG?'#ZP*xR3,6B_c!`p6&3$bvcZ[ `  T s F8J7 v>#:<Nu9}Q5D|?E'ACxJV=ukj}/0?d%q ;=F>@RKL{YSvQB]$z)tW /b|"3CIl5a^Q[{D4Y4z+ldH[ w)g r2$g~Tve ;s:u3_4mf]Lmu="!nqV^Vt<> !@Fs%]=x(8;YD^IK)T$#t( rWAB|DME8HJP`owqU9SPEh-QXf;-&{rnkidX5#> e7!567@ 'UjC}(,im^lBI~2A,2+wKppHt[}obzgijZY. \Tfyn,U-%.s 091RO*%d\zNWPnFGr  X1 Shh (1 of %d) (disabled) (off) (on) It has %d card. It has %d cards."Segoe UI"%% 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)....anki files are from a very old version of Anki. You can import them with Anki 2.0, available on the Anki website..anki2 files are not directly importable - please import the .apkg or .zip file you have received instead./0d1 101 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 Notes...Add ReverseAdd TagsAdd Tags...Add to:Add-on has no configuration.Add-on was not downloaded from AnkiWeb.Add-onsAdd-ons possibly involved: {} Add: %sAddedAdded TodayAdded duplicate with first field: %sAgainAgain TodayAgain count: %sAll Buried CardsAll Card TypesAll DecksAll FieldsAll cards in random order (don't reschedule)All cards, notes, and media for this profile will be deleted. Are you sure?All review cards in random orderAllow 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 read your profile data. Window sizes and your sync login details have been forgotten.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.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)Browse Add-onsBrowser 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.Changes will take effect when you restart Anki.Check &Media...Check for UpdatesCheck the files in the media directoryChecking media...Checking...ChooseChoose DeckChoose Note TypeChoose TagsClear 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.ContinueCopied to clipboardCopyCopy Debug InfoCopy to ClipboardCorrect answers on mature cards: %(a)d/%(b)d (%(c).1f%%)Correct: %(pct)0.2f%%
(%(good)d of %(tot)d)Corrupt add-on file.Couldn't connect to AnkiWeb. Please check your network connection and try again.Couldn't record audio. Have you installed 'lame'?Couldn't save file: %sCramCreate DeckCreate Filtered Deck...Create scalable images with dvisvgmCreatedCtrl+1Ctrl+2Ctrl+3Ctrl+4Ctrl+Alt+ACtrl+Alt+FCtrl+Alt+RCtrl+Alt+SCtrl+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 SessionCustom steps (in minutes)Customize Card Templates (Ctrl+L)Customize FieldsCutDatabase 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 Unused FilesDelete 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 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 installing %(base)s: %(error)sError running %sExperimental V2 schedulerExportExport...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 EditorHardHard intervalHardware acceleration (faster, may cause display issues)Have you installed latex and dvipng/dvisvgm?HeaderHelpHighest easeHistoryHomeHourly BreakdownHoursHours with less than 30 reviews are not shown.IdenticalIf 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 HTML and media referencesInclude 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-onInstall Add-on(s)Install from file...Installed %(name)sInterface language:IntervalInterval modifierIntervalsInvalid add-on manifest.Invalid code, or add-on not available for your version of Anki.Invalid code.Invalid configuration: Invalid configuration: top level object must be a mapInvalid 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 intervalLowest easeManageManage Note TypesManage Note Types...Manage...Manually Buried CardsMap to %sMap to TagsMark NoteMathJax blockMathJax chemistryMathJax 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 have been studied today.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 added from file: %dNotes found in file: %dNotes in Plain TextNotes require at least one field.Notes skipped, as they're already in your collection: %dNotes tagged.Notes that could not be imported as note type has changed: %dNotes updated, as file had newer version: %dNothingOKOldest 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 filter:OptionsOptions for %sOptions group:Options...Orange FlagOrderOrder addedOrder dueOverride back template:Override font:Override front template:Packaged Anki Add-onPackaged 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 check your internet connection.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 remove the folder %s and try again.Please report this to the respective add-on author(s).Please restart Anki to complete language change.Please run Tools>Empty CardsPlease select a deck.Please select a single add-on first.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...Profile CorruptProfilesProxy authentication required.QuestionQueue 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 deckRestored defaultsResume 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 in:Search 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:SkippedSome related or buried cards were delayed until a later session.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.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 (%(secs).1fs/card)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 experimental scheduler could cause incorrect scheduling. Please ensure you have read the documentation first. Proceed?The first field is empty.The first field of the note type must be mapped.The following add-ons are incompatible with %(name)s and have been disabled: %(found)sThe following character can not be used: %sThe following conflicting add-ons were disabled:The 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 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?This will reset any cards in learning, clear filtered decks, and change the scheduler version. Proceed?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 access Anki media folder. The permissions on your system's temporary folder may be incorrect.Unable to import from a read-only file.Unable to move existing file to trash - please try restarting your computer.Unable to update or delete add-on. Please start Anki while holding down the shift key to temporarily disable add-ons, then try again. Debug info: %sUnburyUnderline text (Ctrl+U)UndoUndo %sUnexpected response code: %sUnknown file format.UnseenUpdate existing notes when first field matchesUpdate the following add-ons?UpdatedUpload 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 AnkiWeb collection does not contain any cards. Please sync again and choose 'Upload' instead.Your 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 computer's storage may be full. Please delete some unneeded files, then try again.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: Report-Msgid-Bugs-To: POT-Creation-Date: 2019-07-02 11:47+1000 PO-Revision-Date: 2019-06-16 06:22+0000 Last-Translator: 凉拌炒蛋炒饭 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: 2019-07-04 05:48+0000 X-Generator: Launchpad (build 19007) Language: zh_CN (%d分之1) (禁用) (关) (开) 有 %d张卡片Segoe UI字体%% 正确%(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)(请选择一张卡片)....anki文件来自Anki的一个很久之前的版本。您可以使用Anki网站上的Anki 2.0导入它们。.anki2文件不可直接导入——请导入您接收到的.apkg或.zip文件。/0天1 101个月1年上午10点下午10点上午3点上午4点下午4点收到错误:504 网关超时。 请尝试暂时禁用你的杀毒软件。:%d 卡片打开备份文件夹访问网页%(pct)d%% (%(x)s 源于 %(y)s)%Y-%m-%d @ %H:%M备份
每次关闭和同步之后Anki都会对你的数据进行备份导出格式查找字体大小:字体:选择字段:包含:行大小:替换:同步同步
尚未启用,点击主界面的同步按钮启用。

需先注册

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

Anki有更新

Anki %s 发布了。

错误

有一个错误发生了.请在按住shift键的同时启动Anki,这样可以临时的忽略掉你已经安装的插件。

如果仅仅是因为插件引起的问题,请选择工具>插件菜单项来将出错的的插件设置成失效,然后重启Anki,重复以上的步骤直到你发现了具体是哪个插件引起的问题。

当你已经发现是因为插件引起的问题,请在我们的支持网站上 add-ons section 上报告问题。

调试信息

错误信息

发生了一个错误. 请尝试使用 工具 > 检查数据库功能修复.

如果问题仍然存在, 请复制粘贴下列信息并报告到我们的支持站点.

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

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

%(cont)s你有一个完形填空类型的笔记,但是还没有制作任何填空内容。仍然要继续吗?您有许多牌组尚未学习,请看%(a)s. %(b)s你还没有录制你的声音.必须至少有一列.新的新的+学习中的您的AnkiWeb收藏中没有卡片。请再次同步然后选择“上传”。你的改变将会影响到很多牌组. 如果你只想要改变当前牌组, 请先添加一个选项组.您的收藏文件似乎已损坏。当Anki还在运行时就拷贝文件或者将其存储于网络或云存储时就会发生这种情况。如果在重启电脑后问题依旧存在,请在资料页面打开一个自动备份。你的集合处于不一致的状态. 请运行 工具>检查数据库, 然后再次同步.集合或者媒体文件过大而不能同步你的集合成功上传到了 AnkiWeb. 如果你使用任何其他设备的话, 请现在同步他们, 并选择下载你刚刚从这台电脑上上传的集合. 将来的复习和和加入的卡片将会自动合并.您的电脑存储可能已满。请删除不需要的文件,然后重试一次。您的牌组与Ankiweb上的牌组存在不能合并的差异,所以必须覆盖其中之一。 如果您选择下载,那么Anki会从Ankiweb下载牌组,而您电脑上最后一次同步后的更改将会丢失。 如果您选择上传,那么Anki会上传牌组至Ankiweb,而您Ankiweb或其他设备上最后一次同步后的更改将会丢失。 当所有设备完成同步后,将来复习和新增的卡片将会被自动合并。您的防火墙或杀毒软件阻止了 Anki 创建连接,请将 Anki 添加到白名单中。[没有牌组]备份卡片牌组中的卡片卡片选择按集合天天牌组牌组使用期复制帮助隐藏小时点 (凌晨)%s天后%s小时后%s分钟后%s月后%s秒后%s年后失误次数小于 0.1张卡片/分钟对应到%s对应到标签分钟分钟月复习秒状态此页周全部集合~anki-2.1.15+dfsg/locale/zh_HK/000077500000000000000000000000001353113723000157015ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/zh_HK/LC_MESSAGES/000077500000000000000000000000001353113723000174665ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/zh_HK/LC_MESSAGES/anki.mo000066400000000000000000000071051353113723000207500ustar00rootroot00000000000000Pk  %06<@ FQap   "' /:AHOV ] j w      $ 1 9 ? I N T [ a g o - / @ J T [ i u       & 3 5 > B I V c h o y               % 2 ? L Y c j                &07>/P8+7A?=#*,)G9>;IH M3B4OC @65D '<" 2: (N-.F!%01& $JEKL%%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+PDefaultDueError executing %s.Error running %sExtraForecastFrontHoursIntervalLearnLearningLeftMinutesPercentagePositionRandomReviewReview CountReviewsRightSuspendedTextTotalUnseenYounghoursminutesProject-Id-Version: anki Report-Msgid-Bugs-To: POT-Creation-Date: 2019-07-02 11:47+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: 2019-07-04 05:48+0000 X-Generator: Launchpad (build 19007) 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+P預設值到期執行 %s 發生錯誤。執行 %s 時發生錯誤額外預測前小時間隔學習學習左側分鐘百份比職稱隨機檢閱評論計數評論右暫停文字全部未閱讀年輕小時分鐘anki-2.1.15+dfsg/locale/zh_TW/000077500000000000000000000000001353113723000157315ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/zh_TW/LC_MESSAGES/000077500000000000000000000000001353113723000175165ustar00rootroot00000000000000anki-2.1.15+dfsg/locale/zh_TW/LC_MESSAGES/anki.mo000066400000000000000000001622441353113723000210060ustar00rootroot00000000000000.> >>>">> >??8-?f?v???"?$?$?&@"?@b@2u@@@"@$@$A CAdAyAAAAAAAA BB,B0B4B8B=BAB EBOBXB ^BiBoBuByB BB BB BBBBBBCC0C MCZCiC oC zCCCCCCCCCCCCCCTC8D,:D(gDD!DDfDPE fEsE E EEEEEeEQF7F 3G=G5PGXGYG%9Hk_H H HHH I II +I 9IEINIVI^I dI$pII II I IKIJ-J"L4L 9LGLYL;MRMvN7N NwNEEO@OOOORO=PP#P#P#QBQ([QQ QQ QQQQ Q QR RR,RKRRReRuR{R R R)R'RRSSSSSS S S SS S TT,T32TfTSzTTTT T TTU*U">UaUiU&yU UU UU U UUU VV-VDVJV(PV5yV VVAWJW8OW5WPWX&X +X7X#OXsX {XXXXXXX X X X X X XX Y YY1Y BYOY bYoYYYY Y Y YY/Y ZZ$Z%,ZRZ YZ fZ rZ Z Z ZZ,Z(Z[.[FC[N[P[>*\Pi\\]\ !]8-]f]m]]]] ]]]] ] ]] ] ] ^^ ^"^(^)7^0a^^^4^!^__,_E____ _._,`2`4`7` S` a`m`t` {`` ```````` aa %a 0a=aNUaaaaaaabbbb bbbbb ccc +c7c,v JvWv hvsv v"vv v1v v w &wGw Nw [w gwtwww-wwwww xxx5x pF'*(I1r,Iс' 3#_Ce 89CɆ( r6 uˇ/AMqňf l w !'ԉ%.,[m, ĊU$9^"oZS0A$r" {̌^H5ݍU <FNTh z ɑБ  *,=? %8(Mv ϔ !. KXo͕ ݕ   # ,:@FO U_ekz Ȗٖ "%HYm~ 4 ؗ #:OSU Zdkpuy}J̘И+!5WToę ۙ -BSZgš3YNZpU'ƜeT dov Ɲٝ  &, S] y E"Ѡ֠ bšY(V1٢ h;;  ?cPƤ3(\ cp  å Хݥ # 07Mc jw$'¦  ŧ ҧ ߧ*:*Al< ƨʨѨ !1 S]!q   ͩ ک *!LSZ!v c 54PMӫ "; BMT[bip w Ŭ̬ Ӭ ݬ  -:A` g t'ǭ ' 7 D Q^<y0$! "."Q(t"' fY6` ΰհ  -I P] s ~  -Aױ3B7#zֲ óͳ# # 3= DQ d n x Ҵ#"?by .5<Z a n{Ŷ 0$+ 2<CH[#bBɷ 9! [h o9|Ÿ 0d0  $º''.Vo't]-vϼּ ܼ&9 IJV Ľ FK[bi |ƾ ;ھ -:<S  Ŀο տ ߿ + ANd}!$:A J W4dTc~0tOVf m z !% B LY-u!H1T@%%('1Y$o-; 3!Fh   "@ V'c]   ,9O$_ 9+ ; H$Uz$   ,IH71iE% 0 ? IVi*!# EEO1 '- *4DT[ bo  !2 R_r ] P]a* G<!-"GA6!"3?VorP`C3"V6#]> KIN} !" )3 I-V. Z *eMN)W cd/B  #*.5H`gnry} 8t ."59q $ ZTnK~7U>_mYR-m9/%0mp}GBQt \N+Hn wG/|=I`@74"jq U-BbLOc(;&*^yMD3.E1zo>eIlv:[<xx 4!vYPRdD4'(()F)+iD~` ue[V;'kvrC5XO Q]/roW}h&PK#Ji#^bNyq$2)?{Fak5Xc{YV 6T\!U!Six HsMA6P =dV+E^fEy_*ZAe ,&2Jtlw<k*\Kp,1jjo?zLz08X$CSW 8;Q',="I#w}Cd1WAg@%9>rs2h@flgBJuf`NM0GTL3[H <3Fnp6a] |S h%Z-O.]_7gR|c {~:?:saub (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%(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 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).../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, 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 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+WCumulativeCumulative %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 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 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 intervalLowest 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...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 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.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 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 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 matchesUpload 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: 2019-07-02 11:47+1000 PO-Revision-Date: 2018-02-16 20:42+0000 Last-Translator: mapache 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: 2019-07-04 05:48+0000 X-Generator: Launchpad (build 19007) (%d分之 1) (關閉) (開啟) 有 %d 張卡片%% 正確%(a)0.1f %(b)s/天%(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 張%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)(請選擇一張牌).../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。請檢查您的網路連線,然後再試一次。無法存檔:%s填鴨模式建立牌組建立篩選過的牌組以dvisvgm創建可縮放的圖像建立Ctrl+Alt+FCtrl+DCtrl+ECtrl+FCtrl+NCtrl+PCtrl+QCtrl+Shift+FCtrl+Shift+LCtrl+Shift+MCtrl+Shift+NCtrl+Shift+PCtrl+Shift+SCtrl+W累計累計 %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建立安全連線時發生錯誤。這可能是由防毒軟體﹑防火牆﹑虛擬私人網路(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本卡片的正面是空的,請執行「工具」->「空白卡片」您輸入的內容會清空所有卡片上的問題。己新增的新卡片的數量您已經回答的題數將來會到期的複習卡數量各按鈕已按鍵次數此檔案並非有效的 .apkg 檔無任何卡片符合此搜尋條件,您要試著修改嗎?此變動會使您下一次同步您的收藏時,需要完整上傳您的資料庫。如果同步的話,您其他的裝置上尚未同步的複習卡片或其他變動的部分將會遺失,您是否要繼續?答題佔用的時間牌組裡還有其他新的卡片,只是您已經達到今天的進度了。您可以 在選項中增加每日卡片數量上限,但請注意,如果您設定更多新 卡片,那麼您短期複習量的負荷就會隨之增加。至少要有一個個人檔案無法以此欄排序,不過你可以用卡片類型來篩選,如"card:1"。此欄位無法進行排序,不過您可以點一下左側的牌組,以搜尋特定牌組。此檔案看來不是有效的 apkg 檔,如果您是從 AnkiWeb 下載檔案後收到此錯誤訊息,那有可能是下載失敗。請再試一次,如果又發生錯誤,請換另一個網頁瀏覽器再試一次。檔案已經存在了, 請問您要覆蓋檔案嗎?為了方便您備份, Anki 將您所有的 資料都存在此一資料夾中。 如果要更改 Anki 資料夾的位置 請參考: %s 這是專門用來進行額外學習進度的牌組。這是克漏字的{{c1::範}}例。這樣會刪除您原本的收藏,並以現在要匯入的檔案覆蓋之。您確定嗎?時間計時器設定待複習若要在現有的筆記上做出克漏字,您必須先將其改變成克漏字類型。按一下「編輯」>「改變筆記類型」。若現在要查看那些卡片,請按下方的取消暫時隱藏按鈕。如果要有額外的學習進度,請按下方的「自訂學習」按鈕。今天今天的複習上限已經達到了,但還有卡片尚待複習。 為達最佳記憶效果,可考慮在選項中增加每日複習上限。全部總計時間卡片總數筆記總數以正規表達式處理輸入類型輸入答案:未知的欄位 %s無法匯入唯讀檔案。取消暫時隱藏復原復原 %s未知的檔案格式尚未看過第一個欄位相符時,更新現有筆記上傳到AnkiWeb正在上傳到AnkiWeb...有卡片使用但在媒體資料夾找不到:個人檔案 1版本 %s等待編輯完成警告,除非您將上方的類型改成克漏字,不然無法進行克漏字練習。新增的筆記自動歸類到當前牌組所有的收藏您想要現在下載嗎?作者:Damien Elmes。更新檔﹑翻譯﹑測試及設計由:

%(cont)s您有克漏字筆記類型,但還沒有任何克漏字,確定要繼續?您有許多牌組,請看 %(a)s. %(b)s您尚未錄音您至少需要有一個欄位年輕卡年輕+學習中此變動會影響許多牌組,若您只想更動當前的牌組,請先新增一個選項組。您的收藏狀態不一致,請執行「工具」>「檢查資料庫」,然後再同步一次。您的收藏或媒體檔太過龐大,所以無法進行同步。您的收藏已成功上傳至AnkiWeb。 如果您也使用其他裝置,請現在進行同步,並選擇下載您剛剛從電腦上傳的您的收藏。以後您的複習卡片和新增的卡片都會自動合併。您本地的牌組與 AnkiWeb 牌組之間的差異無法合併,因此需要以某一方的牌組來覆寫另一方的牌組。 如果您選的是下載, Anki 會從 AnkiWeb 下載您的收藏,而您電腦上次同步以後的變動將會遺失。 如果您選的是上傳, Anki 會上傳您的收藏至 AnkiWeb,而您的AnkiWeb 或其他裝置上次同步以後的變動將會遺失。 當所有的裝置都同步以後,新增的卡片和複習的卡片都能自動合併。沒有牌組備份卡片張牌組中的卡片張卡片,選擇方式為收藏日天牌組全部時間重複說明隱藏小時點忘記對應到%s對應到 標籤分鐘分鐘月複習秒統計本頁面周所有的收藏~anki-2.1.15+dfsg/pkgkey.asc000066400000000000000000000105371353113723000154270ustar00rootroot00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- mQINBFueX68BEAClpx+Szt1cSTWJTCTpn9E+tGhYUKVpj1O4KGAj7qYKs651LPOA en1Ng0MoK4Avq4zW3PpXxtp14q+CBpEP3AE3omJkKD42cmBvxqdMNiWnFZUbRal8 L7LrkVFVV/C1Cq7pJR5xAORc2GCKKTE6Ybqdqj2lQKwZEJpM+GQPQqSUQjWpmO2n YQ8OSftr58Nqm5N2j2i2BHvchpOUtoN4L5qlYtkPBFltBDVOKglnQE4N9pZjBX76 D2Q4/6khfIx1kJ3xt8b30cPlDMATdnB6bDUr17vsofhPIY1N07ztyDLl2PyeeqVa IrJEh9XvhwnN5RqM10PZDSEDVGLk4Mkbu5dwsbvXbdMrLbAaWoBDEmloVmM+rw+t g76ldYu2FIxIVHDdgqJWSw5+JTQk+GlAwxAve3yluxvWrxKR1kG66XB8rX0G47Qd DLmnj9PISi5rRJzQXTrIG93aKKBqz6vMS1n9V3BhEKSzJ2zH6Nhog/SIwFqfSvNL +vJLmjPlOdVL4cBSa7EltOGevkeU5DCTV0PNz78TpBMTaduKxFyFfepyxkYrFrjR hKR2HLFD0jecw36UoCETJm5/VbYE312qqWJxuuvsWtaU2I6SRv8rTRJ7prlo5zI1 6pfUk3QCt1zDZC3v3NszhYIhLBIVv72iVo3DEbuqOyjGJnF1IOUv6XRvbwARAQAB tCFBbmtpIFNpZ25hdHVyZXMgPGdwZ0Bhbmtpd2ViLm5ldD6JAk4EEwEKADgWIQSB TqTpDDSvOacS3nA/VWai0WiZ+wUCW55frwIbAQULCQgHAwUVCgkICwUWAgMBAAIe AQIXgAAKCRA/VWai0WiZ+yM6EACLvzNwwgXVE6KA9NA+Xn9z/5CEy894gNUXBdyP x2peUZmvqZYJsWrq1EdwvyNPVnfxerzRPzzO1/+UFs9lyrVJBOIXRe790xUDEAOt d67eIHk0/mwR8HA4EzBM3VhK90DzfdVl8CGjn7QMcgXZk8qp9ogSh4qoPq9slXjs Ay8pdDKBQthR3jFoAX8tX8x3vrQPBFIA1xRX0Pr9w6CTR7lto0HTP1o4weB2AFVM cshUnPWv7UkJsKDgsS0JpK46AS1y0z8TgGqZxPiXyiSw+r+uBOu5243ujfFKHfsR 26h23BO+9niHKIMkThTlYweUj0pqqcS9dZ1RBFFtW5/0+c/WA7Jg59XELg34jbvr DJjW0kXkvH3TP0rxDNlzQivh48PTHovng/m0Ah6XoW6APBK04xTOPPsW8mILolwi PYcd3frQx2gYCKiUDgXhn/0pHy35Qf2UMCpWMljNF3uaoeBDmRjmhaUDnldDWeYo pg48bwe4utKeJK9mIl1tg24jOiZPWB7Yg5UOSa9qG9Z8O/Vvgmi9z4ujp4g37jUZ PGAlsEagVUAenVbNpS07X2KtGuP3CKc1akN9I4YArH604lB6rJYVl7c1mZw6YZf1 lDuFs+sorr+Qh6ivBvhCOZwC+cAfUHXm0Td6mBsnnCJl3Pe0w49x2ODdabjyM/d+ 19lNz4hdBBMRCgAdFiEErE89EK5NqyDOk9jPuclDRDSScSsFAlufSloACgkQuclD RDSScStmmgCfZBxtwxhNHKDdSVbMUlFmPq3Ww5gAn1A0OzZEPJkj+gdq0bWbEePA Na/+iQEzBBMBCgAdFiEE5As5X+DAzGQR/QaHdD/TCLkKzHEFAlufSu4ACgkQdD/T CLkKzHH2HwgAj9jcRBL3Rsu4r7ZifbAPOlB/zQLos5Hmt70DzheWpU6hMcxkgnAs CB3gutZAQ36yKgBzOFWDfo5X3ivhAm23VXkFKswgHmA1DLypmFPh2rm/Sh3G9khr oogQmwErZRLNJ7QY9Q3sIxaSvZArWSRaysSaVG9CiSq+N4yXnhETS8uieWV9k+qk Rs1eaJCjOYPgaxQXXL18RgkzuDKuSqmWW0AvmVNaAsX27diAxqcVysGyoJIqA4Dw VaMJU+hSZZSryKTLWHZpGMMLLjt5oLyW3y1HvopVAuGRrAXLzqgvLv/WSXHWfSrL l+VeP2jDU3mF43BtjGRMrVgAf0DGH1zg57kCDQRbnmAYARAAsvvWoYPy13YFqOsR sgaJ1sW6hyGGOjhlHcfcc++CgYwowQ8jn0ZkYdcDs+zbJI8+BUCdVgO8kpJFVlmC vpBeO0bKoqc63W6NIG7qrhgDoODO3J3CV4LJm5ipj9tcuXCW2o7GzrgJMaps8NQK aUywSwZcV15aERrw9viHEPUHHAQkKBANv/cJ+YWD1SOZyI978yER0/qdby8cnLp+ vwzRo+OB3ubZL3iFKKd716eSOJQOO1XbxsfF9RagFmGn8lq4tii9nU9c7BS3ajC3 FJNNsNphe7DezAeV7IZZrmcSTl+h3n045yRJjisxqG74dSqJ8aIkuQvCTRn8MhIL ulgX3W0Bl4xLkRDhskIOdO8d2h8nOzoNJ2yDrJp1JHEG6G3J3ZsQ1H1uhVCwvFAM SMBo0kfnBfgsu7qyb3Lu5wOJ4Kh8+DZlgUnV8k/Gy21nvqjHCB4to/XSt5ZxWyBs myZTxbA3w4zmkKhIdXBXEHT1+giM2n/xA7vnAUHYdGcRUza3fKXZFoBe3sOp2f6y iF0kkO75Vkbshew8LymowU7eioiNLjIhVeOw0ICJVdHTreAFvkPo5e1N3z7Bov1E fqLZA1p7sUJ68sNrIo3UNeADsy5YfTsSB/2zxHi1WEbhcGA2fICJfhNCOjrFKTqR Sb+9EdKZj3Yl5fVRaMwYtqC2IKMAEQEAAYkEbAQYAQoAIBYhBIFOpOkMNK85pxLe cD9VZqLRaJn7BQJbnmAYAhsCAkAJED9VZqLRaJn7wXQgBBkBCgAdFiEEHKk0tAuE 9EgxbOL8wKNRl5s347kFAlueYBgACgkQwKNRl5s347lE/A/+Mxd1Cf8aRkE8Pq8m qAnMPNsuA0TpBxP7NMqi9VLpcQNU8fP5b2/7GPcz/bBsryGqQ0PxF/unHJh7Ei7V GM6lYKkboWQNRC8jgRgwGxmoRMQZHocKojPlAPqJ9RiiGM6Hj6QP1oyYGp596osP HW2FF8fNnoFFaghRVJmpNBnkUlRZhJDoJQmzQlSnbZlnphGMe4J6Eioj1dwoDPow aBOXdWbo7j6VXvVjz3WpQ1InHuYEW3/rkuuTaxsiyq0/Kn1MT6G1uDrg9BczUDSF txRoVzE3oR6gp+XfVSyfGQOeSXIi9pAENM0nsxLDf2mTqDFZGpP2Ja9T8RPJB2mh wdfIfHWQu8+Yywmmbb/BA4ebF0zlGx7NWTc12NYqe+bMlHvZSacm6PVkg6ob6DtD PAZbYg8oqzi7Mz4m3Z5lTRrTP5bul2Mx18XZH0gnKPHkFuSgSTh+0zVQi/OL8gED 63dbH+AHavua4ORhPXaOvcyGCzqoOMY3NXkYegB0lfj5uv71DzJWniabDfwMAC7T O2rnhPk+iss2dCIpTFI6EqFL0BgFXpAV07nTCVyAYkrXnwlBusqc1TdZt8cVGoww lD284T9WhDsuFST7iDpZWW4LyqsPlW/TMkHFtHfYnR+Ta1SgFCE3CVNhiym9x+BD T51zPo1vfCMlz7yXCXTRaZ5eRJb3Bw/8DF5LwrFDMMuzHaEJCQGue9N4+ls+zc6J EzKZNToerXWrn4S+dvu/1ZMscb8g9Cq5CqJ5ZxOgu0nitbskbrY9UvfVBUIRBfdV m8c3ZO7LES5glVxF3zc1wouCwbTBFMb+sufukeGyIs62crDS6jwhIoKUPZcLOv9o HVHo2pjymwy8lKqI3TH+uyCl8xxVmUTfSonmJXmZU00AOc3fVI6E7pmniqXywgHF xSHTg3OiAzpd19jR611rX1shHvh1NFjTj4eeOduOCSbyempFJIIYf2uBxF5Q0uJ6 YK1/bKWIxdJG/qsxTW1duE1Jf+uHs2LTMwNp7HgSQhVHywPK4uJnL6aZFOjLYXBP 8V9qJpBTQJfepCCuWZaeL6FV98cldKh3Eb6nEQbZVTN54RGDPYUH+diveZZVtbgD kfRcIp1XBi092REpDGyrA5FA2UQA2dj4aNu+ml1QLdb0GxECAdRoXpIpYHDxOv4s QXQZMF1O0bJmvUHaorqRD50K8L2B43yLspINbcv4+fuSHkq0mRaGQw6AVZiG9yO+ LYosc0PWkifPjGAsAZieN/Cm0oYnzkn2LOD3ugR0OivAvocPVPEO2xOlMV5hTUOv ebKxn40Zl7dNp/ZWjP3EMEXYB6K+Ol9uLXc5msvT8bw98xlCYMnuj0r3EBxcLN+T 8ZZrlhWMCzg= =clm/ -----END PGP PUBLIC KEY BLOCK----- anki-2.1.15+dfsg/requirements.txt000066400000000000000000000002461353113723000167250ustar00rootroot00000000000000beautifulsoup4 send2trash pyaudio requests decorator markdown jsonschema psutil; sys_platform == "win32" distro; sys_platform != "win32" and sys_platform != "darwin" anki-2.1.15+dfsg/runanki000077500000000000000000000000551353113723000150340ustar00rootroot00000000000000#!/usr/bin/env python3 import aqt aqt.run() anki-2.1.15+dfsg/tests/000077500000000000000000000000001353113723000146015ustar00rootroot00000000000000anki-2.1.15+dfsg/tests/__init__.py000066400000000000000000000000001353113723000167000ustar00rootroot00000000000000anki-2.1.15+dfsg/tests/shared.py000066400000000000000000000023611353113723000164230ustar00rootroot00000000000000import 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.15+dfsg/tests/support/000077500000000000000000000000001353113723000163155ustar00rootroot00000000000000anki-2.1.15+dfsg/tests/support/anki12-broken.anki000066400000000000000000001760001353113723000215300ustar00rootroot00000000000000SQLite 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.15+dfsg/tests/support/anki12-due.anki000066400000000000000000001660001353113723000210240ustar00rootroot00000000000000SQLite 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.15+dfsg/tests/support/anki12.anki000066400000000000000000001760001353113723000202520ustar00rootroot00000000000000SQLite 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.15+dfsg/tests/support/anki2-alpha.anki2000066400000000000000000002000001353113723000213220ustar00rootroot00000000000000SQLite 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.15+dfsg/tests/support/diffmodels1.anki000066400000000000000000001150001353113723000213530ustar00rootroot00000000000000SQLite 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.15+dfsg/tests/support/diffmodels2-1.apkg000066400000000000000000000057761353113723000215340ustar00rootroot00000000000000PK*[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.15+dfsg/tests/support/diffmodels2.anki000066400000000000000000001120001353113723000213510ustar00rootroot00000000000000SQLite 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.15+dfsg/tests/support/diffmodeltemplates-1.apkg000066400000000000000000000120241353113723000231660ustar00rootroot00000000000000PKhDHcollection.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.15+dfsg/tests/support/diffmodeltemplates-2.apkg000066400000000000000000000120331353113723000231670ustar00rootroot00000000000000PKjDe@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.15+dfsg/tests/support/fake.png000066400000000000000000000000041353113723000177230ustar00rootroot00000000000000abc anki-2.1.15+dfsg/tests/support/invalid-ords.anki000066400000000000000000004200001353113723000215500ustar00rootroot00000000000000SQLite 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.15+dfsg/tests/support/media.apkg000066400000000000000000000047151353113723000202470ustar00rootroot00000000000000PKt{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.15+dfsg/tests/support/mnemo.db000066400000000000000000003400001353113723000177340ustar00rootroot00000000000000SQLite 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.15+dfsg/tests/support/supermemo1.xml000066400000000000000000000031121353113723000211310ustar00rootroot00000000000000 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.15+dfsg/tests/support/suspended12.anki000066400000000000000000001740001353113723000213200ustar00rootroot00000000000000SQLite 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.15+dfsg/tests/support/text-2fields.txt000066400000000000000000000002511353113723000213660ustar00rootroot00000000000000# 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.15+dfsg/tests/support/text-tags.txt000066400000000000000000000000371353113723000207760ustar00rootroot00000000000000foo bar baz,qux foo2 bar2 baz2 anki-2.1.15+dfsg/tests/support/text-update.txt000066400000000000000000000000041353113723000213140ustar00rootroot000000000000001 x anki-2.1.15+dfsg/tests/support/update1.apkg000066400000000000000000000061011353113723000205220ustar00rootroot00000000000000PKeC^;@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.15+dfsg/tests/test_addons.py000066400000000000000000000034321353113723000174640ustar00rootroot00000000000000import os.path from nose.tools import assert_equals from mock import MagicMock from tempfile import TemporaryDirectory from zipfile import ZipFile from aqt.addons import AddonManager def test_readMinimalManifest(): assertReadManifest( '{"package": "yes", "name": "no"}', {"package": "yes", "name": "no"} ) def test_readExtraKeys(): assertReadManifest( '{"package": "a", "name": "b", "mod": 3, "conflicts": ["d", "e"]}', {"package": "a", "name": "b", "mod": 3, "conflicts": ["d", "e"]} ) def test_invalidManifest(): assertReadManifest( '{"one": 1}', {} ) def test_mustHaveName(): assertReadManifest( '{"package": "something"}', {} ) def test_mustHavePackage(): assertReadManifest( '{"name": "something"}', {} ) def test_invalidJson(): assertReadManifest( 'this is not a JSON dictionary', {} ) def test_missingManifest(): assertReadManifest( '{"package": "what", "name": "ever"}', {}, nameInZip="not-manifest.bin" ) def test_ignoreExtraKeys(): assertReadManifest( '{"package": "a", "name": "b", "game": "c"}', {"package": "a", "name": "b"} ) def test_conflictsMustBeStrings(): assertReadManifest( '{"package": "a", "name": "b", "conflicts": ["c", 4, {"d": "e"}]}', {} ) def assertReadManifest(contents, expectedManifest, nameInZip="manifest.json"): with TemporaryDirectory() as td: zfn = os.path.join(td, "addon.zip") with ZipFile(zfn, "w") as zfile: zfile.writestr(nameInZip, contents) adm = AddonManager(MagicMock()) with ZipFile(zfn, "r") as zfile: assert_equals(adm.readManifestFile(zfile), expectedManifest) anki-2.1.15+dfsg/tests/test_cards.py000066400000000000000000000055721353113723000173170ustar00rootroot00000000000000# 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.15+dfsg/tests/test_collection.py000066400000000000000000000073211353113723000203500ustar00rootroot00000000000000# 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.15+dfsg/tests/test_decks.py000066400000000000000000000117021353113723000173040ustar00rootroot00000000000000# 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.15+dfsg/tests/test_exporting.py000066400000000000000000000077201353113723000202370ustar00rootroot00000000000000# 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) assert open(f).readline() == "foo\tbar
\ttag tag2\n" e.includeTags = False e.includeHTML = False e.exportInto(f) assert open(f).readline() == "foo\tbar\n" def test_exporters(): assert "*.apkg" in str(exporters()) anki-2.1.15+dfsg/tests/test_find.py000066400000000000000000000254021353113723000171350ustar00rootroot00000000000000# 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.15+dfsg/tests/test_flags.py000066400000000000000000000021121353113723000173020ustar00rootroot00000000000000from 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.15+dfsg/tests/test_importing.py000066400000000000000000000156531353113723000202340ustar00rootroot00000000000000# 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 == 0 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.15+dfsg/tests/test_latex.py000066400000000000000000000063431353113723000173350ustar00rootroot00000000000000# 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.15+dfsg/tests/test_media.py000066400000000000000000000076711353113723000173040ustar00rootroot00000000000000# 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.15+dfsg/tests/test_models.py000066400000000000000000000255071353113723000175060ustar00rootroot00000000000000# 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.15+dfsg/tests/test_schedv1.py000066400000000000000000000737301353113723000175610ustar00rootroot00000000000000# 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.15+dfsg/tests/test_schedv2.py000066400000000000000000000760031353113723000175560ustar00rootroot00000000000000# 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 dueIn = c.due - time.time() assert 179 <= dueIn <= 180*1.25 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 dueIn = c.due - time.time() assert 599 <= dueIn <= 600*1.25 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) * 1.2 = 120 assert checkRevIvl(d, c, 120) 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" # if hard factor is <= 1, then hard may not increase conf = d.decks.confForDid(1) conf['rev']['hardFactor'] = 1 assert ni(c, 2) == "1 day" 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.15)*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) == 60*86400 assert d.sched.nextIvl(c, 3) == 100*86400 assert d.sched.nextIvl(c, 4) == 114*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._cardConf(c)['new']['delays'] = [1, 10, 61] d.decks.save() d.sched.answerCard(c, 1) assert c.type == c.queue == 1 assert c.left == 3003 d.sched.answerCard(c, 3) 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 assert c.left == 2002 # should be able to advance learning steps d.sched.answerCard(c, 3) # should be due at least an hour in the future assert c.due - intTime() > 60*60 # emptying the deck preserves learning state d.sched.emptyDyn(did) c.load() assert c.type == c.queue == 1 assert c.left == 1001 assert c.due - intTime() > 60*60 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 d.sched.answerCard(c, 1) assert c.ivl == 25 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 # make sure relearning cards transition correctly to v1 col.changeSchedulerVer(2) # card with 100 day interval, answering again col.sched.reschedCards([c.id], 100, 100) c.load(); c.due = 0; c.flush() col.sched._cardConf(c)['lapse']['mult'] = 0.5 col.sched.reset() c = col.sched.getCard() col.sched.answerCard(c, 1) # due should be correctly set when removed from learning early col.changeSchedulerVer(1) c.load() assert c.due == 50 anki-2.1.15+dfsg/tests/test_stats.py000066400000000000000000000012431353113723000173500ustar00rootroot00000000000000# 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.15+dfsg/tests/test_undo.py000066400000000000000000000043021353113723000171560ustar00rootroot00000000000000# 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.15+dfsg/tests/test_utils.py000066400000000000000000000002571353113723000173560ustar00rootroot00000000000000# 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.15+dfsg/tools/000077500000000000000000000000001353113723000145775ustar00rootroot00000000000000anki-2.1.15+dfsg/tools/anki-wait.bat000066400000000000000000000000621353113723000171510ustar00rootroot00000000000000cd .. set PYTHONPATH=../lib python anki pause anki-2.1.15+dfsg/tools/build_ui.sh000077500000000000000000000020561353113723000167350ustar00rootroot00000000000000#!/bin/bash # # generate python files based on the designer ui files. pyuic5 and pyrcc5 # should be on the path. # set -e 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.tmp (cat < $py # -*- coding: utf-8 -*- # pylint: disable=unsubscriptable-object,unused-import from anki.lang import _ EOF rm $py.tmp 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.15+dfsg/tools/lint.sh000077500000000000000000000002441353113723000161040ustar00rootroot00000000000000#!/bin/bash TOOLS="$(cd "`dirname "$0"`"; pwd)" pylint -j 0 --rcfile=$TOOLS/../.pylintrc -f colorized --extension-pkg-whitelist=PyQt5 $TOOLS/../anki $TOOLS/../aqt anki-2.1.15+dfsg/tools/runanki.system.in000077500000000000000000000001401353113723000201170ustar00rootroot00000000000000#!/usr/bin/env python3 import sys sys.path.append("@PREFIX@/share/anki") import aqt aqt.run() anki-2.1.15+dfsg/tools/tests.sh000077500000000000000000000011021353113723000162720ustar00rootroot00000000000000#!/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} # favour nosetests3 if available nose=nosetests if which nosetests3 >/dev/null 2>&1; then nose=nosetests3 fi dir=. if [ x$1 = x ]; then lim="tests" else lim="tests.test_$1" fi if [ x$coverage != x ]; then args="--with-coverage" fi (cd $dir && $nose -s --processes=16 --process-timeout=300 $lim $args --cover-package=anki) anki-2.1.15+dfsg/web/000077500000000000000000000000001353113723000142145ustar00rootroot00000000000000anki-2.1.15+dfsg/web/deckbrowser.css000066400000000000000000000016721353113723000172460ustar00rootroot00000000000000/* Copyright: Ankitects Pty Ltd and contributors * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ a.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.15+dfsg/web/deckbrowser.js000066400000000000000000000015001353113723000170600ustar00rootroot00000000000000/* Copyright: Ankitects Pty Ltd and contributors * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ $(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.15+dfsg/web/editor.css000066400000000000000000000020221353113723000162100ustar00rootroot00000000000000/* Copyright: Ankitects Pty Ltd and contributors * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ .field { border: 1px solid #aaa; background: #fff; color: #000; padding: 5px; overflow-wrap: break-word; } .clearfix:after { content: ""; display: table; clear: both; } .fname { vertical-align: middle; padding: 0; } img { max-width: 90vw; } body { margin: 5px; } #topbutsOuter { position: fixed; top: 0; padding: 2px; left: 0; right: 0; } .topbut { width: 16px; height: 16px; margin-top: 4px; } .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.15+dfsg/web/editor.js000066400000000000000000000321121353113723000160370ustar00rootroot00000000000000/* Copyright: Ankitects Pty Ltd and contributors * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ var currentField = null; var changeTimer = null; var dropTarget = null; var currentNoteId = 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(keepFocus) { if (!currentField) { return; } clearChangeTimer(); if (keepFocus) { saveField("key"); } else { // triggers onBlur, which saves currentField.blur(); } } function triggerKeyTimer() { clearChangeTimer(); changeTimer = setTimeout(function () { updateButtonState(); saveField("key"); }, 600); } 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; } triggerKeyTimer(); } 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 onInput() { // empty field? if (currentField.innerHTML === "") { currentField.innerHTML = "
"; } // make sure IME changes get saved triggerKeyTimer(); } 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) { if (currentField === elem) { // anki window refocused; current element unchanged return; } 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) { var e = window.event; e.dataTransfer.dropEffect = "copy"; e.preventDefault(); // 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) { return; } if (document.activeElement === currentField) { // other widget or window focused; current field unchanged saveField("key"); } else { saveField("blur"); currentField = null; disableButtons(); } } function saveField(type) { clearChangeTimer(); if (!currentField) { // no field has been focused yet return; } // type is either 'blur' or 'key' pycmd(type + ":" + currentFieldOrdinal() + ":" + currentNoteId + ":" + currentField.innerHTML); } 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 setNoteId(id) { currentNoteId = id; } function showDupes() { $("#dupes").show(); } function hideDupes() { $("#dupes").hide(); } var pasteHTML = function (html, internal, extendedMode) { html = filterHTML(html, internal, extendedMode); if (html !== "") { // remove trailing
in empty field if (currentField && currentField.innerHTML === "
") { currentField.innerHTML = ""; } 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; if (!extendedMode) { // collapse whitespace outHtml = outHtml.replace(/[\n\t ]+/g, " "); } outHtml = outHtml.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.style) { 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.tagName === 'TITLE') { 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 adjustFieldsTopMargin = function() { var topHeight = $("#topbuts").height(); var margin = topHeight + 8; document.getElementById("fields").style.marginTop = margin + "px"; }; 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(); }); window.onresize = function() { adjustFieldsTopMargin(); }; adjustFieldsTopMargin(); }); anki-2.1.15+dfsg/web/imgs/000077500000000000000000000000001353113723000151535ustar00rootroot00000000000000anki-2.1.15+dfsg/web/imgs/anki-logo-thin.png000066400000000000000000000141651353113723000205100ustar00rootroot00000000000000PNG  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.15+dfsg/web/imgs/media-record.png000066400000000000000000000013271353113723000202170ustar00rootroot00000000000000PNG  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.15+dfsg/web/imgs/paperclip.png000066400000000000000000000014531353113723000176430ustar00rootroot00000000000000PNG  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.15+dfsg/web/imgs/text_bold.png000066400000000000000000000011701353113723000176440ustar00rootroot00000000000000PNG  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.15+dfsg/web/imgs/text_cloze.png000066400000000000000000000005121353113723000200370ustar00rootroot00000000000000PNG  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.15+dfsg/web/imgs/text_italic.png000066400000000000000000000006721353113723000201770ustar00rootroot00000000000000PNG  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.15+dfsg/web/imgs/text_sub.png000066400000000000000000000015221353113723000175160ustar00rootroot00000000000000PNG  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.15+dfsg/web/imgs/text_super.png000066400000000000000000000015331353113723000200650ustar00rootroot00000000000000PNG  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(); } function selectedAnswerButton() { var node = document.activeElement; if (!node) { return; } return node.dataset.ease; } anki-2.1.15+dfsg/web/reviewer.css000066400000000000000000000015331353113723000165600ustar00rootroot00000000000000/* Copyright: Ankitects Pty Ltd and contributors * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ hr { background-color: #ccc; } body { margin: 20px; overflow-wrap: break-word; } body.nightMode { background-color: black; color: white; } img { max-width: 95vw; max-height: 95vh; } #_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.15+dfsg/web/reviewer.js000066400000000000000000000052201353113723000164010ustar00rootroot00000000000000/* Copyright: Ankitects Pty Ltd and contributors * License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html */ var 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